mirror of
https://github.com/vincentmli/bpfire.git
synced 2026-04-12 20:16:49 +02:00
ccache was configured to neglegt the compiler it is using which causes conflicts when using the same cache for compiling multiple architectures. Hence we include the architecture (and the toolchain version) in the hash so that a different hash will be generated. Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
766 lines
22 KiB
Bash
766 lines
22 KiB
Bash
#!/bin/bash
|
|
###############################################################################
|
|
# #
|
|
# IPFire.org - A linux based firewall #
|
|
# Copyright (C) 2007-2011 IPFire Team <info@ipfire.org> #
|
|
# #
|
|
# This program is free software: you can redistribute it and/or modify #
|
|
# it under the terms of the GNU General Public License as published by #
|
|
# the Free Software Foundation, either version 3 of the License, or #
|
|
# (at your option) any later version. #
|
|
# #
|
|
# This program is distributed in the hope that it will be useful, #
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
|
# GNU General Public License for more details. #
|
|
# #
|
|
# You should have received a copy of the GNU General Public License #
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>. #
|
|
# #
|
|
###############################################################################
|
|
###############################################################################
|
|
#
|
|
# Beautifying variables & presentation & input output interface
|
|
#
|
|
###############################################################################
|
|
|
|
## Screen Dimentions
|
|
# Find current screen size
|
|
if [ -z "${COLUMNS}" ]; then
|
|
COLUMNS=$(stty size)
|
|
COLUMNS=${COLUMNS##* }
|
|
fi
|
|
|
|
# When using remote connections, such as a serial port, stty size returns 0
|
|
if [ "${COLUMNS}" = "0" ]; then
|
|
COLUMNS=80
|
|
fi
|
|
|
|
## Measurements for positioning result messages
|
|
RESULT_WIDTH=4
|
|
TIME_WIDTH=8
|
|
OPT_WIDTH=6
|
|
VER_WIDTH=10
|
|
RESULT_COL=$((${COLUMNS} - $RESULT_WIDTH - 4))
|
|
TIME_COL=$((${RESULT_COL} - $TIME_WIDTH - 5))
|
|
OPT_COL=$((${TIME_COL} - $OPT_WIDTH - 5))
|
|
VER_COL=$((${OPT_COL} - $VER_WIDTH - 5))
|
|
|
|
## Set Cursur Position Commands, used via echo -e
|
|
SET_RESULT_COL="\\033[${RESULT_COL}G"
|
|
SET_TIME_COL="\\033[${TIME_COL}G"
|
|
SET_OPT_COL="\\033[${OPT_COL}G"
|
|
SET_VER_COL="\\033[${VER_COL}G"
|
|
|
|
# Define color for messages
|
|
BOLD="\\033[1;39m"
|
|
DONE="\\033[1;32m"
|
|
SKIP="\\033[1;34m"
|
|
WARN="\\033[1;35m"
|
|
FAIL="\\033[1;31m"
|
|
NORMAL="\\033[0;39m"
|
|
|
|
configure_target() {
|
|
local target_arch="${1}"
|
|
|
|
if [ "${target_arch}" = "default" ]; then
|
|
target_arch="$(configure_target_guess)"
|
|
fi
|
|
|
|
case "${target_arch}" in
|
|
x86_64)
|
|
BUILDTARGET="${target_arch}-unknown-linux-gnu"
|
|
CROSSTARGET="${BUILD_ARCH}-cross-linux-gnu"
|
|
CFLAGS_ARCH="-m64 -mtune=generic"
|
|
;;
|
|
|
|
i586)
|
|
BUILDTARGET="${target_arch}-pc-linux-gnu"
|
|
CROSSTARGET="${BUILD_ARCH}-cross-linux-gnu"
|
|
CFLAGS_ARCH="-march=i586 -mtune=generic -fomit-frame-pointer"
|
|
;;
|
|
|
|
armv5tel)
|
|
BUILDTARGET="${target_arch}-unknown-linux-gnueabi"
|
|
CROSSTARGET="${BUILD_ARCH}-cross-linux-gnueabi"
|
|
CFLAGS_ARCH="-march=armv5te -mfloat-abi=soft -fomit-frame-pointer"
|
|
MACHINE_TYPE="arm"
|
|
;;
|
|
|
|
*)
|
|
exiterror "Cannot build for architure ${target_arch}"
|
|
;;
|
|
esac
|
|
|
|
# Check if the QEMU helper is available if needed.
|
|
if qemu_is_required "${target_arch}"; then
|
|
local qemu_target_helper="$(qemu_find_target_helper_name "${target_arch}")"
|
|
|
|
if [ -n "${qemu_target_helper}" ]; then
|
|
QEMU_TARGET_HELPER="${qemu_target_helper}"
|
|
else
|
|
exiterror "Could not find a binfmt_misc helper entry for ${target_arch}"
|
|
fi
|
|
fi
|
|
|
|
TARGET_ARCH="${target_arch}"
|
|
|
|
# Old variable names
|
|
MACHINE="${TARGET_ARCH}"
|
|
|
|
CFLAGS="-O2 -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fPIC"
|
|
CFLAGS="${CFLAGS} -fstack-protector-all --param=ssp-buffer-size=4 ${CFLAGS_ARCH}"
|
|
CXXFLAGS="${CFLAGS}"
|
|
}
|
|
|
|
configure_target_guess() {
|
|
case "${BUILD_ARCH}" in
|
|
x86_64|i686|i586)
|
|
echo "i586"
|
|
;;
|
|
armv7*|armv6*|armv5*)
|
|
echo "armv5tel"
|
|
;;
|
|
*)
|
|
exiterror "Cannot guess target architecture"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
evaluate() {
|
|
if [ "$?" -eq "0" ]; then
|
|
beautify message DONE
|
|
else
|
|
EXITCODE=$1
|
|
shift 1
|
|
beautify message FAIL
|
|
$*
|
|
if [ $EXITCODE -ne "0" ]; then
|
|
exit $EXITCODE
|
|
fi
|
|
fi
|
|
}
|
|
|
|
position_cursor()
|
|
{
|
|
# ARG1=starting position on screen
|
|
# ARG2=string to be printed
|
|
# ARG3=offset, negative for left movement, positive for right movement, relative to ARG1
|
|
# For example if your starting position is column 50 and you want to print Hello three columns to the right
|
|
# of your starting position, your call will look like this:
|
|
# position_cursor 50 "Hello" 3 (you'll get the string Hello at position 53 (= 50 + 3)
|
|
# If on the other hand you want your string "Hello" to end three columns to the left of position 50,
|
|
# your call will look like this:
|
|
# position_cursor 50 "Hello" -3 (you'll get the string Hello at position 42 (= 50 - 5 -3)
|
|
# If you want to start printing at the exact starting location, use offset 0
|
|
|
|
START=$1
|
|
STRING=$2
|
|
OFFSET=$3
|
|
|
|
STRING_LENGTH=${#STRING}
|
|
|
|
if [ ${OFFSET} -lt 0 ]; then
|
|
COL=$((${START} + ${OFFSET} - ${STRING_LENGTH}))
|
|
else
|
|
COL=$((${START} + ${OFFSET}))
|
|
fi
|
|
|
|
SET_COL="\\033[${COL}G"
|
|
|
|
echo $SET_COL
|
|
} # End of position_cursor()
|
|
|
|
|
|
beautify()
|
|
{
|
|
# Commands: build_stage, make_pkg, message, result
|
|
case "$1" in
|
|
message)
|
|
case "$2" in
|
|
DONE)
|
|
echo -ne "${SET_RESULT_COL}[${DONE} DONE ${NORMAL}]\n"
|
|
;;
|
|
WARN)
|
|
echo -ne "${WARN}${3}${NORMAL}${SET_RESULT_COL}[${WARN} WARN ${NORMAL}]\n"
|
|
;;
|
|
FAIL)
|
|
echo -ne "${SET_RESULT_COL}[${FAIL} FAIL ${NORMAL}]\n"
|
|
;;
|
|
SKIP)
|
|
echo -ne "${SET_RESULT_COL}[${SKIP} SKIP ${NORMAL}]\n"
|
|
;;
|
|
esac
|
|
;;
|
|
build_stage)
|
|
MESSAGE=$2
|
|
if [ "$STAGE_TIME_START" ]; then
|
|
LAST_STAGE_TIME=$[ `date +%s` - $STAGE_TIME_START ]
|
|
fi
|
|
STAGE_TIME_START=`date +%s`
|
|
echo -ne "${BOLD}*** ${MESSAGE}${NORMAL}"
|
|
if [ "$LAST_STAGE_TIME" ]; then
|
|
echo -ne "${DONE} (Last stage took $LAST_STAGE_TIME secs)${NORMAL}"
|
|
fi
|
|
echo -ne "${BOLD}${SET_VER_COL} version${SET_OPT_COL} options${SET_TIME_COL} time (sec)${SET_RESULT_COL} status${NORMAL}\n"
|
|
;;
|
|
build_start)
|
|
BUILD_TIME_START=`date +%s`
|
|
;;
|
|
build_end)
|
|
BUILD_TIME_END=`date +%s`
|
|
seconds=$[ $BUILD_TIME_END - $BUILD_TIME_START ]
|
|
hours=$((seconds / 3600))
|
|
seconds=$((seconds % 3600))
|
|
minutes=$((seconds / 60))
|
|
seconds=$((seconds % 60))
|
|
|
|
echo -ne "${DONE}***Build is finished now and took $hours hour(s) $minutes minute(s) $seconds second(s)!${NORMAL}\n"
|
|
;;
|
|
make_pkg)
|
|
echo "$2" | while read PKG_VER PROGRAM OPTIONS
|
|
do
|
|
SET_VER_COL_REAL=`position_cursor $OPT_COL $PKG_VER -3`
|
|
|
|
if [ "$OPTIONS" == "" ]; then
|
|
echo -ne "${PROGRAM}${SET_VER_COL}[ ${BOLD}${SET_VER_COL_REAL}${PKG_VER}"
|
|
echo -ne "${NORMAL} ]${SET_RESULT_COL}"
|
|
else
|
|
echo -ne "${PROGRAM}${SET_VER_COL}[ ${BOLD}${SET_VER_COL_REAL}${PKG_VER}"
|
|
echo -ne "${NORMAL} ]${SET_OPT_COL}[ ${BOLD}${OPTIONS}"
|
|
echo -ne "${NORMAL} ]${SET_RESULT_COL}"
|
|
fi
|
|
done
|
|
;;
|
|
result)
|
|
RESULT=$2
|
|
|
|
if [ ! $3 ]; then
|
|
PKG_TIME=0
|
|
else
|
|
PKG_TIME=$3
|
|
fi
|
|
|
|
SET_TIME_COL_REAL=`position_cursor $RESULT_COL $PKG_TIME -3`
|
|
case "$RESULT" in
|
|
DONE)
|
|
echo -ne "${SET_TIME_COL}[ ${BOLD}${SET_TIME_COL_REAL}$PKG_TIME${NORMAL} ]"
|
|
echo -ne "${SET_RESULT_COL}[${DONE} DONE ${NORMAL}]\n"
|
|
;;
|
|
FAIL)
|
|
echo -ne "${SET_TIME_COL}[ ${BOLD}${SET_TIME_COL_REAL}$PKG_TIME${NORMAL} ]"
|
|
echo -ne "${SET_RESULT_COL}[${FAIL} FAIL ${NORMAL}]\n"
|
|
;;
|
|
SKIP)
|
|
echo -ne "${SET_RESULT_COL}[${SKIP} SKIP ${NORMAL}]\n"
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|
|
} # End of beautify()
|
|
|
|
|
|
get_pkg_ver()
|
|
{
|
|
PKG_VER=`grep -E "^VER |^VER=|^VER " $1 | awk '{print $3}'`
|
|
|
|
if [ -z $PKG_VER ]; then
|
|
PKG_VER=`grep "Exp " $1 | awk '{print $4}'`
|
|
fi
|
|
if [ -z $PKG_VER ]; then
|
|
PKG_VER="?"
|
|
fi
|
|
if [ ${#PKG_VER} -gt $VER_WIDTH ]; then
|
|
# If a package version number is greater than $VER_WIDTH, we keep the first 4 characters
|
|
# and replace enough characters to fit the resulting string on the screen. We'll replace
|
|
# the extra character with .. (two dots). That's why the "+ 2" in the formula below.
|
|
# Example: if we have a 21-long version number that we want to fit into a 10-long space,
|
|
# we have to remove 11 characters. But if we replace 11 characters with 2 characters, we'll
|
|
# end up with a 12-character long string. That's why we replace 12 characters with ..
|
|
REMOVE=`expr substr "$PKG_VER" 4 $[ ${#PKG_VER} - $VER_WIDTH + 2 ]`
|
|
PKG_VER=`echo ${PKG_VER/$REMOVE/..}`
|
|
fi
|
|
|
|
echo "$PKG_VER"
|
|
} # End of get_pkg_ver()
|
|
|
|
# Define immediately
|
|
stdumount() {
|
|
umount $BASEDIR/build/sys 2>/dev/null;
|
|
umount $BASEDIR/build/dev/shm 2>/dev/null;
|
|
umount $BASEDIR/build/dev/pts 2>/dev/null;
|
|
umount $BASEDIR/build/dev 2>/dev/null;
|
|
umount $BASEDIR/build/proc 2>/dev/null;
|
|
umount $BASEDIR/build/install/mnt 2>/dev/null;
|
|
umount $BASEDIR/build/usr/src/cache 2>/dev/null;
|
|
umount $BASEDIR/build/usr/src/ccache 2>/dev/null;
|
|
umount $BASEDIR/build/usr/src/config 2>/dev/null;
|
|
umount $BASEDIR/build/usr/src/doc 2>/dev/null;
|
|
umount $BASEDIR/build/usr/src/html 2>/dev/null;
|
|
umount $BASEDIR/build/usr/src/langs 2>/dev/null;
|
|
umount $BASEDIR/build/usr/src/lfs 2>/dev/null;
|
|
umount $BASEDIR/build/usr/src/log 2>/dev/null;
|
|
umount $BASEDIR/build/usr/src/src 2>/dev/null;
|
|
}
|
|
|
|
exiterror() {
|
|
stdumount
|
|
for i in `seq 0 7`; do
|
|
if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
|
|
losetup -d /dev/loop${i} 2>/dev/null
|
|
fi;
|
|
done
|
|
echo -e "\nERROR: $*"
|
|
echo " Check $LOGFILE for errors if applicable"
|
|
exit 1
|
|
}
|
|
|
|
fake_environ() {
|
|
[ -e "${BASEDIR}/build/tools/lib/libpakfire_preload.so" ] || return
|
|
|
|
local env="LD_PRELOAD=/tools/lib/libpakfire_preload.so"
|
|
|
|
# Fake kernel version, because some of the packages do not compile
|
|
# with kernel 3.0 and later.
|
|
env="${env} UTS_RELEASE=${KVER}"
|
|
|
|
# Fake machine version.
|
|
env="${env} UTS_MACHINE=${TARGET_ARCH}"
|
|
|
|
echo "${env}"
|
|
}
|
|
|
|
qemu_environ() {
|
|
local env
|
|
|
|
# Don't add anything if qemu is not used.
|
|
if ! qemu_is_required; then
|
|
return
|
|
fi
|
|
|
|
# Set default qemu options
|
|
case "${TARGET_ARCH}" in
|
|
arm*)
|
|
QEMU_CPU="${QEMU_CPU:-cortex-a9}"
|
|
|
|
env="${env} QEMU_CPU=${QEMU_CPU}"
|
|
;;
|
|
esac
|
|
|
|
# Enable QEMU strace
|
|
#env="${env} QEMU_STRACE=1"
|
|
|
|
echo "${env}"
|
|
}
|
|
|
|
qemu_is_required() {
|
|
local target_arch="${1}"
|
|
|
|
if [ -z "${target_arch}" ]; then
|
|
target_arch="${TARGET_ARCH}"
|
|
fi
|
|
|
|
case "${BUILD_ARCH},${target_arch}" in
|
|
x86_64,arm*|i?86,arm*)
|
|
return 0
|
|
;;
|
|
*)
|
|
return 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
qemu_install_helper() {
|
|
# Do nothing, if qemu is not required
|
|
if ! qemu_is_required; then
|
|
return 0
|
|
fi
|
|
|
|
if [ -z "${QEMU_TARGET_HELPER}" ]; then
|
|
exiterror "QEMU_TARGET_HELPER not set"
|
|
fi
|
|
|
|
# Check if the helper is already installed.
|
|
if [ -x "${LFS}${QEMU_TARGET_HELPER}" ]; then
|
|
return 0
|
|
fi
|
|
|
|
# Try to find a suitable binary that we can install
|
|
# to the build environment.
|
|
local file
|
|
for file in "${QEMU_TARGET_HELPER}" "${QEMU_TARGET_HELPER}-static"; do
|
|
# file must exist and be executable.
|
|
[ -x "${file}" ] || continue
|
|
|
|
# Must be static.
|
|
file_is_static "${file}" || continue
|
|
|
|
local dirname="${LFS}$(dirname "${file}")"
|
|
mkdir -p "${dirname}"
|
|
|
|
install -m 755 "${file}" "${LFS}${QEMU_TARGET_HELPER}"
|
|
return 0
|
|
done
|
|
|
|
exiterror "Could not find a statically-linked QEMU emulator: ${QEMU_TARGET_HELPER}"
|
|
}
|
|
|
|
qemu_find_target_helper_name() {
|
|
local target_arch="${1}"
|
|
|
|
local magic
|
|
case "${target_arch}" in
|
|
arm*)
|
|
magic="7f454c4601010100000000000000000002002800"
|
|
;;
|
|
esac
|
|
|
|
[ -z "${magic}" ] && return 1
|
|
|
|
local file
|
|
for file in /proc/sys/fs/binfmt_misc/*; do
|
|
# Search for the file with the correct magic value.
|
|
grep -qE "^magic ${magic}$" "${file}" || continue
|
|
|
|
local interpreter="$(grep "^interpreter" "${file}" | awk '{ print $2 }')"
|
|
|
|
[ -n "${interpreter}" ] || continue
|
|
[ "${interpreter:0:1}" = "/" ] || continue
|
|
[ -x "${interpreter}" ] || continue
|
|
|
|
echo "${interpreter}"
|
|
return 0
|
|
done
|
|
|
|
return 1
|
|
}
|
|
|
|
file_is_static() {
|
|
local file="${1}"
|
|
|
|
file ${file} 2>/dev/null | grep -q "statically linked"
|
|
}
|
|
|
|
entershell() {
|
|
if [ ! -e $BASEDIR/build/usr/src/lfs/ ]; then
|
|
exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/"
|
|
fi
|
|
|
|
# Install QEMU helper, if needed
|
|
qemu_install_helper
|
|
|
|
echo "Entering to a shell inside LFS chroot, go out with exit"
|
|
chroot $LFS /tools/bin/env -i HOME=/root TERM=$TERM PS1='ipfire build chroot ($(uname -m)) \u:\w\$ ' \
|
|
PATH=/tools/ccache/bin:/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
|
|
VERSION=$VERSION CONFIG_ROOT=$CONFIG_ROOT \
|
|
NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
|
|
CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}" \
|
|
CCACHE_DIR=/usr/src/ccache \
|
|
CCACHE_COMPRESS="${CCACHE_COMPRESS}" \
|
|
CCACHE_COMPILERCHECK="${CCACHE_COMPILERCHECK}" \
|
|
KVER=$KVER \
|
|
BUILDTARGET="$BUILDTARGET" \
|
|
CROSSTARGET="${CROSSTARGET}" \
|
|
MACHINE="$MACHINE" \
|
|
MACHINE_TYPE="$MACHINE_TYPE" \
|
|
$(fake_environ) \
|
|
$(qemu_environ) \
|
|
/tools/bin/bash -i
|
|
if [ $? -ne 0 ]; then
|
|
beautify message FAIL
|
|
exiterror "chroot error"
|
|
else
|
|
stdumount
|
|
fi
|
|
}
|
|
|
|
############################################################################
|
|
# #
|
|
# Necessary shell functions #
|
|
# #
|
|
############################################################################
|
|
#
|
|
# Common checking before entering the chroot and compilling
|
|
#
|
|
# Return:0 caller can continue
|
|
# :1 skip (nothing to do)
|
|
# or fail if no script file found
|
|
#
|
|
lfsmakecommoncheck()
|
|
{
|
|
# Script present?
|
|
if [ ! -f $BASEDIR/lfs/$1 ]; then
|
|
exiterror "No such file or directory: $BASEDIR/$1"
|
|
fi
|
|
|
|
local PKG_VER=`get_pkg_ver $BASEDIR/lfs/$1`
|
|
beautify make_pkg "$PKG_VER $*"
|
|
|
|
# Check if this package is supported by our architecture.
|
|
# If no SUP_ARCH is found, we assume the package can be built for all.
|
|
if grep "^SUP_ARCH" ${BASEDIR}/lfs/${1} >/dev/null; then
|
|
# Check if package supports ${MACHINE} or all architectures.
|
|
if ! grep -E "^SUP_ARCH.*${MACHINE}|^SUP_ARCH.*all" ${BASEDIR}/lfs/${1} >/dev/null; then
|
|
beautify result SKIP
|
|
return 1
|
|
fi
|
|
fi
|
|
|
|
# Script slipped?
|
|
local i
|
|
for i in $SKIP_PACKAGE_LIST
|
|
do
|
|
if [ "$i" == "$1" ]; then
|
|
beautify result SKIP
|
|
return 1;
|
|
fi
|
|
done
|
|
|
|
echo -ne "`date -u '+%b %e %T'`: Building $* " >> $LOGFILE
|
|
|
|
cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
|
|
MACHINE_TYPE="$MACHINE_TYPE" \
|
|
MESSAGE="$1\t " download >> $LOGFILE 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
exiterror "Download error in $1"
|
|
fi
|
|
|
|
cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
|
|
MACHINE_TYPE="$MACHINE_TYPE" \
|
|
MESSAGE="$1\t md5sum" md5 >> $LOGFILE 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
exiterror "md5sum error in $1, check file in cache or signature"
|
|
fi
|
|
|
|
return 0 # pass all!
|
|
} # End of lfsmakecommoncheck()
|
|
|
|
lfsmake1() {
|
|
lfsmakecommoncheck $*
|
|
[ $? == 1 ] && return 0
|
|
|
|
local PKG_TIME_START=`date +%s`
|
|
|
|
cd $BASEDIR/lfs && make -f $* BUILDTARGET=$BUILDTARGET \
|
|
CROSSTARGET="${CROSSTARGET}" \
|
|
MACHINE=$MACHINE \
|
|
MACHINE_TYPE=$MACHINE_TYPE \
|
|
LFS_BASEDIR=$BASEDIR \
|
|
ROOT=$LFS \
|
|
KVER=$KVER \
|
|
MAKETUNING=$MAKETUNING \
|
|
install >> $LOGFILE 2>&1
|
|
local COMPILE_SUCCESS=$?
|
|
local PKG_TIME_END=`date +%s`
|
|
|
|
if [ $COMPILE_SUCCESS -ne 0 ]; then
|
|
beautify result FAIL $[ $PKG_TIME_END - $PKG_TIME_START ]
|
|
exiterror "Building $*";
|
|
else
|
|
beautify result DONE $[ $PKG_TIME_END - $PKG_TIME_START ]
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
lfsmake2() {
|
|
lfsmakecommoncheck $*
|
|
[ $? == 1 ] && return 0
|
|
|
|
# Install QEMU helper, if needed
|
|
qemu_install_helper
|
|
|
|
local PKG_TIME_START=`date +%s`
|
|
chroot $LFS /tools/bin/env -i HOME=/root \
|
|
TERM=$TERM PS1='\u:\w\$ ' \
|
|
PATH=/tools/ccache/bin:/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
|
|
VERSION=$VERSION PAKFIRE_CORE="${PAKFIRE_CORE}" \
|
|
SYSTEM_RELEASE="${SYSTEM_RELEASE}" \
|
|
CONFIG_ROOT=$CONFIG_ROOT \
|
|
NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
|
|
CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}" \
|
|
CCACHE_DIR=/usr/src/ccache \
|
|
CCACHE_COMPRESS="${CCACHE_COMPRESS}" \
|
|
CCACHE_COMPILERCHECK="${CCACHE_COMPILERCACHE}" \
|
|
KVER=$KVER MAKETUNING=$MAKETUNING \
|
|
BUILDTARGET="$BUILDTARGET" \
|
|
CROSSTARGET="${CROSSTARGET}" \
|
|
MACHINE="$MACHINE" \
|
|
MACHINE_TYPE="$MACHINE_TYPE" \
|
|
$(qemu_environ) \
|
|
$(fake_environ) \
|
|
/tools/bin/bash -x -c "cd /usr/src/lfs && \
|
|
make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
|
|
local COMPILE_SUCCESS=$?
|
|
local PKG_TIME_END=`date +%s`
|
|
|
|
if [ $COMPILE_SUCCESS -ne 0 ]; then
|
|
beautify result FAIL $[ $PKG_TIME_END - $PKG_TIME_START ]
|
|
exiterror "Building $*";
|
|
else
|
|
beautify result DONE $[ $PKG_TIME_END - $PKG_TIME_START ]
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
ipfiremake() {
|
|
lfsmakecommoncheck $*
|
|
[ $? == 1 ] && return 0
|
|
|
|
# Install QEMU helper, if needed
|
|
qemu_install_helper
|
|
|
|
local PKG_TIME_START=`date +%s`
|
|
chroot $LFS /tools/bin/env -i HOME=/root \
|
|
TERM=$TERM PS1='\u:\w\$ ' \
|
|
PATH=/tools/ccache/bin:/bin:/usr/bin:/sbin:/usr/sbin \
|
|
VERSION=$VERSION \
|
|
CORE=$CORE \
|
|
CONFIG_ROOT=$CONFIG_ROOT \
|
|
NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
|
|
SYSTEM_RELEASE="$SYSTEM_RELEASE" \
|
|
CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}" \
|
|
CCACHE_DIR=/usr/src/ccache \
|
|
CCACHE_COMPRESS="${CCACHE_COMPRESS}" \
|
|
CCACHE_COMPILERCHECK="${CCACHE_COMPILERCACHE}" \
|
|
KVER=$KVER MAKETUNING=$MAKETUNING \
|
|
BUILDTARGET="$BUILDTARGET" \
|
|
CROSSTARGET="${CROSSTARGET}" \
|
|
MACHINE="$MACHINE" \
|
|
MACHINE_TYPE="$MACHINE_TYPE" \
|
|
$(qemu_environ) \
|
|
$(fake_environ) \
|
|
/bin/bash -x -c "cd /usr/src/lfs && \
|
|
make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
|
|
|
|
local COMPILE_SUCCESS=$?
|
|
local PKG_TIME_END=`date +%s`
|
|
|
|
if [ $COMPILE_SUCCESS -ne 0 ]; then
|
|
beautify result FAIL $[ $PKG_TIME_END - $PKG_TIME_START ]
|
|
exiterror "Building $*";
|
|
else
|
|
beautify result DONE $[ $PKG_TIME_END - $PKG_TIME_START ]
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
ipfiredist() {
|
|
lfsmakecommoncheck $*
|
|
[ $? == 1 ] && return 0
|
|
|
|
# Install QEMU helper, if needed
|
|
qemu_install_helper
|
|
|
|
local PKG_TIME_START=`date +%s`
|
|
chroot $LFS /tools/bin/env -i HOME=/root \
|
|
TERM=$TERM PS1='\u:\w\$ ' \
|
|
PATH=/tools/ccache/bin:/bin:/usr/bin:/sbin:/usr/sbin \
|
|
VERSION=$VERSION \
|
|
CONFIG_ROOT=$CONFIG_ROOT \
|
|
NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
|
|
CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}" \
|
|
CCACHE_DIR=/usr/src/ccache \
|
|
CCACHE_COMPRESS="${CCACHE_COMPRESS}" \
|
|
CCACHE_COMPILERCHECK="${CCACHE_COMPILERCACHE}" \
|
|
KVER=$KVER \
|
|
BUILDTARGET="$BUILDTARGET" \
|
|
CROSSTARGET="${CROSSTARGET}" \
|
|
MACHINE="$MACHINE" \
|
|
MACHINE_TYPE="$MACHINE_TYPE" \
|
|
$(qemu_environ) \
|
|
$(fake_environ) \
|
|
/bin/bash -x -c "cd /usr/src/lfs && \
|
|
make -f $1 LFS_BASEDIR=/usr/src dist" >>$LOGFILE 2>&1
|
|
|
|
local COMPILE_SUCCESS=$?
|
|
local PKG_TIME_END=`date +%s`
|
|
|
|
if [ $COMPILE_SUCCESS -ne 0 ]; then
|
|
beautify result FAIL $[ $PKG_TIME_END - $PKG_TIME_START ]
|
|
exiterror "Packaging $*";
|
|
else
|
|
beautify result DONE $[ $PKG_TIME_END - $PKG_TIME_START ]
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
installmake() {
|
|
lfsmakecommoncheck $*
|
|
[ $? == 1 ] && return 0
|
|
|
|
# Install QEMU helper, if needed
|
|
qemu_install_helper
|
|
|
|
local PKG_TIME_START=`date +%s`
|
|
chroot $LFS /tools/bin/env -i HOME=/root \
|
|
TERM=$TERM PS1='\u:\w\$ ' \
|
|
PATH=/tools/ccache/bin:/bin:/usr/bin:/sbin:/usr/sbin \
|
|
VERSION=$VERSION \
|
|
SYSTEM_RELEASE="${SYSTEM_RELEASE}" \
|
|
CONFIG_ROOT=$CONFIG_ROOT \
|
|
NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
|
|
CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}" \
|
|
CCACHE_DIR=/usr/src/ccache CCACHE_COMPRESS=1 CCACHE_HASHDIR=1 \
|
|
KVER=$KVER \
|
|
BUILDTARGET="$BUILDTARGET" \
|
|
CROSSTARGET="${CROSSTARGET}" \
|
|
MACHINE="$MACHINE" \
|
|
MACHINE_TYPE="$MACHINE_TYPE" \
|
|
LD_LIBRARY_PATH=/tools/lib \
|
|
/tools/bin/bash -x -c "cd /usr/src/lfs && \
|
|
/tools/bin/make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
|
|
|
|
local COMPILE_SUCCESS=$?
|
|
local PKG_TIME_END=`date +%s`
|
|
|
|
if [ $COMPILE_SUCCESS -ne 0 ]; then
|
|
beautify result FAIL $[ $PKG_TIME_END - $PKG_TIME_START ]
|
|
exiterror "Building $*";
|
|
else
|
|
beautify result DONE $[ $PKG_TIME_END - $PKG_TIME_START ]
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
update_langs() {
|
|
echo -ne "Checking the translations for missing or obsolete strings..."
|
|
chmod 755 $BASEDIR/tools/{check_strings.pl,sort_strings.pl,check_langs.sh}
|
|
$BASEDIR/tools/sort_strings.pl en
|
|
$BASEDIR/tools/sort_strings.pl de
|
|
$BASEDIR/tools/sort_strings.pl fr
|
|
$BASEDIR/tools/sort_strings.pl es
|
|
$BASEDIR/tools/sort_strings.pl pl
|
|
$BASEDIR/tools/sort_strings.pl ru
|
|
$BASEDIR/tools/sort_strings.pl nl
|
|
$BASEDIR/tools/sort_strings.pl tr
|
|
$BASEDIR/tools/sort_strings.pl it
|
|
$BASEDIR/tools/check_strings.pl en > $BASEDIR/doc/language_issues.en
|
|
$BASEDIR/tools/check_strings.pl de > $BASEDIR/doc/language_issues.de
|
|
$BASEDIR/tools/check_strings.pl fr > $BASEDIR/doc/language_issues.fr
|
|
$BASEDIR/tools/check_strings.pl es > $BASEDIR/doc/language_issues.es
|
|
$BASEDIR/tools/check_strings.pl es > $BASEDIR/doc/language_issues.pl
|
|
$BASEDIR/tools/check_strings.pl ru > $BASEDIR/doc/language_issues.ru
|
|
$BASEDIR/tools/check_strings.pl nl > $BASEDIR/doc/language_issues.nl
|
|
$BASEDIR/tools/check_strings.pl tr > $BASEDIR/doc/language_issues.tr
|
|
$BASEDIR/tools/check_strings.pl it > $BASEDIR/doc/language_issues.it
|
|
$BASEDIR/tools/check_langs.sh > $BASEDIR/doc/language_missings
|
|
beautify message DONE
|
|
|
|
echo -ne "Updating language lists..."
|
|
update_language_list ${BASEDIR}/src/installer/po
|
|
update_language_list ${BASEDIR}/src/setup/po
|
|
beautify message DONE
|
|
}
|
|
|
|
update_language_list() {
|
|
local path="${1}"
|
|
|
|
local lang
|
|
for lang in ${path}/*.po; do
|
|
lang="$(basename "${lang}")"
|
|
echo "${lang%*.po}"
|
|
done | sort -u > "${path}/LINGUAS"
|
|
}
|