build-appimage.sh 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #! /bin/bash
  2. set -xe
  3. export APPNAME=${APPNAME:-nextcloud}
  4. export BUILD_UPDATER=${BUILD_UPDATER:-OFF}
  5. export BUILDNR=${BUILDNR:-0000}
  6. export DESKTOP_CLIENT_ROOT=${DESKTOP_CLIENT_ROOT:-/home/user}
  7. #Set Qt-5.15
  8. export QT_BASE_DIR=/opt/qt5.15
  9. export QTDIR=$QT_BASE_DIR
  10. export PATH=$QT_BASE_DIR/bin:$PATH
  11. export LD_LIBRARY_PATH=$QT_BASE_DIR/lib/x86_64-linux-gnu:$QT_BASE_DIR/lib:$LD_LIBRARY_PATH
  12. export PKG_CONFIG_PATH=$QT_BASE_DIR/lib/pkgconfig:$PKG_CONFIG_PATH
  13. # Set defaults
  14. export SUFFIX=${DRONE_PULL_REQUEST:=master}
  15. if [ $SUFFIX != "master" ]; then
  16. SUFFIX="PR-$SUFFIX"
  17. fi
  18. if [ "$BUILD_UPDATER" != "OFF" ]; then
  19. BUILD_UPDATER=ON
  20. fi
  21. mkdir /app
  22. # QtKeyChain
  23. git clone https://github.com/frankosterfeld/qtkeychain.git
  24. cd qtkeychain
  25. git checkout v0.10.0
  26. mkdir build
  27. cd build
  28. cmake -G Ninja -D CMAKE_INSTALL_PREFIX=/usr ..
  29. cmake --build . --target all
  30. DESTDIR=/app cmake --install .
  31. # Build client
  32. mkdir build-client
  33. cd build-client
  34. cmake \
  35. -G Ninja \
  36. -D CMAKE_INSTALL_PREFIX=/usr \
  37. -D BUILD_TESTING=OFF \
  38. -D BUILD_UPDATER=$BUILD_UPDATER \
  39. -D MIRALL_VERSION_BUILD=$BUILDNR \
  40. -D MIRALL_VERSION_SUFFIX="$VERSION_SUFFIX" \
  41. ${DESKTOP_CLIENT_ROOT}
  42. cmake --build . --target all
  43. DESTDIR=/app cmake --install .
  44. # Move stuff around
  45. cd /app
  46. mv usr/lib/x86_64-linux-gnu/* usr/lib/
  47. mkdir usr/plugins
  48. mv usr/lib/*sync_vfs_suffix.so usr/plugins
  49. mv usr/lib/*sync_vfs_xattr.so usr/plugins
  50. rm -rf usr/lib/cmake
  51. rm -rf usr/include
  52. rm -rf usr/mkspecs
  53. rm -rf usr/lib/x86_64-linux-gnu/
  54. # Don't bundle the explorer extentions as we can't do anything with them in the AppImage
  55. rm -rf usr/share/caja-python/
  56. rm -rf usr/share/nautilus-python/
  57. rm -rf usr/share/nemo-python/
  58. # Move sync exclude to right location
  59. mv /app/etc/*/sync-exclude.lst usr/bin/
  60. rm -rf etc
  61. # com.nextcloud.desktopclient.nextcloud.desktop
  62. DESKTOP_FILE=$(ls /app/usr/share/applications/*.desktop)
  63. sed -i -e 's|Icon=nextcloud|Icon=Nextcloud|g' ${DESKTOP_FILE} # Bug in desktop file?
  64. cp ./usr/share/icons/hicolor/512x512/apps/*.png . # Workaround for linuxeployqt bug, FIXME
  65. # Because distros need to get their shit together
  66. cp -R /usr/lib/x86_64-linux-gnu/libssl.so* ./usr/lib/
  67. cp -R /usr/lib/x86_64-linux-gnu/libcrypto.so* ./usr/lib/
  68. cp -P /usr/local/lib/libssl.so* ./usr/lib/
  69. cp -P /usr/local/lib/libcrypto.so* ./usr/lib/
  70. # NSS fun
  71. cp -P -r /usr/lib/x86_64-linux-gnu/nss ./usr/lib/
  72. # Use linuxdeployqt to deploy
  73. wget --ca-directory=/etc/ssl/certs -c "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage"
  74. chmod a+x linuxdeployqt*.AppImage
  75. ./linuxdeployqt-continuous-x86_64.AppImage --appimage-extract
  76. rm ./linuxdeployqt-continuous-x86_64.AppImage
  77. unset QTDIR; unset QT_PLUGIN_PATH ; unset LD_LIBRARY_PATH
  78. export LD_LIBRARY_PATH=/usr/lib/
  79. ./squashfs-root/AppRun ${DESKTOP_FILE} -bundle-non-qt-libs -qmldir=${DESKTOP_CLIENT_ROOT}/src/gui
  80. # Set origin
  81. ./squashfs-root/usr/bin/patchelf --set-rpath '$ORIGIN/' /app/usr/lib/lib*sync.so.0
  82. # Build AppImage
  83. ./squashfs-root/AppRun ${DESKTOP_FILE} -appimage -updateinformation="gh-releases-zsync|nextcloud-releases|desktop|latest|Nextcloud-*-x86_64.AppImage.zsync"
  84. #move AppImage
  85. if [ ! -z "$DRONE_COMMIT" ]
  86. then
  87. mv Nextcloud*.AppImage Nextcloud-${SUFFIX}-${DRONE_COMMIT}-x86_64.AppImage
  88. fi
  89. mv *.AppImage ${DESKTOP_CLIENT_ROOT}/