Reworked build and deployment scripts for linux:

- Separated building and packaging
- OpenBoard is now installed in /opt/openboard instead of
/usr/local/OpenBoard-$VERSION/
- Placed a shortcut to run.sh in /usr/bin (so it can be executed with
the `openboard` command)
- Corrected .deb control files to avoid warnings e.g when installing via
software center on Ubuntu
- Added xdg bindings so that .ubz files are recognized and opened
automatically with OpenBoard

- Moved the release scripts into their own folder to clean up the
repository root a bit

(Merge branch 'new-release-script-linux' into dev)
preferencesAboutTextFull
Craig Watson 8 years ago
commit 9520ddeb65
  1. 2
      .gitignore
  2. 429
      buildDebianPackage.sh
  3. 174
      release_scripts/linux/build.sh
  4. 23
      release_scripts/linux/debian_package_files/postinst
  5. 19
      release_scripts/linux/debian_package_files/prerm
  6. 323
      release_scripts/linux/package.sh
  7. 0
      release_scripts/osx/OpenBoard.packproj
  8. 11
      release_scripts/osx/release.macx.sh
  9. 0
      release_scripts/windows/OpenBoard.iss
  10. 9
      release_scripts/windows/release.win7.vc9.bat
  11. 8
      resources/linux/openboard-ubz.xml
  12. 13
      resources/linux/run.sh
  13. 2
      src/core/UBOpenSankoreImporter.cpp

2
.gitignore vendored

@ -61,6 +61,8 @@ Makefile
Makefile.Debug
Makefile.Release
buildContext
# plugins #
###########

@ -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,174 @@
#!/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="/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"
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`
if [ $ARCHITECTURE == "x86_64" ]; then
ARCHITECTURE="amd64"
fi
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 -
}
createBuildContext() {
BUILD_CONTEXT="buildContext"
echo $ARCHITECTURE > $BUILD_CONTEXT
}
# Check command-line arguments to force an architecture
for var in "$@"
do
if [ $var == "i386" ]; then
ARCHITECTURE="i386"
fi
if [ $var == "amd64" ]; then
ARCHITECTURE="amd64"
fi
done
initializeVariables
#buildWithStandardQt
createBuildContext
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" ] || [ "$ARCHITECTURE" == "x86_64" ]; 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,23 @@
#!/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-mime install --mode system /opt/openboard/etc/openboard-ubz.xml
xdg-desktop-menu install --novendor /usr/share/applications/openboard.desktop
xdg-mime default /usr/share/applications/openboard.desktop application/ubz
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,323 @@
#!/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/>.
# ---------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Packaging script for OpenBoard, for Debian-compatible distributions.
#
# This should be run after `build.sh`.
#
# The generated package structure is as follows :
#
# DEBIAN/
# | control
# | md5sums
# | prerm
# | postinst
# usr/
# | bin/
# | | openboard <-- actually a symlink to run.sh
# | share/
# | | applications/
# | | | openboard.desktop
# opt/
# | openboard/
# | | importer/
# | | library/
# | | etc/
# | | qtlib/
# | | plugins/
# | | OpenBoard
# | | OpenBoard.png
# | | qt.conf
# | | run.sh
#
# ----------------------------------------------------------------------------
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(){
echo -e "\t $1"
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.?.?.?
chmod 644 $QT_LIBRARY_DEST_PATH/$1.so.?.?.? # 644 = rw-r-r
else
notifyError "$1 library not found in path: $QT_LIBRARY_SOURCE_PATH"
fi
}
copyQtPlugin(){
echo -e "\t $1"
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/*
chmod 644 $QT_PLUGINS_DEST_PATH/$1/* # 644 = rw-r-r
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"
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="OpenBoard, an interactive white board application"
VERSION=`cat $BUILD_DIR/version`
ARCHITECTURE=`cat buildContext`
# Qt installation path. This may vary across machines
QT_PATH="/opt/qt55"
QT_PLUGINS_SOURCE_PATH="$QT_PATH/plugins"
GUI_TRANSLATIONS_DIRECTORY_PATH="$QT_PATH/translations"
QT_LIBRARY_SOURCE_PATH="/home/craig/openboard/qtlib"
NOTIFY_CMD=`which notify-send`
ZIP_PATH=`which zip`
}
# ----------------------------------------------------------------------------
# Copying the application, libs etc. to the temporary working directory
# ----------------------------------------------------------------------------
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/
cp resources/linux/openboard-ubz.xml $PACKAGE_DIRECTORY/etc/
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 audio
copyQtPlugin generic
copyQtPlugin iconengines
copyQtPlugin imageformats
copyQtPlugin mediaservice
copyQtPlugin platforminputcontexts
copyQtPlugin platforms
copyQtPlugin platformthemes
copyQtPlugin position
copyQtPlugin printsupport
copyQtPlugin qtwebengine
copyQtPlugin sceneparsers
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)
# ----------------------------------------------------------------------------
notifyProgress "Generating control files for package"
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_CODE}" > "$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.8.4), libgomp1, 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 | grep -v "libqt5" | grep -v "qt55" | awk -F":" '{ print $1 }'`; do
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}" >> $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 "MimeType=application/ubz;" >> $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"
PACKAGE_NAME="${APPLICATION_NAME}_`lsb_release -is`_`lsb_release -rs`_${VERSION}_$ARCHITECTURE.deb"
PACKAGE_NAME=`echo "$PACKAGE_NAME" | awk '{print tolower($0)}'`
dpkg -b "$BASE_WORKING_DIR" "$PACKAGE_BUILD_DIR/linux/$PACKAGE_NAME"
#clean up mess
rm -rf $BASE_WORKING_DIR
notifyProgress "${APPLICATION_NAME}" "Package built"
exit 0

