3 # author: hackbard@hackdaworld.dyndns.org
5 # this script is used to build hdw-linux packages.
16 -stage) hdw_status=$2 ; shift 2 ;;
17 -package) package=$2 ; shift 2 ;;
18 -no_src_del) no_src_del="1" ; shift 1 ;;
19 -priority) priority=$2 ; shift 2 ;;
20 -dir) dir=$2 ; shift 2 ;;
25 echo -e " ./scripts/Build \t-stage stagelevel"
26 echo -e "\t\t\t-package package-name"
32 if [ -z "$package" ]; then
33 echo "no package specified, abort."
37 if [ -z "$hdw_status" ]; then
38 echo "stage level not specified. something went wrong ... hey,"
39 echo "this is a development version ;)"
43 if [ -z "$priority" ] ; then
44 echo "no priority specified, abort."
49 # load config andsubroutines
50 . ./scripts/Config -stage $hdw_status
51 . ./scripts/subroutines
53 . ./scripts/optimization
56 if [ "$hdw_status" != "1" -a "$hdw_use_dietlibc" = "1" ] ; then
57 export CC="diet-dyn $CC -nostdinc"
58 export CXX="diet-dyn $CXX -nostdinc"
61 # okay, this is going to be fun - happy h4ck1n6
64 # defining build environment variables to build a package.
65 if [ "$dir" = "*" ] ; then
66 dirs="`ls ./packages/*/$package/$package`"
67 if [ "`echo $dirs | awk '{ print NF }'`" -gt "1" ] ; then
68 echo "please specify a category using -dir, possibilities:"
74 dir="`echo $dirs | awk -F/ '{ print $3 }'`"
78 if [ -f ./packages/$dir/$package/$package ] ; then
79 echo "found $package config file ..."
81 # defining help variables
82 confdir="$hdw_home_dir/packages/$dir/$package"
83 archdir="$hdw_home_dir/download/$dir/$package"
85 # lets get some package info
86 pkgs=`cat $confdir/$package | grep '^#\ \[D\]' | \
88 pkg=`echo $pkgs | awk '{ print $1 }'` # to make sure there is only 1
89 ver=`cat $confdir/$package | grep '^#\ \[V\]' | \
91 patch=`cat $confdir/$package | grep '^#\ \[P\]' | \
94 # lets see whether we have the source
95 if [ ! -f ./download/$dir/$package/$pkg -a ! -z "$pkg" ]; then
96 echo "sources for $package not found, trying to get them ..."
97 ./scripts/Download -package $package
99 if [ ! -f ./download/$dir/$package/$pkg -a ! -z "$pkg" ]; then
100 echo "sources still not found, aborting ..."
104 # compress format of source?
105 if [ ! -z "`echo \`detect_file_ending $pkg\` | grep 'bz2'`" ] ; then
107 elif [ ! -z "`echo \`detect_file_ending $pkg\` | grep 'tbz2'`"] ; then
114 # defining elementary build functions and variables
120 make_conf=""; install_conf=""
123 if [ "$hdw_status" -lt "2" ] ; then
124 # use the symlink as prefix
125 prefix="/${s1_prefix}"
126 docdir="$prefix/share/doc/$package"
127 install_conf="PREFIX=$prefix"
129 if [ "$hdw_status" = "2" -o "$hdw_status" = "3" ] ; then
130 prefix="$root/usr"; docdir="$root/usr/doc/$package"
131 localstatedir="$root/var"
132 sysconfdir="$root/etc"
133 elif [ "$hdw_status" = "4" ] ; then
134 prefix="$root/opt/$package"
135 docdir="$root/opt/$package/doc"
136 localstatedir="$root/var/opt/$package"
137 sysconfdir="$root/etc/opt/$package"
141 if [ -z "$prefix" ] ; then
142 echo "problem: no prefix found! aborting .."
146 # defining confopt now
147 confopt="--prefix=$prefix --bindir=$prefix/bin"
148 confopt="$confopt --sbindir=$prefix/sbin"
149 confopt="$confopt --libdir=$prefix/lib"
150 confopt="$confopt --datadir=$prefix/share"
151 confopt="$confopt --infodir=$prefix/info"
152 confopt="$confopt --mandir=$prefix/man"
153 confopt="$confopt --build=$hdw_arch_build"
154 confopt="$confopt --host=$hdw_arch_target"
156 [ "$hdw_crossbuild" != "0" ] && \
157 confopt="$confopt --target=$hdw_arch_target"
158 if [ "$hdw_status" -gt "1" ] ; then
159 confopt="$confopt --localstatedir=$localstatedir"
160 confopt="$confopt --sysconfdir=$sysconfdir"
172 echo "hdw-linux: \$confopt = $confopt"
173 echo "hdw-linux: \$make_conf = $make_conf"
174 echo "hdw-linux: \$install_conf = $install_conf"
175 echo "lets do it ..."
176 if [ -f ./configure ] ; then
177 echo "run ./configure $confopt"
180 echo ; echo "run make $make_conf"
182 echo ; echo "run make $install_conf install"
183 make $install_conf install
186 # flist find variables/command
187 flist_path="bin/ boot/ etc/ lib/ opt/ sbin/ usr/ var/"
188 [ "$hdw_status" -lt "2" ] && flist_path="${flist_path} ${s1_prefix}/"
189 flist_cmd="find \$flist_path \( -cnewer $root/.time_$package -o \
190 -newer $root/.time_$package \) \( -not -type d -o \
191 -type d -empty \) -print"
192 flist_pruned="var/adm|var/log|var/run|var/tmp|var/spool"
193 flist_pruned="${flist_pruned}|var/cache|var/lock"
195 # reading config functions and variables
198 # lets begin building, in case we dont skip it!
199 if [ -z "$skip" ] ; then
201 # setting umask, we dont reset it!
204 # run ldconfig to, maybe we installed some libs before!
205 if [ "$hdw_status" != "1" ] ; then
206 echo "running ldconfig ..."
210 # for creating the flist
213 touch .time_${package} && sleep 1
217 # use trap to catch errors in block
218 # we may kick out abort_when_package_build_failed lines
219 # can we use $_ instead off TRAP_ERR ?
221 trap 'abort_when_package_build_failed 1 $_' ERR
223 # automated build procedure
224 if [ "$custmain" != "0" ] ; then
225 #build according packages custmain function
226 if [ "$no_src_del" != "1" ] ; then
227 rm -rf $root/src.$package
229 mkdir -p $root/src.$package
230 cd $root/src.$package
231 if [ "$hdw_debug_buildenv" = "1" ] ; then
233 echo "Debug: (buildenvironment)"
239 rm -rf $root/src.$package
241 #now we go for automated building
243 if [ "$no_src_del" != "1" ] ; then
244 if [ "$autoextract" != "0" ] ; then
245 rm -rf $root/src.$package
246 mkdir -p $root/src.$package
247 tar --use-compress-program=$compress \
248 -xvf ./download/$dir/$package/$pkg \
249 -C $root/src.$package
252 # change to directory and build
253 cd $root/src.$package/$srcdir &&
254 # patches from [P] tag
255 if [ ! -z "$patch" ] ; then
256 for every_single_patch in $patch; do
257 echo "aplying patch $every_single_patch ..."
258 patch -Nfp1 < $hdw_home_dir/download/$dir/$package/$every_single_patch
262 # patches from confdir
264 for xtra_patch in `ls $confdir/*.patch 2> /dev/null`; do
265 echo "applying patch $xtra_patch ..."
266 patch -Nfp1 < $xtra_patch
268 # architecture dependent patches
269 for xtra_patch in `ls $confdir/*.patch.${hdw_arch} 2> /dev/null`; do
270 echo "applying patch $xtra_patch ..."
271 patch -Nfp1 < $xtra_patch
273 # target specific patches
274 for xtra_patch in `ls $confdir/*.patch.${hdw_target} 2> /dev/null`; do
275 echo "applying patch $xtra_patch ..."
276 patch -Nfp1 < $xtra_patch
279 if [ "$hdw_use_dietlibc" = "1" ] ; then
280 for xtra_patch in `ls $confdir/*.patch.dietlibc 2> /dev/null`; do
281 echo "applying patch $xtra_patch ..."
282 patch -Nfp1 < $xtra_patch
285 # stage specific patches
286 for xtra_patch in `ls $confdir/*.patch.${hdw_status} 2> /dev/null`; do
287 echo "applying patch $xtra_patch ..."
288 patch -Nfp1 < $xtra_patch
290 # patch section end ;)
293 if [ "$hdw_debug_buildenv" = "1" ] ; then
295 echo "Debug: (buildenvironment)"
302 rm -rf $root/src.$package
305 # dirty! not create *.init for 00-init-conf, manually done.
306 if [ "$package" != "00-init-conf" ] ; then
307 for my_init in `ls $confdir/*.init 2> /dev/null`; do
312 if [ "$hdw_status" != "1" ] ; then
313 for my_setup in `ls $confdir/*.setup 2> /dev/null`; do
314 create_setup_scripts $my_setup
318 # build dependencies (just libs >= stage 3, default target hardcoded)
319 # still in development !!
320 if [ "$hdw_status" -ge "2" ] ; then
321 rm -f $root/var/adm/deps/build/$package
322 echo -n "calculating dependencies ... "
324 for lib in `grep '\ -l[A-Za-z]' \
325 $root/var/adm/logs/${hdw_status}-${priority}-$package.out`; do
326 if [ -n "`echo $lib | grep '^-l'`" ] ; then
328 for dep in `grep "/$lib\." \
329 -r $root/var/adm/flists | \
330 awk -F: '{ print $2 }'`; do
332 for cmp in $alldeps; do
333 [ "$cmp" = "$dep" ] && add=0
335 [ "$add" = "1" ] && \
336 alldeps="$dep $alldeps"
340 for dep in $alldeps; do
341 echo "$dep" >> $root/var/adm/deps/build/$package
344 touch $root/var/adm/deps/build/$package
350 # let's see what we installed
353 eval $flist_cmd | grep -vE $flist_pruned > flist.$package
355 # let's create the flist
357 [ "$hdw_status" = "0" ] && append=".stage0"
358 [ "$hdw_status" = "1" ] && append=".stage1"
359 append="${append}-${priority}"
365 BEGIN { package=ENVIRON["package"] ; append=ENVIRON["append"] ; \
366 stage=ENVIRON["hdw_status"] ; priority=ENVIRON["priority"] } \
367 { print package ": " $0 } \
368 END { print package ": " "var/adm/logs/" stage "-" priority "-" \
370 print package ": " "var/adm/flists/" package append }' \
371 $root/flist.$package > $root/var/adm/flists/${package}${append}
372 [ "$hdw_status" -ge "3" ] && \
373 echo "${package}: var/adm/deps/build/$package" >> \
374 $root/var/adm/flists/${package}${append}
382 [ -z "$s_reason" ] && s_reason=unknown
384 echo "FYI: $package build skipped, reason: $s_reason"
385 fi # (if [ -z "$skip" ])
388 echo "cannot find $package config file ..."