build-appimage.sh 3.1 KB

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