Browse Source

Change to build Qt instead of using Docker

Joachim M. Giæver 3 years ago
parent
commit
ba5e3ae9dd
4 changed files with 105 additions and 83 deletions
  1. 93 16
      snap/snapcraft.yaml
  2. 12 0
      src/bin/env-wrapper
  3. 0 23
      src/hooks/install
  4. 0 44
      src/wrapper

+ 93 - 16
snap/snapcraft.yaml

@@ -1,6 +1,6 @@
 name: ozwdaemon
 base: core20
-version: '0.2'
+version: '0.1'
 summary: Single-line elevator pitch for your amazing snap # 79 char long summary
 description: |
   This is my-snap's description. You have a paragraph or two to tell the
@@ -11,23 +11,100 @@ description: |
 grade: devel
 confinement: devmode
 
-plugs:
-  docker-executables:
-    interface: content
-    target: $SNAP/docker-snap
-    default-provider: docker
-
 apps:
-   ozwdaemon:
-     command: bin/wrapper
-     plugs: 
+  ozwdaemon:
+    command: usr/local/bin/ozwdaemon
+    command-chain:
+      - bin/env-wrapper
+    plugs:
       - network
-      - docker
+      - network-bind
+      - raw-usb
 
 parts:
-  ozwdaemon:
+  open-zwave:
+    plugin: make
+    source: https://github.com/OpenZWave/open-zwave.git
+  qtmqtt:
+    plugin: make # aka qmake
+    source: https://github.com/qt/qtmqtt.git
+    source-tag: 5.12.8
+    build-packages:
+      - build-essential
+      - qt5-default
+      - qtbase5-private-dev
+    override-build: |
+      if [ -f "Makefile" ]; then
+        echo "Clean $SNAPCRAFT_PART_BUILD"
+        qmake -r
+        make distclean
+      fi
+      qmake
+      make -j$(nproc)
+      make -j$(nproc) install INSTALL_ROOT="${SNAPCRAFT_PART_INSTALL}"
+    stage-packages:
+      - libdouble-conversion3
+      - libfreetype6
+      - libgl1
+      - libglvnd0
+      - libglx0
+      - libgraphite2-3
+      - libharfbuzz0b
+      - libicu66
+      - libpcre2-16-0
+      - libpng16-16
+      - libqt5core5a
+      - libqt5gui5
+      - libqt5network5
+      - libqt5websockets5
+      - libqt5widgets5
+      - libx11-6
+      - libxau6
+      - libxcb1
+      - libxdmcp6
+  qt-openzwave:
+    after: [open-zwave, qtmqtt]
+    plugin: make # aka qmake?
+    source: https://github.com/OpenZWave/qt-openzwave.git
+    build-packages:
+      - build-essential
+      - qt5-default
+      - libqt5websockets5-dev
+      - libqt5remoteobjects5-dev
+      - libqt5remoteobjects5-bin
+      - gcc-8-base
+      - libgcc-8-dev
+      - cmake
+      - pkgconf
+      - libunwind-dev
+      - libcurl4-openssl-dev
+      - rapidjson-dev
+    stage-packages:
+      - libdouble-conversion3
+      - libicu66
+      - libpcre2-16-0
+      - libqt5core5a
+      - libqt5network5
+      - libqt5remoteobjects5
+      - libqt5websockets5
+      - libunwind8
+    override-build: |
+      if [ -f "Makefile" ]; then
+        echo "Clean $SNAPCRAFT_PART_BUILD"
+        qmake -r
+        make distclean
+      fi
+      OZW_LIB_PATH="$(dirname $(find $HOME/parts/open-zwave/install -name libopenzwave.so -print0 -quit))"
+      OZW_INCLUDE_PATH="$(dirname $(find $HOME/parts/open-zwave/install -name Manager.h -print0 -quit))"
+      OZW_DATABASE_PATH="$(dirname $(find $HOME/parts/open-zwave/install -name manufacturer_specific.xml))"
+      qmake -r "CONFIG+=release" \
+          OZW_LIB_PATH="${OZW_LIB_PATH}" \
+          OZW_INCLUDE_PATH="${OZW_INCLUDE_PATH}" \
+          OZW_DATABASE_PATH="${OZW_DATABASE_PATH}"
+      make -j$(nproc)
+      make -j$(nproc) install INSTALL_ROOT="${SNAPCRAFT_PART_INSTALL}"
+  local-src:
+    after: [qt-openzwave]
     plugin: dump
