воскресенье, 19 мая 2013 г.

Сборка программ из исходников

Если у вас много пакетов программ которые нужно собрать из исходников, то для каждого пакета нужно сделать такую последовательность действий:

1. распаковать архив
2. сконфигурировать
3. скомпилировать
4. собрать пакет

Понятно что если пакетов большое количество то собирать руками займет много времени. Для себя я сделал bash скрипт который делает это автоматически:

-----------------------------------------------------------------------
#!/bin/sh

if [ $# -ne 1 ]; then
    echo "build package from source"
    echo "usage: `basename $0` filename.{tar.gz|tar.bz2|tar.xz}"
    exit 1
fi

TMP=/tmp/BS-$$ #TMP=/tmp/BS-`uuidgen | head -c 8`
PKG=`realpath $1 || exit 1`
PREFIX=/usr

case "$( uname -m )" in
  x86_64) LIBDIR=$PREFIX/lib64 ;;
    i?86) LIBDIR=$PREFIX/lib ;; # $PREFIX/lib32
       *) LIBDIR=$PREFIX/lib ;;
esac

mkdir $TMP
cd    $TMP

tar -xvf "$PKG" || exit 1
PKGNAME=`ls $TMP`
cd $PKGNAME

[ -f CMakeLists.txt ] && (cmake . -DCMAKE_INSTALL_PREFIX:PATH=$PREFIX -DLIB_SUFFIX:PATH=$LIBDIR || exit 1) #-DCMAKE_C_FLAGS:STRING="" -DCMAKE_CXX_FLAGS:STRING="" -DMAN_INSTALL_DIR=/usr/man -DCMAKE_BUILD_TYPE=Release

[ -f configure ] && (./configure --prefix=$PREFIX --libdir=$LIBDIR || exit 1)

NUMJOBS=${NUMJOBS:--j`nproc`} #NUMJOBS=${NUMJOBS:--j`cat /proc/cpuinfo | grep processor | wc -l`}
make $NUMJOBS || exit 1 # unfortunatly make don't return fail but may be

mkdir $TMP/root
make install DESTDIR=$TMP/root # make install-strip DESTDIR=$TMP/root

cd $TMP/root

# strip binaries:
find . | xargs file | grep "executable"    | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null

cd $TMP/root
tar cf - . | gzip > /tmp/$PKGNAME.tgz

echo ----------------------------------------------------------
echo Package /tmp/$PKGNAME.tgz built

rm -rf $TMP

Комментариев нет:

Отправить комментарий