@ -14,13 +14,16 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# ---------------------------------------------------------------------
SCRIPT_PATH="`pwd`"
PROJECT_ROOT="$SCRIPT_PATH/../.."
APPLICATION_NAME="OpenBoard"
BASE_QT_DIR=~/Qt/5.5/clang_64
# Executables
QMAKE=$BASE_QT_DIR/bin/qmake
MACDEPLOYQT=$BASE_QT_DIR/bin/macdeployqt
DMGUTIL="`pwd`/../OpenBoard-ThirdParty/refnum/dmgutil/dmgutil.pl"
DMGUTIL="$PROJECT_ROOT/../OpenBoard-ThirdParty/refnum/dmgutil/dmgutil.pl"
DSYMUTIL=/usr/bin/dsymutil
STRIP=/usr/bin/strip
PLISTBUDDY=/usr/libexec/PlistBuddy
@ -28,7 +31,7 @@ ICEBERG=/usr/local/bin/freeze
LRELEASE=$BASE_QT_DIR/bin/lrelease
# Directories
BUILD_DIR="build/macx/release"
BUILD_DIR="$PROJECT_ROOT/build/macx/release"
PRODUCT_DIR="$BUILD_DIR/product"
BASE_QT_TRANSLATIONS_DIRECTORY=$BASE_QT_DIR/translations
@ -106,6 +109,8 @@ trap "defaults write org.oe-f.OpenBoard.release Running -bool NO" EXIT
notify "Running OpenBoard release script (`date`)"
cd $PROJECT_ROOT
script_is_running=`defaults read org.oe-f.OpenBoard.release Running 2>/dev/null`
if [[ $? -eq 0 ]] && [[ "$script_is_running" = "1" ]]; then
trap EXIT
@ -200,7 +205,7 @@ $DSYMUTIL "$APP/Contents/MacOS/$APPLICATION_NAME" -o "$DSYM"
$STRIP -S "$APP/Contents/MacOS/$APPLICATION_NAME"
if [ "$1" == "pkg" ]; then
BASE_ICEBERG_CONFIG_FILE="$APPLICATION_NAME.packproj"
BASE_ICEBERG_CONFIG_FILE="$SCRIPT_PATH/$APPLICATION_NAME.packproj"
#copy the standard file for working with
ICEBERG_CONFIG_FILE="$APPLICATION_NAME-working.packproj"
cp -r $BASE_ICEBERG_CONFIG_FILE $ICEBERG_CONFIG_FILE

