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 if [ "$hdw_status" -gt "1" ] ; then
154 confopt="$confopt --localstatedir=$localstatedir"
155 confopt="$confopt --sysconfdir=$sysconfdir"
157 # architecture specific stuff
158 confopt="$confopt --build=$hdw_arch_build"
159 confopt="$confopt --host=$hdw_arch_host"
161 [ "$package" = "gcc" -o "$package" = "binutils" ] && \
162 confopt="$confopt --target=$hdw_arch_target"
173 echo "hdw-linux: \$confopt = $confopt"
174 echo "hdw-linux: \$make_conf = $make_conf"
175 echo "hdw-linux: \$install_conf = $install_conf"
176 echo "lets do it ..."
177 if [ -f ./configure ] ; then
178 echo "run ./configure $confopt"
181 echo ; echo "run make $make_conf"
183 echo ; echo "run make $install_conf install"
184 make $install_conf install
187 # flist find variables/command
188 flist_path="bin/ boot/ etc/ lib/ opt/ sbin/ usr/ var/"
189 [ "$hdw_status" -lt "2" ] && flist_path="${flist_path} ${s1_prefix}/"
190 flist_cmd="find \$flist_path \( -cnewer $root/.time_$package -o \
191 -newer $root/.time_$package \) \( -not -type d -o \
192 -type d -empty \) -print"
193 flist_pruned="var/adm|var/log|var/run|var/tmp|var/spool"
194 flist_pruned="${flist_pruned}|var/cache|var/lock"
196 # reading config functions and variables
199 # lets begin building, in case we dont skip it!
200 if [ -z "$skip" ] ; then
202 # setting umask, we dont reset it!
205 # run ldconfig to, maybe we installed some libs before!
206 if [ "$hdw_status" != "1" ] ; then
207 echo "running ldconfig ..."
211 # for creating the flist
214 touch .time_${package} && sleep 1
218 # use trap to catch errors in block
219 # we may kick out abort_when_package_build_failed lines
220 # can we use $_ instead off TRAP_ERR ?
222 trap 'abort_when_package_build_failed 1 $_' ERR
224 # automated build procedure
225 if [ "$custmain" != "0" ] ; then
226 #build according packages custmain function
227 if [ "$no_src_del" != "1" ] ; then
228 rm -rf $root/src.$package
230 mkdir -p $root/src.$package
231 cd $root/src.$package
232 if [ "$hdw_debug_buildenv" = "1" ] ; then
234 echo "Debug: (buildenvironment)"
240 rm -rf $root/src.$package
242 #now we go for automated building
244 if [ "$no_src_del" != "1" ] ; then
245 if [ "$autoextract" != "0" ] ; then
246 rm -rf $root/src.$package
247 mkdir -p $root/src.$package
248 tar --use-compress-program=$compress \
249 -xvf ./download/$dir/$package/$pkg \
250 -C $root/src.$package
253 # change to directory and build
254 cd $root/src.$package/$srcdir &&
255 # patches from [P] tag
256 if [ ! -z "$patch" ] ; then
257 for every_single_patch in $patch; do
258 echo "aplying patch $every_single_patch ..."
259 patch -Nfp1 < $hdw_home_dir/download/$dir/$package/$every_single_patch
263 # patches from confdir
265 for xtra_patch in `ls $confdir/*.patch 2> /dev/null`; do
266 echo "applying patch $xtra_patch ..."
267 patch -Nfp1 < $xtra_patch
269 # architecture dependent patches
270 for xtra_patch in `ls $confdir/*.patch.${hdw_arch} 2> /dev/null`; do
271 echo "applying patch $xtra_patch ..."
272 patch -Nfp1 < $xtra_patch
274 # target specific patches
275 for xtra_patch in `ls $confdir/*.patch.${hdw_target} 2> /dev/null`; do
276 echo "applying patch $xtra_patch ..."
277 patch -Nfp1 < $xtra_patch
280 if [ "$hdw_use_dietlibc" = "1" ] ; then
281 for xtra_patch in `ls $confdir/*.patch.dietlibc 2> /dev/null`; do
282 echo "applying patch $xtra_patch ..."
283 patch -Nfp1 < $xtra_patch
286 # stage specific patches
287 for xtra_patch in `ls $confdir/*.patch.${hdw_status} 2> /dev/null`; do
288 echo "applying patch $xtra_patch ..."
289 patch -Nfp1 < $xtra_patch
291 # patch section end ;)
294 if [ "$hdw_debug_buildenv" = "1" ] ; then
296 echo "Debug: (buildenvironment)"
303 rm -rf $root/src.$package
306 # dirty! not create *.init for 00-init-conf, manually done.
307 if [ "$package" != "00-init-conf" ] ; then
308 for my_init in `ls $confdir/*.init 2> /dev/null`; do
313 if [ "$hdw_status" != "1" ] ; then
314 for my_setup in `ls $confdir/*.setup 2> /dev/null`; do
315 create_setup_scripts $my_setup
322 # let's see what we installed
325 eval $flist_cmd | grep -vE $flist_pruned > flist.$package
327 # let's create the flist
329 [ "$hdw_status" = "0" ] && append=".stage0"
330 [ "$hdw_status" = "1" ] && append=".stage1"
331 append="${append}-${priority}"
337 BEGIN { package=ENVIRON["package"] ; append=ENVIRON["append"] ; \
338 stage=ENVIRON["hdw_status"] ; priority=ENVIRON["priority"] } \
339 { print package ": " $0 } \
340 END { print package ": " "var/adm/logs/" stage "-" priority "-" \
342 print package ": " "var/adm/flists/" package append }' \
343 $root/flist.$package > $root/var/adm/flists/${package}${append}
344 # manually add dependency files, calculated after flist
345 if [ "$hdw_status" -ge "3" ] ; then
346 echo "${package}: var/adm/deps/build/$package" >> \
347 $root/var/adm/flists/${package}${append}
348 echo "${package}: var/adm/deps/run/$package" >> \
349 $root/var/adm/flists/${package}${append}
352 # build/runtime dependencies (just libs >= stage 3,
353 # default is 'hardcoded')
354 # still in development !!
355 if [ "$hdw_status" -ge "3" ] ; then
357 rm -f $root/var/adm/deps/build/$package
358 echo -n "calculating build dependencies ... "
360 for lib in `grep '\ -l[A-Za-z]' \
361 $root/var/adm/logs/${hdw_status}-${priority}-$package.out`; do
362 if [ -n "`echo $lib | grep '^-l'`" ] ; then
364 for dep in `grep "/$lib\." \
365 -r $root/var/adm/flists | \
366 awk -F: '{ print $2 }'`; do
368 for cmp in $alldeps; do
369 [ "$cmp" = "$dep" ] && add=0
371 [ "$add" = "1" ] && \
372 alldeps="$dep $alldeps"
376 for dep in $alldeps; do
377 echo "$dep" >> $root/var/adm/deps/build/$package
379 touch $root/var/adm/deps/build/$package
382 rm -f $root/var/adm/deps/run/$package
383 echo -n "calculating runtime dependencies ... "
385 for binary in `grep 'bin\/' \
386 $root/var/adm/flists/${package}${append} | \
387 awk '{ print $2 }'`; do
388 for rdep in `ldd $root/$binary 2>&1 | \
389 awk '{ print $3 }' | \
390 sed 's$/$$' | grep -v 'dynamic' | \
392 for rpkg in `grep $rdep -r \
393 $root/var/adm/flists | \
394 grep -v $s1_prefix | \
395 awk -F: '{ print $2 }'`; do
397 for cmp in $alldeps; do
398 [ "$cmp" = "$rpkg" ] && add=0
400 [ "$add" = "1" ] && \
401 alldeps="$rpkg $alldeps"
405 for library in `grep 'lib\/.*.so.*' \
406 $root/var/adm/flists/${package}${append} | \
407 awk '{ print $2 }'`; do
408 for rdep in `ldd $root/$library 2>&1 | \
409 awk '{ print $3 }' | \
410 sed 's$/$$' | grep -v 'dynamic' | \
412 for rpkg in `grep $rdep -r \
413 $root/var/adm/flists | \
414 grep -v $s1_prefix | \
415 awk -F: '{ print $2 }'`; do
417 for cmp in $alldeps; do
418 [ "$cmp" = "$rpkg" ] && add=0
420 [ "$add" = "1" ] && \
421 alldeps="$rpkg $alldeps"
425 for dep in $alldeps; do
426 echo "$dep" >> $root/var/adm/deps/run/$package
428 touch $root/var/adm/deps/run/$package
438 [ -z "$s_reason" ] && s_reason=unknown
440 echo "FYI: $package build skipped, reason: $s_reason"
441 fi # (if [ -z "$skip" ])
444 echo "cannot find $package config file ..."