- Separated build and package - OpenBoard now installs in /opt - All binaries are stripped, for smaller package sizepreferencesAboutTextFull
parent
f70ff4acf9
commit
1ce6f84139
@ -1,429 +0,0 @@ |
||||
#!/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 2 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/>. |
||||
# --------------------------------------------------------------------- |
||||
|
||||
|
||||
#********************** |
||||
# functions |
||||
#********************** |
||||
|
||||
checkUser() |
||||
{ |
||||
if [ `id -u` -ne 0 ]; then |
||||
echo "Please run the script as root, may be using fakeroot command as follow" |
||||
echo "fakeroot ./buildDebianPackage.sh [options]" |
||||
exit 1 |
||||
fi |
||||
} |
||||
|
||||
initializeVariables() |
||||
{ |
||||
APPLICATION_NAME="OpenBoard" |
||||
MAKE_TAG=true |
||||
STANDARD_QT_USED=false |
||||
|
||||
PRODUCT_PATH="build/linux/release/product" |
||||
QT_PATH="/opt/qt55" |
||||
PLUGINS_PATH="$QT_PATH/plugins" |
||||
GUI_TRANSLATIONS_DIRECTORY_PATH="$QT_PATH/translations" |
||||
QT_LIBRARY_DEST_PATH="$PRODUCT_PATH/qtlib" |
||||
QT_LIBRARY_SOURCE_PATH="$QT_PATH/lib" |
||||
if [ -z $ARCHITECTURE ]; then |
||||
ARCHITECTURE=`uname -m` |
||||
if [ "$ARCHITECTURE" == "x86_64" ]; then |
||||
ARCHITECTURE="amd64" |
||||
fi |
||||
if [ "$ARCHITECTURE" == "i686" ]; then |
||||
ARCHITECTURE="i386" |
||||
fi |
||||
fi |
||||
NOTIFY_CMD=`which notify-send` |
||||
QMAKE_PATH="$QT_PATH/bin/qmake" |
||||
LRELEASES="$QT_PATH/bin/lrelease" |
||||
ZIP_PATH=`which zip` |
||||
|
||||
} |
||||
|
||||
|
||||
notifyError(){ |
||||
if [ -e "$NOTIFY_CMD" ]; then |
||||
$NOTIFY_CMD -t 0 -i "/usr/share/icons/oxygen/64x64/status/dialog-error.png" "$1" |
||||
fi |
||||
printf "\033[31merror:\033[0m $1\n" |
||||
exit 1 |
||||
} |
||||
|
||||
notifyProgress(){ |
||||
if [ -e "$NOTIFY_CMD" ]; then |
||||
$NOTIFY_CMD "$1" "$2" |
||||
fi |
||||
printf "\033[32m--> Achieved task:\033[0m $1:\n\t$2\n" |
||||
} |
||||
|
||||
alertIfPreviousVersionInstalled(){ |
||||
APT_CACHE=`which apt-cache` |
||||
if [ ! -e "$APT_CACHE" ]; then |
||||
notifyError "apt-cache command not found" |
||||
else |
||||
SEARCH_RESULT=`$APT_CACHE search ${APPLICATION_NAME}` |
||||
if [ `echo $SEARCH_RESULT | grep -c ${APPLICATION_NAME}` -ge 1 ]; then |
||||
notifyError "Found a previous version of ${APPLICATION_NAME}. Remove it to avoid to put it as dependency" |
||||
fi |
||||
fi |
||||
} |
||||
|
||||
checkDir(){ |
||||
if [ ! -d "$1" ]; then |
||||
notifyError "Directory not found : $1" |
||||
fi |
||||
} |
||||
|
||||
checkExecutable(){ |
||||
if [ ! -e "$1" ]; then |
||||
notifyError "$1 command not found" |
||||
fi |
||||
} |
||||
|
||||
copyQtLibrary(){ |
||||
if ls "$QT_LIBRARY_SOURCE_PATH/$1.so" &> /dev/null; then |
||||
cp -P $QT_LIBRARY_SOURCE_PATH/$1.so.? "$QT_LIBRARY_DEST_PATH/" |
||||
cp -P $QT_LIBRARY_SOURCE_PATH/$1.so.?.? "$QT_LIBRARY_DEST_PATH/" |
||||
cp -P $QT_LIBRARY_SOURCE_PATH/$1.so.?.?.? "$QT_LIBRARY_DEST_PATH/" |
||||
else |
||||
notifyError "$1 library not found in path: $QT_LIBRARY_SOURCE_PATH" |
||||
fi |
||||
} |
||||
|
||||
|
||||
buildWithStandardQt(){ |
||||
# if both Qt4 and Qt5 are installed, choose Qt5 |
||||
export QT_SELECT=5 |
||||
STANDARD_QT=`which qmake` |
||||
if [ $? == "0" ]; then |
||||
QT_VERSION=`$STANDARD_QT --version | grep -i "Using Qt version" | sed -e "s/Using Qt version \(.*\) in.*/\1/"` |
||||
if [ `echo $QT_VERSION | sed -e "s/\.//g"` -gt 480 ]; then |
||||
notifyProgress "Standard QT" "A recent enough qmake has been found. Using this one instead of custom one" |
||||
STANDARD_QT_USED=true |
||||
QMAKE_PATH=$STANDARD_QT |
||||
LRELEASES=`which lrelease` |
||||
PLUGINS_PATH="$STANDARD_QT/../plugins" |
||||
fi |
||||
fi |
||||
} |
||||
|
||||
buildImporter(){ |
||||
IMPORTER_DIR="../OpenBoard-Importer/" |
||||
IMPORTER_NAME="OpenBoardImporter" |
||||
checkDir $IMPORTER_DIR |
||||
cd ${IMPORTER_DIR} |
||||
|
||||
rm moc_* |
||||
rm -rf debug release |
||||
rm *.o |
||||
|
||||
#git reset --hard |
||||
#git pull |
||||
|
||||
$QMAKE_PATH ${IMPORTER_NAME}.pro |
||||
make clean |
||||
make -j4 |
||||
checkExecutable $IMPORTER_NAME |
||||
cd - |
||||
} |
||||
|
||||
#********************** |
||||
# script |
||||
#********************** |
||||
checkUser |
||||
|
||||
for var in "$@" |
||||
do |
||||
if [ $var == "notag" ]; then |
||||
MAKE_TAG=false |
||||
fi |
||||
# forcing a architecture because of cross compiling |
||||
if [ $var == "i386" ]; then |
||||
ARCHITECTURE="i386" |
||||
fi |
||||
if [ $var == "amd64" ]; then |
||||
ARCHITECTURE="amd64" |
||||
fi |
||||
done |
||||
|
||||
initializeVariables |
||||
#buildWithStandardQt |
||||
|
||||
alertIfPreviousVersionInstalled |
||||
|
||||
# check of directories and executables |
||||
checkDir $QT_PATH |
||||
checkDir $PLUGINS_PATH |
||||
checkDir $GUI_TRANSLATIONS_DIRECTORY_PATH |
||||
|
||||
checkExecutable $QMAKE_PATH |
||||
checkExecutable $LRELEASES |
||||
checkExecutable $ZIP_PATH |
||||
|
||||
#build third party application |
||||
buildImporter |
||||
notifyProgress "OpenBoardImporter" "Built Importer" |
||||
|
||||
# cleaning the build directory |
||||
rm -rf "build/linux/release" |
||||
rm -rf install |
||||
|
||||
notifyProgress "QT" "Internalization" |
||||
$LRELEASES ${APPLICATION_NAME}.pro |
||||
cd $GUI_TRANSLATIONS_DIRECTORY_PATH |
||||
$LRELEASES translations.pro |
||||
cd - |
||||
|
||||
notifyProgress "${APPLICATION_NAME}" "Building ${APPLICATION_NAME}" |
||||
|
||||
if [ "$ARCHITECTURE" == "amd64" ]; then |
||||
$QMAKE_PATH ${APPLICATION_NAME}.pro -spec linux-g++-64 |
||||
else |
||||
$QMAKE_PATH ${APPLICATION_NAME}.pro -spec linux-g++ |
||||
fi |
||||
|
||||
make -j 4 release-install |
||||
|
||||
if [ ! -e "$PRODUCT_PATH/${APPLICATION_NAME}" ]; then |
||||
notifyError "${APPLICATION_NAME} build failed" |
||||
fi |
||||
|
||||
notifyProgress "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 |
||||
# if [ $MAKE_TAG == true ]; then |
||||
# git tag -a "OBv$VERSION" -m "OpenBoard setup for v$VERSION" |
||||
# git push origin --tags |
||||
# fi |
||||
# fi |
||||
fi |
||||
|
||||
cp resources/linux/run.sh $PRODUCT_PATH |
||||
chmod a+x $PRODUCT_PATH/run.sh |
||||
|
||||
cp -R resources/linux/qtlinux/* $PRODUCT_PATH/ |
||||
|
||||
notifyProgress "QT" "Copying plugins and library ..." |
||||
cp -R $PLUGINS_PATH $PRODUCT_PATH/ |
||||
|
||||
# copying customization |
||||
cp -R resources/customizations $PRODUCT_PATH/ |
||||
|
||||
# copying importer |
||||
mkdir -p $PRODUCT_PATH/Importer |
||||
cp -R ${IMPORTER_DIR}/${IMPORTER_NAME} $PRODUCT_PATH/Importer |
||||
|
||||
if [ $STANDARD_QT_USED == false ]; then |
||||
#copying custom qt library |
||||
mkdir -p $QT_LIBRARY_DEST_PATH |
||||
copyQtLibrary libQt5Core |
||||
copyQtLibrary libQt5Gui |
||||
copyQtLibrary libQt5Multimedia |
||||
copyQtLibrary libQt5MultimediaWidgets |
||||
copyQtLibrary libQt5Network |
||||
copyQtLibrary libQt5OpenGL |
||||
copyQtLibrary libQt5PrintSupport |
||||
copyQtLibrary libQt5Script |
||||
copyQtLibrary libQt5Svg |
||||
copyQtLibrary libQt5WebKit |
||||
copyQtLibrary libQt5WebKitWidgets |
||||
copyQtLibrary libQt5Xml |
||||
copyQtLibrary libQt5XmlPatterns |
||||
fi |
||||
|
||||
notifyProgress "QT" "Internationalization" |
||||
if [ ! -e $PRODUCT_PATH/i18n ]; then |
||||
mkdir $PRODUCT_PATH/i18n |
||||
fi |
||||
#copying qt gui translation |
||||
cp $GUI_TRANSLATIONS_DIRECTORY_PATH/qt_??.qm $PRODUCT_PATH/i18n/ |
||||
|
||||
rm -rf install/linux |
||||
mkdir -p install/linux |
||||
|
||||
#Removing .svn directories ... |
||||
cd $PRODUCT_PATH |
||||
find . -name .svn -exec rm -rf {} \; 2> /dev/null |
||||
cd - |
||||
|
||||
notifyProgress "Building ${APPLICATION_NAME}" "Finished to build ${APPLICATION_NAME} 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 <http://www.gnu.org/licenses/>. |
||||
# --------------------------------------------------------------------- |
||||
|
||||
xdg-desktop-menu uninstall /usr/share/applications/${APPLICATION_NAME}.desktop |
||||
exit 0 |
||||
#DEBHELPER# |
||||
EOF |
||||
|
||||
cat > "$BASE_WORKING_DIR/DEBIAN/postinst" << 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 <http://www.gnu.org/licenses/>. |
||||
# --------------------------------------------------------------------- |
||||
|
||||
xdg-desktop-menu install --novendor /usr/share/applications/${APPLICATION_NAME}.desktop |
||||
exit 0 |
||||
#DEBHELPER# |
||||
EOF |
||||
|
||||
|
||||
APPLICATION_DIRECTORY_NAME="${APPLICATION_NAME}-$VERSION" |
||||
PACKAGE_DIRECTORY="$BASE_WORKING_DIR/usr/local/$APPLICATION_DIRECTORY_NAME" |
||||
#move build directory to packages directory |
||||
cp -R $PRODUCT_PATH $PACKAGE_DIRECTORY |
||||
|
||||
|
||||
cat > $BASE_WORKING_DIR/usr/local/$APPLICATION_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 <http://www.gnu.org/licenses/>. |
||||
# --------------------------------------------------------------------- |
||||
|
||||
env LD_LIBRARY_PATH=/usr/local/$APPLICATION_DIRECTORY_NAME/qtlib:$LD_LIBRARY_PATH /usr/local/$APPLICATION_DIRECTORY_NAME/${APPLICATION_NAME} |
||||
EOF |
||||
|
||||
|
||||
CHANGE_LOG_FILE="$BASE_WORKING_DIR/DEBIAN/changelog-${APPLICATION_NAME}-$VERSION.txt" |
||||
CONTROL_FILE="$BASE_WORKING_DIR/DEBIAN/control" |
||||
CHANGE_LOG_TEXT="changelog.txt" |
||||
|
||||
echo "${APPLICATION_NAME} ($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 <claudio.valerio@oe-f.org> `date`" >> "$CHANGE_LOG_FILE" |
||||
|
||||
echo "Package: ${APPLICATION_NAME}" > "$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 $PACKAGE_DIRECTORY | awk '{ print $1 }'`" >> "$CONTROL_FILE" |
||||
echo "Maintainer: ${APPLICATION_NAME} Developers team <dev@oe-f.org>" >> "$CONTROL_FILE" |
||||
echo "Homepage: http://www.openboard.org" >> "$CONTROL_FILE" |
||||
echo -n "Depends: " >> "$CONTROL_FILE" |
||||
unset tab |
||||
declare -a tab |
||||
let count=0 |
||||
for l in `objdump -p $PACKAGE_DIRECTORY/${APPLICATION_NAME} | 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; |
||||
|
||||
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 }' | sed -e 's/\([:. 0-9?]*\).*/\1/g' | sed -e 's/\.$//'`") " >> "$CONTROL_FILE" |
||||
done |
||||
echo -n ", onboard" >> "$CONTROL_FILE" |
||||
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 \; |
||||
APPLICATION_SHORTCUT="$BASE_WORKING_DIR/usr/share/applications/${APPLICATION_NAME}.desktop" |
||||
echo "[Desktop Entry]" > $APPLICATION_SHORTCUT |
||||
echo "Version=$VERSION" >> $APPLICATION_SHORTCUT |
||||
echo "Encoding=UTF-8" >> $APPLICATION_SHORTCUT |
||||
echo "Name=${APPLICATION_NAME} ($VERSION)" >> $APPLICATION_SHORTCUT |
||||
echo "GenericName=${APPLICATION_NAME}" >> $APPLICATION_SHORTCUT |
||||
echo "Comment=Logiciel de création de présentations pour tableau numérique interactif (TNI)" >> $APPLICATION_SHORTCUT |
||||
echo "Exec=/usr/local/$APPLICATION_DIRECTORY_NAME/run.sh" >> $APPLICATION_SHORTCUT |
||||
echo "Icon=/usr/local/$APPLICATION_DIRECTORY_NAME/${APPLICATION_NAME}.png" >> $APPLICATION_SHORTCUT |
||||
echo "StartupNotify=true" >> $APPLICATION_SHORTCUT |
||||
echo "Terminal=false" >> $APPLICATION_SHORTCUT |
||||
echo "Type=Application" >> $APPLICATION_SHORTCUT |
||||
echo "Categories=Education;" >> $APPLICATION_SHORTCUT |
||||
cp "resources/images/${APPLICATION_NAME}.png" "$PACKAGE_DIRECTORY/${APPLICATION_NAME}.png" |
||||
chmod 755 "$BASE_WORKING_DIR/DEBIAN" |
||||
chmod 755 "$BASE_WORKING_DIR/DEBIAN/prerm" |
||||
chmod 755 "$BASE_WORKING_DIR/DEBIAN/postinst" |
||||
|
||||
mkdir -p "install/linux" |
||||
DEBIAN_PACKAGE_NAME="${APPLICATION_NAME}_`lsb_release -is`_`lsb_release -rs`_${VERSION}_$ARCHITECTURE.deb" |
||||
|
||||
chown -R root:root $BASE_WORKING_DIR |
||||
dpkg -b "$BASE_WORKING_DIR" "install/linux/$DEBIAN_PACKAGE_NAME" |
||||
|
||||
#clean up mess |
||||
rm -rf $BASE_WORKING_DIR |
||||
|
||||
notifyProgress "${APPLICATION_NAME}" "Package built" |
||||
|
||||
|
||||
exit 0 |
@ -0,0 +1,166 @@ |
||||
#!/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 2 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/>. |
||||
# --------------------------------------------------------------------- |
||||
|
||||
initializeVariables() |
||||
{ |
||||
APPLICATION_NAME="OpenBoard" |
||||
STANDARD_QT_USED=false |
||||
|
||||
# Root directory |
||||
PROJECT_ROOT="`pwd`/../.." |
||||
BUILD_DIR="$PROJECT_ROOT/build/linux/release" |
||||
PRODUCT_PATH="$BUILD_DIR/product" |
||||
|
||||
# Qt installation path. This may vary across machines |
||||
QT_PATH="/home/craig/dev/qt5/qtbase" |
||||
PLUGINS_PATH="$QT_PATH/plugins" |
||||
GUI_TRANSLATIONS_DIRECTORY_PATH="$QT_PATH/translations" |
||||
QT_LIBRARY_DEST_PATH="$PRODUCT_PATH/qtlib" |
||||
QT_LIBRARY_SOURCE_PATH="$QT_PATH/lib" |
||||
QMAKE_PATH="$QT_PATH/bin/qmake" |
||||
LRELEASES="$QT_PATH/bin/lrelease" |
||||
|
||||
NOTIFY_CMD=`which notify-send` |
||||
ZIP_PATH=`which zip` |
||||
|
||||
if [ -z $ARCHITECTURE ]; then |
||||
ARCHITECTURE=`uname -m` |
||||
fi |
||||
} |
||||
|
||||
notifyError(){ |
||||
if [ -e "$NOTIFY_CMD" ]; then |
||||
$NOTIFY_CMD -t 0 -i "/usr/share/icons/oxygen/64x64/status/dialog-error.png" "$1" |
||||
fi |
||||
printf "\033[31merror:\033[0m $1\n" |
||||
exit 1 |
||||
} |
||||
|
||||
notifyProgress(){ |
||||
if [ -e "$NOTIFY_CMD" ]; then |
||||
$NOTIFY_CMD "$1" "$2" |
||||
fi |
||||
printf "\033[32m--> Achieved task:\033[0m $1:\n\t$2\n" |
||||
} |
||||
|
||||
checkDir(){ |
||||
if [ ! -d "$1" ]; then |
||||
notifyError "Directory not found : $1" |
||||
fi |
||||
} |
||||
|
||||
checkExecutable(){ |
||||
if [ ! -e "$1" ]; then |
||||
notifyError "$1 command not found" |
||||
fi |
||||
} |
||||
|
||||
buildWithStandardQt(){ |
||||
# if both Qt4 and Qt5 are installed, choose Qt5 |
||||
export QT_SELECT=5 |
||||
STANDARD_QT=`which qmake` |
||||
if [ $? == "0" ]; then |
||||
QT_VERSION=`$STANDARD_QT --version | grep -i "Using Qt version" | sed -e "s/Using Qt version \(.*\) in.*/\1/"` |
||||
if [ `echo $QT_VERSION | sed -e "s/\.//g"` -gt 480 ]; then |
||||
notifyProgress "Standard QT" "A recent enough qmake has been found. Using this one instead of custom one" |
||||
STANDARD_QT_USED=true |
||||
QMAKE_PATH=$STANDARD_QT |
||||
LRELEASES=`which lrelease` |
||||
PLUGINS_PATH="$STANDARD_QT/../plugins" |
||||
fi |
||||
fi |
||||
} |
||||
|
||||
buildImporter(){ |
||||
IMPORTER_DIR="../OpenBoard-Importer/" |
||||
IMPORTER_NAME="OpenBoardImporter" |
||||
checkDir $IMPORTER_DIR |
||||
cd ${IMPORTER_DIR} |
||||
|
||||
rm moc_* |
||||
rm -rf debug release |
||||
rm *.o |
||||
|
||||
notifyProgress "Building importer" |
||||
|
||||
$QMAKE_PATH ${IMPORTER_NAME}.pro |
||||
make clean |
||||
make -j4 |
||||
checkExecutable $IMPORTER_NAME |
||||
cd - |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
# Check command-line arguments to force an architecture |
||||
|
||||
for var in "$@" |
||||
do |
||||
if [ $var == "i686" ]; then |
||||
ARCHITECTURE="i386" |
||||
fi |
||||
if [ $var == "x86_64" ]; then |
||||
ARCHITECTURE="amd64" |
||||
fi |
||||
done |
||||
|
||||
|
||||
initializeVariables |
||||
#buildWithStandardQt |
||||
|
||||
cd $PROJECT_ROOT |
||||
|
||||
# check of directories and executables |
||||
checkDir $QT_PATH |
||||
checkDir $PLUGINS_PATH |
||||
checkDir $GUI_TRANSLATIONS_DIRECTORY_PATH |
||||
|
||||
checkExecutable $QMAKE_PATH |
||||
checkExecutable $LRELEASES |
||||
checkExecutable $ZIP_PATH |
||||
|
||||
#build third party application |
||||
buildImporter |
||||
notifyProgress "OpenBoardImporter" "Built Importer" |
||||
|
||||
|
||||
# cleaning the build directory |
||||
rm -rf $BUILD_DIR |
||||
|
||||
# Generate translations |
||||
notifyProgress "QT" "Internationalization" |
||||
$LRELEASES ${APPLICATION_NAME}.pro |
||||
cd $GUI_TRANSLATIONS_DIRECTORY_PATH |
||||
$LRELEASES translations.pro |
||||
cd - |
||||
|
||||
notifyProgress "${APPLICATION_NAME}" "Building ${APPLICATION_NAME}" |
||||
|
||||
if [ "$ARCHITECTURE" == "amd64" ]; then |
||||
$QMAKE_PATH ${APPLICATION_NAME}.pro -spec linux-g++-64 |
||||
else |
||||
$QMAKE_PATH ${APPLICATION_NAME}.pro -spec linux-g++ |
||||
fi |
||||
|
||||
|
||||
make -j4 release-install |
||||
|
||||
if [ ! -e "$PRODUCT_PATH/${APPLICATION_NAME}" ]; then |
||||
notifyError "${APPLICATION_NAME} build failed" |
||||
else |
||||
notifyProgress "Finished building OpenBoard. You may now run the packaging script." |
||||
fi |
@ -0,0 +1,19 @@ |
||||
#!/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 <http://www.gnu.org/licenses/>. |
||||
# --------------------------------------------------------------------- |
||||
|
||||
xdg-desktop-menu install --novendor /usr/share/applications/openboard.desktop |
||||
ln -s /opt/openboard/run.sh /usr/bin/openboard |
||||
exit 0 |
@ -0,0 +1,19 @@ |
||||
#!/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 <http://www.gnu.org/licenses/>. |
||||
# --------------------------------------------------------------------- |
||||
|
||||
xdg-desktop-menu uninstall /usr/share/applications/openboard.desktop |
||||
rm -f /usr/bin/openboard |
||||
exit 0 |
@ -0,0 +1,270 @@ |
||||
#!/bin/bash |
||||
# ---------------------------------------------------------------------------- |
||||
# Packaging script for OpenBoard, for debian-compatible distributions. |
||||
# |
||||
# This should be run after `build.sh`. |
||||
# ---------------------------------------------------------------------------- |
||||
|
||||
|
||||
# ---------------------------------------------------------------------------- |
||||
# Function definitions |
||||
# ---------------------------------------------------------------------------- |
||||
checkUser() |
||||
{ |
||||
if [ `id -u` -ne 0 ]; then |
||||
echo "Please run the script as root" |
||||
exit 1 |
||||
fi |
||||
} |
||||
|
||||
checkBuild() |
||||
{ |
||||
if [ -z "$ARCHITECTURE" ]; then |
||||
echo "Make sure you have built the software first using ./build.sh" |
||||
exit 1 |
||||
fi |
||||
} |
||||
|
||||
notifyError(){ |
||||
if [ -e "$NOTIFY_CMD" ]; then |
||||
$NOTIFY_CMD -t 0 -i "/usr/share/icons/oxygen/64x64/status/dialog-error.png" "$1" |
||||
fi |
||||
printf "\033[31merror:\033[0m $1\n" |
||||
exit 1 |
||||
} |
||||
|
||||
notifyProgress(){ |
||||
if [ -e "$NOTIFY_CMD" ]; then |
||||
$NOTIFY_CMD "$1" "$2" |
||||
fi |
||||
printf "\033[32m--> \033[0m $1:\n\t$2\n" |
||||
} |
||||
|
||||
copyQtLibrary(){ |
||||
if ls "$QT_LIBRARY_SOURCE_PATH/$1.so" &> /dev/null; then |
||||
cp -P $QT_LIBRARY_SOURCE_PATH/$1.so.? "$QT_LIBRARY_DEST_PATH/" |
||||
cp -P $QT_LIBRARY_SOURCE_PATH/$1.so.?.? "$QT_LIBRARY_DEST_PATH/" |
||||
cp -P $QT_LIBRARY_SOURCE_PATH/$1.so.?.?.? "$QT_LIBRARY_DEST_PATH/" |
||||
strip $QT_LIBRARY_DEST_PATH/$1.so.?.?.? |
||||
else |
||||
notifyError "$1 library not found in path: $QT_LIBRARY_SOURCE_PATH" |
||||
fi |
||||
} |
||||
|
||||
copyQtPlugin(){ |
||||
if ls "$QT_PLUGINS_SOURCE_PATH/$1" &> /dev/null; then |
||||
cp -r $QT_PLUGINS_SOURCE_PATH/$1 $QT_PLUGINS_DEST_PATH/ |
||||
strip $QT_PLUGINS_DEST_PATH/$1/* |
||||
|
||||
else |
||||
notifyError "$1 plugin not found in path: $QT_PLUGINS_SOURCE_PATH" |
||||
fi |
||||
} |
||||
|
||||
initializeVariables() |
||||
{ |
||||
# This script's path |
||||
SCRIPT_PATH=`pwd` |
||||
|
||||
PROJECT_ROOT="$SCRIPT_PATH/../.." |
||||
|
||||
# Where the application was built (see build.sh) |
||||
BUILD_DIR="$PROJECT_ROOT/build/linux/release" |
||||
PRODUCT_PATH="$BUILD_DIR/product" |
||||
IMPORTER_DIR="$PROJECT_ROOT/../OpenBoard-Importer/" |
||||
IMPORTER_NAME="OpenBoardImporter" |
||||
|
||||
# Where the package is built to |
||||
PACKAGE_BUILD_DIR="$PROJECT_ROOT/install" |
||||
|
||||
# Temporary folder, where we put all the files that will be built into the |
||||
# package |
||||
BASE_WORKING_DIR="debianPackage" |
||||
|
||||
APPLICATION_NAME="OpenBoard" |
||||
APPLICATION_CODE="openboard" |
||||
APPLICATION_PATH="/opt" |
||||
|
||||
# Where most of the files end up in the package |
||||
PACKAGE_DIRECTORY=$BASE_WORKING_DIR/$APPLICATION_PATH/$APPLICATION_CODE |
||||
QT_PLUGINS_DEST_PATH="$PACKAGE_DIRECTORY/plugins" |
||||
QT_LIBRARY_DEST_PATH="$PACKAGE_DIRECTORY/qtlib" |
||||
|
||||
DESKTOP_FILE_PATH="$BASE_WORKING_DIR/usr/share/applications" |
||||
APPLICATION_SHORTCUT="$DESKTOP_FILE_PATH/${APPLICATION_CODE}.desktop" |
||||
|
||||
DESCRIPTION="Interactive white board software" |
||||
VERSION=`cat $BUILD_DIR/version` |
||||
ARCHITECTURE=`cat buildContext` |
||||
|
||||
# Qt installation path. This may vary across machines |
||||
QT_PATH="/home/craig/dev/qt5/qtbase" |
||||
QT_PLUGINS_SOURCE_PATH="$QT_PATH/plugins" |
||||
GUI_TRANSLATIONS_DIRECTORY_PATH="$QT_PATH/translations" |
||||
QT_LIBRARY_SOURCE_PATH="$QT_PATH/lib" |
||||
|
||||
NOTIFY_CMD=`which notify-send` |
||||
ZIP_PATH=`which zip` |
||||
} |
||||
|
||||
# ---------------------------------------------------------------------------- |
||||
# Script |
||||
# ---------------------------------------------------------------------------- |
||||
|
||||
initializeVariables |
||||
|
||||
checkBuild |
||||
checkUser |
||||
|
||||
cd $PROJECT_ROOT |
||||
|
||||
rm -rf $PACKAGE_DIRECTORY |
||||
mkdir -p $PACKAGE_DIRECTORY |
||||
|
||||
rm -rf $PACKAGE_BUILD_DIR |
||||
|
||||
|
||||
notifyProgress "Copying product directory and resources" |
||||
cp -R $PRODUCT_PATH/* $PACKAGE_DIRECTORY |
||||
chown -R root:root $PACKAGE_DIRECTORY |
||||
|
||||
cp resources/linux/run.sh $PACKAGE_DIRECTORY |
||||
chmod a+x $PACKAGE_DIRECTORY/run.sh |
||||
|
||||
cp -R resources/customizations $PACKAGE_DIRECTORY/ |
||||
cp -R resources/linux/qtlinux/* $PACKAGE_DIRECTORY/ |
||||
|
||||
notifyProgress "Copying importer" |
||||
mkdir -p $PACKAGE_DIRECTORY/Importer |
||||
cp -R "$IMPORTER_DIR/$IMPORTER_NAME" "$PACKAGE_DIRECTORY/Importer" |
||||
|
||||
notifyProgress "Stripping importer and main executable" |
||||
strip $PACKAGE_DIRECTORY/$APPLICATION_NAME |
||||
strip $PACKAGE_DIRECTORY/Importer/$IMPORTER_NAME |
||||
|
||||
notifyProgress "Copying and stripping Qt plugins" |
||||
mkdir -p $QT_PLUGINS_DEST_PATH |
||||
copyQtPlugin mediaservice |
||||
copyQtPlugin audio |
||||
copyQtPlugin generic |
||||
copyQtPlugin platforms |
||||
copyQtPlugin printsupport |
||||
copyQtPlugin xcbglintegrations |
||||
|
||||
notifyProgress "Copying and stripping Qt libraries" |
||||
mkdir -p $QT_LIBRARY_DEST_PATH |
||||
copyQtLibrary libQt5Core |
||||
copyQtLibrary libQt5Gui |
||||
copyQtLibrary libQt5Multimedia |
||||
copyQtLibrary libQt5MultimediaWidgets |
||||
copyQtLibrary libQt5Network |
||||
copyQtLibrary libQt5OpenGL |
||||
copyQtLibrary libQt5PrintSupport |
||||
copyQtLibrary libQt5Script |
||||
copyQtLibrary libQt5Svg |
||||
copyQtLibrary libQt5WebChannel |
||||
copyQtLibrary libQt5WebKit |
||||
copyQtLibrary libQt5WebKitWidgets |
||||
copyQtLibrary libQt5Widgets |
||||
copyQtLibrary libQt5XcbQpa |
||||
copyQtLibrary libQt5Xml |
||||
copyQtLibrary libQt5XmlPatterns |
||||
|
||||
notifyProgress "Copying Qt translations" |
||||
mkdir -p $PACKAGE_DIRECTORY/i18n |
||||
cp $GUI_TRANSLATIONS_DIRECTORY_PATH/qt_??.qm $PACKAGE_DIRECTORY/i18n/ |
||||
|
||||
|
||||
# ---------------------------------------------------------------------------- |
||||
# DEBIAN directory of package (control, md5sums, postinst etc) |
||||
# ---------------------------------------------------------------------------- |
||||
mkdir -p "$BASE_WORKING_DIR/DEBIAN" |
||||
|
||||
# Copy prerm, postinst scripts |
||||
cp -r "$SCRIPT_PATH/debian_package_files/prerm" "$BASE_WORKING_DIR/DEBIAN/" |
||||
cp -r "$SCRIPT_PATH/debian_package_files/postinst" "$BASE_WORKING_DIR/DEBIAN/" |
||||
chmod 755 "$BASE_WORKING_DIR/DEBIAN/prerm" |
||||
chmod 755 "$BASE_WORKING_DIR/DEBIAN/postinst" |
||||
|
||||
# Generate md5 sums of everything in the application path (e.g /opt) and the desktop entry |
||||
find $BASE_WORKING_DIR/$APPLICATION_PATH/ -exec md5sum {} > $BASE_WORKING_DIR/DEBIAN/md5sums 2>/dev/null \; |
||||
find $DESKTOP_FILE_PATH/ -exec md5sum {} > $BASE_WORKING_DIR/DEBIAN/md5sums 2>/dev/null \; |
||||
|
||||
# Generate control file |
||||
CONTROL_FILE="$BASE_WORKING_DIR/DEBIAN/control" |
||||
|
||||
echo "Package: ${APPLICATION_NAME}" > "$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 $PACKAGE_DIRECTORY | awk '{ print $1 }'`" >> "$CONTROL_FILE" |
||||
echo "Maintainer: ${APPLICATION_NAME} Developers team <dev@openboard.ch>" >> "$CONTROL_FILE" |
||||
echo "Homepage: https://github.com/DIP-SEM/OpenBoard" >> "$CONTROL_FILE" |
||||
|
||||
# Generate dependency list |
||||
echo -n "Depends: " >> "$CONTROL_FILE" |
||||
echo -n "libpaper1, zlib1g (>= 1.2.8), libssl1.0.0 (>= 1.0.1), libx11-6, libgl1-mesa-glx, libc6 (>= 2.19), libstdc++6 (>= 4.9.2), libgomp1, libgcc1 (>= 4.9.2), onboard" >> "$CONTROL_FILE" |
||||
|
||||
#unset tab |
||||
#declare -a tab |
||||
#let count=0 |
||||
#for l in `objdump -p $PACKAGE_DIRECTORY/${APPLICATION_NAME} | 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; |
||||
|
||||
#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 }' | sed -e 's/\([:. 0-9?]*\).*/\1/g' | sed -e 's/\.$//'`") " >> "$CONTROL_FILE" |
||||
#done |
||||
#echo -n ", onboard" >> "$CONTROL_FILE" |
||||
|
||||
echo "" >> "$CONTROL_FILE" |
||||
echo "Description: $DESCRIPTION" >> "$CONTROL_FILE" |
||||
|
||||
# ---------------------------------------------------------------------------- |
||||
# .desktop file |
||||
# ---------------------------------------------------------------------------- |
||||
mkdir -p $DESKTOP_FILE_PATH |
||||
echo "[Desktop Entry]" > $APPLICATION_SHORTCUT |
||||
echo "Version=$VERSION" >> $APPLICATION_SHORTCUT |
||||
echo "Encoding=UTF-8" >> $APPLICATION_SHORTCUT |
||||
echo "Name=${APPLICATION_NAME} ($VERSION)" >> $APPLICATION_SHORTCUT |
||||
echo "Comment=$DESCRIPTION" >> $APPLICATION_SHORTCUT |
||||
#echo "Exec=$APPLICATION_PATH/$APPLICATION_CODE/run.sh" >> $APPLICATION_SHORTCUT |
||||
echo "Exec=$APPLICATION_CODE %f" >> $APPLICATION_SHORTCUT |
||||
echo "Icon=$APPLICATION_PATH/$APPLICATION_CODE/${APPLICATION_NAME}.png" >> $APPLICATION_SHORTCUT |
||||
echo "StartupNotify=true" >> $APPLICATION_SHORTCUT |
||||
echo "Terminal=false" >> $APPLICATION_SHORTCUT |
||||
echo "Type=Application" >> $APPLICATION_SHORTCUT |
||||
echo "Categories=Education;" >> $APPLICATION_SHORTCUT |
||||
cp "resources/images/${APPLICATION_NAME}.png" "$PACKAGE_DIRECTORY/${APPLICATION_NAME}.png" |
||||
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------- |
||||
# Building the package |
||||
# ---------------------------------------------------------------------------- |
||||
notifyProgress "Building package" |
||||
mkdir -p "$PACKAGE_BUILD_DIR/linux" |
||||
DEBIAN_PACKAGE_NAME="${APPLICATION_NAME}_`lsb_release -is`_`lsb_release -rs`_${VERSION}_$ARCHITECTURE.deb" |
||||
|
||||
dpkg -b "$BASE_WORKING_DIR" "$PACKAGE_BUILD_DIR/linux/$DEBIAN_PACKAGE_NAME" |
||||
|
||||
#clean up mess |
||||
#rm -rf $BASE_WORKING_DIR |
||||
|
||||
notifyProgress "${APPLICATION_NAME}" "Package built" |
||||
|
||||
|
||||
exit 0 |
Loading…
Reference in new issue