From 73cbdb8fb340b07aab6570598dd8d6d72e73b739 Mon Sep 17 00:00:00 2001 From: Claudio Valerio Date: Thu, 12 Jul 2012 14:19:04 +0200 Subject: [PATCH] new version of the script to link with qt standard libraries --- buildDebianPackageQmake-Qt4 | 313 ++++++++++++++++++++++++++++++++++++ 1 file changed, 313 insertions(+) create mode 100755 buildDebianPackageQmake-Qt4 diff --git a/buildDebianPackageQmake-Qt4 b/buildDebianPackageQmake-Qt4 new file mode 100755 index 00000000..17391e45 --- /dev/null +++ b/buildDebianPackageQmake-Qt4 @@ -0,0 +1,313 @@ +#!/bin/bash +# -------------------------------------------------------------------- +# 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 . +# --------------------------------------------------------------------- + + +notifyError(){ + notify-send -t 0 "Error occoured" "An error occours during the sankore build:\n\t$1" -i /usr/share/icons/oxygen/64x64/status/dialog-error.png + exit 1 +} + +MAKE_TAG=true + +if [ $# == "1" ]; then + if [ $1 == "notag" ]; then + MAKE_TAG=false; + fi +fi + + +ARCHITECTURE=`uname -m` + +rm -rf "build/linux/release" +rm -rf install + +QMAKE_PATH=`which qmake-qt4` +if [ $? == "0" ]; then + QT_VERSION=`$QMAKE_PATH --version | grep -i "Using Qt version" | sed -e "s/Using Qt version \(.*\) in.*/\1/"` + if [ `echo $QT_VERSION | sed -e "s/\.//g"` -lt 480 ]; then + notifyError "Qt library not recent enough" + fi +else + notifyError "qmake-qt4 not found" +fi + +LRELEASES=`which lrelease` +QT_PATH="/usr/lib/$ARCHITECTURE-linux-gnu" +PLUGINS_PATH="$QT_PATH/qt4/plugins" +GUI_TRANSLATIONS_DIRECTORY_PATH="../Qt-4.8/translations" + +if [ ! -e "$QMAKE_PATH" ]; then + notifyError "qmake command not found at $QMAKE_PATH" +fi + +if [ ! -e "$PLUGINS_PATH" ]; then + notifyError "plugins path not found at $PLUGINS_PATH" +fi + +notify-send "Open-Sankore" "Building Open-Sankore ..." + +if [ "$ARCHITECTURE" == "x86_64" ]; then + $QMAKE_PATH Sankore_3.1.pro -spec linux-g++-64 +else + $QMAKE_PATH Sankore_3.1.pro -spec linux-g++ +fi + +make -j 4 release-install + +notify-send "Git Hub" "Make a tag of the delivered version" +VERSION=`cat build/linux/release/version` +if [ ! -f build/linux/release/version ]; then + notifyError "version not found" +else + LAST_COMMITED_VERSION="`git describe $(git rev-list --tags --max-count=1)`" + if [ "v$VERSION" != "$LAST_COMMITED_VERSION" ]; then + echo creating a tag with the version $VERSION + if [ $MAKE_TAG == true ]; then + git tag -a "v$VERSION" -m "Generating setup for v$VERSION" + git push origin --tags + fi + fi +fi + +cp resources/linux/run.sh build/linux/release/product +chmod +x build/linux/release/product/run.sh + +cp -R resources/linux/qtlinux/* build/linux/release/product/ + +notify-send "QT" "Coping plugins and library ..." +cp -R $PLUGINS_PATH build/linux/release/product/ + +#copying custom qt library +QT_LIBRARY_DEST_PATH="build/linux/release/product/qtlib" +mkdir $QT_LIBRARY_DEST_PATH +QT_LIBRARY_SOURCE_PATH="$QT_PATH" + +copyQtLibrary(){ + if ls "$QT_LIBRARY_SOURCE_PATH/$1.so" &> /dev/null; then + cp "$QT_LIBRARY_SOURCE_PATH/$1.so.?" "$QT_LIBRARY_DEST_PATH/" + cp "$QT_LIBRARY_SOURCE_PATH/$1.so.?.?.?" "$QT_LIBRARY_DEST_PATH/" + else + notifyError "$1 library not found in path: $QT_LIBRARY_SOURCE_PATH" + fi +} + +copyQtLibrary libQtDBus +copyQtLibrary libQtScript +copyQtLibrary libQtSvg +copyQtLibrary libQtXmlPatterns +copyQtLibrary libQtNetwork +copyQtLibrary libQtXml +copyQtLibrary libQtGui +copyQtLibrary libQtCore +copyQtLibrary libphonon +copyQtLibrary libQtWebKit + +notify-send "QT" "Internalization ..." +if [ ! -e $GUI_TRANSLATIONS_DIRECTORY_PATH ]; then + notifyError "gui translations pro file not found at: $GUI_TRANSLATIONS_DIRECTORY_PATH" +else + cd $GUI_TRANSLATIONS_DIRECTORY_PATH + $LRELEASES translations.pro + cd - + if [ ! -e build/linux/release/product/i18n ]; then + mkdir build/linux/release/product/i18n + fi + #copying qt gui translation + cp $GUI_TRANSLATIONS_DIRECTORY_PATH/qt_??.qm build/linux/release/product/i18n/ +fi + +$LRELEASES Sankore_3.1.pro +cp resources/i18n/*.qm build/linux/release/product/i18n/ + +rm -rf install/linux +mkdir -p install/linux + +cd build/linux/release/product + +#Removing .svn directories ... +find . -name .svn -exec rm -rf {} \; 2> /dev/null + +cd - +notify-send "Building Sankore" "Finished to build Sankore building the package" + + +BASE_WORKING_DIR="packageBuildDir" + +#creating package directory +mkdir $BASE_WORKING_DIR +mkdir "$BASE_WORKING_DIR/DEBIAN" +mkdir -p "$BASE_WORKING_DIR/usr/share/applications" +mkdir -p "$BASE_WORKING_DIR/usr/local" + + +cat > "$BASE_WORKING_DIR/DEBIAN/prerm" << EOF +#!/bin/bash +# -------------------------------------------------------------------- +# 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 . +# --------------------------------------------------------------------- + +xdg-desktop-menu uninstall /usr/share/applications/Open-Sankore.desktop +exit 0 +#DEBHELPER# +EOF + +cat > "$BASE_WORKING_DIR/DEBIAN/postint" << EOF +#!/bin/bash +# -------------------------------------------------------------------- +# 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 . +# --------------------------------------------------------------------- + +xdg-desktop-menu install --novendor /usr/share/applications/Open-Sankore.desktop +exit 0 +#DEBHELPER# +EOF + + +SANKORE_DIRECTORY_NAME="Open-Sankore-$VERSION" +SANKORE_PACKAGE_DIRECTORY="$BASE_WORKING_DIR/usr/local/$SANKORE_DIRECTORY_NAME" +#move sankore build directory to packages directory +cp -R build/linux/release/product $SANKORE_PACKAGE_DIRECTORY + + +cat > $BASE_WORKING_DIR/usr/local/$SANKORE_DIRECTORY_NAME/run.sh << EOF +!/bin/bash +# -------------------------------------------------------------------- +# 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 . +# --------------------------------------------------------------------- + +env LD_LIBRARY_PATH=/usr/local/$SANKORE_DIRECTORY_NAME/qtlib:$LD_LIBRARY_PATH /usr/local/$SANKORE_DIRECTORY_NAME/Open-Sankore +EOF + + +CHANGE_LOG_FILE="$BASE_WORKING_DIR/DEBIAN/changelog-sankore-$VERSION.txt" +CONTROL_FILE="$BASE_WORKING_DIR/DEBIAN/control" +CHANGE_LOG_TEXT="changelog.txt" + +if [ "$ARCHITECTURE" == "x86_64" ]; then + ARCHITECTURE="amd64" +fi + +if [ "$ARCHITECTURE" == "i686" ]; then + ARCHITECTURE="i386" +fi + +echo "Open-Sankore ($VERSION) $ARCHITECTURE; urgency=low" > "$CHANGE_LOG_FILE" +echo >> "$CHANGE_LOG_FILE" +cat $CHANGE_LOG_TEXT >> "$CHANGE_LOG_FILE" +echo >> "$CHANGE_LOG_FILE" +echo "-- Claudio Valerio `date`" >> "$CHANGE_LOG_FILE" + +echo "Package: open-sankore" > "$CONTROL_FILE" +echo "Version: $VERSION" >> "$CONTROL_FILE" +echo "Section: education" >> "$CONTROL_FILE" +echo "Priority: optional" >> "$CONTROL_FILE" +echo "Architecture: $ARCHITECTURE" >> "$CONTROL_FILE" +echo "Essential: no" >> "$CONTROL_FILE" +echo "Installed-Size: `du -s $SANKORE_PACKAGE_DIRECTORY | awk '{ print $1 }'`" >> "$CONTROL_FILE" +echo "Maintainer: Open-Sankoré Developers team " >> "$CONTROL_FILE" +echo "Homepage: http://dev.open-sankore.org" >> "$CONTROL_FILE" +echo -n "Depends: " >> "$CONTROL_FILE" +unset tab +declare -a tab +let count=0 +for l in `objdump -p $SANKORE_PACKAGE_DIRECTORY/Open-Sankore | grep NEEDED | awk '{ print $2 }'`; do + for lib in `dpkg -S $l | awk -F":" '{ print $1 }'`; do + #echo $lib + presence=`echo ${tab[*]} | grep -c "$lib"`; + if [ "$presence" == "0" ]; then + tab[$count]=$lib; + ((count++)); + fi; + done; +done; + +#additional dependencies +#tab[$count]="gtk2-engines-pixbuf" +#((count++)) +#tab[$count]="ttf-mscorefonts-installer" +#((count++)) + +for ((i=0;i<${#tab[@]};i++)); do + if [ $i -ne "0" ]; then + echo -n ", " >> "$CONTROL_FILE" + fi + echo -n "${tab[$i]} (>= "`dpkg -p ${tab[$i]} | grep "Version: " | awk '{ print $2 }'`") " >> "$CONTROL_FILE" +done +echo "" >> "$CONTROL_FILE" +echo "Description: This a interactive white board that uses a free standard format." >> "$CONTROL_FILE" + +find $BASE_WORKING_DIR/usr/ -exec md5sum {} > $BASE_WORKING_DIR/DEBIAN/md5sums 2>/dev/null \; +SANKORE_SHORTCUT="$BASE_WORKING_DIR/usr/share/applications/Open-Sankore.desktop" +echo "[Desktop Entry]" > $SANKORE_SHORTCUT +echo "Version=$VERSION" >> $SANKORE_SHORTCUT +echo "Encoding=UTF-8" >> $SANKORE_SHORTCUT +echo "Name=Open-Sankore ($VERSION)" >> $SANKORE_SHORTCUT +echo "GenericName=Open-Sankore" >> $SANKORE_SHORTCUT +echo "Comment=Logiciel de création de présentations pour tableau numérique interactif (TNI)" >> $SANKORE_SHORTCUT +echo "Exec=/usr/local/$SANKORE_DIRECTORY_NAME/run.sh" >> $SANKORE_SHORTCUT +echo "Icon=/usr/local/$SANKORE_DIRECTORY_NAME/sankore.png" >> $SANKORE_SHORTCUT +echo "StartupNotify=true" >> $SANKORE_SHORTCUT +echo "Terminal=false" >> $SANKORE_SHORTCUT +echo "Type=Application" >> $SANKORE_SHORTCUT +echo "Categories=Education" >> $SANKORE_SHORTCUT +echo "Name[fr_FR]=Open-Sankore ($VERSION)" >> $SANKORE_SHORTCUT +cp "resources/images/uniboard.png" "$SANKORE_PACKAGE_DIRECTORY/sankore.png" +chmod 755 "$BASE_WORKING_DIR/DEBIAN" +chmod 755 "$BASE_WORKING_DIR/DEBIAN/prerm" +chmod 755 "$BASE_WORKING_DIR/DEBIAN/postint" + +mkdir -p "install/linux" + +fakeroot chown -R root:root $BASE_WORKING_DIR +dpkg -b "$BASE_WORKING_DIR" install/linux/Open-Sankore_${VERSION}_$ARCHITECTURE.deb +notify-send "Open-Sankore" "Package built" + +#clean up mess +fakeroot rm -rf $BASE_WORKING_DIR +