]> git.ipfire.org Git - ipfire-3.x.git/commitdiff
Compressor.
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 8 Mar 2009 16:30:31 +0000 (17:30 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 8 Mar 2009 16:30:31 +0000 (17:30 +0100)
lfs/Config
make.sh
src/pakfire/compressor [new file with mode: 0755]
tools/make-include

index c0f750666e07d1f55d2ed3195a29a22ac48d9974..ad9073269825b7de5e98772582ff9366def1e6e9 100644 (file)
@@ -57,6 +57,8 @@ DIR_TMP     = /tmp
 DIR_PATCHES = $(DIR_DL)/../patches
 DIR_CONFIG  = $(DIR_CONF)
 DIR_SOURCE  = $(DIR_SRC)/src
+DIR_PKG     = $(LFS_BASEDIR)/lfs
+DIR_TARGET  = $(LFS_BASEDIR)/target
 
 VPATH = $(DIR_DL):$(DIR_PATCHES)
 
@@ -88,19 +90,27 @@ PYTHON_COMPILE = find /usr/lib/python*/ -name *.py | xargs /usr/bin/py-compile
 
 define DO_PKG_INFO
        @## ALPHABETICAL ORDER ##
-       @echo "DEBUG=\"$(DEBUG)\""
-       @echo "DEPS=\"$(DEPS)\""
-       @echo "DESC=\"$(value LONG_DESC)\""
-       @echo "EXTRA=\"$(EXTRA)\""
-       @echo "FILES=\"$(objects)\""
-       @echo "GROUP=\"$(GROUP)\""
-       @echo "LICENSE=\"$(LICENSE)\""
-       @echo "MAINTAINER=\"$(MAINTAINER)\""
-       @echo "NAME=\"$(PKG_NAME)\""
-       @echo "VERSION=\"$(PKG_VER)\""
-       @echo "RELEASE=\"$(PKG_REL)\""
-       @echo "SHORT=\"$(value SHORT_DESC)\""
-       @echo "URL=\"$(URL)\""
+       @echo "local DEBUG=\"$(DEBUG)\""
+       @echo "local DEPS=\"$(DEPS)\""
+       @echo "local DESC=\"$(value LONG_DESC)\""
+       @echo "local EXTRA=\"$(EXTRA)\""
+       @echo "local FILES=\"$(objects)\""
+       @echo "local GROUP=\"$(GROUP)\""
+       @echo "local LICENSE=\"$(LICENSE)\""
+       @echo "local MAINTAINER=\"$(MAINTAINER)\""
+       @echo "local NAME=\"$(PKG_NAME)\""
+       @echo "local VERSION=\"$(PKG_VER)\""
+       @echo "local RELEASE=\"$(PKG_REL)\""
+       @echo "local SHORT=\"$(value SHORT_DESC)\""
+       @echo "local URL=\"$(URL)\""
+endef
+
+define DO_PACKAGE
+       if [ -n "$$ROOTFILE" ]; then \
+               NAME=$(NAME) SNAME=$(SNAME) VERSION=$(VERSION) KVER=$(KVER) \
+               TARGET=$(TARGET) MACHINE=$(MACHINE) IFS_TARGET=$(IFS_TARGET) \
+                       $(DIR_SOURCE)/pakfire/compressor $(PKG_NAME) $(PKG_VER) $(PKG_REL) $$ROOTFILE; \
+       fi
 endef
 
 # For each package we create a list of files that it installed under 
diff --git a/make.sh b/make.sh
index 908eb0b10efe694db6152e6ee8ed56b614cfa976..6299f3d362e9a299d7dfc4f213ee6342da0d0300 100755 (executable)
--- a/make.sh
+++ b/make.sh
@@ -459,6 +459,12 @@ packages_build() {
        pkg_list_packages > $BASEDIR/doc/packages-list.txt
        beautify message DONE
 
+       # Build packages
+       #local package
+       #for package in $BASEDIR/lfs/*; do
+       #       package_make $(basename $package)
+       #done
+
        if [ ${EMB} -eq 0 ]; then
                ipfire_make initramfs
                ipfire_make images
@@ -480,22 +486,10 @@ packages_build() {
                fi
        fi
 
-       # Build packages
-       for i in $(ls -1 $BASEDIR/src/rootfiles/extras); do
-               package=$(cut -d. -f2 <<< $i)
-               if [ -e $BASEDIR/lfs/$package ]; then
-                       echo -n $package
-                       beautify message SKIP
-               else
-                       echo -n $package
-                       beautify message SKIP
-               fi
-       done
-
        # Cleanup
        stdumount
        rm -rf $LFS/tmp/*
-       
+
        cd $PWD
 }
 
diff --git a/src/pakfire/compressor b/src/pakfire/compressor
new file mode 100755 (executable)
index 0000000..ba9a357
--- /dev/null
@@ -0,0 +1,79 @@
+#!/bin/bash
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2007, 2008, 2009 Michael Tremer & Christian Schmidt           #
+#                                                                             #
+# This program is free software: you can redistribute it and/or modify        #
+# it under the terms of the GNU General Public License as published by        #
+# the Free Software Foundation, either version 3 of the License, or           #
+# (at your option) any later version.                                         #
+#                                                                             #
+# This program is distributed in the hope that it will be useful,             #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of              #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               #
+# GNU General Public License for more details.                                #
+#                                                                             #
+# You should have received a copy of the GNU General Public License           #
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.       #
+#                                                                             #
+###############################################################################
+
+PKG_NAME=$1
+PKG_VER=$2
+PKG_REL=$3
+ROOTFILE=$4
+
+if [ -z "$TARGET" ]; then
+       echo "TARGET is not set. Cannot continue." >&2
+       exit 1
+fi
+
+if [ ! -e "$ROOTFILE" ]; then
+       echo "Rootfile does not exist." >&2
+       exit 1
+fi
+
+PKG_LIST="normal"
+# Checking for a devel package
+grep -q "^D" $ROOTFILE && PKG_LIST="$PKG_LIST devel"
+
+for PKG_EXTRA in $PKG_LIST; do
+       # Prepare target name.
+       PKG_TARGET=${PKG_NAME}-${PKG_VER}-${SNAME}-${PKG_REL}
+       if [ "$PKG_EXTRA" != "normal" ]; then
+               PKG_TARGET="$PKG_TARGET-$PKG_EXTRA"
+       fi
+       PKG_TARGET="$PKG_TARGET.$SNAME"
+
+       echo "Running for $PKG_TARGET..."
+
+       ARCHIEVE=$(mktemp)
+
+       # Remove unused files from filelist
+       FILELIST=$(grep -v "^#" $ROOTFILE)
+
+       if [ "$PKG_EXTRA" = "devel" ]; then
+               FILELIST=$(echo "$FILELIST" | grep "^D" | sed -e "s/^D//g")
+       else
+               FILELIST=$(echo "$FILELIST" | grep -v "^D")
+       fi
+
+       FILELIST=$(echo "$FILELIST" | sed \
+               -e "s/KVER/$KVER/g" \
+               -e "s/IFS_TARGET/$IFS_TARGET/g")
+
+       if [ -z "$FILELIST" ]; then
+               rm -f $ARCHIEVE
+               continue
+       fi
+
+       # Changing to root
+       cd /
+
+       echo "$FILELIST" | cpio -o | lzma -czv - > $ARCHIEVE
+
+       cat $ARCHIEVE > /tmp/$PKG_TARGET
+
+       rm -f $ARCHIEVE
+done
index 591cf3ae6b4f44632e0d922fac51a238cdfb5a30..8cbf6e0f1f7e5b40d08be8fae0a28cca7651edce 100644 (file)
@@ -166,6 +166,9 @@ entershell() {
 ################################################################################
 lfsmakecommoncheck()
 {
+       unset NAME VERSION
+       eval $(pkg_info $1)
+
        logger "Building $*"
        build_spy package $1
 
@@ -174,8 +177,7 @@ lfsmakecommoncheck()
                exiterror "No such file or directory: $BASEDIR/lfs/$1"
        fi
 
-       local PKG_VER=$(get_pkg_ver $BASEDIR/lfs/$1)
-       beautify make_pkg "$PKG_VER $*"
+       beautify make_pkg "$VERSION $*"
 
        # Script slipped?
        local i
@@ -355,6 +357,62 @@ ipfire_make() {
        return 0
 } # End of ipfire_make()
 
+
+################################################################################
+# This is the function that compresses every package                           #
+################################################################################
+package_make() {
+       SKIP_PACKAGE_LIST="SKIP_PACKAGE_LIST Config adjust-toolchain cdrom images pxe test-toolchain usb-key usb-stick" \
+               lfsmakecommoncheck $*
+       [ $? == 1 ] && return 0
+
+       local PKG_VER=$(get_pkg_ver $BASEDIR/lfs/$1)
+
+       local PKG_TIME_START=$(date +%s)
+       chroot $LFS $TOOLS_DIR/bin/env -i \
+               HOME=/root \
+               TERM=$TERM \
+               PS1='\u:\w\$ ' \
+               PATH=$PATH \
+               CONFIG_ROOT=${CONFIG_ROOT} \
+               VERSION=${VERSION} \
+               NAME=${NAME} \
+               SNAME=${SNAME} \
+               SLOGAN="$SLOGAN" \
+               LINKER=$LINKER \
+               TOOLS_DIR=$TOOLS_DIR \
+               INSTALLER_DIR=$INSTALLER_DIR \
+               CDROM_DIR=$CDROM_DIR \
+               IMAGES_DIR=$IMAGES_DIR \
+               MACHINE="$MACHINE" \
+               MACHINE_REAL="$MACHINE_REAL" \
+               IFS_HOST="$IFS_HOST" \
+               IFS_TARGET="$IFS_TARGET" \
+               TARGET="$TARGET" \
+               BUILD_DEBUG=$BUILD_DEBUG \
+               BUILD_EXTRAS=$BUILD_EXTRAS \
+               KVER=$KVER \
+               EMB=$EMB \
+               IMAGENAME=$IMAGENAME \
+               ROOTFILE=$(rootfiles_findone $1 | sed "s,$BASEDIR,/usr/src,g") \
+               LOGFILE=$(echo $LOGFILE | sed "s,$BASEDIR,/usr/src,g") \
+               bash -x -c "cd /usr/src/lfs && \
+               $EXTRA_MAKE make -f $* LFS_BASEDIR=/usr/src package" >>$LOGFILE 2>&1
+
+       local COMPILE_SUCCESS=$?
+       local PKG_TIME_END=$(date +%s)
+
+       if [ $COMPILE_SUCCESS -ne 0 ]; then
+               beautify result FAIL $[ $PKG_TIME_END - $PKG_TIME_START ] $1 $PKG_VER $STAGE_ORDER $STAGE
+               exiterror "Packageing $*"
+       else
+               beautify result DONE $[ $PKG_TIME_END - $PKG_TIME_START ] $1 $PKG_VER $STAGE_ORDER $STAGE
+               PACKAGES_DONE="$PACKAGES_DONE $1"
+       fi
+
+       return 0
+} # End of package_make()
+
 ################################################################################
 # This prepares the build environment                                          #
 ################################################################################