a92ecbd7e017e19861e06092c2e24bf29f9ae528
[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 -L src -name $paket.control)
92 build_number=${build#*_}
93 if [ -z "$control" ]
94 then
95         echo "warning: control file not found"
96         echo "  this file is necessary for any package production."
97 else    
98         sed "s/%BUILD%/$build_number/" $control |sed "s/%ARCH%/$ARCH/" >$paket.control
99         echo "$paket.control written."
100
101         # extract version
102         version=$(grep Version $paket.control |sed "s/Version: //")
103 fi
104
105 # check for copy file
106 copy=$(find -L src -name $paket.cp)
107 if [ -n "$copy" ]
108 then
109         ln -sf $copy .
110 else
111         echo "warning: file $paket.cp missing or not executable:"
112         echo "  this file is necessary for any package production."
113 fi
114
115 # check for installation scripts
116 files=$(find -L src -name $paket.preinst)
117 files="$files $(find -L src -name $paket.postinst)"
118 files="$files $(find -L src -name $paket.prerm)"
119 files="$files $(find -L src -name $paket.postrm)"
120 for file in $files
121 do
122         ln -sf $file .
123 done
124
125 # create generic make.pre, if not existing
126 if [ ! -f make.pre ]
127 then
128         cat  >>make.pre <<MAKE_PRE
129 # mBuild make.pre script (auto generated)
130 project = $paket
131 COPY = ./$paket.cp
132 MAKE_PRE
133         if [ -n "$ARCH" ]
134         then
135                 echo "arch = $ARCH" >>make.pre
136                 echo "_arch = _${ARCH}" >>make.pre
137         fi
138         echo "make.pre written."
139 fi
140
141 # append version to make.pre
142 echo "version = $version" >> make.pre
143 echo "build = $build" >> make.pre
144