@ -14,6 +14,8 @@ REM You should have received a copy of the GNU General Public License
REM along with this program. If not, see <http://www.gnu.org/licenses/>.
REM ---------------------------------------------------------------------
set SCRIPT_PATH=%~dp0
set PROJECT_ROOT=%SCRIPT_PATH%\..\..
set APPLICATION_NAME=OpenBoard
set QT_DIR=C:\Qt\5.5\msvc2010
@ -25,7 +27,7 @@ set GIT_BIN=%PROGRAMS_FILE_PATH%\Git\bin
set VS_BIN=%PROGRAMS_FILE_PATH%\Microsoft Visual Studio 10.0\VC\bin
set WIN_SDK_BIN=%PROGRAMS_FILE_PATH%\Microsoft SDKs\Windows\v6.0A\Bin
set INNO_EXE=%PROGRAMS_FILE_PATH%\Inno Setup 5\iscc.exe
set BUILD_DIR=build\win32\release
set BUILD_DIR=%PROJECT_ROOT%\build\win32\release
set LRELEASE=%QT_DIR%\bin\lrelease
set BASE_QT_TRANSLATIONS_DIRECTORY=%QT_DIR%\translations
@ -35,11 +37,14 @@ call "%VS_BIN%\vcvars32.bat"
echo %PATH%
cd %PROJECT_ROOT%
REM Third party impoter application
set IMPORTER_NAME=OpenBoardImporter
set IMPORTER_PATH="..\OpenBoard-Importer"
IF NOT EXIST "%IMPORTER_PATH%" GOTO EXIT_WITH_ERROR
set HOME_DIR="%cd%"
cd %IMPORTER_PATH%
IF EXIST "release" (del "release\*.*" /Q)
@ -96,7 +101,7 @@ del build\win32\release\product\i18n\qt_help*
del "build\win32\release\product\%APPLICATION_NAME%.pdb"
call "%INNO_EXE%" "%APPLICATION_NAME%.iss" /F"%APPLICATION_NAME%_Installer_%VERSION%"
call "%INNO_EXE%" "%SCRIPT_PATH%\%APPLICATION_NAME%.iss" /F"%APPLICATION_NAME%_Installer_%VERSION%"
GOTO END

@ -0,0 +1,8 @@
<?xml version="1.0"?>
<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
<mime-type type="application/ubz">
<comment>OpenBoard document file</comment>
<comment xml:lang="fr">Document OpenBoard</comment>
<glob pattern="*.ubz"/>
</mime-type>
</mime-info>

@ -14,4 +14,15 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# ---------------------------------------------------------------------
env LD_LIBRARY_PATH=$PWD/qtlib:$PWD/plugins/cffadaptor:$LD_LIBRARY_PATH ./Open-Sankore
# Directory of the script
SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ]; do
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
SOURCE="$(readlink "$SOURCE")"
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"
done
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
# Add custom libraries to LD_LIBRARY_PATH
# TODO: Remomve the need for this
env LD_LIBRARY_PATH=$DIR/qtlib:$LD_LIBRARY_PATH $DIR/OpenBoard

@ -51,7 +51,7 @@ void UBOpenSankoreImporter::onProceedClicked()
{
QProcess newProcess;
#ifdef Q_OS_LINUX
newProcess.startDetached(qApp->applicationDirPath()+"/Importer/OpenBoardImporter");
newProcess.startDetached(qApp->applicationDirPath()+"/importer/OpenBoardImporter");
#elif defined Q_OS_OSX
newProcess.startDetached(qApp->applicationDirPath()+"/../Resources/OpenBoardImporter.app/Contents/MacOS/OpenBoardImporter");
#else

Loading…
Cancel
Save