Author: pierre
Date: Sun Mar 29 10:16:09 2020
New Revision: 4144
Log:
Adapt master.sh to new book, staying compatible
This involves changing the way make targets are built. Specially
the make target is changed when encountering a specific file
(for example the make target becomes sudo when rencountering kernfs)
This allows more flexibility.
Modified:
jhalfs/trunk/LFS/master.sh
Modified: jhalfs/trunk/LFS/master.sh
==============================================================================
--- jhalfs/trunk/LFS/master.sh Sun Mar 29 08:13:15 2020 (r4143)
+++ jhalfs/trunk/LFS/master.sh Sun Mar 29 10:16:09 2020 (r4144)
@@ -97,34 +97,35 @@
#----------------------------#
echo "${tab_}${GREEN}Processing... ${L_arrow}Chapter5 ( LUSER )
${R_arrow}"
+# Initialize the Makefile target: it'll change during chapter
+# For vanilla lfs, the "changingowner" script should be run as root. So
+# it belongs to the "SUDO" target, with list in the "runasroot" variable.
+# For new lfs, changingowner and kernfs are in "runsaroot", then the following,
+# starting at creatingdirs, are in the "CHROOT" target, in variable "chapter6".
+# Makefile_target records the variable, not really the target!
+# We use a case statement on that variable, because instructions in the
+# Makefile change according to the phase of the build (LUSER, SUDO, CHROOT).
+ Makefile_target=chapter5
+
+# Start loop
for file in chapter05/* ; do
# Keep the script file name
this_script=`basename $file`
- # If no testsuites are run, then TCL, Expect, DejaGNU and Check
- # aren't needed (but building them does not hurt).
- # Fix also locales creation when running chapter05 testsuites (ugly)
+ # Fix locales creation when running chapter05 testsuites (ugly)
case "${this_script}" in
-# *tcl) [[ "${TEST}" = "0" ]] && continue ;;
-# *expect) [[ "${TEST}" = "0" ]] && continue ;;
-# *dejagnu) [[ "${TEST}" = "0" ]] && continue ;;
-# *check) [[ "${TEST}" = "0" ]] && continue ;;
-# We now do that in LFS.xsl, because stripping.xml contains other cleaning
-# instructions
-# *stripping) [[ "${STRIP}" = "n" ]] && continue ;;
*glibc) [[ "${TEST}" = "3" ]] && \
sed -i 's@/usr/lib/locale@/tools/lib/locale@' $file ;;
esac
- # First append each name of the script files to a list (this will become
- # the names of the targets in the Makefile
- # DO NOT append the changingowner script, it need be run as root.
- # A hack is necessary: create script in chap5 BUT run as a dependency for
- # SUDO target
+ # Append each name of the script files to a list that Makefile_target
+ # points to. But before that, change Makefile_target at the first script
+ # of each target.
case "${this_script}" in
- *changingowner) runasroot="$runasroot ${this_script}" ;;
- *) chapter5="$chapter5 ${this_script}" ;;
+ *changingowner) Makefile_target=runasroot ;;
+ *creatingdirs ) Makefile_target=chapter6 ;; # only run for new lfs
esac
+ eval $Makefile_target=\"\$$Makefile_target ${this_script}\"
# Grab the name of the target (minus the -pass1 or -pass2 in the case of
gcc
# and binutils in chapter 5)
@@ -142,13 +143,20 @@
# Drop in the name of the target on a new line, and the previous target
# as a dependency. Also call the echo_message function.
- LUSER_wrt_target "${this_script}" "$PREV" "$pkg_version"
+ case $Makefile_target in
+ chapter6) CHROOT_wrt_target "${this_script}" "$PREV" "$pkg_version" ;;
+ *) LUSER_wrt_target "${this_script}" "$PREV" "$pkg_version" ;;
+ esac
# If $pkg_tarball isn't empty, we've got a package...
if [ "$pkg_tarball" != "" ] ; then
# Always initialize the log file, since the test instructions may be
# "uncommented" by the user
- LUSER_wrt_test_log "${this_script}" "$pkg_version"
+ case $Makefile_target in
+ chapter6) CHROOT_wrt_test_log "${this_script}" "$pkg_version" ;;
+ *) LUSER_wrt_test_log "${this_script}" "$pkg_version" ;;
+ esac
+
# If using optimizations, write the instructions
case "${OPTIMIZE}${this_script}${REALSBU}" in
*binutils-pass1y) ;;
@@ -160,9 +168,10 @@
# Insert date and disk usage at the top of the log file, the script run
# and date and disk usage again at the bottom of the log file.
# The changingowner script must be run as root.
- case "${this_script}" in
- *changingowner) wrt_RunAsRoot "$file" "$pkg_version" ;;
- *) LUSER_wrt_RunAsUser "$file" "$pkg_version" ;;
+ case "${Makefile_target}" in
+ runasroot) wrt_RunAsRoot "$file" "$pkg_version" ;;
+ chapter5) LUSER_wrt_RunAsUser "$file" "$pkg_version" ;;
+ chapter6) CHROOT_wrt_RunAsRoot "$file" "$pkg_version" ;;
esac
# Include a touch of the target name so make can check
@@ -210,6 +219,15 @@
echo "${tab_}${GREEN}Processing... ${L_arrow}Chapter6$N ( CHROOT )
${R_arrow}"
+# Initialize the Makefile target. In vanilla lfs, kernfs should be run as root,
+# then the others are run in chroot. If in new lfs, we should start in chroot.
+# this will be changed later because man-pages is the first script in
+# chapter 6. Note that this Makefile_target business is not really needed here
+# but we do it to have a similar structure to chapter 5 (we may merge all
+# those functions at some point).
+ Makefile_target=runasroot
+
+# Start loop
for file in chapter06$N/* ; do
# Keep the script file name
this_script=`basename $file`
@@ -225,7 +243,7 @@
name=`echo ${this_script} | sed -e 's@[0-9]\{3\}-@@' -e 's,'$N',,'`
# Find the tarball corresponding to our script.
- # If it doesn't, we skip it in iterations rebuilds (except stripping).
+ # If it doesn't exist, we skip it in iterations rebuilds (except
stripping).
pkg_tarball=$(sed -n 's/tar -xf \(.*\)/\1/p' $file)
pkg_version=$(sed -n 's/VERSION=\(.*\)/\1/p' $file)
@@ -240,9 +258,10 @@
# the names of the targets in the Makefile)
# The kernfs script must be run as part of SUDO target.
case "${this_script}" in
- *kernfs) runasroot="$runasroot ${this_script}" ;;
- *) chapter6="$chapter6 ${this_script}" ;;
+ *creatingdirs) Makefile_target=chapter6 ;;
+ *man-pages ) Makefile_target=chapter6 ;;
esac
+ eval $Makefile_target=\"\$$Makefile_target ${this_script}\"
#--------------------------------------------------------------------#
# >>>>>>>> START BUILDING A Makefile ENTRY <<<<<<<< #
@@ -252,9 +271,9 @@
# as a dependency. Also call the echo_message function.
# In the mount of kernel filesystems we need to set LFS
# and not to use chroot.
- case "${this_script}" in
- *kernfs) LUSER_wrt_target "${this_script}" "$PREV" "$pkg_version" ;;
- *) CHROOT_wrt_target "${this_script}" "$PREV" "$pkg_version" ;;
+ case "${Makefile_target}" in
+ runasroot) LUSER_wrt_target "${this_script}" "$PREV" "$pkg_version" ;;
+ *) CHROOT_wrt_target "${this_script}" "$PREV" "$pkg_version" ;;
esac
# If $pkg_tarball isn't empty, we've got a package...
@@ -265,7 +284,7 @@
if [ "${INSTALL_LOG}" = "y" ] && [ "x${N}" = "x" ] ; then
CHROOT_wrt_TouchTimestamp
fi
- # Always initialize the log file, so that the use may reinstate a
+ # Always initialize the log file, so that the user may reinstate a
# commented out test
CHROOT_wrt_test_log "${this_script}" "$pkg_version"
# If using optimizations, write the instructions
@@ -274,9 +293,9 @@
# In the mount of kernel filesystems we need to set LFS
# and not to use chroot.
- case "${this_script}" in
- *kernfs) wrt_RunAsRoot "$file" "$pkg_version" ;;
- *) CHROOT_wrt_RunAsRoot "$file" "$pkg_version" ;;
+ case "${Makefile_target}" in
+ runasroot) wrt_RunAsRoot "$file" "$pkg_version" ;;
+ *) CHROOT_wrt_RunAsRoot "$file" "$pkg_version" ;;
esac
# Write installed files log and remove the build directory(ies)
--
http://lists.linuxfromscratch.org/listinfo/alfs-log
Unsubscribe: See the above information page