posaune
[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 }
9
10 # to build a package you need ...
11 # <package>.co: checkout commands
12 # <package>.cp (optional): copy step for package production
13 # <package>.cpp.sh (optional): commands to setup the C++ compile environment
14
15 if [ $# -lt 2 ]
16 then
17         echo_usage
18         exit 1
19 fi
20
21 paket=$1
22 build=$2
23 ARCH=""
24 cpp_build=0
25
26 # checkout build utilities
27 if [ ! -d projects ]; then
28         git clone https://github.com/wagner-tech/projects/
29 fi
30 ln -sf projects/tools/make/makefile .
31
32 # check standard files
33 if [ ! -x $paket.co ]
34 then
35         echo "file $paket.co missing or not executable."
36         exit 1
37 fi
38
39 # clean dirs and check out
40 if [ -d src ]
41 then
42         echo "Shall I delete src dir? [y]/n"
43         read key
44         if [ "$key" != "n" ]
45         then
46                 rm -rf src
47         fi
48 fi
49
50 if [ -e $paket ]
51 then
52         rm -rf $paket
53 fi
54 rm *.stamp || true
55 rm make.pre || true
56
57 mkdir -p src
58 cwd=$(pwd)
59
60 # checkout
61 pushd src >/dev/null
62         ../$paket.co $build
63 popd >/dev/null
64
65 # load util functions for C/C++ - build
66 if [ -f $paket.cpp.sh ]
67 then
68         cpp_build=1
69         . projects/tools/make/c_configure.sh
70         . $paket.cpp.sh
71 fi
72
73 # copy package control
74 control=$(find src -name $paket.control)
75 if [ -z "$control" ]
76 then
77         echo "warning: control file not found"
78         echo "  this file is necessary for any package production."
79 else    
80         sed "s/%BUILD%/$build/" $control |sed "s/%ARCH%/$ARCH/" >$paket.control
81         echo "$paket.control written."
82
83         # extract version
84         version=$(grep Version $paket.control |sed "s/Version: //")
85 fi
86
87 # check for copy file
88 copy=$(find src -name $paket.cp)
89 if [ -n "$copy" ]
90 then
91         ln -sf $copy .
92 else
93         echo "warning: file $paket.cp missing or not executable:"
94         echo "  this file is necessary for any package production."
95 fi
96
97 # check for postinst
98 postinst=$(find src -name $paket.postinst)
99 if [ -n "$postinst" ]
100 then
101         ln -sf $postinst .
102 fi
103
104 # create generic make.pre, if not existing
105 if [ ! -f make.pre ]
106 then
107         cat  >>make.pre <<MAKE_PRE
108 # mBuild make.pre script (auto generated)
109 project = $paket
110 COPY = ./$paket.cp
111 MAKE_PRE
112         echo "make.pre written."
113 fi
114
115 # append version to make.pre
116 echo "version = $version" >> make.pre
117