make.sh: Refactor build status code
[ipfire-2.x.git] / make.sh
CommitLineData
df5e82b3 1#!/bin/bash
df5e82b3
MT
2############################################################################
3# #
f8e5510c 4# This file is part of the IPFire Firewall. #
df5e82b3 5# #
f8e5510c 6# IPFire is free software; you can redistribute it and/or modify #
df5e82b3
MT
7# it under the terms of the GNU General Public License as published by #
8# the Free Software Foundation; either version 2 of the License, or #
9# (at your option) any later version. #
10# #
f8e5510c 11# IPFire is distributed in the hope that it will be useful, #
df5e82b3
MT
12# but WITHOUT ANY WARRANTY; without even the implied warranty of #
13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
14# GNU General Public License for more details. #
15# #
16# You should have received a copy of the GNU General Public License #
f8e5510c 17# along with IPFire; if not, write to the Free Software #
df5e82b3
MT
18# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #
19# #
f7a48dd3 20# Copyright (C) 2007-2017 IPFire Team <info@ipfire.org>. #
df5e82b3
MT
21# #
22############################################################################
df5e82b3
MT
23#
24
e8ee3199
AF
25NAME="IPFire" # Software name
26SNAME="ipfire" # Short name
33513817 27VERSION="2.19" # Version number
bb3272da 28CORE="117" # Core Level (Filename)
4f248f7a 29PAKFIRE_CORE="116" # Core Level (PAKFIRE)
595e89a8 30GIT_BRANCH=`git rev-parse --abbrev-ref HEAD` # Git Branch
e8ee3199
AF
31SLOGAN="www.ipfire.org" # Software slogan
32CONFIG_ROOT=/var/ipfire # Configuration rootdir
33NICE=10 # Nice level
34MAX_RETRIES=1 # prefetch/check loop
305a7b38 35BUILD_IMAGES=1 # Flash and Xen Downloader
15679d9f 36KVER=`grep --max-count=1 VER lfs/linux | awk '{ print $3 }'`
e8ee3199
AF
37GIT_TAG=$(git tag | tail -1) # Git Tag
38GIT_LASTCOMMIT=$(git log | head -n1 | cut -d" " -f2 |head -c8) # Last commit
628e8c3a 39
6c4cc7ea 40TOOLCHAINVER=20171121
03ad5f93 41
69a6ec55
MT
42###############################################################################
43#
44# Beautifying variables & presentation & input output interface
45#
46###############################################################################
47
f9783277
MT
48# Remember if the shell is interactive or not
49if [ -t 0 ] && [ -t 1 ]; then
50 INTERACTIVE=true
51else
52 INTERACTIVE=false
53fi
54
69a6ec55
MT
55## Screen Dimentions
56# Find current screen size
57if [ -z "${COLUMNS}" ]; then
58 COLUMNS=$(stty size)
59 COLUMNS=${COLUMNS##* }
60fi
61
62# When using remote connections, such as a serial port, stty size returns 0
f9783277 63if ! ${INTERACTIVE} || [ "${COLUMNS}" = "0" ]; then
69a6ec55
MT
64 COLUMNS=80
65fi
66
67## Measurements for positioning result messages
f9783277
MT
68OPTIONS_WIDTH=20
69TIME_WIDTH=12
70STATUS_WIDTH=8
71NAME_WIDTH=$(( COLUMNS - OPTIONS_WIDTH - TIME_WIDTH - STATUS_WIDTH ))
72LINE_WIDTH=$(( COLUMNS - STATUS_WIDTH ))
73
74TIME_COL=$(( COLUMNS - TIME_WIDTH - STATUS_WIDTH ))
75STATUS_COL=$(( COLUMNS - STATUS_WIDTH ))
69a6ec55
MT
76
77# Define color for messages
78BOLD="\\033[1;39m"
79DONE="\\033[1;32m"
80SKIP="\\033[1;34m"
81WARN="\\033[1;35m"
82FAIL="\\033[1;31m"
83NORMAL="\\033[0;39m"
84
bcb9dc13 85# New architecture variables
dc7d6b20 86HOST_ARCH="$(uname -m)"
94571564 87
69a6ec55
MT
88PWD=$(pwd)
89BASENAME=$(basename $0)
90
15679d9f
MT
91# Debian specific settings
92if [ ! -e /etc/debian_version ]; then
df5e82b3 93 FULLPATH=`which $0`
15679d9f 94else
df5e82b3
MT
95 if [ -x /usr/bin/realpath ]; then
96 FULLPATH=`/usr/bin/realpath $0`
97 else
98 echo "ERROR: Need to do apt-get install realpath"
99 exit 1
100 fi
15679d9f 101fi
df5e82b3 102
69a6ec55 103# This is the directory where make.sh is in
aecbe123 104export BASEDIR=$(echo $FULLPATH | sed "s/\/$BASENAME//g")
69a6ec55 105
15679d9f 106LOGFILE=$BASEDIR/log/_build.preparation.log
aecbe123 107export LOGFILE
15679d9f
MT
108DIR_CHK=$BASEDIR/cache/check
109mkdir $BASEDIR/log/ 2>/dev/null
df5e82b3 110
69a6ec55
MT
111system_processors() {
112 getconf _NPROCESSORS_ONLN 2>/dev/null || echo "1"
113}
114
115system_memory() {
116 local key val unit
117
118 while read -r key val unit; do
119 case "${key}" in
120 MemTotal:*)
121 # Convert to MB
122 echo "$(( ${val} / 1024 ))"
123 break
124 ;;
125 esac
126 done < /proc/meminfo
127}
128
129configure_build() {
130 local build_arch="${1}"
131
132 if [ "${build_arch}" = "default" ]; then
133 build_arch="$(configure_build_guess)"
134 fi
135
136 case "${build_arch}" in
137 x86_64)
138 BUILDTARGET="${build_arch}-unknown-linux-gnu"
139 CROSSTARGET="${build_arch}-cross-linux-gnu"
140 BUILD_PLATFORM="x86"
141 CFLAGS_ARCH="-m64 -mtune=generic"
142 ;;
143
144 i586)
145 BUILDTARGET="${build_arch}-pc-linux-gnu"
146 CROSSTARGET="${build_arch}-cross-linux-gnu"
147 BUILD_PLATFORM="x86"
148 CFLAGS_ARCH="-march=i586 -mtune=generic -fomit-frame-pointer"
149 ;;
150
151 aarch64)
152 BUILDTARGET="${build_arch}-unknown-linux-gnu"
153 CROSSTARGET="${build_arch}-cross-linux-gnu"
154 BUILD_PLATFORM="arm"
155 CFLAGS_ARCH=""
156 ;;
157
158 armv7hl)
159 BUILDTARGET="${build_arch}-unknown-linux-gnueabi"
160 CROSSTARGET="${build_arch}-cross-linux-gnueabi"
161 BUILD_PLATFORM="arm"
162 CFLAGS_ARCH="-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=hard"
163 ;;
164
165 armv5tel)
166 BUILDTARGET="${build_arch}-unknown-linux-gnueabi"
167 CROSSTARGET="${build_arch}-cross-linux-gnueabi"
168 BUILD_PLATFORM="arm"
169 CFLAGS_ARCH="-march=armv5te -mfloat-abi=soft -fomit-frame-pointer"
170 ;;
171
172 *)
173 exiterror "Cannot build for architure ${build_arch}"
174 ;;
175 esac
176
177 # Check if the QEMU helper is available if needed.
178 if qemu_is_required "${build_arch}"; then
179 local qemu_build_helper="$(qemu_find_build_helper_name "${build_arch}")"
180
181 if [ -n "${qemu_build_helper}" ]; then
182 QEMU_TARGET_HELPER="${qemu_build_helper}"
183 else
184 exiterror "Could not find a binfmt_misc helper entry for ${build_arch}"
185 fi
186 fi
187
188 BUILD_ARCH="${build_arch}"
189 TOOLS_DIR="/tools_${BUILD_ARCH}"
190
191 # Enables hardening
192 HARDENING_CFLAGS="-Wp,-D_FORTIFY_SOURCE=2 -fstack-protector-strong --param=ssp-buffer-size=4"
193
194 CFLAGS="-O2 -pipe -Wall -fexceptions -fPIC ${CFLAGS_ARCH}"
195 CXXFLAGS="${CFLAGS}"
196
197 # Determine parallelism
198 if [ -z "${MAKETUNING}" ]; then
199 # We assume that each process consumes about
200 # 192MB of memory. Therefore we find out how
201 # many processes fit into memory.
202 local mem_max=$(( ${HOST_MEM} / 192 ))
203
204 local processors="$(system_processors)"
205 local cpu_max=$(( ${processors} * 2 ))
206
207 local parallelism
208 if [ ${mem_max} -lt ${cpu_max} ]; then
209 parallelism=${mem_max}
210 else
211 parallelism=${cpu_max}
212 fi
213
214 MAKETUNING="-j${parallelism}"
215 fi
216}
217
218configure_build_guess() {
219 case "${HOST_ARCH}" in
220 x86_64|i686|i586)
221 echo "i586"
222 ;;
223
224 aarch64)
225 echo "aarch64"
226 ;;
227
228 armv7*|armv6*|armv5*)
229 echo "armv5tel"
230 ;;
231
232 *)
233 exiterror "Cannot guess build architecture"
234 ;;
235 esac
236}
237
f9783277
MT
238stdumount() {
239 umount $BASEDIR/build/sys 2>/dev/null;
240 umount $BASEDIR/build/dev/shm 2>/dev/null;
241 umount $BASEDIR/build/dev/pts 2>/dev/null;
242 umount $BASEDIR/build/dev 2>/dev/null;
243 umount $BASEDIR/build/proc 2>/dev/null;
244 umount $BASEDIR/build/install/mnt 2>/dev/null;
245 umount $BASEDIR/build/usr/src/cache 2>/dev/null;
246 umount $BASEDIR/build/usr/src/ccache 2>/dev/null;
247 umount $BASEDIR/build/usr/src/config 2>/dev/null;
248 umount $BASEDIR/build/usr/src/doc 2>/dev/null;
249 umount $BASEDIR/build/usr/src/html 2>/dev/null;
250 umount $BASEDIR/build/usr/src/langs 2>/dev/null;
251 umount $BASEDIR/build/usr/src/lfs 2>/dev/null;
252 umount $BASEDIR/build/usr/src/log 2>/dev/null;
253 umount $BASEDIR/build/usr/src/src 2>/dev/null;
254}
255
256now() {
257 date -u "+%s"
69a6ec55
MT
258}
259
f9783277
MT
260format_runtime() {
261 local seconds=${1}
262
263 if [ ${seconds} -ge 3600 ]; then
264 printf "%d:%02d:%02d\n" \
265 "$(( seconds / 3600 ))" \
266 "$(( seconds % 3600 / 60 ))" \
267 "$(( seconds % 3600 % 60 ))"
268 elif [ ${seconds} -ge 60 ]; then
269 printf "%d:%02d\n" \
270 "$(( seconds / 60 ))" \
271 "$(( seconds % 60 ))"
69a6ec55 272 else
f9783277 273 printf "%d\n" "${seconds}"
69a6ec55 274 fi
f9783277 275}
69a6ec55 276
f9783277
MT
277print_line() {
278 local line="$@"
69a6ec55 279
f9783277 280 printf "%-${LINE_WIDTH}s" "${line}"
69a6ec55
MT
281}
282
f9783277
MT
283_print_line() {
284 local status="${1}"
285 shift
69a6ec55 286
f9783277
MT
287 if ${INTERACTIVE}; then
288 printf "${!status}"
289 fi
69a6ec55 290
f9783277
MT
291 print_line "$@"
292
293 if ${INTERACTIVE}; then
294 printf "${NORMAL}"
295 fi
296}
297
298print_headline() {
299 _print_line BOLD "$@"
69a6ec55
MT
300}
301
f9783277
MT
302print_error() {
303 _print_line FAIL "$@"
304}
305
306print_package() {
307 local name="${1}"
308 shift
69a6ec55 309
f9783277
MT
310 local version="$(grep -E "^VER |^VER=|^VER " $BASEDIR/lfs/${name} | awk '{ print $3 }')"
311 local options="$@"
312
313 local string="${name}"
314 if [ -n "${version}" ] && [ "${version}" != "ipfire" ]; then
315 string="${string} (${version})"
316 fi
317
318 printf "%-$(( ${NAME_WIDTH} - 1 ))s " "${string}"
319
320 if [ -n "${options}" ]; then
321 printf "[ %-$(( ${OPTIONS_WIDTH} - 4 ))s ]" "${options}"
322 else
323 printf "%${OPTIONS_WIDTH}s" ""
69a6ec55 324 fi
f9783277
MT
325}
326
327print_runtime() {
328 local runtime=$(format_runtime $@)
329
330 if ${INTERACTIVE}; then
331 printf "\\033[${TIME_COL}G[ ${BOLD}%$(( ${TIME_WIDTH} - 4 ))s${NORMAL} ]" "${runtime}"
332 else
333 printf "[ %$(( ${TIME_WIDTH} - 4 ))s ]" "${runtime}"
69a6ec55 334 fi
f9783277
MT
335}
336
337print_status() {
338 local status="${1}"
339
340 local color="${!status}"
341
342 if ${INTERACTIVE}; then
343 printf "\\033[${STATUS_COL}G[${color-${BOLD}} %-$(( ${STATUS_WIDTH} - 4 ))s ${NORMAL}]\n" "${status}"
344 else
345 printf "[ %-$(( ${STATUS_WIDTH} - 4 ))s ]\n" "${status}"
69a6ec55 346 fi
f9783277 347}
69a6ec55 348
f9783277
MT
349print_build_stage() {
350 print_headline "$@"
351
352 # end line
353 printf "\n"
69a6ec55
MT
354}
355
f9783277
MT
356print_build_summary() {
357 local runtime=$(format_runtime $@)
358
359 print_line "*** Build finished in ${runtime}"
360 print_status DONE
69a6ec55
MT
361}
362
363exiterror() {
364 stdumount
365 for i in `seq 0 7`; do
366 if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
367 losetup -d /dev/loop${i} 2>/dev/null
368 fi;
369 done
370
f9783277 371 # Dump logfile
69a6ec55
MT
372 if [ -n "${LOGFILE}" ]; then
373 echo # empty line
374
375 local line
376 while read -r line; do
377 echo " ${line}"
378 done <<< "$(tail -n30 ${LOGFILE})"
379 fi
380
f9783277
MT
381 echo # empty line
382
383 local line
384 for line in "ERROR: $@" " Check ${LOGFILE} for errors if applicable"; do
385 print_error "${line}"
386 print_status FAIL
387 done
388
69a6ec55
MT
389 exit 1
390}
391
aecbe123
MT
392prepareenv() {
393 # Are we running the right shell?
394 if [ ! -z "${BASH}" ]; then
395 exiterror "BASH environment variable is not set. You're probably running the wrong shell."
396 fi
397
398 if [ -z "${BASH_VERSION}" ]; then
399 exiterror "Not running BASH shell."
400 fi
401
402 # Trap on emergency exit
403 trap "exiterror 'Build process interrupted'" SIGINT SIGTERM SIGKILL SIGSTOP SIGQUIT
404
405 # Resetting our nice level
658232a6 406 if ! renice ${NICE} $$ >/dev/null; then
658232a6 407 exiterror "Failed to set nice level to ${NICE}"
aecbe123
MT
408 fi
409
410 # Checking if running as root user
658232a6 411 if [ $(id -u) -ne 0 ]; then
aecbe123 412 exiterror "Not building as root"
aecbe123
MT
413 fi
414
415 # Checking for necessary temporary space
f9783277 416 print_line "Checking for necessary space on disk $BASE_DEV"
aecbe123
MT
417 BASE_DEV=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $1 }'`
418 BASE_ASPACE=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $4 }'`
419 if (( 2048000 > $BASE_ASPACE )); then
420 BASE_USPACE=`du -skx $BASEDIR | awk '{print $1}'`
421 if (( 2048000 - $BASE_USPACE > $BASE_ASPACE )); then
f9783277 422 print_status FAIL
aecbe123
MT
423 exiterror "Not enough temporary space available, need at least 2GB on $BASE_DEV"
424 fi
425 else
f9783277 426 print_status DONE
aecbe123
MT
427 fi
428
429 # Set umask
430 umask 022
431
432 # Set LFS Directory
433 LFS=$BASEDIR/build
434
435 # Check ${TOOLS_DIR} symlink
436 if [ -h "${TOOLS_DIR}" ]; then
437 rm -f "${TOOLS_DIR}"
438 fi
439
440 if [ ! -e "${TOOLS_DIR}" ]; then
441 ln -s "${BASEDIR}/build${TOOLS_DIR}" "${TOOLS_DIR}"
442 fi
443
444 if [ ! -h "${TOOLS_DIR}" ]; then
445 exiterror "Could not create ${TOOLS_DIR} symbolic link"
446 fi
447
448 # Setup environment
449 set +h
450 LC_ALL=POSIX
451 export LFS LC_ALL CFLAGS CXXFLAGS MAKETUNING
452 unset CC CXX CPP LD_LIBRARY_PATH LD_PRELOAD
453
454 # Make some extra directories
455 mkdir -p "${BASEDIR}/build${TOOLS_DIR}" 2>/dev/null
456 mkdir -p $BASEDIR/build/{etc,usr/src} 2>/dev/null
457 mkdir -p $BASEDIR/build/{dev/{shm,pts},proc,sys}
458 mkdir -p $BASEDIR/{cache,ccache} 2>/dev/null
459 mkdir -p $BASEDIR/build/usr/src/{cache,config,doc,html,langs,lfs,log,src,ccache}
460
461 mknod -m 600 $BASEDIR/build/dev/console c 5 1 2>/dev/null
462 mknod -m 666 $BASEDIR/build/dev/null c 1 3 2>/dev/null
463
464 # Make all sources and proc available under lfs build
465 mount --bind /dev $BASEDIR/build/dev
466 mount --bind /dev/pts $BASEDIR/build/dev/pts
467 mount --bind /dev/shm $BASEDIR/build/dev/shm
468 mount --bind /proc $BASEDIR/build/proc
469 mount --bind /sys $BASEDIR/build/sys
470 mount --bind $BASEDIR/cache $BASEDIR/build/usr/src/cache
471 mount --bind $BASEDIR/ccache $BASEDIR/build/usr/src/ccache
472 mount --bind $BASEDIR/config $BASEDIR/build/usr/src/config
473 mount --bind $BASEDIR/doc $BASEDIR/build/usr/src/doc
474 mount --bind $BASEDIR/html $BASEDIR/build/usr/src/html
475 mount --bind $BASEDIR/langs $BASEDIR/build/usr/src/langs
476 mount --bind $BASEDIR/lfs $BASEDIR/build/usr/src/lfs
477 mount --bind $BASEDIR/log $BASEDIR/build/usr/src/log
478 mount --bind $BASEDIR/src $BASEDIR/build/usr/src/src
479
480 # Run LFS static binary creation scripts one by one
481 export CCACHE_DIR=$BASEDIR/ccache
482 export CCACHE_COMPRESS=1
483 export CCACHE_COMPILERCHECK="string:toolchain-${TOOLCHAINVER} ${BUILD_ARCH}"
484
485 # Remove pre-install list of installed files in case user erase some files before rebuild
486 rm -f $BASEDIR/build/usr/src/lsalr 2>/dev/null
487
488 # Prepare string for /etc/system-release.
489 SYSTEM_RELEASE="${NAME} ${VERSION} (${BUILD_ARCH})"
490 if [ "$(git status -s | wc -l)" == "0" ]; then
491 GIT_STATUS=""
492 else
493 GIT_STATUS="-dirty"
494 fi
495 case "$GIT_BRANCH" in
496 core*|beta?|rc?)
497 SYSTEM_RELEASE="${SYSTEM_RELEASE} - $GIT_BRANCH$GIT_STATUS"
498 ;;
499 *)
500 SYSTEM_RELEASE="${SYSTEM_RELEASE} - Development Build: $GIT_BRANCH/$GIT_LASTCOMMIT$GIT_STATUS"
501 ;;
502 esac
503}
504
69a6ec55
MT
505enterchroot() {
506 # Install QEMU helper, if needed
507 qemu_install_helper
508
509 local PATH="${TOOLS_DIR}/ccache/bin:/bin:/usr/bin:/sbin:/usr/sbin:${TOOLS_DIR}/bin"
510
511 PATH="${PATH}" chroot ${LFS} env -i \
512 HOME="/root" \
513 TERM="${TERM}" \
514 PS1="${PS1}" \
515 PATH="${PATH}" \
516 SYSTEM_RELEASE="${SYSTEM_RELEASE}" \
517 PAKFIRE_CORE="${PAKFIRE_CORE}" \
518 NAME="${NAME}" \
519 SNAME="${SNAME}" \
520 VERSION="${VERSION}" \
521 CORE="${CORE}" \
522 SLOGAN="${SLOGAN}" \
523 TOOLS_DIR="${TOOLS_DIR}" \
524 CONFIG_ROOT="${CONFIG_ROOT}" \
525 CFLAGS="${CFLAGS} ${HARDENING_CFLAGS}" \
526 CXXFLAGS="${CXXFLAGS} ${HARDENING_CFLAGS}" \
527 BUILDTARGET="${BUILDTARGET}" \
528 CROSSTARGET="${CROSSTARGET}" \
529 BUILD_ARCH="${BUILD_ARCH}" \
530 BUILD_PLATFORM="${BUILD_PLATFORM}" \
531 CCACHE_DIR=/usr/src/ccache \
532 CCACHE_COMPRESS="${CCACHE_COMPRESS}" \
533 CCACHE_COMPILERCHECK="${CCACHE_COMPILERCHECK}" \
534 KVER="${KVER}" \
535 $(fake_environ) \
536 $(qemu_environ) \
537 "$@"
538}
539
540entershell() {
541 if [ ! -e $BASEDIR/build/usr/src/lfs/ ]; then
542 exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/"
543 fi
544
545 echo "Entering to a shell inside LFS chroot, go out with exit"
546 local PS1="ipfire build chroot ($(uname -m)) \u:\w\$ "
547
548 if enterchroot bash -i; then
549 stdumount
550 else
f9783277 551 print_status FAIL
69a6ec55
MT
552 exiterror "chroot error"
553 fi
554}
555
556lfsmakecommoncheck() {
557 # Script present?
558 if [ ! -f $BASEDIR/lfs/$1 ]; then
559 exiterror "No such file or directory: $BASEDIR/$1"
560 fi
561
f9783277
MT
562 # Print package name and version
563 print_package $@
69a6ec55
MT
564
565 # Check if this package is supported by our architecture.
566 # If no SUP_ARCH is found, we assume the package can be built for all.
567 if grep "^SUP_ARCH" ${BASEDIR}/lfs/${1} >/dev/null; then
568 # Check if package supports ${BUILD_ARCH} or all architectures.
569 if ! grep -E "^SUP_ARCH.*${BUILD_ARCH}|^SUP_ARCH.*all" ${BASEDIR}/lfs/${1} >/dev/null; then
f9783277 570 print_status SKIP
69a6ec55
MT
571 return 1
572 fi
573 fi
574
575 # Script slipped?
576 local i
577 for i in $SKIP_PACKAGE_LIST
578 do
579 if [ "$i" == "$1" ]; then
f9783277 580 print_status SKIP
69a6ec55
MT
581 return 1;
582 fi
583 done
584
585 echo -ne "`date -u '+%b %e %T'`: Building $* " >> $LOGFILE
586
587 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR BUILD_ARCH="${BUILD_ARCH}" \
588 MESSAGE="$1\t " download >> $LOGFILE 2>&1
589 if [ $? -ne 0 ]; then
590 exiterror "Download error in $1"
591 fi
592
593 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR BUILD_ARCH="${BUILD_ARCH}" \
594 MESSAGE="$1\t md5sum" md5 >> $LOGFILE 2>&1
595 if [ $? -ne 0 ]; then
596 exiterror "md5sum error in $1, check file in cache or signature"
597 fi
598
599 return 0 # pass all!
600}
601
602lfsmake1() {
603 lfsmakecommoncheck $*
604 [ $? == 1 ] && return 0
605
69a6ec55
MT
606 cd $BASEDIR/lfs && env -i \
607 PATH="${TOOLS_DIR}/ccache/bin:${TOOLS_DIR}/bin:$PATH" \
608 CCACHE_DIR="${CCACHE_DIR}" \
609 CCACHE_COMPRESS="${CCACHE_COMPRESS}" \
610 CCACHE_COMPILERCHECK="${CCACHE_COMPILERCHECK}" \
611 CFLAGS="${CFLAGS}" \
612 CXXFLAGS="${CXXFLAGS}" \
613 MAKETUNING="${MAKETUNING}" \
614 make -f $* \
615 TOOLCHAIN=1 \
616 TOOLS_DIR="${TOOLS_DIR}" \
617 CROSSTARGET="${CROSSTARGET}" \
618 BUILDTARGET="${BUILDTARGET}" \
619 BUILD_ARCH="${BUILD_ARCH}" \
620 BUILD_PLATFORM="${BUILD_PLATFORM}" \
621 LFS_BASEDIR="${BASEDIR}" \
622 ROOT="${LFS}" \
623 KVER="${KVER}" \
f9783277 624 install >> $LOGFILE 2>&1 &
69a6ec55 625
f9783277
MT
626 if ! wait_until_finished $!; then
627 print_status FAIL
628 exiterror "Building $*"
69a6ec55
MT
629 fi
630
f9783277 631 print_status DONE
69a6ec55
MT
632}
633
634lfsmake2() {
635 lfsmakecommoncheck $*
636 [ $? == 1 ] && return 0
637
69a6ec55
MT
638 local PS1='\u:\w$ '
639
640 enterchroot \
641 bash -x -c "cd /usr/src/lfs && \
642 MAKETUNING=${MAKETUNING} \
643 make -f $* \
644 LFS_BASEDIR=/usr/src install" \
f9783277 645 >> ${LOGFILE} 2>&1 &
69a6ec55 646
f9783277
MT
647 if ! wait_until_finished $!; then
648 print_status FAIL
649 exiterror "Building $*"
69a6ec55
MT
650 fi
651
f9783277 652 print_status DONE
69a6ec55
MT
653}
654
655ipfiredist() {
656 lfsmakecommoncheck $*
657 [ $? == 1 ] && return 0
658
69a6ec55
MT
659 local PS1='\u:\w$ '
660
661 enterchroot \
662 bash -x -c "cd /usr/src/lfs && make -f $* LFS_BASEDIR=/usr/src dist" \
f9783277 663 >> ${LOGFILE} 2>&1 &
69a6ec55 664
f9783277
MT
665 if ! wait_until_finished $!; then
666 print_status FAIL
667 exiterror "Packaging $*"
668 fi
69a6ec55 669
f9783277
MT
670 print_status DONE
671}
672
673wait_until_finished() {
674 local pid=${1}
675
676 local start_time=$(now)
677
678 # Show progress
679 if ${INTERACTIVE}; then
680 # Wait a little just in case the process
681 # has finished very quickly.
682 sleep 0.1
683
684 local runtime
685 while kill -0 ${pid} 2>/dev/null; do
686 print_runtime $(( $(now) - ${start_time} ))
687
688 # Wait a little
689 sleep 1
690 done
69a6ec55 691 fi
f9783277
MT
692
693 # Returns the exit code of the child process
694 wait ${pid}
695 local ret=$?
696
697 if ! ${INTERACTIVE}; then
698 print_runtime $(( $(now) - ${start_time} ))
699 fi
700
701 return ${ret}
69a6ec55
MT
702}
703
704fake_environ() {
705 [ -e "${BASEDIR}/build${TOOLS_DIR}/lib/libpakfire_preload.so" ] || return
706
707 local env="LD_PRELOAD=${TOOLS_DIR}/lib/libpakfire_preload.so"
708
709 # Fake kernel version, because some of the packages do not compile
710 # with kernel 3.0 and later.
711 env="${env} UTS_RELEASE=${KVER}"
712
713 # Fake machine version.
714 env="${env} UTS_MACHINE=${BUILD_ARCH}"
715
716 echo "${env}"
717}
718
719qemu_environ() {
720 local env
721
722 # Don't add anything if qemu is not used.
723 if ! qemu_is_required; then
724 return
725 fi
726
727 # Set default qemu options
728 case "${BUILD_ARCH}" in
729 arm*)
730 QEMU_CPU="${QEMU_CPU:-cortex-a9}"
731
732 env="${env} QEMU_CPU=${QEMU_CPU}"
733 ;;
734 esac
735
736 # Enable QEMU strace
737 #env="${env} QEMU_STRACE=1"
738
739 echo "${env}"
740}
741
742qemu_is_required() {
743 local build_arch="${1}"
744
745 if [ -z "${build_arch}" ]; then
746 build_arch="${BUILD_ARCH}"
747 fi
748
749 case "${HOST_ARCH},${build_arch}" in
750 x86_64,arm*|i?86,arm*|i?86,x86_64)
751 return 0
752 ;;
753 *)
754 return 1
755 ;;
756 esac
757}
758
759qemu_install_helper() {
760 # Do nothing, if qemu is not required
761 if ! qemu_is_required; then
762 return 0
763 fi
764
765 if [ ! -e /proc/sys/fs/binfmt_misc/status ]; then
766 exiterror "binfmt_misc not mounted. QEMU_TARGET_HELPER not useable."
767 fi
768
769 if [ ! $(cat /proc/sys/fs/binfmt_misc/status) = 'enabled' ]; then
770 exiterror "binfmt_misc not enabled. QEMU_TARGET_HELPER not useable."
771 fi
772
773
774 if [ -z "${QEMU_TARGET_HELPER}" ]; then
775 exiterror "QEMU_TARGET_HELPER not set"
776 fi
777
778 # Check if the helper is already installed.
779 if [ -x "${LFS}${QEMU_TARGET_HELPER}" ]; then
780 return 0
781 fi
782
783 # Try to find a suitable binary that we can install
784 # to the build environment.
785 local file
786 for file in "${QEMU_TARGET_HELPER}" "${QEMU_TARGET_HELPER}-static"; do
787 # file must exist and be executable.
788 [ -x "${file}" ] || continue
789
790 # Must be static.
791 file_is_static "${file}" || continue
792
793 local dirname="${LFS}$(dirname "${file}")"
794 mkdir -p "${dirname}"
795
796 install -m 755 "${file}" "${LFS}${QEMU_TARGET_HELPER}"
797 return 0
798 done
799
800 exiterror "Could not find a statically-linked QEMU emulator: ${QEMU_TARGET_HELPER}"
801}
802
803qemu_find_build_helper_name() {
804 local build_arch="${1}"
805
806 local magic
807 case "${build_arch}" in
808 arm*)
809 magic="7f454c4601010100000000000000000002002800"
810 ;;
811 x86_64)
812 magic="7f454c4602010100000000000000000002003e00"
813 ;;
814 esac
815
816 [ -z "${magic}" ] && return 1
817
818 local file
819 for file in /proc/sys/fs/binfmt_misc/*; do
820 # skip write only register entry
821 [ $(basename "${file}") = "register" ] && continue
822 # Search for the file with the correct magic value.
823 grep -qE "^magic ${magic}$" "${file}" || continue
824
825 local interpreter="$(grep "^interpreter" "${file}" | awk '{ print $2 }')"
826
827 [ -n "${interpreter}" ] || continue
828 [ "${interpreter:0:1}" = "/" ] || continue
829 [ -x "${interpreter}" ] || continue
830
831 echo "${interpreter}"
832 return 0
833 done
834
835 return 1
836}
837
838file_is_static() {
839 local file="${1}"
840
841 file ${file} 2>/dev/null | grep -q "statically linked"
842}
843
844update_language_list() {
845 local path="${1}"
846
847 local lang
848 for lang in ${path}/*.po; do
849 lang="$(basename "${lang}")"
850 echo "${lang%*.po}"
851 done | sort -u > "${path}/LINGUAS"
852}
853
a98ab1d7
MT
854# Load configuration file
855if [ -f .config ]; then
856 . .config
857fi
858
813659f2
MT
859# TARGET_ARCH is BUILD_ARCH now
860if [ -n "${TARGET_ARCH}" ]; then
861 BUILD_ARCH="${TARGET_ARCH}"
862 unset TARGET_ARCH
863fi
864
5190eea2
MT
865# Get the amount of memory in this build system
866HOST_MEM=$(system_memory)
867
dc7d6b20
MT
868if [ -n "${BUILD_ARCH}" ]; then
869 configure_build "${BUILD_ARCH}"
949544f5 870else
dc7d6b20 871 configure_build "default"
949544f5
MT
872fi
873
df5e82b3 874buildtoolchain() {
69a6ec55
MT
875 local error=false
876 case "${BUILD_ARCH}:${HOST_ARCH}" in
877 # x86_64
878 x86_64:x86_64)
879 # This is working.
880 ;;
881
882 # x86
883 i586:i586|i586:i686|i586:x86_64)
884 # These are working.
885 ;;
886 i586:*)
887 error=true
888 ;;
889
890 # ARM
891 arvm7hl:armv7hl|armv7hl:armv7l)
892 # These are working.
893 ;;
894
895 armv5tel:armv5tel|armv5tel:armv5tejl|armv5tel:armv6l|armv5tel:armv7l|armv5tel:aarch64)
896 # These are working.
897 ;;
898 armv5tel:*)
899 error=true
900 ;;
901 esac
902
903 ${error} && \
904 exiterror "Cannot build ${BUILD_ARCH} toolchain on $(uname -m). Please use the download if any."
905
906 local gcc=$(type -p gcc)
907 if [ -z "${gcc}" ]; then
908 exiterror "Could not find GCC. You will need a working build enviroment in order to build the toolchain."
909 fi
910
911 LOGFILE="$BASEDIR/log/_build.toolchain.log"
912 export LOGFILE
913
914 lfsmake1 stage1
915 lfsmake1 ccache PASS=1
916 lfsmake1 binutils PASS=1
917 lfsmake1 gcc PASS=1
918 lfsmake1 linux KCFG="-headers"
919 lfsmake1 glibc
920 lfsmake1 gcc PASS=L
921 lfsmake1 binutils PASS=2
922 lfsmake1 gcc PASS=2
923 lfsmake1 ccache PASS=2
924 lfsmake1 tcl
925 lfsmake1 expect
926 lfsmake1 dejagnu
927 lfsmake1 pkg-config
928 lfsmake1 ncurses
929 lfsmake1 bash
930 lfsmake1 bzip2
931 lfsmake1 automake
932 lfsmake1 coreutils
933 lfsmake1 diffutils
934 lfsmake1 findutils
935 lfsmake1 gawk
936 lfsmake1 gettext
937 lfsmake1 grep
938 lfsmake1 gzip
939 lfsmake1 m4
940 lfsmake1 make
941 lfsmake1 patch
942 lfsmake1 perl
943 lfsmake1 sed
944 lfsmake1 tar
945 lfsmake1 texinfo
946 lfsmake1 xz
947 lfsmake1 fake-environ
948 lfsmake1 cleanup-toolchain
df5e82b3
MT
949}
950
951buildbase() {
69a6ec55
MT
952 LOGFILE="$BASEDIR/log/_build.base.log"
953 export LOGFILE
954 lfsmake2 stage2
955 lfsmake2 linux KCFG="-headers"
956 lfsmake2 man-pages
957 lfsmake2 glibc
958 lfsmake2 tzdata
959 lfsmake2 cleanup-toolchain
960 lfsmake2 zlib
961 lfsmake2 binutils
962 lfsmake2 gmp
963 lfsmake2 gmp-compat
964 lfsmake2 mpfr
965 lfsmake2 libmpc
966 lfsmake2 file
967 lfsmake2 gcc
968 lfsmake2 sed
969 lfsmake2 autoconf
970 lfsmake2 automake
971 lfsmake2 berkeley
972 lfsmake2 coreutils
973 lfsmake2 iana-etc
974 lfsmake2 m4
975 lfsmake2 bison
976 lfsmake2 ncurses-compat
977 lfsmake2 ncurses
978 lfsmake2 procps
979 lfsmake2 libtool
980 lfsmake2 perl
981 lfsmake2 readline
982 lfsmake2 readline-compat
983 lfsmake2 bzip2
984 lfsmake2 pcre
985 lfsmake2 pcre-compat
986 lfsmake2 bash
987 lfsmake2 diffutils
988 lfsmake2 e2fsprogs
989 lfsmake2 ed
990 lfsmake2 findutils
991 lfsmake2 flex
992 lfsmake2 gawk
993 lfsmake2 gettext
994 lfsmake2 grep
995 lfsmake2 groff
996 lfsmake2 gperf
997 lfsmake2 gzip
998 lfsmake2 hostname
999 lfsmake2 iproute2
1000 lfsmake2 jwhois
1001 lfsmake2 kbd
1002 lfsmake2 less
1003 lfsmake2 make
1004 lfsmake2 man
1005 lfsmake2 kmod
1006 lfsmake2 net-tools
1007 lfsmake2 patch
1008 lfsmake2 psmisc
1009 lfsmake2 shadow
1010 lfsmake2 sysklogd
1011 lfsmake2 sysvinit
1012 lfsmake2 tar
1013 lfsmake2 texinfo
1014 lfsmake2 util-linux
1015 lfsmake2 udev
1016 lfsmake2 vim
1017 lfsmake2 xz
1018 lfsmake2 paxctl
df5e82b3
MT
1019}
1020
15679d9f 1021buildipfire() {
907cd036 1022 LOGFILE="$BASEDIR/log/_build.ipfire.log"
df5e82b3 1023 export LOGFILE
489145db
MT
1024 lfsmake2 configroot
1025 lfsmake2 initscripts
1026 lfsmake2 backup
1027 lfsmake2 pkg-config
1028 lfsmake2 libusb
1029 lfsmake2 libusb-compat
1030 lfsmake2 libpcap
1031 lfsmake2 ppp
1032 lfsmake2 pptp
1033 lfsmake2 unzip
1034 lfsmake2 which
1035 lfsmake2 linux-firmware
1036 lfsmake2 ath10k-firmware
1037 lfsmake2 dvb-firmwares
1038 lfsmake2 mt7601u-firmware
1039 lfsmake2 zd1211-firmware
1040 lfsmake2 rpi-firmware
1041 lfsmake2 bc
1042 lfsmake2 u-boot
1043 lfsmake2 cpio
1044 lfsmake2 mdadm
1045 lfsmake2 dracut
1046 lfsmake2 lvm2
1047 lfsmake2 multipath-tools
1048 lfsmake2 freetype
1049 lfsmake2 grub
1050 lfsmake2 libmnl
1051 lfsmake2 libnfnetlink
1052 lfsmake2 libnetfilter_queue
1053 lfsmake2 libnetfilter_conntrack
1054 lfsmake2 libnetfilter_cthelper
1055 lfsmake2 libnetfilter_cttimeout
1056 lfsmake2 iptables
8e6fb99d 1057
dc7d6b20 1058 case "${BUILD_ARCH}" in
fc155193 1059 x86_64)
489145db
MT
1060 lfsmake2 linux KCFG=""
1061 lfsmake2 backports KCFG=""
1062 lfsmake2 e1000e KCFG=""
1063 lfsmake2 igb KCFG=""
1064 lfsmake2 ixgbe KCFG=""
1065 lfsmake2 xtables-addons KCFG=""
1066 lfsmake2 linux-initrd KCFG=""
fc155193 1067 ;;
3d02c091
MT
1068 i586)
1069 # x86-pae (Native and new XEN) kernel build
489145db
MT
1070 lfsmake2 linux KCFG="-pae"
1071 lfsmake2 backports KCFG="-pae"
1072 lfsmake2 e1000e KCFG="-pae"
1073 lfsmake2 igb KCFG="-pae"
1074 lfsmake2 ixgbe KCFG="-pae"
1075 lfsmake2 xtables-addons KCFG="-pae"
1076 lfsmake2 linux-initrd KCFG="-pae"
3d02c091
MT
1077
1078 # x86 kernel build
489145db
MT
1079 lfsmake2 linux KCFG=""
1080 lfsmake2 backports KCFG=""
1081 lfsmake2 e1000e KCFG=""
1082 lfsmake2 igb KCFG=""
1083 lfsmake2 ixgbe KCFG=""
1084 lfsmake2 xtables-addons KCFG=""
1085 lfsmake2 linux-initrd KCFG=""
3d02c091 1086 ;;
544f40d4 1087
3d02c091
MT
1088 armv5tel)
1089 # arm-rpi (Raspberry Pi) kernel build
489145db
MT
1090 lfsmake2 linux KCFG="-rpi"
1091 lfsmake2 backports KCFG="-rpi"
1092 lfsmake2 xtables-addons KCFG="-rpi"
1093 lfsmake2 linux-initrd KCFG="-rpi"
3d02c091
MT
1094
1095 # arm multi platform (Panda, Wandboard ...) kernel build
489145db
MT
1096 lfsmake2 linux KCFG="-multi"
1097 lfsmake2 backports KCFG="-multi"
1098 lfsmake2 e1000e KCFG="-multi"
1099 lfsmake2 igb KCFG="-multi"
1100 lfsmake2 ixgbe KCFG="-multi"
1101 lfsmake2 xtables-addons KCFG="-multi"
1102 lfsmake2 linux-initrd KCFG="-multi"
3d02c091
MT
1103
1104 # arm-kirkwood (Dreamplug, ICY-Box ...) kernel build
489145db
MT
1105 lfsmake2 linux KCFG="-kirkwood"
1106 lfsmake2 backports KCFG="-kirkwood"
1107 lfsmake2 e1000e KCFG="-kirkwood"
1108 lfsmake2 igb KCFG="-kirkwood"
1109 lfsmake2 ixgbe KCFG="-kirkwood"
1110 lfsmake2 xtables-addons KCFG="-kirkwood"
1111 lfsmake2 linux-initrd KCFG="-kirkwood"
3d02c091
MT
1112 ;;
1113 esac
489145db
MT
1114 lfsmake2 xtables-addons USPACE="1"
1115 lfsmake2 openssl
1116 [ "${BUILD_ARCH}" = "i586" ] && lfsmake2 openssl KCFG='-sse2'
1117 lfsmake2 libgpg-error
1118 lfsmake2 libgcrypt
1119 lfsmake2 libassuan
1120 lfsmake2 nettle
1121 lfsmake2 libevent
1122 lfsmake2 libevent2
89ad036a 1123 lfsmake2 libevent2-compat
489145db 1124 lfsmake2 expat
c8e9a7a8
WA
1125 lfsmake2 apr
1126 lfsmake2 aprutil
489145db
MT
1127 lfsmake2 unbound
1128 lfsmake2 gnutls
1129 lfsmake2 bind
1130 lfsmake2 dhcp
1131 lfsmake2 dhcpcd
1132 lfsmake2 boost
1133 lfsmake2 linux-atm
1134 lfsmake2 gdbm
1135 lfsmake2 pam
1136 lfsmake2 curl
1137 lfsmake2 tcl
1138 lfsmake2 sqlite
1139 lfsmake2 libffi
1140 lfsmake2 python
1141 lfsmake2 python3
1142 lfsmake2 ca-certificates
1143 lfsmake2 fireinfo
1144 lfsmake2 libnet
1145 lfsmake2 libnl
1146 lfsmake2 libnl-3
1147 lfsmake2 libidn
1148 lfsmake2 nasm
1149 lfsmake2 libjpeg
1150 lfsmake2 libjpeg-compat
1151 lfsmake2 libexif
1152 lfsmake2 libpng
1153 lfsmake2 libtiff
1154 lfsmake2 libart
1155 lfsmake2 gd
1156 lfsmake2 popt
489145db
MT
1157 lfsmake2 slang
1158 lfsmake2 newt
1159 lfsmake2 libsmooth
1160 lfsmake2 attr
1161 lfsmake2 acl
1162 lfsmake2 libcap
1163 lfsmake2 pciutils
1164 lfsmake2 usbutils
1165 lfsmake2 libxml2
1166 lfsmake2 libxslt
1167 lfsmake2 BerkeleyDB
1168 lfsmake2 mysql
1169 lfsmake2 cyrus-sasl
1170 lfsmake2 openldap
1171 lfsmake2 apache2
1172 lfsmake2 php
1173 lfsmake2 web-user-interface
1174 lfsmake2 flag-icons
1175 lfsmake2 jquery
6033b271 1176 lfsmake2 bootstrap
489145db
MT
1177 lfsmake2 arping
1178 lfsmake2 beep
1179 lfsmake2 dvdrtools
1180 lfsmake2 dosfstools
1181 lfsmake2 reiserfsprogs
1182 lfsmake2 xfsprogs
1183 lfsmake2 sysfsutils
1184 lfsmake2 fuse
1185 lfsmake2 ntfs-3g
1186 lfsmake2 ethtool
1187 lfsmake2 ez-ipupdate
1188 lfsmake2 fcron
1189 lfsmake2 perl-GD
1190 lfsmake2 GD-Graph
1191 lfsmake2 GD-TextUtil
1192 lfsmake2 perl-Device-SerialPort
1193 lfsmake2 perl-Device-Modem
1194 lfsmake2 perl-Apache-Htpasswd
1195 lfsmake2 gnupg
1196 lfsmake2 hdparm
1197 lfsmake2 sdparm
1198 lfsmake2 mtools
1199 lfsmake2 whatmask
1200 lfsmake2 conntrack-tools
1201 lfsmake2 libupnp
1202 lfsmake2 ipaddr
1203 lfsmake2 iputils
1204 lfsmake2 l7-protocols
1205 lfsmake2 mISDNuser
1206 lfsmake2 capi4k-utils
1207 lfsmake2 hwdata
1208 lfsmake2 logrotate
1209 lfsmake2 logwatch
1210 lfsmake2 misc-progs
1211 lfsmake2 nano
1212 lfsmake2 URI
1213 lfsmake2 HTML-Tagset
1214 lfsmake2 HTML-Parser
1215 lfsmake2 HTML-Template
1216 lfsmake2 Compress-Zlib
1217 lfsmake2 Digest
1218 lfsmake2 Digest-SHA1
1219 lfsmake2 Digest-HMAC
1220 lfsmake2 libwww-perl
1221 lfsmake2 Net-DNS
1222 lfsmake2 Net-IPv4Addr
1223 lfsmake2 Net_SSLeay
1224 lfsmake2 IO-Stringy
1225 lfsmake2 IO-Socket-SSL
1226 lfsmake2 Unix-Syslog
1227 lfsmake2 Mail-Tools
1228 lfsmake2 MIME-Tools
1229 lfsmake2 Net-Server
1230 lfsmake2 Convert-TNEF
1231 lfsmake2 Convert-UUlib
1232 lfsmake2 Archive-Tar
1233 lfsmake2 Archive-Zip
1234 lfsmake2 Text-Tabs+Wrap
1235 lfsmake2 Locale-Country
1236 lfsmake2 XML-Parser
1237 lfsmake2 Crypt-PasswdMD5
1238 lfsmake2 Net-Telnet
1239 lfsmake2 python-setuptools
1240 lfsmake2 python-clientform
1241 lfsmake2 python-mechanize
1242 lfsmake2 python-feedparser
1243 lfsmake2 python-rssdler
1244 lfsmake2 python-inotify
1245 lfsmake2 python-docutils
1246 lfsmake2 python-daemon
1247 lfsmake2 python-ipaddress
1248 lfsmake2 glib
1249 lfsmake2 GeoIP
489145db
MT
1250 lfsmake2 noip_updater
1251 lfsmake2 ntp
1252 lfsmake2 openssh
1253 lfsmake2 fontconfig
1254 lfsmake2 dejavu-fonts-ttf
70f6cba4 1255 lfsmake2 ubuntu-font-family
489145db
MT
1256 lfsmake2 freefont
1257 lfsmake2 pixman
1258 lfsmake2 cairo
1259 lfsmake2 pango
1260 lfsmake2 rrdtool
1261 lfsmake2 setserial
1262 lfsmake2 setup
1263 lfsmake2 libdnet
1264 lfsmake2 daq
1265 lfsmake2 snort
1266 lfsmake2 oinkmaster
1267 lfsmake2 squid
1268 lfsmake2 squidguard
1269 lfsmake2 calamaris
1270 lfsmake2 tcpdump
1271 lfsmake2 traceroute
1272 lfsmake2 vlan
1273 lfsmake2 wireless
1274 lfsmake2 pakfire
1275 lfsmake2 spandsp
1276 lfsmake2 lzo
1277 lfsmake2 openvpn
1278 lfsmake2 pammysql
1279 lfsmake2 mpage
1280 lfsmake2 dbus
1281 lfsmake2 intltool
1282 lfsmake2 libdaemon
1283 lfsmake2 cups
489145db 1284 lfsmake2 lcms2
56170c2a 1285 lfsmake2 ghostscript
489145db
MT
1286 lfsmake2 qpdf
1287 lfsmake2 poppler
1288 lfsmake2 cups-filters
1289 lfsmake2 epson-inkjet-printer-escpr
1290 lfsmake2 foomatic
1291 lfsmake2 hplip
1292 lfsmake2 cifs-utils
1293 lfsmake2 krb5
1294 lfsmake2 samba
1295 lfsmake2 sudo
1296 lfsmake2 mc
1297 lfsmake2 wget
1298 lfsmake2 bridge-utils
1299 lfsmake2 screen
1300 lfsmake2 smartmontools
1301 lfsmake2 htop
1302 lfsmake2 chkconfig
1303 lfsmake2 postfix
1304 lfsmake2 fetchmail
1305 lfsmake2 cyrus-imapd
1306 lfsmake2 openmailadmin
1307 lfsmake2 clamav
1308 lfsmake2 spamassassin
1309 lfsmake2 amavisd
1310 lfsmake2 dma
1311 lfsmake2 alsa
1312 lfsmake2 mpfire
1313 lfsmake2 guardian
1314 lfsmake2 libid3tag
1315 lfsmake2 libmad
1316 lfsmake2 libogg
1317 lfsmake2 libvorbis
1318 lfsmake2 libdvbpsi
1319 lfsmake2 flac
1320 lfsmake2 lame
1321 lfsmake2 sox
1322 lfsmake2 libshout
1323 lfsmake2 xvid
1324 lfsmake2 libmpeg2
1325 lfsmake2 libarchive
1326 lfsmake2 cmake
1327 lfsmake2 gnump3d
1328 lfsmake2 rsync
1329 lfsmake2 tcpwrapper
1330 lfsmake2 libtirpc
1331 lfsmake2 rpcbind
1332 lfsmake2 nfs
1333 lfsmake2 gnu-netcat
1334 lfsmake2 ncat
1335 lfsmake2 nmap
489145db
MT
1336 lfsmake2 etherwake
1337 lfsmake2 bwm-ng
1338 lfsmake2 sysstat
1339 lfsmake2 vsftpd
1340 lfsmake2 strongswan
1341 lfsmake2 rng-tools
1342 lfsmake2 lsof
1343 lfsmake2 br2684ctl
1344 lfsmake2 pcmciautils
1345 lfsmake2 lm_sensors
1346 lfsmake2 liboping
1347 lfsmake2 collectd
1348 lfsmake2 elinks
1349 lfsmake2 igmpproxy
1350 lfsmake2 fbset
1351 lfsmake2 opus
1352 lfsmake2 python-six
1353 lfsmake2 python-pyparsing
1354 lfsmake2 spice-protocol
1355 lfsmake2 spice
1356 lfsmake2 sdl
1357 lfsmake2 libusbredir
1358 lfsmake2 qemu
1359 lfsmake2 sane
1360 lfsmake2 netpbm
1361 lfsmake2 phpSANE
1362 lfsmake2 tunctl
1363 lfsmake2 netsnmpd
1364 lfsmake2 nagios
1365 lfsmake2 nagios_nrpe
1366 lfsmake2 icinga
1367 lfsmake2 ebtables
1368 lfsmake2 directfb
489145db
MT
1369 lfsmake2 faad2
1370 lfsmake2 ffmpeg
1371 lfsmake2 vdr
1372 lfsmake2 vdr_streamdev
489145db
MT
1373 lfsmake2 vdr_epgsearch
1374 lfsmake2 vdr_dvbapi
1375 lfsmake2 vdr_eepg
1376 lfsmake2 w_scan
1377 lfsmake2 icecast
1378 lfsmake2 icegenerator
1379 lfsmake2 mpd
1380 lfsmake2 libmpdclient
1381 lfsmake2 mpc
1382 lfsmake2 perl-Net-SMTP-SSL
1383 lfsmake2 perl-MIME-Base64
1384 lfsmake2 perl-Authen-SASL
1385 lfsmake2 perl-MIME-Lite
1386 lfsmake2 perl-Email-Date-Format
1387 lfsmake2 git
1388 lfsmake2 squidclamav
1389 lfsmake2 vnstat
1390 lfsmake2 iw
1391 lfsmake2 wpa_supplicant
1392 lfsmake2 hostapd
1393 lfsmake2 pycurl
1394 lfsmake2 urlgrabber
1395 lfsmake2 syslinux
1396 lfsmake2 tftpd
1397 lfsmake2 cpufrequtils
1398 lfsmake2 bluetooth
1399 lfsmake2 gutenprint
1400 lfsmake2 apcupsd
1401 lfsmake2 iperf
1402 lfsmake2 iperf3
1403 lfsmake2 7zip
1404 lfsmake2 lynis
1405 lfsmake2 streamripper
1406 lfsmake2 sshfs
1407 lfsmake2 taglib
1408 #lfsmake2 mediatomb
1409 lfsmake2 sslh
1410 lfsmake2 perl-gettext
1411 lfsmake2 perl-Sort-Naturally
1412 lfsmake2 vdradmin
1413 lfsmake2 miau
1414 lfsmake2 perl-DBI
1415 lfsmake2 perl-DBD-mysql
1416 lfsmake2 perl-DBD-SQLite
1417 lfsmake2 perl-File-ReadBackwards
1418 lfsmake2 cacti
1419 lfsmake2 openvmtools
1420 lfsmake2 nagiosql
489145db
MT
1421 lfsmake2 motion
1422 lfsmake2 joe
1423 lfsmake2 monit
1424 lfsmake2 nut
1425 lfsmake2 watchdog
1426 lfsmake2 libpri
1427 lfsmake2 libsrtp
1428 lfsmake2 asterisk
1429 lfsmake2 lcr
1430 lfsmake2 usb_modeswitch
1431 lfsmake2 usb_modeswitch_data
1432 lfsmake2 zerofree
1433 lfsmake2 pound
1434 lfsmake2 minicom
1435 lfsmake2 ddrescue
489145db
MT
1436 lfsmake2 miniupnpd
1437 lfsmake2 client175
1438 lfsmake2 powertop
1439 lfsmake2 parted
1440 lfsmake2 swig
1441 lfsmake2 python-m2crypto
1442 lfsmake2 wireless-regdb
1443 lfsmake2 crda
1444 lfsmake2 libsolv
1445 lfsmake2 python-distutils-extra
1446 lfsmake2 python-lzma
1447 lfsmake2 python-progressbar
1448 lfsmake2 python-xattr
1449 lfsmake2 ddns
1450 lfsmake2 transmission
1451 lfsmake2 dpfhack
1452 lfsmake2 lcd4linux
1453 lfsmake2 mtr
489145db
MT
1454 lfsmake2 minidlna
1455 lfsmake2 acpid
1456 lfsmake2 fping
1457 lfsmake2 telnet
1458 lfsmake2 xinetd
1459 lfsmake2 gpgme
1460 lfsmake2 pygpgme
1461 lfsmake2 pakfire3
1462 lfsmake2 stress
1463 lfsmake2 libstatgrab
1464 lfsmake2 sarg
1465 lfsmake2 check_mk_agent
1466 lfsmake2 nginx
1467 lfsmake2 sendEmail
1468 lfsmake2 sysbench
1469 lfsmake2 strace
1470 lfsmake2 elfutils
1471 lfsmake2 ltrace
1472 lfsmake2 ipfire-netboot
1473 lfsmake2 lcdproc
1474 lfsmake2 bitstream
1475 lfsmake2 multicat
1476 lfsmake2 keepalived
1477 lfsmake2 ipvsadm
1478 lfsmake2 perl-Carp-Clan
1479 lfsmake2 perl-Date-Calc
1480 lfsmake2 perl-Date-Manip
1481 lfsmake2 perl-File-Tail
1482 lfsmake2 perl-TimeDate
1483 lfsmake2 swatch
1484 lfsmake2 tor
1485 lfsmake2 arm
1486 lfsmake2 wavemon
1487 lfsmake2 iptraf-ng
1488 lfsmake2 iotop
1489 lfsmake2 stunnel
1490 lfsmake2 sslscan
1491 lfsmake2 owncloud
1492 lfsmake2 bacula
1493 lfsmake2 batctl
b62c826f
MT
1494 lfsmake2 perl-Font-TTF
1495 lfsmake2 perl-IO-String
489145db
MT
1496 lfsmake2 perl-PDF-API2
1497 lfsmake2 squid-accounting
1498 lfsmake2 pigz
1499 lfsmake2 tmux
1500 lfsmake2 perl-Text-CSV_XS
1501 lfsmake2 swconfig
1502 lfsmake2 haproxy
1503 lfsmake2 ipset
1504 lfsmake2 lua
1505 lfsmake2 dnsdist
1506 lfsmake2 bird
1507 lfsmake2 dmidecode
1508 lfsmake2 mcelog
1509 lfsmake2 rtpproxy
1510 lfsmake2 util-macros
1511 lfsmake2 libpciaccess
1512 lfsmake2 libyajl
1513 lfsmake2 libvirt
b190cbe2 1514 lfsmake2 python3-libvirt
489145db
MT
1515 lfsmake2 freeradius
1516 lfsmake2 perl-common-sense
1517 lfsmake2 perl-inotify2
1518 lfsmake2 perl-Net-IP
0d6cc79d 1519 lfsmake2 wio
773caa66 1520 lfsmake2 iftop
d0817963 1521}
df5e82b3
MT
1522
1523buildinstaller() {
1524 # Run installer scripts one by one
1525 LOGFILE="$BASEDIR/log/_build.installer.log"
1526 export LOGFILE
489145db
MT
1527 lfsmake2 memtest
1528 lfsmake2 installer
4960c912 1529 lfsmake1 strip
df5e82b3
MT
1530}
1531
1532buildpackages() {
1533 LOGFILE="$BASEDIR/log/_build.packages.log"
1534 export LOGFILE
1535 echo "... see detailed log in _build.*.log files" >> $LOGFILE
0fbb45e9 1536
df5e82b3
MT
1537
1538 # Generating list of packages used
0fbb45e9 1539 echo -n "Generating packages list from logs" | tee -a $LOGFILE
df5e82b3
MT
1540 rm -f $BASEDIR/doc/packages-list
1541 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
1542 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
7471f6ab 1543 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
df5e82b3
MT
1544 fi
1545 done
7471f6ab 1546 echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
4fe9acb2 1547 grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$\|install1$\|install2$\|pass1$\|pass2$\|pass3$' \
df5e82b3
MT
1548 $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
1549 rm -f $BASEDIR/doc/packages-list
c9673262 1550 # packages-list.txt is ready to be displayed for wiki page
f9783277 1551 print_status DONE
4b06f504
MT
1552
1553 # Update changelog
e49f7f0d 1554 cd $BASEDIR
c43b07fd
AF
1555 [ -z $GIT_TAG ] || LAST_TAG=$GIT_TAG
1556 [ -z $LAST_TAG ] || EXT="$LAST_TAG..HEAD"
1557 git log -n 500 --no-merges --pretty=medium --shortstat $EXT > $BASEDIR/doc/ChangeLog
df5e82b3 1558
9607771a 1559 # Create images for install
489145db 1560 lfsmake2 cdrom
bada0832 1561
4dc82852 1562 # Check if there is a loop device for building in virtual environments
841663e7
MT
1563 modprobe loop 2>/dev/null
1564 if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ] || [ -e "/dev/loop-control" ]); then
489145db
MT
1565 lfsmake2 flash-images
1566 lfsmake2 flash-images SCON=1
4dc82852 1567 fi
c9673262 1568
f0fc8807 1569 mv $LFS/install/images/{*.iso,*.tgz,*.img.gz,*.bz2} $BASEDIR >> $LOGFILE 2>&1
c9673262 1570
0d909a4a 1571 ipfirepackages
e67a57fe 1572
489145db 1573 lfsmake2 xen-image
939c2a21 1574 mv $LFS/install/images/*.bz2 $BASEDIR >> $LOGFILE 2>&1
bada0832 1575
b307417f 1576 cd $BASEDIR
744a04ea
AF
1577
1578 # remove not useable iso on armv5tel (needed to build flash images)
dc7d6b20 1579 [ "${BUILD_ARCH}" = "armv5tel" ] && rm -rf *.iso
744a04ea 1580
b307417f
AF
1581 for i in `ls *.bz2 *.img.gz *.iso`; do
1582 md5sum $i > $i.md5
1583 done
1584 cd $PWD
1585
e67a57fe
MT
1586 # Cleanup
1587 stdumount
1588 rm -rf $BASEDIR/build/tmp/*
1589
1590 # Generating total list of files
0d909a4a 1591 echo -n "Generating files list from logs" | tee -a $LOGFILE
e67a57fe
MT
1592 rm -f $BASEDIR/log/FILES
1593 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
1594 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
1595 echo "##" >>$BASEDIR/log/FILES
1596 echo "## `basename $i`" >>$BASEDIR/log/FILES
1597 echo "##" >>$BASEDIR/log/FILES
1598 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
1599 fi
1600 done
f9783277 1601 print_status DONE
e67a57fe
MT
1602
1603 cd $PWD
e67a57fe
MT
1604}
1605
1606ipfirepackages() {
489145db 1607 lfsmake2 core-updates
5596077b
MT
1608
1609 local i
dc7d6b20 1610 for i in $(find $BASEDIR/config/rootfiles/packages{/${BUILD_ARCH},} -maxdepth 1 -type f); do
5596077b 1611 i=$(basename ${i})
453b418b
MT
1612 if [ -e $BASEDIR/lfs/$i ]; then
1613 ipfiredist $i
1614 else
1615 echo -n $i
f9783277 1616 print_status SKIP
453b418b 1617 fi
fe7fe395 1618 done
78331e30 1619 test -d $BASEDIR/packages || mkdir $BASEDIR/packages
5c8cfc99 1620 mv -f $LFS/install/packages/* $BASEDIR/packages >> $LOGFILE 2>&1
483f59cd 1621 rm -rf $BASEDIR/build/install/packages/*
df5e82b3
MT
1622}
1623
bcb9dc13
MT
1624while [ $# -gt 0 ]; do
1625 case "${1}" in
1626 --target=*)
c2e810de 1627 configure_build "${1#--target=}"
bcb9dc13
MT
1628 ;;
1629 -*)
1630 exiterror "Unknown configuration option: ${1}"
1631 ;;
1632 *)
1633 # Found a command, so exit options parsing.
1634 break
1635 ;;
1636 esac
1637 shift
1638done
1639
df5e82b3
MT
1640# See what we're supposed to do
1641case "$1" in
1642build)
f9783277
MT
1643 START_TIME=$(now)
1644
1645 # Clear screen
1646 ${INTERACTIVE} && clear
1647
f74072a2 1648 PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-${BUILD_ARCH}.tar.xz 2> /dev/null | head -n 1`
df5e82b3 1649 #only restore on a clean disk
6c4cc7ea 1650 if [ ! -e "${BASEDIR}/build${TOOLS_DIR}/.toolchain-successful" ]; then
df5e82b3 1651 if [ ! -n "$PACKAGE" ]; then
f9783277 1652 print_build_stage "Full toolchain compilation"
df5e82b3
MT
1653 prepareenv
1654 buildtoolchain
1655 else
f74072a2 1656 PACKAGENAME=${PACKAGE%.tar.xz}
f9783277 1657 print_build_stage "Packaged toolchain compilation"
df5e82b3 1658 if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
f74072a2 1659 tar axf $PACKAGE
df5e82b3
MT
1660 prepareenv
1661 else
1662 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
1663 fi
1664 fi
1665 else
df5e82b3
MT
1666 prepareenv
1667 fi
5cfe86e6 1668
f9783277 1669 print_build_stage "Building LFS"
df5e82b3 1670 buildbase
15679d9f 1671
f9783277 1672 print_build_stage "Building IPFire"
15679d9f 1673 buildipfire
5cfe86e6 1674
f9783277 1675 print_build_stage "Building installer"
df5e82b3 1676 buildinstaller
15679d9f 1677
f9783277 1678 print_build_stage "Building packages"
df5e82b3 1679 buildpackages
7a5ed24e 1680
f9783277 1681 print_build_stage "Checking Logfiles for new Files"
b307417f
AF
1682
1683 cd $BASEDIR
7a5ed24e 1684 tools/checknewlog.pl
e0c923f4 1685 tools/checkrootfiles
b307417f 1686 cd $PWD
a23731d1 1687
f9783277 1688 print_build_summary $(( $(now) - ${START_TIME} ))
df5e82b3
MT
1689 ;;
1690shell)
1691 # enter a shell inside LFS chroot
1692 # may be used to changed kernel settings
1693 prepareenv
1694 entershell
1695 ;;
df5e82b3 1696clean)
f9783277
MT
1697 print_line "Cleaning build directory..."
1698
df5e82b3
MT
1699 for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
1700 $LOSETUP -d $i 2>/dev/null
1701 done
1702 for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
1703 umount $i
1704 done
1705 stdumount
1706 for i in `seq 0 7`; do
69a6ec55 1707 if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
df5e82b3
MT
1708 umount /dev/loop${i} 2>/dev/null;
1709 losetup -d /dev/loop${i} 2>/dev/null;
69a6ec55 1710 fi;
df5e82b3
MT
1711 done
1712 rm -rf $BASEDIR/build
1713 rm -rf $BASEDIR/cdrom
f9315063 1714 rm -rf $BASEDIR/packages
df5e82b3 1715 rm -rf $BASEDIR/log
6c4cc7ea
MT
1716 if [ -h "${TOOLS_DIR}" ]; then
1717 rm -f "${TOOLS_DIR}"
df5e82b3 1718 fi
b307417f 1719 rm -f $BASEDIR/ipfire-*
f9783277 1720 print_status DONE
df5e82b3 1721 ;;
c3db995c 1722downloadsrc)
df5e82b3
MT
1723 if [ ! -d $BASEDIR/cache ]; then
1724 mkdir $BASEDIR/cache
1725 fi
1726 mkdir -p $BASEDIR/log
857d9bf2 1727 echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
df5e82b3
MT
1728 FINISHED=0
1729 cd $BASEDIR/lfs
1730 for c in `seq $MAX_RETRIES`; do
1731 if (( FINISHED==1 )); then
1732 break
1733 fi
1734 FINISHED=1
1735 cd $BASEDIR/lfs
1736 for i in *; do
1737 if [ -f "$i" -a "$i" != "Config" ]; then
846e756e
MT
1738 lfsmakecommoncheck ${i} || continue
1739
dc7d6b20 1740 make -s -f $i LFS_BASEDIR=$BASEDIR BUILD_ARCH="${BUILD_ARCH}" \
51f9e7ac 1741 MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
df5e82b3 1742 if [ $? -ne 0 ]; then
f9783277 1743 print_status FAIL
df5e82b3
MT
1744 FINISHED=0
1745 else
1746 if [ $c -eq 1 ]; then
f9783277 1747 print_status DONE
df5e82b3
MT
1748 fi
1749 fi
1750 fi
1751 done
1752 done
e22c7973 1753 echo -e "${BOLD}***Verifying md5sums${NORMAL}"
df5e82b3
MT
1754 ERROR=0
1755 for i in *; do
1756 if [ -f "$i" -a "$i" != "Config" ]; then
a4130265 1757 lfsmakecommoncheck ${i} > /dev/null || continue
dc7d6b20 1758 make -s -f $i LFS_BASEDIR=$BASEDIR BUILD_ARCH="${BUILD_ARCH}" \
51f9e7ac 1759 MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
df5e82b3 1760 if [ $? -ne 0 ]; then
e22c7973 1761 echo -ne "MD5 difference in lfs/$i"
f9783277 1762 print_status FAIL
df5e82b3
MT
1763 ERROR=1
1764 fi
1765 fi
1766 done
1767 if [ $ERROR -eq 0 ]; then
e22c7973 1768 echo -ne "${BOLD}all files md5sum match${NORMAL}"
f9783277 1769 print_status DONE
e22c7973
MT
1770 else
1771 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
f9783277 1772 print_status FAIL
df5e82b3 1773 fi
e22c7973 1774 cd - >/dev/null 2>&1
df5e82b3 1775 ;;
df5e82b3 1776toolchain)
f9783277
MT
1777 # Clear screen
1778 ${INTERACTIVE} && clear
1779
df5e82b3 1780 prepareenv
f9783277 1781 print_build_stage "Toolchain compilation"
df5e82b3 1782 buildtoolchain
f74072a2 1783 echo "`date -u '+%b %e %T'`: Create toolchain image for ${BUILD_ARCH}" | tee -a $LOGFILE
11104bfe 1784 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
f74072a2 1785 cd $BASEDIR && XZ_OPT="-T0 -8" tar -Jc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-${BUILD_ARCH}.tar.xz \
6c4cc7ea 1786 build/${TOOLS_DIR} build/bin/sh log >> $LOGFILE
f74072a2 1787 md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-${BUILD_ARCH}.tar.xz \
dc7d6b20 1788 > cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-${BUILD_ARCH}.md5
df5e82b3
MT
1789 stdumount
1790 ;;
1791gettoolchain)
df5e82b3 1792 # arbitrary name to be updated in case of new toolchain package upload
dc7d6b20 1793 PACKAGE=$SNAME-$VERSION-toolchain-$TOOLCHAINVER-${BUILD_ARCH}
f74072a2 1794 if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.xz ]; then
5bd13f01 1795 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
11104bfe 1796 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
f74072a2 1797 echo "`date -u '+%b %e %T'`: Load toolchain image for ${BUILD_ARCH}" | tee -a $LOGFILE
712d859c 1798 cd $BASEDIR/cache/toolchains
f74072a2 1799 wget -U "IPFireSourceGrabber/2.x" $URL_TOOLCHAIN/$PACKAGE.tar.xz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
712d859c 1800 if [ $? -ne 0 ]; then
dc7d6b20 1801 echo "`date -u '+%b %e %T'`: error downloading $PACKAGE toolchain for ${BUILD_ARCH} machine" | tee -a $LOGFILE
40a4ea4c 1802 else
f74072a2 1803 if [ "`md5sum $PACKAGE.tar.xz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
712d859c
MT
1804 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1805 else
1806 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1807 fi
40a4ea4c 1808 fi
712d859c
MT
1809 else
1810 echo "Toolchain is already downloaded. Exiting..."
df5e82b3
MT
1811 fi
1812 ;;
15679d9f
MT
1813uploadsrc)
1814 PWD=`pwd`
661d9388
CS
1815 if [ -z $IPFIRE_USER ]; then
1816 echo -n "You have to setup IPFIRE_USER first. See .config for details."
f9783277 1817 print_status FAIL
661d9388
CS
1818 exit 1
1819 fi
ae23a606 1820
661d9388 1821 URL_SOURCE=$(grep URL_SOURCE lfs/Config | awk '{ print $3 }')
15e38431 1822 REMOTE_FILES=$(echo "ls -1" | sftp -C ${IPFIRE_USER}@${URL_SOURCE})
661d9388 1823
15e38431
MT
1824 for file in ${BASEDIR}/cache/*; do
1825 [ -d "${file}" ] && continue
1826 grep -q "$(basename ${file})" <<<$REMOTE_FILES && continue
661d9388 1827 NEW_FILES="$NEW_FILES $file"
0eab8e84 1828 done
661d9388
CS
1829 [ -n "$NEW_FILES" ] && scp -2 $NEW_FILES ${IPFIRE_USER}@${URL_SOURCE}
1830 cd $BASEDIR
15679d9f
MT
1831 cd $PWD
1832 exit 0
0eab8e84 1833 ;;
bf7c473f 1834lang)
69a6ec55
MT
1835 echo -ne "Checking the translations for missing or obsolete strings..."
1836 chmod 755 $BASEDIR/tools/{check_strings.pl,sort_strings.pl,check_langs.sh}
1837 $BASEDIR/tools/sort_strings.pl en
1838 $BASEDIR/tools/sort_strings.pl de
1839 $BASEDIR/tools/sort_strings.pl fr
1840 $BASEDIR/tools/sort_strings.pl es
1841 $BASEDIR/tools/sort_strings.pl pl
1842 $BASEDIR/tools/sort_strings.pl ru
1843 $BASEDIR/tools/sort_strings.pl nl
1844 $BASEDIR/tools/sort_strings.pl tr
1845 $BASEDIR/tools/sort_strings.pl it
1846 $BASEDIR/tools/check_strings.pl en > $BASEDIR/doc/language_issues.en
1847 $BASEDIR/tools/check_strings.pl de > $BASEDIR/doc/language_issues.de
1848 $BASEDIR/tools/check_strings.pl fr > $BASEDIR/doc/language_issues.fr
1849 $BASEDIR/tools/check_strings.pl es > $BASEDIR/doc/language_issues.es
1850 $BASEDIR/tools/check_strings.pl es > $BASEDIR/doc/language_issues.pl
1851 $BASEDIR/tools/check_strings.pl ru > $BASEDIR/doc/language_issues.ru
1852 $BASEDIR/tools/check_strings.pl nl > $BASEDIR/doc/language_issues.nl
1853 $BASEDIR/tools/check_strings.pl tr > $BASEDIR/doc/language_issues.tr
1854 $BASEDIR/tools/check_strings.pl it > $BASEDIR/doc/language_issues.it
1855 $BASEDIR/tools/check_langs.sh > $BASEDIR/doc/language_missings
f9783277 1856 print_status DONE
69a6ec55
MT
1857
1858 echo -ne "Updating language lists..."
1859 update_language_list ${BASEDIR}/src/installer/po
1860 update_language_list ${BASEDIR}/src/setup/po
f9783277 1861 print_status DONE
bf7c473f 1862 ;;
6b8cff41 1863*)
a50d04ab 1864 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
6b8cff41
MT
1865 cat doc/make.sh-usage
1866 ;;
3ea75603 1867esac