-    source: src/
-    organize:
-      wrapper: bin/
-      hooks: snap/hooks
+    source: ./src
+    source-type: local

+ 12 - 0
src/bin/env-wrapper

@@ -0,0 +1,12 @@
+#!/usr/bin/env bash
+
+set -e
+
+OZW_LIB=$(dirname $(find "${SNAP}/usr/local" -name libopenzwave.so -print -quit))
+echo $LD_LIBRARY_PATH
+echo ""
+
+export LD_LIBRARY_PATH="${OZW_LIB}:${LD_LIBRARY_PATH}"
+echo $LD_LIBRARY_PATH
+
+exec "$@"

+ 0 - 23
src/hooks/install

@@ -1,23 +0,0 @@
-#!/usr/bin/env bash
-
-set -e
-
-snapctl set usb-path=/dev/ttyUSB0
-
-snapctl set mqtt.server=localhost
-snapctl set mqtt.port=1883
-snapctl set mqtt.username=username
-snapctl set mqtt.password=password
-snapctl set mqtt.tls=false
-snapctl set mqtt.connect-timeout=30
-
-snapctl set stop-on-failure=true
-
-KEY=$(cat /dev/urandom | tr -dc '0-9A-F' | fold -w 32 | head -n 1 | sed -e 's/\(..\)/0x\1, /g' -e 's/, $//')
-
-if [ $? -ne 0 ]; 
-    KEY="0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00"
-fi;
-
-snapctl set ozw.network-key="${KEY}"
-snapctl get ozw.instance=1

+ 0 - 44
src/wrapper

@@ -1,44 +0,0 @@
-#!/usr/bin/env bash
-
-set -e
-
-if ! snapctl is-connected docker-executables; then
-    echo "the docker-executables content interface must be connected first!"
-    echo "please run \"snap connect $SNAP_NAME:docker-executables docker:docker-executables\""
-    exit 1
-fi
-
-if ! snapctl is-connected docker; then
-    echo "the docker socket interface must be connected first!"
-    echo "please run \"snap connect $SNAP_NAME:docker docker:docker-daemon\""
-    exit 1
-fi
-
-COMPOSE_FILE="${SNAP}/services/ozwdaemon/docker-compose.yml"
-
-USB_PATH=$(snapctl get usb-path)
-MQTT_SERVER=$(snapctl get mqtt.server)
-MQTT_PORT=$(snapctl get mqtt.port)
-MQTT_USERNAME=$(snapctl get mqtt.username)
-MQTT_PASSWORD=$(snapctl get mqtt.password)
-MQTT_TLS=$(snapctl get mqtt.tls)
-MQTT_CONNECT_TIMEOUT=$(snapctl get mqtt.connect-timeout)
-STOP_ON_FAILURE=$(snapctl get stop-on-failure)
-OZW_NETWORK_KEY=$(snapctl get ozw.network-key)
-OZW_INSTANCE=$(snapctl get ozw.instance)
-
-#$SNAP/docker-snap/bin/docker-compose -f $COMPOSE_FILE up -d
-
-# ALL IN ONE
-# $SNAP/docker-snap/bin/docker run -it \
-#     --security-opt seccomp=unconfined \
-#     --device=/dev/ttyUSB0 \
-#     -v $PWD/ozw:/opt/ozw/config \
-#     -e MQTT_SERVER="10.100.200.102" \
-#     -e USB_PATH=/dev/ttyUSB0 \
-#     -p 1983:1983 \
-#     -p 5901:5901 \
-#     -p 7800:7800 \
-#     openzwave/ozwdaemon:allinone-latest
-
-$SNAP/docker-snap/bin/docker "$@"