1#!/bin/bash 2 3# This file is designed to run in debian jessie docker images. 4 5COMMAND=$1 6ARCH=$2 7 8main() { 9 10 set -e # Halt on error 11 set -x # Be verbose 12 13 shift 2 #need to adjust parameter list so $makefile_overrides start at $1 14 15 case $COMMAND in 16 "--fetch-build-dependencies-only") 17 fetch-build-dependencies 18 ;; 19 "--fetch-package-dependencies-only") 20 fetch-package-dependencies 21 ;; 22 "--build-only") 23 build "$@" 24 ;; 25 "--package-only") 26 package 27 ;; 28 *) 29 fetch-build-dependencies 30 fetch-package-dependencies 31 build "$@" 32 package 33 esac 34 35 echo 'RecipeDebianCross completed' 36} 37 38################################################################################# 39# Fetch compile-time dependencies only 40################################################################################## 41fetch-build-dependencies() { 42 echo "fetching dependencies for arm arch: $ARCH" 43 44 # get cross compiler toolchain 45 apt-key adv --fetch-keys http://emdebian.org/tools/debian/emdebian-toolchain-archive.key 46 echo "deb http://emdebian.org/tools/debian/ jessie main" > /etc/apt/sources.list.d/crosstools.list 47 48 # allow to download $ARCH-specific packages 49 dpkg --add-architecture $ARCH 50 51 apt-get clean && apt-get update && apt-get install -y \ 52 libsndfile1-dev:$ARCH \ 53 libasound2-dev:$ARCH \ 54 portaudio19-dev:$ARCH \ 55 libportmidi-dev:$ARCH \ 56 zlib1g-dev:$ARCH \ 57 libfreetype6-dev:$ARCH \ 58 libmp3lame-dev:$ARCH \ 59 libssl-dev:$ARCH \ 60 libdrm-dev:$ARCH \ 61 libgl1-mesa-dev:$ARCH \ 62 libpulse-dev:$ARCH \ 63 qtbase5-dev:$ARCH \ 64 qttools5-dev:$ARCH \ 65 qtscript5-dev:$ARCH \ 66 libqt5xmlpatterns5-dev:$ARCH \ 67 libqt5svg5-dev:$ARCH \ 68 libqt5webkit5-dev:$ARCH \ 69 qttools5-dev-tools:$ARCH \ 70 cross-gcc-dev \ 71 binutils-arm-linux-gnueabihf \ 72 crossbuild-essential-armhf \ 73 qemu-user-static \ 74 cmake \ 75 git 76 77 # forcibly install because will break aptitude dependency rules 78 force-install qtbase5-dev-tools $ARCH 79} 80 81################################################################################### 82# Fetch run-time dependencies only...to be run after fetching compile dependencies 83################################################################################### 84fetch-package-dependencies() { 85 echo "fetching AppImage packaging + runtime dependencies for arch: $ARCH" 86 87 force-install \ 88 alsa-base any \ 89 alsa-tools $ARCH \ 90 alsa-utils $ARCH \ 91 libasound2-plugins $ARCH \ 92 pulseaudio $ARCH \ 93 pkg-config $ARCH \ 94 liblcms2-2 $ARCH \ 95 libmng1 $ARCH \ 96 libicu52 $ARCH \ 97 qtquick1-5-dev $ARCH \ 98 libqt5quickwidgets5 $ARCH \ 99 libqt5gui5 $ARCH \ 100 libqt5multimedia5 $ARCH \ 101 libqt5multimediawidgets5 $ARCH \ 102 libqt5positioning5 $ARCH \ 103 libqt5sensors5 $ARCH \ 104 libqt5webkit5 $ARCH \ 105 libpulse0 $ARCH \ 106 libjson-c-dev $ARCH \ 107 libexpat1-dev $ARCH \ 108 libdbus-1-3 $ARCH \ 109 libglib2.0-0 $ARCH \ 110 libkeyutils-dev $ARCH \ 111 libwrap0 $ARCH \ 112 libacl1 $ARCH \ 113 libreadline6 $ARCH \ 114 libbz2-1.0 $ARCH \ 115 libpcre3 $ARCH \ 116 qml-module-qtquick-controls $ARCH \ 117 qml-module-qtquick-dialogs $ARCH \ 118 qml-module-qtquick-layouts $ARCH \ 119 qml-module-qtquick2 $ARCH \ 120 qml-module-qtqml-models2 $ARCH \ 121 qt5-image-formats-plugins $ARCH \ 122 libwrap0 $ARCH 123} 124 125######################################################## 126# BUILD MuseScore PORTABLE (Compile, not package) 127######################################################## 128build() { 129 echo "building MuseScore Portable for arch: $ARCH" 130 131 cd MuseScore 132 133 make revision 134 135 if [ "$ARCH" == "armhf" ]; then 136 LIBARM="/lib/arm-linux-gnueabihf" # might generalize in future to support other archs 137 CMAKE_TOOLCHAIN_FILE="/MuseScore/build/Linux+BSD/portable/ARM/jessie-crosscompile-armhf.cmake" \ 138 LD_LIBRARY_PATH="/usr$LIBARM:/usr$LIBARM/alsa-lib:/usr$LIBARM/pulseaudio:$LIBARM" \ 139 make "$@" portable 140 else 141 echo "This bash script only supports armhf cross at the moment" 142 fi 143} 144 145 146########################################################################## 147# PACKAGE INTO APPIMAGE WITH APPIMAGEKIT 148########################################################################## 149package() { 150 echo 'packaging' 151 152 appdir="$(cat MuseScore/build.release/PREFIX.txt)" 153 appimage="$(echo "$appdir" | sed 's|\.AppDir$|.AppImage|')" 154 155 cd AppImageKit-5/AppImageAssistant.AppDir 156 chmod u+x /$appdir/bin/QtWebEngineProcess 157 158 ./package "$appdir" "$appimage" 159 160 # allow access to AppImage from outside the chroot 161 chmod a+rwx "$appimage" 162 parent_dir="$(dirname "$appimage")" 163 while [ "$(dirname "$parent_dir")" != "$parent_dir" ]; do 164 [ "$parent_dir" == "/" ] && break 165 chmod a+rwx "$parent_dir" 166 parent_dir="$(dirname "$parent_dir")" 167 done 168 169 ls -lh "$appimage" 170 171} 172 173######################################################################## 174# helper function needed for forcibly installing packages 175# which would break aptitude's dependency requirements 176######################################################################## 177force-install() { 178 while (($#)); do 179 apt-get download $1:$2 && dpkg --force-all -i $1* 180 shift 2 181 done 182} 183 184main "$@" 185