source: common/libs/func_wrt_Makefile@ 20e3fcd

ablfs-more legacy trunk
Last change on this file since 20e3fcd was 20e3fcd, checked in by Pierre Labastie <pierre@…>, 5 years ago

Do not use a login shell for LUSER

Most books have something like "exec /bin/bash" in .bash_profile for the
building user. This results in stopping and waiting for commands when
running a a login shell. The current jhalfs way of removing .bash_profile is
suboptimal, since a user may want to login as $(LUSER) and expect that the
environment is set (without having to source .bashrc). So remove the
"-i" flag in "sudo -u $(LUSER) ..."

  • Property mode set to 100644
File size: 11.9 KB
Line 
1#!/bin/bash
2
3# $Id$
4
5#=== MAKEFILE HEADER ===
6
7#----------------------------------#
8wrt_Makefile_header() { #
9#----------------------------------#
10(
11 cat << EOF
12# This file is automatically generated by jhalfs
13# DO NOT EDIT THIS FILE MANUALLY
14#
15# Generated on `date "+%F %X %Z"`
16
17
18SHELL = /bin/bash
19
20SRC = /sources
21MOUNT_PT = $BUILDDIR
22PKG_LST = $PKG_LST
23LUSER = $LUSER
24LGROUP = $LGROUP
25LHOME = $LHOME
26SCRIPT_ROOT = $SCRIPT_ROOT
27
28BASEDIR = \$(MOUNT_PT)
29SRCSDIR = \$(BASEDIR)/sources
30CMDSDIR = \$(BASEDIR)/\$(SCRIPT_ROOT)/$PROGNAME-commands
31LOGDIR = \$(BASEDIR)/\$(SCRIPT_ROOT)/$LOGDIRBASE
32TESTLOGDIR = \$(BASEDIR)/\$(SCRIPT_ROOT)/$TESTLOGDIRBASE
33
34crCMDSDIR = /\$(SCRIPT_ROOT)/$PROGNAME-commands
35crLOGDIR = /\$(SCRIPT_ROOT)/$LOGDIRBASE
36crTESTLOGDIR = /\$(SCRIPT_ROOT)/$TESTLOGDIRBASE
37crFILELOGDIR = /\$(SCRIPT_ROOT)/$FILELOGDIRBASE
38
39SU_LUSER = sudo -u \$(LUSER) sh -c
40LUSER_HOME = \$(LHOME)/\$(LUSER)
41PRT_DU = echo -e "\nKB: \`du -skx --exclude=\$(SCRIPT_ROOT) --exclude=lost+found \$(MOUNT_PT) \`\n"
42PRT_DU_CR = echo -e "\nKB: \`du -skx --exclude=\$(SCRIPT_ROOT) --exclude=lost+found --exclude /var/lib / \`\n"
43
44ADD_REPORT = $REPORT
45ADD_CUSTOM_TOOLS = $CUSTOM_TOOLS
46ADD_BLFS_TOOLS = $BLFS_TOOL
47PKGMNGT = $PKGMNGT
48WRAP_INSTALL = $WRAP_INSTALL
49
50
51export PATH := \${PATH}:/usr/sbin
52
53include makefile-functions
54
55EOF
56) > $MKFILE
57}
58
59#=======================
60
61
62#==== PACKAGES NAMES AND VERSIONS ====
63
64#----------------------------------#
65get_package_tarball_name() { #
66#----------------------------------#
67 local script_name=`echo ${1} | sed -e 's@^[0-9]\{1\}-@@'`
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 ;;
75 iputils) echo $(grep "^iputils" $JHALFSDIR/pkg_tarball_list | head -n1 )
76 ;;
77 powerpc-utils) echo $(grep "^powerpc-utils" $JHALFSDIR/pkg_tarball_list | head -n1 )
78 ;;
79 uClibc)
80 if [[ "${PROGNAME}" = "clfs3" ]]; then
81 echo $(grep "^uClibc-" $JHALFSDIR/pkg_tarball_list | head -n1 )
82 else
83 echo $(grep "^$script_name-[[:digit:]]" $JHALFSDIR/pkg_tarball_list | head -n1 )
84 fi
85 ;;
86 linux-headers)
87 if [[ "${PROGNAME}" = "lfs" ]] || [[ "${PROGNAME}" = "hlfs" ]] || [[ "${PROGNAME}" = "clfs" ]]; then
88 # Uses kernel headers directly
89 echo $(grep "^linux-[[:digit:]]" $JHALFSDIR/pkg_tarball_list | head -n1 )
90 else
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 )
94 fi
95 ;;
96 expect) echo $(grep "^expect" $JHALFSDIR/pkg_tarball_list | head -n1 )
97 ;;
98 e2fsprogs-libs) echo $(grep "^e2fsprogs" $JHALFSDIR/pkg_tarball_list | head -n1 )
99 ;;
100 libcap) echo $(grep "^libcap" $JHALFSDIR/pkg_tarball_list | head -n1 )
101 ;;
102 util-linux-libs | util-linux-pass1) echo $(grep "^util-linux" $JHALFSDIR/pkg_tarball_list | head -n1 )
103 ;;
104 xz-utils) echo $(grep "^xz" $JHALFSDIR/pkg_tarball_list | head -n1 )
105 ;;
106 sqlite) echo $(grep "^sqlite" $JHALFSDIR/pkg_tarball_list | head -n1 )
107 ;;
108 udev) echo $(grep "^systemd" $JHALFSDIR/pkg_tarball_list | head -n1 )
109 ;;
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 ;;
114 glibc) echo $(grep "^glibc" $JHALFSDIR/pkg_tarball_list | head -n1 )
115 ;;
116 libelf) echo $(grep "^elfutils" $JHALFSDIR/pkg_tarball_list | head -n1 )
117 ;;
118 *) echo $(grep "^$script_name[_-][[:digit:]]" $JHALFSDIR/pkg_tarball_list | head -n1 )
119 ;;
120 esac
121
122}
123
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 ;;
141 glibc*) echo ${1} | sed -e 's@^[^-]*-@@' \
142 -e 's@\.tar.*@@'
143 ;;
144 LVM*) echo ${1} | sed -e 's@^[^.]*\.@@' \
145 -e 's@\.tgz.*@@'
146 ;;
147 iproute*) echo ${1} | sed -e 's@^[^-]*-@@' \
148 -e 's@\.tar.*@@'
149 ;;
150 pkg*|udev*|Singular*|XML*)
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}
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
172 local version
173 if [ "$3" != "" ]; then
174 version=-$3
175 fi
176(
177cat << EOF
178
179$i: $PREV
180 @\$(call echo_message, Building)
181${NO_PROGRESS} @export BASHBIN=\$(SHELL) && \$(SHELL) progress_bar.sh \$@ \$\$PPID &
182 @echo "\$(nl_)\`date\`\$(nl_)" >logs/\$@$version
183 @ : > envars
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
193 local version
194 if [ "$3" != "" ]; then
195 version=-$3
196 fi
197(
198cat << EOF
199
200$i: $PREV
201 @\$(call echo_message, Building)
202${NO_PROGRESS} @export BASHBIN=\$(SHELL) && \$(SHELL) progress_bar.sh \$@ \$\$PPID &
203 @echo "\$(nl_)\`date\`\$(nl_)" >logs/\$@$version
204 @ : > envars
205EOF
206) >> $MKFILE.tmp
207}
208
209#=======================
210
211
212#======== UNPACK =======
213
214#----------------------------------#
215LUSER_wrt_unpack() { # Unpack and set 'ROOT' var
216#----------------------------------#
217 local FILE=$1
218 local optSAVE_PREVIOUS=$2
219
220 if [[ "${optSAVE_PREVIOUS}" != "1" ]]; then
221(
222cat << EOF
223 @\$(call remove_existing_dirs,$FILE)
224EOF
225) >> $MKFILE.tmp
226 fi
227
228(
229cat << EOF
230 @\$(PRT_DU) >>logs/\$@$version
231 @\$(call unpack,$FILE)
232 @\$(call get_pkg_root_LUSER)
233EOF
234) >> $MKFILE.tmp
235}
236
237#----------------------------------#
238CHROOT_Unpack() { #
239#----------------------------------#
240 local FILE=$1
241 local optSAVE_PREVIOUS=$2
242
243 if [ "${optSAVE_PREVIOUS}" != "1" ]; then
244(
245cat << EOF
246 @\$(call remove_existing_dirs2,$FILE)
247EOF
248) >> $MKFILE.tmp
249 fi
250
251(
252cat << EOF
253 @\$(PRT_DU_CR) >>logs/\$@$version
254 @\$(call unpack2,$FILE)
255 @\$(call get_pkg_root2)
256EOF
257) >> $MKFILE.tmp
258}
259
260#=======================
261
262
263#===== TESTS LOGS ======
264
265#----------------------------------#
266LUSER_wrt_test_log() { # Initialize testsuite log file
267#----------------------------------#
268 local version
269 if [ "$2" != "" ]; then
270 version=-$2
271 fi
272 local TESTLOGFILE=$1$version
273(
274cat << EOF
275 @echo "export TEST_LOG=\$(TESTLOGDIR)/$TESTLOGFILE" >> envars && \\
276 echo "\$(nl_)\`date\`\$(nl_)" >\$(TESTLOGDIR)/$TESTLOGFILE
277EOF
278) >> $MKFILE.tmp
279}
280
281#----------------------------------#
282CHROOT_wrt_test_log() { #
283#----------------------------------#
284 local version
285 if [ "$2" != "" ]; then
286 version=-$2
287 fi
288 local TESTLOGFILE=$1$version
289(
290cat << EOF
291 @echo "export TEST_LOG=\$(crTESTLOGDIR)/$TESTLOGFILE" >> envars && \\
292 echo "\$(nl_)\`date\`\$(nl_)" >\$(crTESTLOGDIR)/$TESTLOGFILE
293EOF
294) >> $MKFILE.tmp
295}
296
297#=======================
298
299
300#======== RUN AS =======
301
302#----------------------------------#
303wrt_RunAsRoot() { # Some scripts must be run as root..
304#----------------------------------#
305 local MOUNT_ENV
306 local version
307 if [ "$2" != "" ]; then
308 version=-$2
309 fi
310 local file=$1
311
312 case ${PROGNAME} in
313 lfs ) MOUNT_ENV="LFS" ;;
314 clfs ) MOUNT_ENV="CLFS" ;;
315 clfs2 ) MOUNT_ENV="CLFS" ;;
316 clfs3 ) MOUNT_ENV="CLFS" ;;
317 hlfs ) MOUNT_ENV="HLFS" ;;
318 *) echo "undefined progname $PROGNAME"; exit 1 ;;
319 esac
320
321(
322cat << EOF
323 @export ${MOUNT_ENV}=\$(MOUNT_PT) && \\
324 ${PROGNAME}-commands/`dirname $file`/\$@ >>logs/\$@$version 2>&1 && \\
325 \$(PRT_DU) >>logs/\$@$version
326EOF
327) >> $MKFILE.tmp
328}
329
330#----------------------------------#
331LUSER_wrt_RunAsUser() { # Calculate time with perl, footer to log file
332#----------------------------------#
333 local file=$1
334 local version
335 if [ "$2" != "" ]; then
336 version=-$2
337 fi
338
339(
340cat << EOF
341 @source ~/.bashrc && \\
342 \$(CMDSDIR)/`dirname $file`/\$@ >> \$(LOGDIR)/\$@$version 2>&1 && \\
343 if [ "${PROGNAME}" != lfs ]; then \$(PRT_DU) >>logs/\$@$version; fi
344EOF
345) >> $MKFILE.tmp
346}
347
348#----------------------------------#
349CHROOT_wrt_RunAsRoot() { #
350#----------------------------------#
351 local file=$1
352 local version
353 if [ "$2" != "" ]; then
354 version=-$2
355 fi
356(
357cat << EOF
358 @source envars && \\
359 \$(crCMDSDIR)/`dirname $file`/\$@ >>\$(crLOGDIR)/\$@$version 2>&1 && \\
360 if [ "${PROGNAME}" != lfs ]; then \$(PRT_DU_CR) >>logs/\$@$version; fi
361EOF
362) >> $MKFILE.tmp
363
364}
365
366#=======================
367
368
369#====== COPY FSTAB =====
370
371#----------------------------------#
372LUSER_wrt_CopyFstab() { #
373#----------------------------------#
374(
375cat << EOF
376 @cp -v \$(MOUNT_PT)/sources/fstab \$(MOUNT_PT)/etc/fstab >>logs/\$@ 2>&1 && \\
377 \$(PRT_DU) >>logs/\$@
378EOF
379) >> $MKFILE.tmp
380}
381
382#----------------------------------#
383CHROOT_wrt_CopyFstab() { #
384#----------------------------------#
385(
386cat << EOF
387 @cp -v /sources/fstab /etc/fstab >>logs/\$@ 2>&1 && \\
388 \$(PRT_DU_CR) >>logs/\$@
389EOF
390) >> $MKFILE.tmp
391}
392
393#=======================
394
395
396#==== INSTALLED FILES LOGS ====
397
398#----------------------------------#
399LUSER_wrt_TouchTimestamp() { #
400#----------------------------------#
401(
402cat << EOF
403 @\$(call touch_timestamp_LUSER)
404EOF
405) >> $MKFILE.tmp
406}
407
408#----------------------------------#
409CHROOT_wrt_TouchTimestamp() { #
410#----------------------------------#
411(
412cat << EOF
413 @\$(call touch_timestamp)
414EOF
415) >> $MKFILE.tmp
416}
417
418#----------------------------------#
419LUSER_wrt_LogNewFiles() { #
420#----------------------------------#
421 local name=`echo ${1} | sed 's/[0-9]-//'`
422(
423cat << EOF
424 @\$(call log_new_files_LUSER,$name)
425EOF
426) >> $MKFILE.tmp
427}
428
429#----------------------------------#
430CHROOT_wrt_LogNewFiles() { #
431#----------------------------------#
432 local name=`echo ${1} | sed 's/[0-9]-//'`
433(
434cat << EOF
435 @\$(call log_new_files,$name)
436EOF
437) >> $MKFILE.tmp
438}
439
440#=======================
441
442
443#==== RM BUILD DIRS ====
444
445#----------------------------------#
446LUSER_RemoveBuildDirs() { #
447#----------------------------------#
448 local name=`echo ${1} | sed 's/[0-9]-//'`
449(
450cat << EOF
451 @\$(call remove_build_dirs,$name)
452EOF
453) >> $MKFILE.tmp
454}
455
456#----------------------------------#
457CHROOT_wrt_RemoveBuildDirs() { #
458#----------------------------------#
459 local name=`echo ${1} | sed 's/[0-9]-//'`
460(
461cat << EOF
462 @\$(call remove_build_dirs2,$name)
463EOF
464) >> $MKFILE.tmp
465}
466
467#=======================
468
469
470#======== TOUCH ========
471
472#----------------------------------#
473wrt_touch() { #
474#----------------------------------#
475(
476cat << EOF
477 @\$(call housekeeping)
478EOF
479) >> $MKFILE.tmp
480}
481
482#=======================
Note: See TracBrowser for help on using the repository browser.