source: common/libs/func_wrt_Makefile@ 50cf934

ablfs-more legacy trunk
Last change on this file since 50cf934 was 0722dde, checked in by Pierre Labastie <pierre.labastie@…>, 3 years ago

Do not use global $version when writing Makefile

In func_wrt_makefile, the two functions LUSER_wrt_unpack and
CHROOT_Unpack use the version variable without setting it.
This leads to the global version variable being used, which
writes garbage into the Makefile. Fix: just define version locally.

This bug does not occur often because those functions are only
used when using custom scripts for versioned packages (if building LFS).
It has been found by William Harrington.

  • Property mode set to 100644
File size: 12.0 KB
RevLine 
[fe30c61]1#!/bin/bash
2
3# $Id$
4
5#=== MAKEFILE HEADER ===
6
[195ed9f]7#----------------------------------#
8wrt_Makefile_header() { #
9#----------------------------------#
10(
11 cat << EOF
12# This file is automatically generated by jhalfs
[fe30c61]13# DO NOT EDIT THIS FILE MANUALLY
14#
[195ed9f]15# Generated on `date "+%F %X %Z"`
16
[aec4483]17
18SHELL = /bin/bash
[195ed9f]19
20SRC = /sources
21MOUNT_PT = $BUILDDIR
22PKG_LST = $PKG_LST
23LUSER = $LUSER
24LGROUP = $LGROUP
[962793a]25LHOME = $LHOME
[195ed9f]26SCRIPT_ROOT = $SCRIPT_ROOT
27
28BASEDIR = \$(MOUNT_PT)
29SRCSDIR = \$(BASEDIR)/sources
30CMDSDIR = \$(BASEDIR)/\$(SCRIPT_ROOT)/$PROGNAME-commands
[93346ee]31LOGDIR = \$(BASEDIR)/\$(SCRIPT_ROOT)/$LOGDIRBASE
32TESTLOGDIR = \$(BASEDIR)/\$(SCRIPT_ROOT)/$TESTLOGDIRBASE
[195ed9f]33
34crCMDSDIR = /\$(SCRIPT_ROOT)/$PROGNAME-commands
[93346ee]35crLOGDIR = /\$(SCRIPT_ROOT)/$LOGDIRBASE
36crTESTLOGDIR = /\$(SCRIPT_ROOT)/$TESTLOGDIRBASE
37crFILELOGDIR = /\$(SCRIPT_ROOT)/$FILELOGDIRBASE
[195ed9f]38
[0835a10]39SU_LUSER = sudo -H -u \$(LUSER) sh -c
[962793a]40LUSER_HOME = \$(LHOME)/\$(LUSER)
[195ed9f]41PRT_DU = echo -e "\nKB: \`du -skx --exclude=\$(SCRIPT_ROOT) --exclude=lost+found \$(MOUNT_PT) \`\n"
[9bbb9c8]42PRT_DU_CR = echo -e "\nKB: \`du -skx --exclude=\$(SCRIPT_ROOT) --exclude=lost+found --exclude /var/lib / \`\n"
[195ed9f]43
[3e7ceed]44ADD_REPORT = $REPORT
45ADD_CUSTOM_TOOLS = $CUSTOM_TOOLS
46ADD_BLFS_TOOLS = $BLFS_TOOL
[7072e1f]47PKGMNGT = $PKGMNGT
[322226d]48WRAP_INSTALL = $WRAP_INSTALL
[1838bc7]49
50
[195ed9f]51export PATH := \${PATH}:/usr/sbin
52
53include makefile-functions
54
55EOF
56) > $MKFILE
57}
[fe30c61]58
59#=======================
60
61
[3cb4ef5b]62#==== PACKAGES NAMES AND VERSIONS ====
[fe30c61]63
64#----------------------------------#
65get_package_tarball_name() { #
66#----------------------------------#
[3ac3ae1]67 local script_name=`echo ${1} | sed -e 's@^[0-9]\{2\}-@@'`
[fe30c61]68
69 # The use of 'head' is necessary to limit the return value to the FIRST match..
70 # hopefully this will not cause problems.
71 #
72 case $script_name in
73 tcl) echo $(grep "^tcl" $JHALFSDIR/pkg_tarball_list | head -n1 )
74 ;;
[608fbe1]75 iputils) echo $(grep "^iputils" $JHALFSDIR/pkg_tarball_list | head -n1 )
76 ;;
[7214dad]77 powerpc-utils) echo $(grep "^powerpc-utils" $JHALFSDIR/pkg_tarball_list | head -n1 )
78 ;;
[3c38ab0]79 uClibc)
80 if [[ "${PROGNAME}" = "clfs3" ]]; then
81 echo $(grep "^uClibc-" $JHALFSDIR/pkg_tarball_list | head -n1 )
[7214dad]82 else
[3c38ab0]83 echo $(grep "^$script_name-[[:digit:]]" $JHALFSDIR/pkg_tarball_list | head -n1 )
[7214dad]84 fi
85 ;;
[fe30c61]86 linux-headers)
[31a37db]87 if [[ "${PROGNAME}" = "lfs" ]] || [[ "${PROGNAME}" = "hlfs" ]] || [[ "${PROGNAME}" = "clfs" ]]; then
[fe30c61]88 # Uses kernel headers directly
89 echo $(grep "^linux-[[:digit:]]" $JHALFSDIR/pkg_tarball_list | head -n1 )
90 else
[608fbe1]91 # CLFS{2,3} used to use massaged headers package
92 # echo $(grep "^linux-headers-[[:digit:]]" $JHALFSDIR/pkg_tarball_list | head -n1 )
93 echo $(grep "^linux-[[:digit:]]" $JHALFSDIR/pkg_tarball_list | head -n1 )
[fe30c61]94 fi
95 ;;
[d8006a00]96 expect) echo $(grep "^expect" $JHALFSDIR/pkg_tarball_list | head -n1 )
97 ;;
[608fbe1]98 e2fsprogs-libs) echo $(grep "^e2fsprogs" $JHALFSDIR/pkg_tarball_list | head -n1 )
99 ;;
[f0a31de]100 libcap) echo $(grep "^libcap" $JHALFSDIR/pkg_tarball_list | head -n1 )
101 ;;
[82808d1]102 util-linux-libs | util-linux-pass1) echo $(grep "^util-linux" $JHALFSDIR/pkg_tarball_list | head -n1 )
[608fbe1]103 ;;
[4b54394]104 xz-utils) echo $(grep "^xz" $JHALFSDIR/pkg_tarball_list | head -n1 )
[083e2fd]105 ;;
[7072e1f]106 sqlite) echo $(grep "^sqlite" $JHALFSDIR/pkg_tarball_list | head -n1 )
[083e2fd]107 ;;
108 udev) echo $(grep "^systemd" $JHALFSDIR/pkg_tarball_list | head -n1 )
109 ;;
[8099885]110 xml-parser) echo $(grep "^XML" $JHALFSDIR/pkg_tarball_list | head -n1 )
111 ;;
112 libdbus) echo $(grep "^dbus" $JHALFSDIR/pkg_tarball_list | head -n1 )
113 ;;
[203a64c]114 glibc) echo $(grep "^glibc" $JHALFSDIR/pkg_tarball_list | head -n1 )
[5637b53]115 ;;
116 libelf) echo $(grep "^elfutils" $JHALFSDIR/pkg_tarball_list | head -n1 )
[203a64c]117 ;;
[7072e1f]118 *) echo $(grep "^$script_name[_-][[:digit:]]" $JHALFSDIR/pkg_tarball_list | head -n1 )
[fe30c61]119 ;;
120 esac
121
122}
123
[3cb4ef5b]124#----------------------------------#
125get_package_version() { #
126#----------------------------------#
127# Those hacks may change depending on the invention of devs for tarball names.
128# Normally, we expect -digit to signal the beginning of the version field
129# but it may happen that there is no '-' (tcl, expect), that the version
130# field is ddd-d (pkg-config-lite-028-1, since sed is greedy, it finds only
131# the second dash) or that the first character of the version is not a digit
132# (iputils-s20121221)...
133 case ${1} in
134 tcl*|expect*|tzdata*|xmlts*|unzip*|lynx*)
135 echo ${1} | sed -e 's@^[^[:digit:]]*@@' \
136 -e 's@\(-src\)*\.tar.*@@'
137 ;;
138 iputils*) echo ${1} | sed -e 's@^.*-@@' \
139 -e 's@\.tar.*@@'
140 ;;
[203a64c]141 glibc*) echo ${1} | sed -e 's@^[^-]*-@@' \
142 -e 's@\.tar.*@@'
143 ;;
[3cb4ef5b]144 LVM*) echo ${1} | sed -e 's@^[^.]*\.@@' \
145 -e 's@\.tgz.*@@'
146 ;;
147 iproute*) echo ${1} | sed -e 's@^[^-]*-@@' \
148 -e 's@\.tar.*@@'
149 ;;
[3d96a65]150 pkg*|udev*|Singular*|XML*)
[3cb4ef5b]151 echo ${1} | sed -e 's@^.*[a-z]-\([[:digit:]]\)@\1@' \
152 -e 's@\.tar.*@@' \
153 -e 's@\.zip.*@@'
154 ;;
155 *) echo ${1} | sed -e 's@^.*[-_]\([[:digit:]]\)@\1@' \
156 -e 's@\.tar.*@@' \
157 -e 's@\.zip.*@@'
158 ;;
159 esac
160
161}
[fe30c61]162#=======================
163
164
165#==== TARGET HEADER ====
166
167#----------------------------------#
168LUSER_wrt_target() { # Create target and initialize log file
169#----------------------------------#
170 local i=$1
171 local PREV=$2
[3cb4ef5b]172 local version
173 if [ "$3" != "" ]; then
174 version=-$3
175 fi
[fe30c61]176(
177cat << EOF
178
179$i: $PREV
180 @\$(call echo_message, Building)
[75d6d1c]181${NO_PROGRESS} @export BASHBIN=\$(SHELL) && \$(SHELL) progress_bar.sh \$@ \$\$PPID &
[3cb4ef5b]182 @echo "\$(nl_)\`date\`\$(nl_)" >logs/\$@$version
[2758d94]183 @ : > envars
[fe30c61]184EOF
185) >> $MKFILE.tmp
186}
187
188#----------------------------------#
189CHROOT_wrt_target() { # Create target and initialize log file
190#----------------------------------#
191 local i=$1
192 local PREV=$2
[3cb4ef5b]193 local version
194 if [ "$3" != "" ]; then
195 version=-$3
196 fi
[fe30c61]197(
198cat << EOF
199
200$i: $PREV
201 @\$(call echo_message, Building)
[75d6d1c]202${NO_PROGRESS} @export BASHBIN=\$(SHELL) && \$(SHELL) progress_bar.sh \$@ \$\$PPID &
[3cb4ef5b]203 @echo "\$(nl_)\`date\`\$(nl_)" >logs/\$@$version
[2758d94]204 @ : > envars
[fe30c61]205EOF
206) >> $MKFILE.tmp
207}
208
209#=======================
210
211
212#======== UNPACK =======
213
214#----------------------------------#
215LUSER_wrt_unpack() { # Unpack and set 'ROOT' var
216#----------------------------------#
[0722dde]217 local FILE="$1"
218 local optSAVE_PREVIOUS="$2"
219 local version
220 if [ "$3" != "" ]; then
221 version=-"$3"
222 fi
[fe30c61]223
224 if [[ "${optSAVE_PREVIOUS}" != "1" ]]; then
225(
226cat << EOF
227 @\$(call remove_existing_dirs,$FILE)
228EOF
229) >> $MKFILE.tmp
230 fi
231
232(
233cat << EOF
[2758d94]234 @\$(PRT_DU) >>logs/\$@$version
[fe30c61]235 @\$(call unpack,$FILE)
236 @\$(call get_pkg_root_LUSER)
237EOF
238) >> $MKFILE.tmp
239}
240
241#----------------------------------#
242CHROOT_Unpack() { #
243#----------------------------------#
244 local FILE=$1
245 local optSAVE_PREVIOUS=$2
[0722dde]246 local version
247 if [ "$3" != "" ]; then
248 version=-"$3"
249 fi
[fe30c61]250
251 if [ "${optSAVE_PREVIOUS}" != "1" ]; then
252(
253cat << EOF
254 @\$(call remove_existing_dirs2,$FILE)
255EOF
256) >> $MKFILE.tmp
257 fi
[2758d94]258
[fe30c61]259(
[2758d94]260cat << EOF
261 @\$(PRT_DU_CR) >>logs/\$@$version
[1f81129]262 @\$(call unpack2,$FILE)
[fe30c61]263 @\$(call get_pkg_root2)
264EOF
265) >> $MKFILE.tmp
266}
267
268#=======================
269
270
271#===== TESTS LOGS ======
272
273#----------------------------------#
274LUSER_wrt_test_log() { # Initialize testsuite log file
275#----------------------------------#
[3cb4ef5b]276 local version
277 if [ "$2" != "" ]; then
278 version=-$2
279 fi
280 local TESTLOGFILE=$1$version
[fe30c61]281(
282cat << EOF
[6bb080e]283 @echo "export TEST_LOG=\$(TESTLOGDIR)/$TESTLOGFILE" >> envars && \\
[3cb4ef5b]284 echo "\$(nl_)\`date\`\$(nl_)" >\$(TESTLOGDIR)/$TESTLOGFILE
[fe30c61]285EOF
286) >> $MKFILE.tmp
287}
288
289#----------------------------------#
290CHROOT_wrt_test_log() { #
291#----------------------------------#
[3cb4ef5b]292 local version
293 if [ "$2" != "" ]; then
294 version=-$2
295 fi
296 local TESTLOGFILE=$1$version
[fe30c61]297(
298cat << EOF
[8f2c086]299 @echo "export TEST_LOG=\$(crTESTLOGDIR)/$TESTLOGFILE" >> envars && \\
[3cb4ef5b]300 echo "\$(nl_)\`date\`\$(nl_)" >\$(crTESTLOGDIR)/$TESTLOGFILE
[fe30c61]301EOF
302) >> $MKFILE.tmp
303}
304
305#=======================
306
307
308#======== RUN AS =======
309
310#----------------------------------#
311wrt_RunAsRoot() { # Some scripts must be run as root..
312#----------------------------------#
313 local MOUNT_ENV
[3cb4ef5b]314 local version
315 if [ "$2" != "" ]; then
316 version=-$2
317 fi
[8f2c086]318 local file=$1
[fe30c61]319
320 case ${PROGNAME} in
321 lfs ) MOUNT_ENV="LFS" ;;
322 clfs ) MOUNT_ENV="CLFS" ;;
323 clfs2 ) MOUNT_ENV="CLFS" ;;
324 clfs3 ) MOUNT_ENV="CLFS" ;;
325 hlfs ) MOUNT_ENV="HLFS" ;;
326 *) echo "undefined progname $PROGNAME"; exit 1 ;;
327 esac
328
329(
330cat << EOF
[68713c9]331 @export ${MOUNT_ENV}=\$(MOUNT_PT) && \\
[3cb4ef5b]332 ${PROGNAME}-commands/`dirname $file`/\$@ >>logs/\$@$version 2>&1 && \\
[939731a]333 if [ "${PROGNAME}" != lfs ]; then \\
334 \$(PRT_DU) >>logs/\$@$version; \\
335 fi
[fe30c61]336EOF
337) >> $MKFILE.tmp
338}
339
340#----------------------------------#
[0210014]341LUSER_wrt_RunAsUser() { # Calculate time with perl, footer to log file
[fe30c61]342#----------------------------------#
343 local file=$1
[3cb4ef5b]344 local version
345 if [ "$2" != "" ]; then
346 version=-$2
347 fi
[fe30c61]348
349(
350cat << EOF
[68713c9]351 @source ~/.bashrc && \\
[2758d94]352 \$(CMDSDIR)/`dirname $file`/\$@ >> \$(LOGDIR)/\$@$version 2>&1 && \\
353 if [ "${PROGNAME}" != lfs ]; then \$(PRT_DU) >>logs/\$@$version; fi
[fe30c61]354EOF
355) >> $MKFILE.tmp
356}
357
358#----------------------------------#
359CHROOT_wrt_RunAsRoot() { #
360#----------------------------------#
361 local file=$1
[3cb4ef5b]362 local version
363 if [ "$2" != "" ]; then
364 version=-$2
365 fi
[fe30c61]366(
367cat << EOF
[68713c9]368 @source envars && \\
[2758d94]369 \$(crCMDSDIR)/`dirname $file`/\$@ >>\$(crLOGDIR)/\$@$version 2>&1 && \\
370 if [ "${PROGNAME}" != lfs ]; then \$(PRT_DU_CR) >>logs/\$@$version; fi
[fe30c61]371EOF
372) >> $MKFILE.tmp
373
374}
375
376#=======================
377
378
379#====== COPY FSTAB =====
380
381#----------------------------------#
382LUSER_wrt_CopyFstab() { #
383#----------------------------------#
384(
385cat << EOF
[68713c9]386 @cp -v \$(MOUNT_PT)/sources/fstab \$(MOUNT_PT)/etc/fstab >>logs/\$@ 2>&1 && \\
[0210014]387 \$(PRT_DU) >>logs/\$@
[fe30c61]388EOF
389) >> $MKFILE.tmp
390}
391
392#----------------------------------#
393CHROOT_wrt_CopyFstab() { #
394#----------------------------------#
395(
396cat << EOF
[68713c9]397 @cp -v /sources/fstab /etc/fstab >>logs/\$@ 2>&1 && \\
[0210014]398 \$(PRT_DU_CR) >>logs/\$@
[fe30c61]399EOF
400) >> $MKFILE.tmp
401}
402
403#=======================
404
405
[93346ee]406#==== INSTALLED FILES LOGS ====
407
[f546320]408#----------------------------------#
409LUSER_wrt_TouchTimestamp() { #
410#----------------------------------#
411(
412cat << EOF
413 @\$(call touch_timestamp_LUSER)
414EOF
415) >> $MKFILE.tmp
416}
417
[93346ee]418#----------------------------------#
419CHROOT_wrt_TouchTimestamp() { #
420#----------------------------------#
421(
422cat << EOF
423 @\$(call touch_timestamp)
424EOF
425) >> $MKFILE.tmp
426}
427
[f546320]428#----------------------------------#
429LUSER_wrt_LogNewFiles() { #
430#----------------------------------#
431(
432cat << EOF
[13e52a5]433 @\$(call log_new_files_LUSER,$1)
[f546320]434EOF
435) >> $MKFILE.tmp
436}
437
[93346ee]438#----------------------------------#
439CHROOT_wrt_LogNewFiles() { #
440#----------------------------------#
441(
442cat << EOF
[13e52a5]443 @\$(call log_new_files,$1)
[93346ee]444EOF
445) >> $MKFILE.tmp
446}
447
448#=======================
449
450
[fe30c61]451#==== RM BUILD DIRS ====
452
453#----------------------------------#
454LUSER_RemoveBuildDirs() { #
455#----------------------------------#
[e639536]456 local name=`echo ${1} | sed 's/[0-9]-//'`
[fe30c61]457(
458cat << EOF
459 @\$(call remove_build_dirs,$name)
460EOF
461) >> $MKFILE.tmp
462}
463
464#----------------------------------#
465CHROOT_wrt_RemoveBuildDirs() { #
466#----------------------------------#
[e639536]467 local name=`echo ${1} | sed 's/[0-9]-//'`
[fe30c61]468(
469cat << EOF
470 @\$(call remove_build_dirs2,$name)
471EOF
472) >> $MKFILE.tmp
473}
474
475#=======================
476
477
478#======== TOUCH ========
479
480#----------------------------------#
481wrt_touch() { #
482#----------------------------------#
483(
484cat << EOF
485 @\$(call housekeeping)
486EOF
487) >> $MKFILE.tmp
488}
489
490#=======================
Note: See TracBrowser for help on using the repository browser.