name: subsurface
icon: icons/subsurface-icon.svg
summary: Open source divelog program for recreational, tech, and free-divers
description: |
  Subsurface can plan and track single- and multi-tank dives using air, Nitrox
  or TriMix. It allows tracking of dive locations including GPS coordinates
  (which can also conveniently be entered using a map interface), logging of
  equipment used and names of other divers, and lets users rate dives and
  provide additional notes.

confinement: strict
base: core22
adopt-info: subsurface

apps:
  subsurface:
    environment:
      LD_LIBRARY_PATH: ${LD_LIBRARY_PATH}:${SNAP}/usr/local/lib
    command-chain:
    - bin/desktop-launch
    command: usr/local/bin/subsurface
    desktop: usr/local/share/applications/subsurface.desktop
    plugs:
    - bluez
    - desktop
    - desktop-legacy
    - home
    - network
    - opengl
    - raw-usb
    - removable-media
    - wayland
    - x11

parts:
  googlemaps:
    source: https://github.com/Subsurface/googlemaps.git
    plugin: make
    make-parameters:
    - INSTALL_ROOT=${CRAFT_PART_INSTALL}
    build-packages:
    - qtbase5-dev
    - wget
    override-pull: |
      craftctl default
      export QT_SELECT=5
      export QT_VERSION=$( qmake -query QT_VERSION )
      mkdir -p QtHeaders/QtLocation/private QtHeaders/QtPositioning/private
      cd QtHeaders/QtLocation/private
      for HEADER in \
          qlocationglobal \
          maps/qabstractgeotilecache \
          maps/qcache3q \
          maps/qgeocameracapabilities \
          maps/qgeocameradata \
          maps/qgeomap \
          maps/qgeomappingmanager \
          maps/qgeomappingmanagerengine \
          maps/qgeomaptype \
          maps/qgeofiletilecache \
          maps/qgeoprojection \
          maps/qgeotiledmap \
          maps/qgeotiledmappingmanagerengine \
          maps/qgeotiledmapreply \
          maps/qgeotilefetcher \
          maps/qgeotilespec \
          places/unsupportedreplies
      do
        wget --no-verbose --content-disposition \
          http://code.qt.io/cgit/qt/qtlocation.git/plain/src/location/${HEADER}_p.h?h=v${QT_VERSION}-lts-lgpl
      done
      cd -
      cd QtHeaders/QtPositioning/private
      for HEADER in \
          qdoublematrix4x4 \
          qdoublevector2d \
          qdoublevector3d \
          qpositioningglobal
      do
        wget --no-verbose --content-disposition \
          http://code.qt.io/cgit/qt/qtlocation.git/plain/src/positioning/${HEADER}_p.h?h=v${QT_VERSION}-lts-lgpl
      done
    override-build: |
      qmake \
        INCLUDEPATH+=${CRAFT_PART_SRC}/QtHeaders \
        ${CRAFT_PART_SRC}
      craftctl default

  desktop-qt5:
    source: https://github.com/ubuntu/snapcraft-desktop-helpers.git
    source-subdir: qt
    plugin: make
    make-parameters: ["FLAVOR=qt5"]
    build-packages:
      - build-essential
      - qtbase5-dev
      - dpkg-dev
    stage-packages:
      - libxkbcommon0
      - fonts-ubuntu
      - dmz-cursor-theme
      - light-themes
      - adwaita-icon-theme
      - gnome-themes-standard
      - shared-mime-info
      - libqt5gui5
      - libgdk-pixbuf2.0-0
      - libqt5svg5 # for loading icon themes which are svg
      - locales-all
      - xdg-user-dirs
      - fcitx-frontend-qt5

  libdc:
    plugin: autotools
    source: .
    source-type: git
    source-subdir: libdivecomputer
    build-packages:
    - libbluetooth-dev
    - libhidapi-dev
    - libusb-dev
    override-build: |
      sed -i 's/\[HIDAPI\], \[hidapi\]/[HIDAPI], [hidapi-libusb]/' libdivecomputer/configure.ac
      craftctl default
    stage-packages:
    - libbluetooth3
    - libftdi1-2
    - libhidapi-libusb0
    - libusb-1.0-0

  subsurface:
    source: .
    after: [desktop-qt5, googlemaps, libdc]
    plugin: cmake
    cmake-parameters:
    - -DMAKE_TESTS=OFF
    - -DLIBGIT2_DYNAMIC=ON
    - -DFTDISUPPORT=ON
    - -DLIBDIVECOMPUTER_LIBRARIES=../../../stage/usr/local/lib/libdivecomputer.so
    - -DLIBDIVECOMPUTER_INCLUDE_DIR=../../../stage/usr/local/include
    build-packages:
    - build-essential
    - libcurl4-gnutls-dev
    - libftdi1-dev
    - libgit2-dev
    - libqt5charts5-dev
    - libqt5svg5-dev
    - libqt5webkit5-dev
    - libsqlite3-dev
    - libssh2-1-dev
    - libssl-dev
    - libxml2-dev
    - libxslt1-dev
    - libzip-dev
    - pkg-config
    - qtconnectivity5-dev
    - qtlocation5-dev
    - qtpositioning5-dev
    - qttools5-dev
    override-pull: |
      craftctl default
      if [ ! -f latest-subsurface-buildnumber ] \
         && git fetch --depth=1 https://github.com/subsurface/nightly-builds.git branch-for-$( git rev-parse HEAD ); then
        git checkout FETCH_HEAD latest-subsurface-buildnumber
        # We succeeded getting the release version, allow publishing above `beta`
        craftctl set grade=stable
      else
        craftctl set grade=devel
      fi
      craftctl set version=$( scripts/get-version.sh )
    override-build: |
      mkdir -p ../install-root
      ln -sf ../../../stage/usr/lib/*/qt5/plugins/geoservices/libqtgeoservices_googlemaps.so \
        ../install-root/
      sed -i 's@^Icon=.*@Icon=${SNAP}/share/icons/hicolor/scalable/apps/subsurface-icon.svg@' ../src/subsurface.desktop
      craftctl default
    stage-packages:
    - libcap2
    - libcurl3-gnutls
    - libdb5.3
    - libftdi1-2
    - libgit2-1.1
    - libqt5bluetooth5
    - libqt5charts5
    - libqt5concurrent5
    - libqt5core5a
    - libqt5gui5
    - libqt5location5
    - libqt5network5
    - libqt5positioning5
    - libqt5printsupport5
    - libqt5qml5
    - libqt5quick5
    - libqt5quickwidgets5
    - libqt5svg5
    - libqt5webkit5
    - libqt5widgets5
    - libsqlite3-0
    - libssh2-1
    - libssl3
    - libusb-1.0-0
    - libxml2
    - libxslt1.1
    - libzip4
    - qml-module-qtlocation
    - qml-module-qtpositioning
    - qml-module-qtquick2
    - qtwayland5
    - zlib1g