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
321 # let's see what we installed
324 eval $flist_cmd | grep -vE $flist_pruned > flist.$package
326 # let's create the flist
328 [ "$hdw_status" = "0" ] && append=".stage0"
329 [ "$hdw_status" = "1" ] && append=".stage1"
330 append="${append}-${priority}"
336 BEGIN { package=ENVIRON["package"] ; append=ENVIRON["append"] ; \
337 stage=ENVIRON["hdw_status"] ; priority=ENVIRON["priority"] } \
338 { print package ": " $0 } \
339 END { print package ": " "var/adm/logs/" stage "-" priority "-" \
341 print package ": " "var/adm/flists/" package append }' \
342 $root/flist.$package > $root/var/adm/flists/${package}${append}
343 # manually add dependency files, calculated after flist
344 if [ "$hdw_status" -ge "3" ] ; then
345 echo "${package}: var/adm/deps/build/$package" >> \
346 $root/var/adm/flists/${package}${append}
347 echo "${package}: var/adm/deps/run/$package" >> \
348 $root/var/adm/flists/${package}${append}
351 # build/runtime dependencies (just libs >= stage 3,
352 # default is 'hardcoded')
353 # still in development !!
354 if [ "$hdw_status" -ge "3" ] ; then
356 rm -f $root/var/adm/deps/build/$package
357 echo -n "calculating build dependencies ... "
359 for lib in `grep '\ -l[A-Za-z]' \
360 $root/var/adm/logs/${hdw_status}-${priority}-$package.out`; do
361 if [ -n "`echo $lib | grep '^-l'`" ] ; then
363 for dep in `grep "/$lib\." \
364 -r $root/var/adm/flists | \
365 awk -F: '{ print $2 }'`; do
367 for cmp in $alldeps; do
368 [ "$cmp" = "$dep" ] && add=0
370 [ "$add" = "1" ] && \
371 alldeps="$dep $alldeps"
375 for dep in $alldeps; do
376 echo "$dep" >> $root/var/adm/deps/build/$package
378 touch $root/var/adm/deps/build/$package
381 rm -f $root/var/adm/deps/run/$package
382 echo -n "calculating runtime dependencies ... "
384 for binary in `grep 'bin\/' \
385 $root/var/adm/flists/${package}${append} | \
386 awk '{ print $2 }'`; do
387 for rdep in `ldd $root/$binary 2>&1 | \
388 awk '{ print $3 }' | \
389 sed 's$/$$' | grep -v 'dynamic' | \
391 for rpkg in `grep $rdep -r \
392 $root/var/adm/flists | \
393 grep -v $s1_prefix | \
394 awk -F: '{ print $2 }'`; do
396 for cmp in $alldeps; do
397 [ "$cmp" = "$rpkg" ] && add=0
399 [ "$add" = "1" ] && \
400 alldeps="$rpkg $alldeps"
404 for library in `grep 'lib\/.*.so.*' \
405 $root/var/adm/flists/${package}${append} | \
406 awk '{ print $2 }'`; do
407 for rdep in `ldd $root/$library 2>&1 | \
408 awk '{ print $3 }' | \
409 sed 's$/$$' | grep -v 'dynamic' | \
411 for rpkg in `grep $rdep -r \
412 $root/var/adm/flists | \
413 grep -v $s1_prefix | \
414 awk -F: '{ print $2 }'`; do
416 for cmp in $alldeps; do
417 [ "$cmp" = "$rpkg" ] && add=0
419 [ "$add" = "1" ] && \
420 alldeps="$rpkg $alldeps"
424 for dep in $alldeps; do
425 echo "$dep" >> $root/var/adm/deps/run/$package
427 touch $root/var/adm/deps/run/$package
437 [ -z "$s_reason" ] && s_reason=unknown
439 echo "FYI: $package build skipped, reason: $s_reason"
440 fi # (if [ -z "$skip" ])
443 echo "cannot find $package config file ..."