32b2558ae0838051e4c1e1dca3c7e0fecaf4c6ca
[projects.git] / tools / make / configure
1 #!/bin/bash
2 set -e
3
4 function echo_usage {
5         echo "usage: configure <package> <revision> [options]"
6         echo "  -b <branch-rev>"
7         echo "  -a <arch>"
8         echo "  -g <alternative repository>"
9         echo "  -n : do not delete src dir"
10 }
11
12 # to build a package you need ...
13 # <package>.co: checkout commands
14 # <package>.cp (optional): copy step for package production
15 # <package>.cpp.sh (optional): commands to setup the C++ compile environment
16
17 if [ $# -lt 2 ]
18 then
19         echo_usage
20         exit 1
21 fi
22
23 paket=$1
24 build=$2
25 shift 2
26 ARCH=""
27 cpp_build=0
28 alt_repos=""
29 delete_src=1
30
31 while getopts ":a:b:g:n" opt; do
32         case $opt in
33                 a) ARCH=$OPTARG
34                         ;;
35                 b) branch=$OPTARG
36                         ;;
37                 g) alt_repos="-g $OPTARG"
38                         ;;
39                 n) delete_src=0
40                         ;;
41                 \?) echo "Invalid option: -$OPTARG"
42                         echo_usage
43                         exit 1
44                         ;;
45                 :) echo "Option -$OPTARG requires an argument."
46                         echo_usage
47                         exit 1
48                         ;;
49         esac
50 done
51
52 ln -sf projects/tools/make/makefile .
53
54 # check standard files
55 if [ ! -x $paket.co ]
56 then
57         echo "file $paket.co missing or not executable."
58         exit 1
59 fi
60
61 # clean dirs and check out
62 if [ -d src -a $delete_src -eq 1 ]
63 then
64         rm -rf src
65 fi
66
67 if [ -e $paket ]
68 then
69         rm -rf $paket
70 fi
71 rm *.stamp || true
72 rm make.pre || true
73
74 mkdir -p src
75 cwd=$(pwd)
76
77 # checkout
78 pushd src >/dev/null
79         ../$paket.co $alt_repos $build 
80 popd >/dev/null
81
82 # load util functions for C/C++ - build
83 if [ -f $paket.cpp.sh ]
84 then
85         cpp_build=1
86         . projects/tools/make/c_configure.sh
87         . $paket.cpp.sh
88 fi
89
90 # copy package control
91 control=$(find src -name $paket.control)
92 if [ -z "$control" ]
93 then
94         echo "warning: control file not found"
95         echo "  this file is necessary for any package production."
96 else    
97         sed "s/%BUILD%/$build/" $control |sed "s/%ARCH%/$ARCH/" >$paket.control
98         echo "$paket.control written."
99
100         # extract version
101         version=$(grep Version $paket.control |sed "s/Version: //")
102 fi
103
104 # check for copy file
105 copy=$(find src -name $paket.cp)
106 if [ -n "$copy" ]
107 then
108         ln -sf $copy .
109 else
110         echo "warning: file $paket.cp missing or not executable:"
111         echo "  this file is necessary for any package production."
112 fi
113
114 # check for postinst
115 postinst=$(find src -name $paket.postinst)
116 if [ -n "$postinst" ]
117 then
118         ln -sf $postinst .
119 fi
120
121 # create generic make.pre, if not existing
122 if [ ! -f make.pre ]
123 then
124         cat  >>make.pre <<MAKE_PRE
125 # mBuild make.pre script (auto generated)
126 project = $paket
127 COPY = ./$paket.cp
128 MAKE_PRE
129         echo "make.pre written."
130 fi
131
132 # append version to make.pre
133 echo "version = $version" >> make.pre
134 echo "build = $build" >> make.pre
135