toolchain: fix build on ix86.
[ipfire-2.x.git] / make.sh
1 #!/bin/bash
2 ############################################################################
3 #                                                                          #
4 # This file is part of the IPFire Firewall.                                #
5 #                                                                          #
6 # IPFire is free software; you can redistribute it and/or modify           #
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 #                                                                          #
11 # IPFire is distributed in the hope that it will be useful,                #
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        #
17 # along with IPFire; if not, write to the Free Software                    #
18 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA #
19 #                                                                          #
20 # Copyright (C) 2007-2011 IPFire-Team <info@ipfire.org>.                   #
21 #                                                                          #
22 ############################################################################
23 #
24
25 NAME="IPFire"                                                   # Software name
26 SNAME="ipfire"                                                  # Short name
27 VERSION="2.11"                                                  # Version number
28 CORE="55"                                                       # Core Level (Filename)
29 PAKFIRE_CORE="54"                                               # Core Level (PAKFIRE)
30 GIT_BRANCH=`git status | head -n1 | cut -d" " -f4`              # Git Branch
31 SLOGAN="www.ipfire.org"                                         # Software slogan
32 CONFIG_ROOT=/var/ipfire                                         # Configuration rootdir
33 NICE=10                                                         # Nice level
34 MAX_RETRIES=1                                                   # prefetch/check loop
35 BUILD_IMAGES=1                                                  # Build USB, Flash and Xen Images
36 KVER=`grep --max-count=1 VER lfs/linux | awk '{ print $3 }'`
37 MACHINE=`uname -m`
38 GIT_TAG=$(git tag | tail -1)                                    # Git Tag
39 GIT_LASTCOMMIT=$(git log | head -n1 | cut -d" " -f2 |head -c8)  # Last commit
40 TOOLCHAINVER=2
41
42 BUILDMACHINE=$MACHINE
43     if [ "$MACHINE" = "x86_64" ]; then
44         BUILDMACHINE="i686";
45         linux32="linux32";
46     fi
47
48
49 # Debian specific settings
50 if [ ! -e /etc/debian_version ]; then
51         FULLPATH=`which $0`
52 else
53         if [ -x /usr/bin/realpath ]; then
54                 FULLPATH=`/usr/bin/realpath $0`
55         else
56                 echo "ERROR: Need to do apt-get install realpath"
57                 exit 1
58         fi
59 fi
60
61 PWD=`pwd`
62 BASENAME=`basename $0`
63 BASEDIR=`echo $FULLPATH | sed "s/\/$BASENAME//g"`
64 LOGFILE=$BASEDIR/log/_build.preparation.log
65 export BASEDIR LOGFILE
66 DIR_CHK=$BASEDIR/cache/check
67 mkdir $BASEDIR/log/ 2>/dev/null
68
69 # Include funtions
70 . tools/make-functions
71
72 if [ -f .config ]; then
73         . .config
74 fi
75
76 if [ -z $EDITOR ]; then
77         for i in nano emacs vi; do
78                 EDITOR=$(which $i 2>/dev/null)
79                 if ! [ -z $EDITOR ]; then
80                         export EDITOR=$EDITOR
81                         break
82                 fi
83         done
84         [ -z $EDITOR ] && exiterror "You should have installed an editor."
85 fi
86
87 prepareenv() {
88     ############################################################################
89     #                                                                          #
90     # Are we running the right shell?                                          #
91     #                                                                          #
92     ############################################################################
93     if [ ! "$BASH" ]; then
94                         exiterror "BASH environment variable is not set.  You're probably running the wrong shell."
95     fi
96
97     if [ -z "${BASH_VERSION}" ]; then
98                         exiterror "Not running BASH shell."
99     fi
100
101
102     ############################################################################
103     #                                                                          #
104     # Trap on emergency exit                                                   #
105     #                                                                          #
106     ############################################################################
107     trap "exiterror 'Build process interrupted'" SIGINT SIGTERM SIGKILL SIGSTOP SIGQUIT
108
109
110     ############################################################################
111     #                                                                          #
112     # Resetting our nice level                                                 #
113     #                                                                          #
114     ############################################################################
115     echo -ne "Resetting our nice level to $NICE" | tee -a $LOGFILE
116     renice $NICE $$ > /dev/null
117     if [ `nice` != "$NICE" ]; then
118                         beautify message FAIL
119                         exiterror "Failed to set correct nice level"
120     else
121                         beautify message DONE
122     fi
123
124
125     ############################################################################
126     #                                                                          #
127     # Checking if running as root user                                         #
128     #                                                                          #
129     ############################################################################
130     echo -ne "Checking if we're running as root user" | tee -a $LOGFILE
131     if [ `id -u` != 0 ]; then
132                         beautify message FAIL
133                         exiterror "Not building as root"
134     else
135                         beautify message DONE
136     fi
137
138
139     ############################################################################
140     #                                                                          #
141     # Checking for necessary temporary space                                   #
142     #                                                                          #
143     ############################################################################
144     echo -ne "Checking for necessary space on disk $BASE_DEV" | tee -a $LOGFILE
145     BASE_DEV=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $1 }'`
146     BASE_ASPACE=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $4 }'`
147     if (( 2048000 > $BASE_ASPACE )); then
148                         BASE_USPACE=`du -skx $BASEDIR | awk '{print $1}'`
149                         if (( 2048000 - $BASE_USPACE > $BASE_ASPACE )); then
150                                 beautify message FAIL
151                                 exiterror "Not enough temporary space available, need at least 2GB on $BASE_DEV"
152                         fi
153     else
154                         beautify message DONE
155     fi
156
157     ############################################################################
158     #                                                                          #
159     # Building Linux From Scratch system                                       #
160     #                                                                          #
161     ############################################################################
162     # Set umask
163     umask 022
164
165     # Set LFS Directory
166     LFS=$BASEDIR/build
167
168     # Check /tools symlink
169     if [ -h /tools ]; then
170         rm -f /tools
171     fi
172     if [ ! -a /tools ]; then
173                         ln -s $BASEDIR/build/tools /
174     fi
175     if [ ! -h /tools ]; then
176                         exiterror "Could not create /tools symbolic link."
177     fi
178
179     # Setup environment
180     set +h
181     LC_ALL=POSIX
182     if [ -z $MAKETUNING ]; then
183         if [ "${MACHINE:0:3}" = "arm" ]; then
184             MAKETUNING="-j2"
185         else
186             MAKETUNING="-j6"
187         fi
188     fi
189     export LFS LC_ALL CFLAGS CXXFLAGS MAKETUNING
190     unset CC CXX CPP LD_LIBRARY_PATH LD_PRELOAD
191
192     # Make some extra directories
193     mkdir -p $BASEDIR/build/{tools,etc,usr/src} 2>/dev/null
194     mkdir -p $BASEDIR/build/{dev/{shm,pts},proc,sys}
195     mkdir -p $BASEDIR/{cache,ccache} 2>/dev/null
196     mkdir -p $BASEDIR/build/usr/src/{cache,config,doc,html,langs,lfs,log,src,ccache}
197
198     mknod -m 600 $BASEDIR/build/dev/console c 5 1 2>/dev/null
199     mknod -m 666 $BASEDIR/build/dev/null c 1 3 2>/dev/null
200
201     # Make all sources and proc available under lfs build
202     mount --bind /dev            $BASEDIR/build/dev
203     mount --bind /dev/pts        $BASEDIR/build/dev/pts
204     mount --bind /dev/shm        $BASEDIR/build/dev/shm
205     mount --bind /proc           $BASEDIR/build/proc
206     mount --bind /sys            $BASEDIR/build/sys
207     mount --bind $BASEDIR/cache  $BASEDIR/build/usr/src/cache
208     mount --bind $BASEDIR/ccache $BASEDIR/build/usr/src/ccache
209     mount --bind $BASEDIR/config $BASEDIR/build/usr/src/config
210     mount --bind $BASEDIR/doc    $BASEDIR/build/usr/src/doc
211     mount --bind $BASEDIR/html   $BASEDIR/build/usr/src/html
212     mount --bind $BASEDIR/langs  $BASEDIR/build/usr/src/langs
213     mount --bind $BASEDIR/lfs    $BASEDIR/build/usr/src/lfs
214     mount --bind $BASEDIR/log    $BASEDIR/build/usr/src/log
215     mount --bind $BASEDIR/src    $BASEDIR/build/usr/src/src
216
217     # This is a temporary hack!!!
218     if [ ! -f /tools/bin/hostname ]; then
219       cp -f /bin/hostname /tools/bin/hostname 2>/dev/null
220     fi
221
222     # Run LFS static binary creation scripts one by one
223     export CCACHE_DIR=$BASEDIR/ccache
224     export CCACHE_COMPRESS=1
225     export CCACHE_HASHDIR=1
226
227     # Remove pre-install list of installed files in case user erase some files before rebuild
228     rm -f $BASEDIR/build/usr/src/lsalr 2>/dev/null
229 }
230
231 buildtoolchain() {
232     local error=false
233     case "${MACHINE}:$(uname -m)" in
234         # x86
235         i586:i586|i586:i686)
236             # These are working.
237             ;;
238         i586:*)
239             error=true
240             ;;
241
242         # ARM
243         armv5tel:armv5tel|armv5tel:armv5tejl)
244             # These are working.
245             ;;
246         armv5tel:*)
247             error=true
248             ;;
249     esac
250
251     ${error} && \
252         exiterror "Cannot build ${MACHINE} toolchain on $(uname -m). Please use the download if any."
253
254     if [ "$(uname -r | grep ipfire)" ]; then
255         exiterror "Cannot build toolchain on ipfire. Please use the download."
256     fi
257
258     LOGFILE="$BASEDIR/log/_build.toolchain.log"
259     export LOGFILE
260     NATIVEGCC=`gcc --version | grep GCC | awk {'print $3'}`
261     export NATIVEGCC GCCmajor=${NATIVEGCC:0:1} GCCminor=${NATIVEGCC:2:1} GCCrelease=${NATIVEGCC:4:1}
262     ORG_PATH=$PATH
263     lfsmake1 ccache     PASS=1
264     lfsmake1 make       PASS=1
265     lfsmake1 binutils   PASS=1
266     lfsmake1 gcc                PASS=1
267     export PATH=$BASEDIR/build/usr/local/bin:$BASEDIR/build/tools/bin:$PATH
268     if [ "${MACHINE_TYPE}" = "arm" ]; then
269         lfsmake1 linux TOOLS=1 HEADERS=1
270     else
271         lfsmake1 linux-libc-header
272     fi
273     lfsmake1 glibc
274     lfsmake1 cleanup-toolchain PASS=1
275     lfsmake1 fake-environ
276     lfsmake1 tcl
277     lfsmake1 expect
278     lfsmake1 dejagnu
279     lfsmake1 gcc                PASS=2
280     lfsmake1 binutils   PASS=2
281     lfsmake1 ccache     PASS=2
282     lfsmake1 ncurses
283     lfsmake1 bash
284     lfsmake1 bzip2
285     lfsmake1 coreutils
286     lfsmake1 diffutils
287     lfsmake1 findutils
288     lfsmake1 gawk
289     lfsmake1 gettext
290     lfsmake1 grep
291     lfsmake1 gzip
292     lfsmake1 m4
293     lfsmake1 make       PASS=2
294     lfsmake1 patch
295     lfsmake1 perl
296     lfsmake1 sed
297     lfsmake1 tar
298     lfsmake1 texinfo
299     lfsmake1 util-linux
300     lfsmake1 strip
301     lfsmake1 cleanup-toolchain  PASS=2
302     export PATH=$ORG_PATH
303 }
304
305 buildbase() {
306     LOGFILE="$BASEDIR/log/_build.base.log"
307     export LOGFILE
308     lfsmake2 stage2
309     if [ "${MACHINE_TYPE}" = "arm" ]; then
310         lfsmake2 linux HEADERS=1
311     else
312         lfsmake2 linux-libc-header
313     fi
314     lfsmake2 man-pages
315     lfsmake2 glibc
316     lfsmake2 tzdata
317     lfsmake2 cleanup-toolchain  PASS=3
318     lfsmake2 binutils
319     lfsmake2 gcc
320     lfsmake2 berkeley
321     lfsmake2 coreutils
322     lfsmake2 iana-etc
323     lfsmake2 m4
324     lfsmake2 bison
325     lfsmake2 ncurses
326     lfsmake2 procps
327     lfsmake2 sed
328     lfsmake2 libtool
329     lfsmake2 perl
330     lfsmake2 readline
331     lfsmake2 zlib
332     lfsmake2 autoconf
333     lfsmake2 automake
334     lfsmake2 bash
335     lfsmake2 bzip2
336     lfsmake2 diffutils
337     lfsmake2 e2fsprogs
338     lfsmake2 ed
339     lfsmake2 file
340     lfsmake2 findutils
341     lfsmake2 flex
342     lfsmake2 gawk
343     lfsmake2 gettext
344     lfsmake2 grep
345     lfsmake2 groff
346     lfsmake2 gzip
347     lfsmake2 inetutils
348     lfsmake2 iproute2
349     lfsmake2 kbd
350     lfsmake2 less
351     lfsmake2 libaal
352     lfsmake2 make
353     lfsmake2 man
354     lfsmake2 mktemp
355     lfsmake2 module-init-tools
356     lfsmake2 net-tools
357     lfsmake2 patch
358     lfsmake2 psmisc
359     lfsmake2 reiser4progs
360     lfsmake2 shadow
361     lfsmake2 sysklogd
362     lfsmake2 sysvinit
363     lfsmake2 tar
364     lfsmake2 texinfo
365     lfsmake2 udev
366     lfsmake2 util-linux
367     lfsmake2 vim
368     lfsmake2 grub
369 }
370
371 buildipfire() {
372   LOGFILE="$BASEDIR/log/_build.ipfire.log"
373   export LOGFILE
374   ipfiremake configroot
375   ipfiremake backup
376   ipfiremake dhcp
377   ipfiremake dhcpcd
378   ipfiremake libusb
379   ipfiremake libpcap
380   ipfiremake ppp
381   ipfiremake pptp
382   ipfiremake unzip
383   ipfiremake which
384   ipfiremake xz
385   ipfiremake linux-firmware
386   ipfiremake zd1211-firmware
387   ipfiremake fw_ath9k_htc
388   ipfiremake u-boot
389
390   # The xen and PAE kernels are only available for x86
391   if [ "${MACHINE_TYPE}" != "arm" ]; then
392     ipfiremake linux                    KCFG="-xen"
393     ipfiremake kqemu                    KCFG="-xen"
394     ipfiremake v4l-dvb                  KCFG="-xen"
395     ipfiremake madwifi                  KCFG="-xen"
396     ipfiremake mISDN                    KCFG="-xen"
397     ipfiremake dahdi                    KCFG="-xen" KMOD=1
398     ipfiremake cryptodev                KCFG="-xen"
399     ipfiremake compat-wireless          KCFG="-xen"
400     ipfiremake r8169                    KCFG="-xen"
401     ipfiremake r8168                    KCFG="-xen"
402     ipfiremake r8101                    KCFG="-xen"
403     ipfiremake e1000                    KCFG="-xen"
404     ipfiremake e1000e                   KCFG="-xen"
405     ipfiremake igb                      KCFG="-xen"
406     ipfiremake linux                    KCFG="-pae"
407     ipfiremake kqemu                    KCFG="-pae"
408     ipfiremake kvm-kmod                 KCFG="-pae"
409     ipfiremake v4l-dvb                  KCFG="-pae"
410     ipfiremake madwifi                  KCFG="-pae"
411     ipfiremake alsa                     KCFG="-pae" KMOD=1
412     ipfiremake mISDN                    KCFG="-pae"
413     ipfiremake dahdi                    KCFG="-pae" KMOD=1
414     ipfiremake cryptodev                KCFG="-pae"
415     ipfiremake compat-wireless          KCFG="-pae"
416 #    ipfiremake r8169                   KCFG="-pae"
417 #    ipfiremake r8168                   KCFG="-pae"
418 #    ipfiremake r8101                   KCFG="-pae"
419     ipfiremake e1000                    KCFG="-pae"
420     ipfiremake e1000e                   KCFG="-pae"
421     ipfiremake igb                      KCFG="-pae"
422     ipfiremake linux                    KCFG=""
423     ipfiremake v4l-dvb                  KCFG=""
424     ipfiremake kqemu                    KCFG=""
425     ipfiremake kvm-kmod                 KCFG=""
426     ipfiremake madwifi                  KCFG=""
427     ipfiremake alsa                     KCFG="" KMOD=1
428     ipfiremake mISDN                    KCFG=""
429     ipfiremake dahdi                    KCFG="" KMOD=1
430     ipfiremake cryptodev                KCFG=""
431     ipfiremake compat-wireless          KCFG=""
432 #    ipfiremake r8169                   KCFG=""
433 #    ipfiremake r8168                   KCFG=""
434 #    ipfiremake r8101                   KCFG=""
435     ipfiremake e1000                    KCFG=""
436     ipfiremake e1000e                   KCFG=""
437     ipfiremake igb                      KCFG=""
438   else
439     # arm-versatile kernel build
440     ipfiremake linux                    KCFG="-versatile"
441     ipfiremake v4l-dvb                  KCFG="-versatile"
442     ipfiremake kqemu                    KCFG="-versatile"
443     ipfiremake kvm-kmod                 KCFG="-versatile"
444     ipfiremake madwifi                  KCFG="-versatile"
445     ipfiremake mISDN                    KCFG="-versatile"
446     ipfiremake dahdi                    KCFG="-versatile" KMOD=1
447     ipfiremake cryptodev                KCFG="-versatile"
448     ipfiremake compat-wireless          KCFG="-versatile"
449 #  ipfiremake r8169                     KCFG="-versatile"
450 #  ipfiremake r8168                     KCFG="-versatile"
451 #  ipfiremake r8101                     KCFG="-versatile"
452     ipfiremake e1000                    KCFG="-versatile"
453     ipfiremake e1000e                   KCFG="-versatile"
454     ipfiremake igb                      KCFG="-versatile"
455     # arm-kirkwood kernel build
456     ipfiremake linux                    KCFG="-kirkwood"
457     ipfiremake v4l-dvb                  KCFG="-kirkwood"
458     ipfiremake kqemu                    KCFG="-kirkwood"
459     ipfiremake kvm-kmod                 KCFG="-kirkwood"
460     ipfiremake madwifi                  KCFG="-kirkwood"
461     ipfiremake mISDN                    KCFG="-kirkwood"
462     ipfiremake dahdi                    KCFG="-kirkwood" KMOD=1
463     ipfiremake cryptodev                KCFG="-kirkwood"
464     ipfiremake compat-wireless          KCFG="-kirkwood"
465 #  ipfiremake r8169                     KCFG="-kirkwood"
466 #  ipfiremake r8168                     KCFG="-kirkwood"
467 #  ipfiremake r8101                     KCFG="-kirkwood"
468     ipfiremake e1000                    KCFG="-kirkwood"
469     ipfiremake e1000e                   KCFG="-kirkwood"
470     ipfiremake igb                      KCFG="-kirkwood"
471   fi
472   ipfiremake pkg-config
473   ipfiremake linux-atm
474   ipfiremake cpio
475   ipfiremake dracut
476   ipfiremake expat
477   ipfiremake gdbm
478   ipfiremake gmp
479   ipfiremake pam
480   ipfiremake openssl
481   ipfiremake curl
482   ipfiremake tcl
483   ipfiremake sqlite
484   ipfiremake python
485   ipfiremake fireinfo
486   ipfiremake libnet
487   ipfiremake libnl
488   ipfiremake libidn
489   ipfiremake libjpeg
490   ipfiremake libpng
491   ipfiremake libtiff
492   ipfiremake libart
493   ipfiremake freetype
494   ipfiremake gd
495   ipfiremake popt
496   ipfiremake pcre
497   ipfiremake slang
498   ipfiremake newt
499   ipfiremake attr
500   ipfiremake acl
501   ipfiremake libcap
502   ipfiremake pciutils
503   ipfiremake usbutils
504   ipfiremake libxml2
505   ipfiremake libxslt
506   ipfiremake BerkeleyDB
507   ipfiremake mysql
508   ipfiremake cyrus-sasl
509   ipfiremake openldap
510   ipfiremake apache2
511   ipfiremake php
512   ipfiremake apache2                    PASS=C
513   ipfiremake arping
514   ipfiremake beep
515   ipfiremake bind
516   ipfiremake dvdrtools
517   ipfiremake dnsmasq
518   ipfiremake dosfstools
519   ipfiremake reiserfsprogs
520   ipfiremake xfsprogs
521   ipfiremake sysfsutils
522   ipfiremake fuse
523   ipfiremake ntfs-3g
524   ipfiremake ethtool
525   ipfiremake ez-ipupdate
526   ipfiremake fcron
527   ipfiremake perl-GD
528   ipfiremake GD-Graph
529   ipfiremake GD-TextUtil
530   ipfiremake gnupg
531   ipfiremake hdparm
532   ipfiremake sdparm
533   ipfiremake mtools
534   ipfiremake initscripts
535   ipfiremake whatmask
536   ipfiremake iptables
537   ipfiremake libupnp
538   ipfiremake ipaddr
539   ipfiremake iptstate
540   ipfiremake iputils
541   ipfiremake l7-protocols
542   ipfiremake mISDNuser
543   ipfiremake capi4k-utils
544   ipfiremake hwdata
545   ipfiremake kudzu
546   ipfiremake logrotate
547   ipfiremake logwatch
548   ipfiremake misc-progs
549   ipfiremake nano
550   ipfiremake nasm
551   ipfiremake URI
552   ipfiremake HTML-Tagset
553   ipfiremake HTML-Parser
554   ipfiremake Compress-Zlib
555   ipfiremake Digest
556   ipfiremake Digest-SHA1
557   ipfiremake Digest-HMAC
558   ipfiremake libwww-perl
559   ipfiremake Net-DNS
560   ipfiremake Net-IPv4Addr
561   ipfiremake Net_SSLeay
562   ipfiremake IO-Stringy
563   ipfiremake Unix-Syslog
564   ipfiremake Mail-Tools
565   ipfiremake MIME-Tools
566   ipfiremake Net-Server
567   ipfiremake Convert-TNEF
568   ipfiremake Convert-UUlib
569   ipfiremake Archive-Tar
570   ipfiremake Archive-Zip
571   ipfiremake Text-Tabs+Wrap
572   ipfiremake Locale-Country
573   ipfiremake XML-Parser
574   ipfiremake python-setuptools
575   ipfiremake python-clientform
576   ipfiremake python-mechanize
577   ipfiremake python-feedparser
578   ipfiremake python-rssdler
579   ipfiremake glib
580   ipfiremake GeoIP
581   ipfiremake fwhits
582   ipfiremake noip_updater
583   ipfiremake ntp
584   ipfiremake openssh
585   ipfiremake rrdtool
586   ipfiremake setserial
587   ipfiremake setup
588   ipfiremake libdnet
589   ipfiremake daq
590   ipfiremake snort
591   ipfiremake oinkmaster
592   ipfiremake squid
593   ipfiremake squidguard
594   ipfiremake calamaris
595   ipfiremake tcpdump
596   ipfiremake traceroute
597   ipfiremake vlan
598   ipfiremake wireless
599   ipfiremake libsafe
600   ipfiremake pakfire
601   ipfiremake spandsp
602   ipfiremake lzo
603   ipfiremake openvpn
604   ipfiremake pammysql
605   ipfiremake cups
606   ipfiremake ghostscript
607   ipfiremake foomatic
608   ipfiremake hplip
609   ipfiremake samba
610   ipfiremake sudo
611   ipfiremake mc
612   ipfiremake wget
613   ipfiremake bridge-utils
614   ipfiremake screen
615   ipfiremake hddtemp
616   ipfiremake smartmontools
617   ipfiremake htop
618   ipfiremake postfix
619   ipfiremake fetchmail
620   ipfiremake cyrus-imapd
621   ipfiremake openmailadmin
622   ipfiremake clamav
623   ipfiremake spamassassin
624   ipfiremake amavisd
625   ipfiremake alsa
626   ipfiremake mpfire
627   ipfiremake guardian
628   ipfiremake libid3tag
629   ipfiremake libmad
630   ipfiremake libogg
631   ipfiremake libvorbis
632   ipfiremake libdvbpsi
633   ipfiremake lame
634   ipfiremake sox
635   ipfiremake libshout
636   ipfiremake xvid
637   ipfiremake libmpeg2
638   ipfiremake cmake
639   ipfiremake gnump3d
640   ipfiremake libsigc++
641   ipfiremake applejuice
642   ipfiremake libtorrent
643   ipfiremake rtorrent
644   ipfiremake ipfireseeder
645   ipfiremake rsync
646   ipfiremake tcpwrapper
647   ipfiremake libevent
648   ipfiremake libevent2
649   ipfiremake portmap
650   ipfiremake nfs
651   ipfiremake nmap
652   ipfiremake ncftp
653   ipfiremake etherwake
654   ipfiremake bwm-ng
655   ipfiremake tripwire
656   ipfiremake sysstat
657   ipfiremake vsftpd
658   ipfiremake strongswan
659   ipfiremake lsof
660   ipfiremake centerim
661   ipfiremake br2684ctl
662   ipfiremake pcmciautils
663   ipfiremake lm_sensors
664   ipfiremake liboping
665   ipfiremake collectd
666   ipfiremake teamspeak
667   ipfiremake elinks
668   ipfiremake igmpproxy
669   ipfiremake fbset
670   ipfiremake sdl
671   ipfiremake qemu
672   ipfiremake qemu-kqemu
673   ipfiremake sane
674   ipfiremake netpbm
675   ipfiremake phpSANE
676   ipfiremake tunctl
677   ipfiremake nagios
678   ipfiremake nagios_nrpe
679   ipfiremake ebtables
680   ipfiremake fontconfig
681   ipfiremake freefont
682   ipfiremake directfb
683   ipfiremake dfb++
684   ipfiremake faad2
685   ipfiremake ffmpeg
686   ipfiremake videolan
687   ipfiremake vdr
688   ipfiremake w_scan
689   ipfiremake icecast
690   ipfiremake icegenerator
691   ipfiremake mpd
692   ipfiremake libmpdclient
693   ipfiremake mpc
694   ipfiremake git
695   ipfiremake squidclamav
696   ipfiremake bc
697   ipfiremake vnstat
698   ipfiremake vnstati
699   ipfiremake iw
700   ipfiremake wpa_supplicant
701   ipfiremake hostapd
702   ipfiremake urlgrabber
703   ipfiremake syslinux
704   ipfiremake tftpd
705   ipfiremake cpufrequtils
706   ipfiremake dbus
707   ipfiremake bluetooth
708   ipfiremake gutenprint
709   ipfiremake apcupsd
710   ipfiremake iperf
711   ipfiremake netcat
712   ipfiremake 7zip
713   ipfiremake lynis
714   ipfiremake splix
715   ipfiremake streamripper
716   ipfiremake sshfs
717   ipfiremake taglib
718   ipfiremake mediatomb
719   ipfiremake sslh
720   ipfiremake perl-gettext
721   ipfiremake vdradmin
722   ipfiremake miau
723   ipfiremake netsnmpd
724   ipfiremake perl-DBI
725   ipfiremake perl-DBD-mysql
726   ipfiremake cacti
727   ipfiremake icecc
728   ipfiremake openvmtools
729   ipfiremake nagiosql
730   ipfiremake iftop
731   ipfiremake motion
732   ipfiremake joe
733   ipfiremake nut
734   ipfiremake watchdog
735   ipfiremake libpri
736   ipfiremake dahdi
737   ipfiremake asterisk
738   ipfiremake lcr
739   ipfiremake usb_modeswitch
740   ipfiremake usb_modeswitch_data
741   ipfiremake zerofree
742   ipfiremake mdadm
743   ipfiremake eject
744   ipfiremake pound
745   ipfiremake minicom
746   ipfiremake ddrescue
747   ipfiremake imspector
748   ipfiremake miniupnpd
749   ipfiremake client175
750   ipfiremake powertop
751   ipfiremake parted
752   ipfiremake swig
753   ipfiremake python-m2crypto
754   ipfiremake wireless-regdb
755   ipfiremake crda
756   ipfiremake libsolv
757   ipfiremake python-distutils-extra
758   ipfiremake python-lzma
759   ipfiremake python-progressbar
760   ipfiremake python-xattr
761   ipfiremake intltool
762   ipfiremake pakfire3-deps
763   ipfiremake transmission
764   ipfiremake dpfhack
765   ipfiremake lcd4linux
766   echo Build on $HOSTNAME > $BASEDIR/build/var/ipfire/firebuild
767   cat /proc/version >> $BASEDIR/build/var/ipfire/firebuild
768   echo >> $BASEDIR/build/var/ipfire/firebuild
769   git log -1 >> $BASEDIR/build/var/ipfire/firebuild
770   echo >> $BASEDIR/build/var/ipfire/firebuild
771   git status >> $BASEDIR/build/var/ipfire/firebuild
772   echo >> $BASEDIR/build/var/ipfire/firebuild
773   cat /proc/cpuinfo >> $BASEDIR/build/var/ipfire/firebuild
774   echo $PAKFIRE_CORE > $BASEDIR/build/opt/pakfire/db/core/mine
775   if [ "$GIT_BRANCH" = "master" -o "$GIT_BRANCH" = "next" ]; then
776         echo "$NAME $VERSION ($MACHINE) - Development Build: $GIT_LASTCOMMIT" > $BASEDIR/build/etc/system-release
777   else
778         echo "$NAME $VERSION ($MACHINE) - $GIT_BRANCH" > $BASEDIR/build/etc/system-release
779   fi
780 }
781
782 buildinstaller() {
783   # Run installer scripts one by one
784   LOGFILE="$BASEDIR/log/_build.installer.log"
785   export LOGFILE
786   ipfiremake as86
787   ipfiremake mbr
788   ipfiremake memtest
789   ipfiremake installer
790   cp -f $BASEDIR/doc/COPYING $BASEDIR/build/install/initrd/
791   installmake strip
792   ipfiremake initrd
793 }
794
795 buildpackages() {
796   LOGFILE="$BASEDIR/log/_build.packages.log"
797   export LOGFILE
798   echo "... see detailed log in _build.*.log files" >> $LOGFILE
799
800   
801   # Generating list of packages used
802   echo -n "Generating packages list from logs" | tee -a $LOGFILE
803   rm -f $BASEDIR/doc/packages-list
804   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
805         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
806                 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
807         fi
808   done
809   echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
810   grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$\|install1$\|install2$\|pass1$\|pass2$\|pass3$' \
811         $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
812   rm -f $BASEDIR/doc/packages-list
813   # packages-list.txt is ready to be displayed for wiki page
814   beautify message DONE
815   
816   # Update changelog
817   cd $BASEDIR
818   [ -z $GIT_TAG ]  || LAST_TAG=$GIT_TAG
819   [ -z $LAST_TAG ] || EXT="$LAST_TAG..HEAD"
820   git log -n 500 --no-merges --pretty=medium --shortstat $EXT > $BASEDIR/doc/ChangeLog
821
822   # Create images for install
823   ipfiremake cdrom
824
825   # Check if there is a loop device for building in virtual environments
826   if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ]); then
827         if [ "${MACHINE_TYPE}" != "arm" ]; then
828                 ipfiremake usb-stick
829         fi
830         ipfiremake flash-images
831   fi
832
833   mv $LFS/install/images/{*.iso,*.tgz,*.img.gz,*.bz2} $BASEDIR >> $LOGFILE 2>&1
834
835   ipfirepackages
836
837   # Check if there is a loop device for building in virtual environments
838   if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ]) && [ "${MACHINE_TYPE}" != "arm" ]; then
839         cp -f $BASEDIR/packages/linux-xen-*.ipfire $LFS/install/packages/
840         cp -f $BASEDIR/packages/meta-linux-xen $LFS/install/packages/
841         ipfiremake xen-image
842         rm -rf $LFS/install/packages/linux-xen-*.ipfire
843         rm -rf $LFS/install/packages/meta-linux-xen
844   fi
845   mv $LFS/install/images/*.bz2 $BASEDIR >> $LOGFILE 2>&1
846
847   cd $BASEDIR
848   for i in `ls *.bz2 *.img.gz *.iso`; do
849         md5sum $i > $i.md5
850   done
851   cd $PWD
852
853   # Cleanup
854   stdumount
855   rm -rf $BASEDIR/build/tmp/*
856
857   # Generating total list of files
858   echo -n "Generating files list from logs" | tee -a $LOGFILE
859   rm -f $BASEDIR/log/FILES
860   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
861         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
862                 echo "##" >>$BASEDIR/log/FILES
863                 echo "## `basename $i`" >>$BASEDIR/log/FILES
864                 echo "##" >>$BASEDIR/log/FILES
865                 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
866         fi
867   done
868   beautify message DONE
869
870   cd $PWD
871 }
872
873 ipfirepackages() {
874         ipfiremake core-updates
875
876         local i
877         for i in $(find $BASEDIR/config/rootfiles/packages{${machine},} -maxdepth 1 -type f); do
878                 i=$(basename ${i})
879                 if [ -e $BASEDIR/lfs/$i ]; then
880                         ipfiredist $i
881                 else
882                         echo -n $i
883                         beautify message SKIP
884                 fi
885         done
886   test -d $BASEDIR/packages || mkdir $BASEDIR/packages
887   mv -f $LFS/install/packages/* $BASEDIR/packages >> $LOGFILE 2>&1
888   rm -rf  $BASEDIR/build/install/packages/*
889 }
890
891 # See what we're supposed to do
892 case "$1" in 
893 build)
894         clear
895         PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz 2> /dev/null | head -n 1`
896         #only restore on a clean disk
897         if [ ! -f log/cleanup-toolchain-2-tools ]; then
898                 if [ ! -n "$PACKAGE" ]; then
899                         beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
900                         prepareenv
901                         buildtoolchain
902                 else
903                         PACKAGENAME=${PACKAGE%.tar.gz}
904                         beautify build_stage "Packaged toolchain compilation"
905                         if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
906                                 tar zxf $PACKAGE
907                                 prepareenv
908                         else
909                                 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
910                         fi
911                 fi
912         else
913                 echo -n "Using installed toolchain" | tee -a $LOGFILE
914                 beautify message SKIP
915                 prepareenv
916         fi
917
918         beautify build_start
919         beautify build_stage "Building LFS"
920         buildbase
921
922         beautify build_stage "Building IPFire"
923         buildipfire
924
925         beautify build_stage "Building installer"
926         buildinstaller
927
928         beautify build_stage "Building packages"
929         buildpackages
930         
931         beautify build_stage "Checking Logfiles for new Files"
932
933         cd $BASEDIR
934         tools/checknewlog.pl
935         cd $PWD
936
937         beautify build_end
938         ;;
939 shell)
940         # enter a shell inside LFS chroot
941         # may be used to changed kernel settings
942         prepareenv
943         entershell
944         ;;
945 clean)
946         echo -en "${BOLD}Cleaning build directory...${NORMAL}"
947         for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
948                 $LOSETUP -d $i 2>/dev/null
949         done
950         for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
951                 umount $i
952         done
953         stdumount
954         for i in `seq 0 7`; do
955             if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
956                 umount /dev/loop${i}     2>/dev/null;
957                 losetup -d /dev/loop${i} 2>/dev/null;
958             fi;
959         done
960         rm -rf $BASEDIR/build
961         rm -rf $BASEDIR/cdrom
962         rm -rf $BASEDIR/packages
963         rm -rf $BASEDIR/log
964         if [ -h /tools ]; then
965                 rm -f /tools
966         fi
967         rm -f $BASEDIR/ipfire-*
968         beautify message DONE
969         ;;
970 downloadsrc)
971         if [ ! -d $BASEDIR/cache ]; then
972                 mkdir $BASEDIR/cache
973         fi
974         mkdir -p $BASEDIR/log
975         echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
976         FINISHED=0
977         cd $BASEDIR/lfs
978         for c in `seq $MAX_RETRIES`; do
979                 if (( FINISHED==1 )); then 
980                         break
981                 fi
982                 FINISHED=1
983                 cd $BASEDIR/lfs
984                 for i in *; do
985                         if [ -f "$i" -a "$i" != "Config" ]; then
986                                 lfsmakecommoncheck ${i} || continue
987
988                                 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
989                                         MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
990                                 if [ $? -ne 0 ]; then
991                                         beautify message FAIL
992                                         FINISHED=0
993                                 else
994                                         if [ $c -eq 1 ]; then
995                                         beautify message DONE
996                                         fi
997                                 fi
998                         fi
999                 done
1000         done
1001         echo -e "${BOLD}***Verifying md5sums${NORMAL}"
1002         ERROR=0
1003         for i in *; do
1004                 if [ -f "$i" -a "$i" != "Config" ]; then
1005                         make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
1006                                 MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
1007                         if [ $? -ne 0 ]; then
1008                                 echo -ne "MD5 difference in lfs/$i"
1009                                 beautify message FAIL
1010                                 ERROR=1
1011                         fi
1012                 fi
1013         done
1014         if [ $ERROR -eq 0 ]; then
1015                 echo -ne "${BOLD}all files md5sum match${NORMAL}"
1016                 beautify message DONE
1017         else
1018                 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
1019                 beautify message FAIL
1020         fi
1021         cd - >/dev/null 2>&1
1022         ;;
1023 toolchain)
1024         clear
1025         prepareenv
1026         beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
1027         buildtoolchain
1028         echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1029         test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1030         cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1031                 build/{bin,etc,usr/bin,usr/local} \
1032                 build/tools/{bin,etc,*-linux-gnu*,include,lib,libexec,sbin,share,var} \
1033                 log >> $LOGFILE
1034         md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1035                 > cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.md5
1036         stdumount
1037         ;;
1038 gettoolchain)
1039         # arbitrary name to be updated in case of new toolchain package upload
1040         PACKAGE=$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE
1041         if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
1042                 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
1043                 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1044                 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1045                 cd $BASEDIR/cache/toolchains
1046                 wget -U "IPFireSourceGrabber/2.x" $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
1047                 if [ $? -ne 0 ]; then
1048                         echo "`date -u '+%b %e %T'`: error downloading $PACKAGE toolchain for $MACHINE machine" | tee -a $LOGFILE
1049                 else
1050                         if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1051                                 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1052                         else
1053                                 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1054                         fi
1055                 fi
1056         else
1057                 echo "Toolchain is already downloaded. Exiting..."
1058         fi
1059         ;;
1060 othersrc)
1061         prepareenv
1062         echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
1063         chroot $LFS /tools/bin/env -i   HOME=/root \
1064         TERM=$TERM PS1='\u:\w\$ ' \
1065         PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
1066         VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
1067         /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
1068         mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
1069         if [ $? -eq "0" ]; then
1070                 beautify message DONE
1071         else
1072                 beautify message FAIL
1073         fi
1074         stdumount
1075         ;;
1076 uploadsrc)
1077         PWD=`pwd`
1078         if [ -z $IPFIRE_USER ]; then
1079                 echo -n "You have to setup IPFIRE_USER first. See .config for details."
1080                 beautify message FAIL
1081                 exit 1
1082         fi
1083
1084         URL_SOURCE=$(grep URL_SOURCE lfs/Config | awk '{ print $3 }')
1085         REMOTE_FILES=$(echo "ls -1 --ignore=toolchains" | sftp -C ${IPFIRE_USER}@${URL_SOURCE})
1086
1087         cd $BASEDIR/cache/
1088         for file in $(ls -1 --ignore=toolchains); do
1089                 grep -q "$file" <<<$REMOTE_FILES && continue
1090                 NEW_FILES="$NEW_FILES $file"
1091         done
1092         [ -n "$NEW_FILES" ] && scp -2 $NEW_FILES ${IPFIRE_USER}@${URL_SOURCE}
1093         cd $BASEDIR
1094         cd $PWD
1095         exit 0
1096         ;;
1097 lang)
1098         update_langs
1099         ;;
1100 *)
1101         echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1102         cat doc/make.sh-usage
1103         ;;
1104 esac