#!/bin/bash #=== MAKEFILE HEADER === #----------------------------------# wrt_Makefile_header() { # #----------------------------------# ( cat << EOF # This file is automatically generated by jhalfs # DO NOT EDIT THIS FILE MANUALLY # # Generated on `date "+%F %X %Z"` SHELL = /bin/bash SRC = /sources MOUNT_PT = $BUILDDIR PKG_LST = $PKG_LST LUSER = $LUSER LGROUP = $LGROUP LHOME = $LHOME SCRIPT_ROOT = $SCRIPT_ROOT BASEDIR = \$(MOUNT_PT) SRCSDIR = \$(BASEDIR)/sources CMDSDIR = \$(BASEDIR)/\$(SCRIPT_ROOT)/$PROGNAME-commands LOGDIR = \$(BASEDIR)/\$(SCRIPT_ROOT)/$LOGDIRBASE TESTLOGDIR = \$(BASEDIR)/\$(SCRIPT_ROOT)/$TESTLOGDIRBASE crCMDSDIR = /\$(SCRIPT_ROOT)/$PROGNAME-commands crLOGDIR = /\$(SCRIPT_ROOT)/$LOGDIRBASE crTESTLOGDIR = /\$(SCRIPT_ROOT)/$TESTLOGDIRBASE crFILELOGDIR = /\$(SCRIPT_ROOT)/$FILELOGDIRBASE SU_LUSER = sudo -H -u \$(LUSER) sh -c LUSER_HOME = \$(LHOME)/\$(LUSER) PRT_DU = echo -e "\nKB: \`du -skx --exclude=\$(SCRIPT_ROOT) --exclude=lost+found \$(MOUNT_PT) \`\n" PRT_DU_CR = echo -e "\nKB: \`du -skx --exclude=\$(SCRIPT_ROOT) --exclude=lost+found --exclude /var/lib / \`\n" ADD_REPORT = $REPORT ADD_CUSTOM_TOOLS = $CUSTOM_TOOLS ADD_BLFS_TOOLS = $BLFS_TOOL PKGMNGT = $PKGMNGT WRAP_INSTALL = $WRAP_INSTALL export PATH := \${PATH}:/usr/sbin include makefile-functions EOF ) > $MKFILE } #======================= #==== PACKAGES NAMES AND VERSIONS ==== #----------------------------------# get_package_tarball_name() { # #----------------------------------# local script_name=`echo ${1} | sed -e 's@^[0-9]\{2\}-@@'` # The use of 'head' is necessary to limit the return value to the FIRST match.. # hopefully this will not cause problems. # case $script_name in tcl) echo $(grep "^tcl" $JHALFSDIR/pkg_tarball_list | head -n1 ) ;; iputils) echo $(grep "^iputils" $JHALFSDIR/pkg_tarball_list | head -n1 ) ;; powerpc-utils) echo $(grep "^powerpc-utils" $JHALFSDIR/pkg_tarball_list | head -n1 ) ;; uClibc) if [[ "${PROGNAME}" = "clfs3" ]]; then echo $(grep "^uClibc-" $JHALFSDIR/pkg_tarball_list | head -n1 ) else echo $(grep "^$script_name-[[:digit:]]" $JHALFSDIR/pkg_tarball_list | head -n1 ) fi ;; linux-headers) if [[ "${PROGNAME}" = "lfs" ]] || [[ "${PROGNAME}" = "hlfs" ]] || [[ "${PROGNAME}" = "clfs" ]]; then # Uses kernel headers directly echo $(grep "^linux-[[:digit:]]" $JHALFSDIR/pkg_tarball_list | head -n1 ) else # CLFS{2,3} used to use massaged headers package # echo $(grep "^linux-headers-[[:digit:]]" $JHALFSDIR/pkg_tarball_list | head -n1 ) echo $(grep "^linux-[[:digit:]]" $JHALFSDIR/pkg_tarball_list | head -n1 ) fi ;; expect) echo $(grep "^expect" $JHALFSDIR/pkg_tarball_list | head -n1 ) ;; e2fsprogs-libs) echo $(grep "^e2fsprogs" $JHALFSDIR/pkg_tarball_list | head -n1 ) ;; libcap) echo $(grep "^libcap" $JHALFSDIR/pkg_tarball_list | head -n1 ) ;; util-linux-libs | util-linux-pass1) echo $(grep "^util-linux" $JHALFSDIR/pkg_tarball_list | head -n1 ) ;; xz-utils) echo $(grep "^xz" $JHALFSDIR/pkg_tarball_list | head -n1 ) ;; sqlite) echo $(grep "^sqlite" $JHALFSDIR/pkg_tarball_list | head -n1 ) ;; udev) echo $(grep "^systemd" $JHALFSDIR/pkg_tarball_list | head -n1 ) ;; xml-parser) echo $(grep "^XML" $JHALFSDIR/pkg_tarball_list | head -n1 ) ;; libdbus) echo $(grep "^dbus" $JHALFSDIR/pkg_tarball_list | head -n1 ) ;; glibc) echo $(grep "^glibc" $JHALFSDIR/pkg_tarball_list | head -n1 ) ;; libelf) echo $(grep "^elfutils" $JHALFSDIR/pkg_tarball_list | head -n1 ) ;; *) echo $(grep "^$script_name[_-][[:digit:]]" $JHALFSDIR/pkg_tarball_list | head -n1 ) ;; esac } #----------------------------------# get_package_version() { # #----------------------------------# # Those hacks may change depending on the invention of devs for tarball names. # Normally, we expect -digit to signal the beginning of the version field # but it may happen that there is no '-' (tcl, expect), that the version # field is ddd-d (pkg-config-lite-028-1, since sed is greedy, it finds only # the second dash) or that the first character of the version is not a digit # (iputils-s20121221)... case ${1} in tcl*|expect*|tzdata*|xmlts*|unzip*|lynx*) echo ${1} | sed -e 's@^[^[:digit:]]*@@' \ -e 's@\(-src\)*\.tar.*@@' ;; iputils*) echo ${1} | sed -e 's@^.*-@@' \ -e 's@\.tar.*@@' ;; glibc*) echo ${1} | sed -e 's@^[^-]*-@@' \ -e 's@\.tar.*@@' ;; LVM*) echo ${1} | sed -e 's@^[^.]*\.@@' \ -e 's@\.tgz.*@@' ;; iproute*) echo ${1} | sed -e 's@^[^-]*-@@' \ -e 's@\.tar.*@@' ;; pkg*|udev*|Singular*|XML*) echo ${1} | sed -e 's@^.*[a-z]-\([[:digit:]]\)@\1@' \ -e 's@\.tar.*@@' \ -e 's@\.zip.*@@' ;; *) echo ${1} | sed -e 's@^.*[-_]\([[:digit:]]\)@\1@' \ -e 's@\.tar.*@@' \ -e 's@\.zip.*@@' ;; esac } #======================= #==== TARGET HEADER ==== #----------------------------------# LUSER_wrt_target() { # Create target and initialize log file #----------------------------------# local i=$1 local PREV=$2 local version if [ "$3" != "" ]; then version=-$3 fi ( cat << EOF $i: $PREV @\$(call echo_message, Building) ${NO_PROGRESS} @export BASHBIN=\$(SHELL) && \$(SHELL) progress_bar.sh \$@ \$\$PPID & @echo "\$(nl_)\`date\`\$(nl_)" >logs/\$@$version @ : > envars EOF ) >> $MKFILE.tmp } #----------------------------------# CHROOT_wrt_target() { # Create target and initialize log file #----------------------------------# local i=$1 local PREV=$2 local version if [ "$3" != "" ]; then version=-$3 fi ( cat << EOF $i: $PREV @\$(call echo_message, Building) ${NO_PROGRESS} @export BASHBIN=\$(SHELL) && \$(SHELL) progress_bar.sh \$@ \$\$PPID & @echo "\$(nl_)\`date\`\$(nl_)" >logs/\$@$version @ : > envars EOF ) >> $MKFILE.tmp } #======================= #======== UNPACK ======= #----------------------------------# LUSER_wrt_unpack() { # Unpack and set 'ROOT' var #----------------------------------# local FILE="$1" local optSAVE_PREVIOUS="$2" local version if [ "$3" != "" ]; then version=-"$3" fi if [[ "${optSAVE_PREVIOUS}" != "1" ]]; then ( cat << EOF @\$(call remove_existing_dirs,$FILE) EOF ) >> $MKFILE.tmp fi ( cat << EOF @\$(PRT_DU) >>logs/\$@$version @\$(call unpack,$FILE) @\$(call get_pkg_root_LUSER) EOF ) >> $MKFILE.tmp } #----------------------------------# CHROOT_Unpack() { # #----------------------------------# local FILE=$1 local optSAVE_PREVIOUS=$2 local version if [ "$3" != "" ]; then version=-"$3" fi if [ "${optSAVE_PREVIOUS}" != "1" ]; then ( cat << EOF @\$(call remove_existing_dirs2,$FILE) EOF ) >> $MKFILE.tmp fi ( cat << EOF @\$(PRT_DU_CR) >>logs/\$@$version @\$(call unpack2,$FILE) @\$(call get_pkg_root2) EOF ) >> $MKFILE.tmp } #======================= #===== TESTS LOGS ====== #----------------------------------# LUSER_wrt_test_log() { # Initialize testsuite log file #----------------------------------# local version if [ "$2" != "" ]; then version=-$2 fi local TESTLOGFILE=$1$version ( cat << EOF @echo "export TEST_LOG=\$(TESTLOGDIR)/$TESTLOGFILE" >> envars && \\ echo "\$(nl_)\`date\`\$(nl_)" >\$(TESTLOGDIR)/$TESTLOGFILE EOF ) >> $MKFILE.tmp } #----------------------------------# CHROOT_wrt_test_log() { # #----------------------------------# local version if [ "$2" != "" ]; then version=-$2 fi local TESTLOGFILE=$1$version ( cat << EOF @echo "export TEST_LOG=\$(crTESTLOGDIR)/$TESTLOGFILE" >> envars && \\ echo "\$(nl_)\`date\`\$(nl_)" >\$(crTESTLOGDIR)/$TESTLOGFILE EOF ) >> $MKFILE.tmp } #======================= #======== RUN AS ======= #----------------------------------# wrt_RunAsRoot() { # Some scripts must be run as root.. #----------------------------------# local MOUNT_ENV local version if [ "$2" != "" ]; then version=-$2 fi local file=$1 case ${PROGNAME} in lfs ) MOUNT_ENV="LFS" ;; clfs ) MOUNT_ENV="CLFS" ;; clfs2 ) MOUNT_ENV="CLFS" ;; clfs3 ) MOUNT_ENV="CLFS" ;; hlfs ) MOUNT_ENV="HLFS" ;; *) echo "undefined progname $PROGNAME"; exit 1 ;; esac ( cat << EOF @export ${MOUNT_ENV}=\$(MOUNT_PT) && \\ ${PROGNAME}-commands/`dirname $file`/\$@ >>logs/\$@$version 2>&1 && \\ if [ "${PROGNAME}" != lfs ]; then \\ \$(PRT_DU) >>logs/\$@$version; \\ fi EOF ) >> $MKFILE.tmp } #----------------------------------# LUSER_wrt_RunAsUser() { # Calculate time with perl, footer to log file #----------------------------------# local file=$1 local version if [ "$2" != "" ]; then version=-$2 fi ( cat << EOF @source ~/.bashrc && \\ \$(CMDSDIR)/`dirname $file`/\$@ >> \$(LOGDIR)/\$@$version 2>&1 && \\ if [ "${PROGNAME}" != lfs ]; then \$(PRT_DU) >>logs/\$@$version; fi EOF ) >> $MKFILE.tmp } #----------------------------------# CHROOT_wrt_RunAsRoot() { # #----------------------------------# local file=$1 local version if [ "$2" != "" ]; then version=-$2 fi ( cat << EOF @source envars && \\ \$(crCMDSDIR)/`dirname $file`/\$@ >>\$(crLOGDIR)/\$@$version 2>&1 && \\ if [ "${PROGNAME}" != lfs ]; then \$(PRT_DU_CR) >>logs/\$@$version; fi EOF ) >> $MKFILE.tmp } #======================= #====== COPY FSTAB ===== #----------------------------------# LUSER_wrt_CopyFstab() { # #----------------------------------# ( cat << EOF @cp -v \$(MOUNT_PT)/sources/fstab \$(MOUNT_PT)/etc/fstab >>logs/\$@ 2>&1 && \\ \$(PRT_DU) >>logs/\$@ EOF ) >> $MKFILE.tmp } #----------------------------------# CHROOT_wrt_CopyFstab() { # #----------------------------------# ( cat << EOF @cp -v /sources/fstab /etc/fstab >>logs/\$@ 2>&1 && \\ \$(PRT_DU_CR) >>logs/\$@ EOF ) >> $MKFILE.tmp } #======================= #==== INSTALLED FILES LOGS ==== #----------------------------------# LUSER_wrt_TouchTimestamp() { # #----------------------------------# ( cat << EOF @\$(call touch_timestamp_LUSER) EOF ) >> $MKFILE.tmp } #----------------------------------# CHROOT_wrt_TouchTimestamp() { # #----------------------------------# ( cat << EOF @\$(call touch_timestamp) EOF ) >> $MKFILE.tmp } #----------------------------------# LUSER_wrt_LogNewFiles() { # #----------------------------------# ( cat << EOF @\$(call log_new_files_LUSER,$1) EOF ) >> $MKFILE.tmp } #----------------------------------# CHROOT_wrt_LogNewFiles() { # #----------------------------------# ( cat << EOF @\$(call log_new_files,$1) EOF ) >> $MKFILE.tmp } #======================= #==== RM BUILD DIRS ==== #----------------------------------# LUSER_RemoveBuildDirs() { # #----------------------------------# local name=`echo ${1} | sed 's/[0-9]-//'` ( cat << EOF @\$(call remove_build_dirs,$name) EOF ) >> $MKFILE.tmp } #----------------------------------# CHROOT_wrt_RemoveBuildDirs() { # #----------------------------------# local name=`echo ${1} | sed 's/[0-9]-//'` ( cat << EOF @\$(call remove_build_dirs2,$name) EOF ) >> $MKFILE.tmp } #======================= #======== TOUCH ======== #----------------------------------# wrt_touch() { # #----------------------------------# ( cat << EOF @\$(call housekeeping) EOF ) >> $MKFILE.tmp } #=======================