f4541ba64201b91988572132690795f8785a06e0
[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 shift 2
27 while getopts "b:a:" opt
28 do
29         case $opt in
30         a) ARCH=$OPTARG
31                 ;;
32         b) echo "branching not implemented"
33                 ;;
34         *) exit 1
35                 ;;
36         esac
37 done
38
39 # checkout build utilities
40 if [ ! -d projects ]; then
41         git clone https://github.com/wagner-tech/projects/
42 fi
43 ln -sf projects/tools/make/makefile .
44
45 # check standard files
46 if [ ! -x $paket.co ]
47 then
48         echo "file $paket.co missing or not executable."
49         exit 1
50 fi
51
52 # clean dirs and check out
53 if [ -d src ]
54 then
55         echo "Shall I delete src dir? [y]/n"
56         read key
57         if [ "$key" != "n" ]
58         then
59                 rm -rf src
60         fi
61 fi
62
63 if [ -e $paket ]
64 then
65         rm -rf $paket
66 fi
67 rm *.stamp || true
68 rm make.pre || true
69
70 mkdir -p src
71 cwd=$(pwd)
72
73 # checkout
74 pushd src >/dev/null
75         ../$paket.co $build
76 popd >/dev/null
77
78 # load util functions for C/C++ - build
79 if [ -f $paket.cpp.sh ]
80 then
81         cpp_build=1
82         . projects/tools/make/c_configure.sh
83         . $paket.cpp.sh
84 fi
85
86 # copy package control
87 control=$(find src -name $paket.control)
88 if [ -z "$control" ]
89 then
90         echo "warning: control file not found"
91         echo "  this file is necessary for any package production."
92 else    
93         sed "s/%BUILD%/$build/" $control |sed "s/%ARCH%/$ARCH/" >$paket.control
94         echo "$paket.control written."
95
96         # extract version
97         version=$(grep Version $paket.control |sed "s/Version: //")
98 fi
99
100 # check for copy file
101 copy=$(find src -name $paket.cp)
102 if [ -n "$copy" ]
103 then
104         ln -sf $copy .
105 else
106         echo "warning: file $paket.cp missing or not executable:"
107         echo "  this file is necessary for any package production."
108 fi
109
110 # check for postinst
111 postinst=$(find src -name $paket.postinst)
112 if [ -n "$postinst" ]
113 then
114         ln -sf $postinst .
115 fi
116
117 # create generic make.pre, if not existing
118 if [ ! -f make.pre ]
119 then
120         cat  >>make.pre <<MAKE_PRE
121 # mBuild make.pre script (auto generated)
122 project = $paket
123 COPY = ./$paket.cp
124 MAKE_PRE
125         echo "make.pre written."
126 fi
127
128 # append version to make.pre
129 echo "version = $version" >> make.pre
130