diff --git a/.github/workflows/package-linux-tarball.yml b/.github/workflows/package-linux-tarball.yml new file mode 100644 index 0000000000..c914570dd7 --- /dev/null +++ b/.github/workflows/package-linux-tarball.yml @@ -0,0 +1,31 @@ +name: package-linux-tarball + +on: + release: + types: [created] + +jobs: + package: + runs-on: ubuntu-20.04 + + steps: + - uses: actions/checkout@v1 + with: + submodules: true + + - name: Install Qt 6 + uses: jurplel/install-qt-action@v3 + with: + version: '6.6.1' + set-env: true + + - name: Run tarball script + run: | + ./packaging/package-linux-tarball.sh . + mv mrtrix.tar.gz mrtrix-$(git describe --tags --abbrev=0)-linux.tar.gz + + - name: Upload package to GitHub Release + uses: AButler/upload-release-assets@v2.0 + with: + files: '*.tar.gz' + repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/CMakeLists.txt b/CMakeLists.txt index afa90c3711..510d39cf74 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -132,6 +132,7 @@ add_custom_target(Github SOURCES .github/ISSUE_TEMPLATE/custom.md .github/ISSUE_TEMPLATE/feature_request.md .github/workflows/checks.yml + .github/workflows/package-linux-tarball.yml .github/workflows/package-linux-anaconda.yml .github/workflows/package-macos-anaconda.yml .github/workflows/package-macos-native.yml diff --git a/install_mime_types.sh b/install_mime_types.sh index db039d2946..04e4dcb390 100755 --- a/install_mime_types.sh +++ b/install_mime_types.sh @@ -16,11 +16,11 @@ # For more details, see http://www.mrtrix.org/. for s in 16 32 48 64 128; do - xdg-icon-resource install --context apps --size $s icons/desktop/${s}x${s}/mrtrix.png application-x-mrtrix - xdg-icon-resource install --context mimetypes --size $s icons/desktop/${s}x${s}/mrtrix.png x-mrtrix + xdg-icon-resource install --context apps --size $s share/icons/hicolor/${s}x${s}/apps/application-x-mrtrix.png application-x-mrtrix + xdg-icon-resource install --context mimetypes --size $s share/icons/hicolor/${s}x${s}/apps/application-x-mrtrix.png x-mrtrix done -xdg-mime install mrtrix-mime.xml -sed s^Exec=mrview^Exec=$(pwd)/bin/mrview^ < mrview.desktop > mrtrix-mrview.desktop +xdg-mime install share/mime/mrtrix-mime.xml +sed s^Exec=mrview^Exec=$(pwd)/bin/mrview^ < 'share/applications/mrview.desktop' > mrtrix-mrview.desktop xdg-desktop-menu install mrtrix-mrview.desktop diff --git a/packaging/package-linux-tarball.sh b/packaging/package-linux-tarball.sh new file mode 100755 index 0000000000..cc7f3cea22 --- /dev/null +++ b/packaging/package-linux-tarball.sh @@ -0,0 +1,91 @@ +#!/usr/bin/env bash + +# This is a script to package mrtrix3 as a tarball. It is intended to be +# run on a system with a package manager that supports apt (e.g. Ubuntu). +# It will automatically install the necessary dependencies to build but +# it assumes that the host system has an existing installation of Qt 6. +# NOTE: if you're using a custom installation of Qt, you may need to +# set the environment variable QMAKE to point to the qmake executable +# of your Qt installation (and possible set LD_LIBRARY_PATH to point to +# root_of_qt_installation/lib). +# The script takes the source directory as an argument and creates a tarball +# containing the built binaries and the necessary helper scripts. + +# Usage: ./package-linux-tarball.sh /path/to/source/directory + +running_dir=$(pwd) +source_dir=$(realpath $1) +tarball_dir=$running_dir/mrtrix_tarball_tmp + +set -e + +clean_up() { + printf "Cleaning up.\n" + rm -rf $tarball_dir +} + +mkdir -p $tarball_dir + +trap clean_up EXIT + +if [ ! -d "$1" ]; then + printf "Source directory does not exist: $1" + exit 1 +fi + +printf "Installing dependencies to build the project.\n" + +sudo apt install cmake \ + '^libxcb.*-dev' \ + libgl1-mesa-dev \ + ninja-build \ + python3 \ + libeigen3-dev \ + zlib1g-dev \ + libfftw3-dev \ + libtiff5-dev \ + libpng-dev + +if ! command -v clang++-17 &> /dev/null +then + printf "Clang 17 not found, installing it.\n" + wget https://apt.llvm.org/llvm.sh + chmod +x llvm.sh + sudo ./llvm.sh 17 +fi + +printf "Configuring and building the project.\n" + +build_dir=$tarball_dir/build_tarball +install_dir=$tarball_dir/install_tarball + +cd $tarball_dir + +cmake -B $build_dir -S $source_dir \ + -G Ninja \ + -DCMAKE_CXX_COMPILER=clang++-17 \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=$install_dir \ + -DCMAKE_EXE_LINKER_FLAGS="-Wl,--as-needed" \ + -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON + +cmake --build $build_dir +cmake --install $build_dir + +printf "Running linuxdeploy.\n" + +wget "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" +wget "https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage" +chmod +x linuxdeploy-x86_64.AppImage +chmod +x linuxdeploy-plugin-qt-x86_64.AppImage +mkdir appdir && mkdir appdir/usr +cp -r $install_dir/* appdir/usr +./linuxdeploy-x86_64.AppImage --appdir appdir --plugin qt + +printf "Creating the tarball.\n" + +rm -rf appdir/usr/translations # Remove translations since we don't need them +cp $source_dir/install_mime_types.sh appdir/usr +cp $source_dir/set_path appdir/usr +tar -czf mrtrix.tar.gz -C appdir/usr . +cp mrtrix.tar.gz $running_dir \ No newline at end of file diff --git a/share/CMakeLists.txt b/share/CMakeLists.txt index 7ffb4401c8..e51beb70eb 100644 --- a/share/CMakeLists.txt +++ b/share/CMakeLists.txt @@ -6,4 +6,16 @@ add_custom_target(copy-share-data ALL install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/mrtrix3/ DESTINATION ${CMAKE_INSTALL_DATADIR}/mrtrix3 +) + +install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/icons/hicolor + DESTINATION ${CMAKE_INSTALL_DATADIR}/icons +) + +install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/applications/mrview.desktop + DESTINATION ${CMAKE_INSTALL_DATADIR}/applications +) + +install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/mime/mrtrix-mime.xml + DESTINATION ${CMAKE_INSTALL_DATADIR}/mime ) \ No newline at end of file diff --git a/mrview.desktop b/share/applications/mrview.desktop similarity index 100% rename from mrview.desktop rename to share/applications/mrview.desktop diff --git a/icons/desktop/128x128/mrtrix.png b/share/icons/hicolor/128x128/apps/application-x-mrtrix.png similarity index 100% rename from icons/desktop/128x128/mrtrix.png rename to share/icons/hicolor/128x128/apps/application-x-mrtrix.png diff --git a/icons/desktop/16x16/mrtrix.png b/share/icons/hicolor/16x16/apps/application-x-mrtrix.png similarity index 100% rename from icons/desktop/16x16/mrtrix.png rename to share/icons/hicolor/16x16/apps/application-x-mrtrix.png diff --git a/icons/desktop/32x32/mrtrix.png b/share/icons/hicolor/32x32/apps/application-x-mrtrix.png similarity index 100% rename from icons/desktop/32x32/mrtrix.png rename to share/icons/hicolor/32x32/apps/application-x-mrtrix.png diff --git a/icons/desktop/48x48/mrtrix.png b/share/icons/hicolor/48x48/apps/application-x-mrtrix.png similarity index 100% rename from icons/desktop/48x48/mrtrix.png rename to share/icons/hicolor/48x48/apps/application-x-mrtrix.png diff --git a/icons/desktop/64x64/mrtrix.png b/share/icons/hicolor/64x64/apps/application-x-mrtrix.png similarity index 100% rename from icons/desktop/64x64/mrtrix.png rename to share/icons/hicolor/64x64/apps/application-x-mrtrix.png diff --git a/mrtrix-mime.xml b/share/mime/mrtrix-mime.xml similarity index 100% rename from mrtrix-mime.xml rename to share/mime/mrtrix-mime.xml