From 7fad422b9e0579066d8833a3545e3f7f323c0ed4 Mon Sep 17 00:00:00 2001 From: freemountain Date: Sun, 20 Nov 2016 13:35:21 +0100 Subject: [PATCH 1/8] automate tools download --- .gitignore | 3 +- README.md | 8 ++-- example/default/package.json | 11 +++-- qml-player.pro | 16 ++++--- tools/arch.sh | 83 ++++++++++++++++++++++++++++++++++++ tools/bootstrap.sh | 21 +++++++++ tools/downloadNode.sh | 35 +++++++++++++++ tools/downloadQpm.sh | 28 ++++++++++++ 8 files changed, 189 insertions(+), 16 deletions(-) create mode 100755 tools/arch.sh create mode 100755 tools/bootstrap.sh create mode 100755 tools/downloadNode.sh create mode 100755 tools/downloadQpm.sh diff --git a/.gitignore b/.gitignore index 6d632ea..cddb61e 100644 --- a/.gitignore +++ b/.gitignore @@ -2,9 +2,10 @@ *.qmake.stash vendor Makefile -apps/*/node_modules +example/*/node_modules build qpm setupfile coverage src/node_path/node_modules +tmp diff --git a/README.md b/README.md index 1dbce08..dd8dcf4 100644 --- a/README.md +++ b/README.md @@ -104,12 +104,11 @@ Prebuilt binaries for OSX can be found on the releases page. ## Building ### Requirements - Qt 5.7 -- [qpm](https://github.com/Cutehacks/qpm) ### OSX ```bash export PATH=$PATH:/path/to/Qt/5.7/clang_64/bin -qpm install +./tools/bootstrap.sh mkdir build cd build qmake .. @@ -124,8 +123,7 @@ The created executable will only run on systems with Qt installed. The windeploy ```bash export PATH=$PATH:/c/Qt/5.7/mingw53_32/bin export PATH=$PATH:/c/Qt/Tools/mingw530_32/bin - -qpm install +./tools/bootstrap.sh mkdir build cd build qmake .. @@ -139,7 +137,7 @@ Currently there is no linuxdeployqt scripty, you need to use the following: [lin ```bash export PATH=/path/to/Qt/5.7/clang_64/bin:/path/to/linuxdeployqt:$PATH sudo apt-get install mesa-common-dev libglu1-mesa-dev patchelf -qpm install +./tools/bootstrap.sh mkdir build cd build qmake .. diff --git a/example/default/package.json b/example/default/package.json index f44b25c..1e3ced5 100644 --- a/example/default/package.json +++ b/example/default/package.json @@ -1,6 +1,9 @@ { - "name" : "quark-default", - "version" : "0.1.0", - "main" : "main.js", - "initialQml": "index.qml" + "name": "quark-default", + "version": "0.1.0", + "main": "main.js", + "initialQml": "index.qml", + "dependencies": { + "shelljs": "^0.7.5" + } } diff --git a/qml-player.pro b/qml-player.pro index f7a1bda..45b901c 100644 --- a/qml-player.pro +++ b/qml-player.pro @@ -19,22 +19,26 @@ HEADERS += \ RESOURCES += qml.qrc +#copy node binary +NODE_CMD = $$system(tools/downloadNode.sh) +macx: copy_node.commands = $(COPY_DIR) $$NODE_CMD $$OUT_PWD/$$TARGET".app"/Contents/MacOS/ +linux: copy_node.commands = $(COPY_DIR) $$NODE_CMD $$OUT_PWD/ + #copy node_path macx: copy_node_path.commands = $(COPY_DIR) $$PWD/src/node_path $$OUT_PWD/$$TARGET".app"/Contents/Resources/ linux: copy_node_path.commands = $(COPY_DIR) $$PWD/src/node_path $$OUT_PWD/ - - #copy default app -macx: copy_app.commands = $(COPY_DIR) $$PWD/apps/default $$OUT_PWD/$$TARGET".app"/Contents/Resources/ -linux: copy_app.commands = $(COPY_DIR) $$PWD/apps/default $$OUT_PWD/ +macx: copy_app.commands = $(COPY_DIR) $$PWD/example/default $$OUT_PWD/$$TARGET".app"/Contents/Resources/ +linux: copy_app.commands = $(COPY_DIR) $$PWD/example/default $$OUT_PWD/ -first.depends = $(first) copy_node_path copy_app +first.depends = $(first) copy_node_path copy_app copy_node export(first.depends) export(copy_node_path.commands) export(copy_app.commands) +export(copy_node.commands) -QMAKE_EXTRA_TARGETS += first copy_node_path copy_app +QMAKE_EXTRA_TARGETS += first copy_node_path copy_app copy_node # Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin diff --git a/tools/arch.sh b/tools/arch.sh new file mode 100755 index 0000000..1d2d177 --- /dev/null +++ b/tools/arch.sh @@ -0,0 +1,83 @@ +#!/bin/sh +set -e +# A PosIX variable +OPTIND=1 # Reset in case getopts has been used previously in the shell. + +valid_formats=( "std" "node" "qpm" ) +# Initialize our own variables: +format="std" # or qpm, node +show_arch=false +show_os=false + +arch="$(uname -m)" +case "$OSTYPE" in + darwin*) os="darwin" ;; + linux*) os="linux" ;; + msys*) os="win" ;; + *) echo "unknown: $OSTYPE" ; exit 1; +esac + + +echo_std() { + if [[ "$show_arch" = true ]]; then + echo "$arch" + fi + if [[ "$show_os" = true ]]; then + echo "$os" + fi +} + +echo_qpm() { + arch="386" + if [[ "$show_arch" = true ]]; then + echo "$arch" + fi + if [[ "$show_os" = true ]]; then + echo "$os" + fi +} + +echo_node() { + case "$arch" in + x86_64) arch="x64";; + i686) arch="x86";; + *) echo "could not parse uname -m output: $arcg" ; exit 1; + esac + + if [[ "$show_arch" = true ]]; then + echo "$arch" + fi + if [[ "$show_os" = true ]]; then + echo "$os" + fi +} +while getopts "aof:" opt; do + case "$opt" in + a) show_arch=true + ;; + o) show_os=true + ;; + f) format=$OPTARG + ;; + esac +done + +shift $((OPTIND-1)) + +[ "$1" = "--" ] && shift + +case "$format" in + std) + echo_std + exit + ;; + qpm) + echo_qpm + exit + ;; + node) + echo_node + exit + ;; + *) echo "illegal format vale: $format. (valid: ${valid_formats[@]}))" ; exit 1; +esac diff --git a/tools/bootstrap.sh b/tools/bootstrap.sh new file mode 100755 index 0000000..6450e57 --- /dev/null +++ b/tools/bootstrap.sh @@ -0,0 +1,21 @@ +#!/bin/bash +set -e +PROJECT_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )/.." + +NODE_CMD=$("$PROJECT_PATH/tools/downloadNode.sh") +NPM_CMD="$(dirname "$NODE_CMD")/npm" +QPM_CMD=$("$PROJECT_PATH/tools/downloadQpm.sh") + +pushd . > /dev/null + +"$QPM_CMD" install + +for i in $PROJECT_PATH/example/* ; do + cd "$i" + "$NPM_CMD" install +done + +cd "$PROJECT_PATH/src/node_path" +"$NPM_CMD" install + +popd > /dev/null diff --git a/tools/downloadNode.sh b/tools/downloadNode.sh new file mode 100755 index 0000000..f5c9291 --- /dev/null +++ b/tools/downloadNode.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +PROJECT_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )/.." + +NODE_VERSION="v7.1.0" +ARCH="$($PROJECT_PATH/tools/arch.sh -f node -a)" +OS="$($PROJECT_PATH/tools/arch.sh -f node -o)" +BASE_URL="https://nodejs.org/dist/$NODE_VERSION" +BASE_PATH="$PROJECT_PATH/tmp/node-$NODE_VERSION-$OS-$ARCH" + +pushd . > /dev/null +mkdir -p "$BASE_PATH" + +if [ "$OS" == "$win" ]; then + URL="$BASE_URL/win-$ARCH/node.exe" + NODE_CMD="$BASE_PATH/node.exe" + + curl -o "$NODE_CMD" "$URL" + echo $NODE_CMD + exit +fi + +URL="$BASE_URL/node-$NODE_VERSION-$OS-$ARCH.tar.xz" +NODE_CMD="$BASE_PATH/bin/node" + +if [ -f "$NODE_CMD" ]; then + echo "$NODE_CMD" + exit +fi + +cd "$BASE_PATH/.." +curl -0 https://nodejs.org/dist/v7.1.0/node-v7.1.0-darwin-x64.tar.xz|tar -xz +popd > /dev/null + +echo "$NODE_CMD" diff --git a/tools/downloadQpm.sh b/tools/downloadQpm.sh new file mode 100755 index 0000000..dcf5e89 --- /dev/null +++ b/tools/downloadQpm.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +PROJECT_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )/.." + +VERSION="v0.10.0" +ARCH="$($PROJECT_PATH/tools/arch.sh -f qpm -a)" +OS="$($PROJECT_PATH/tools/arch.sh -f qpm -o)" +BASE_URL="https://www.qpm.io/download/$VERSION" +BASE_PATH="$PROJECT_PATH/tmp/qpm-$VERSION-$OS-$ARCH" + +pushd . > /dev/null +mkdir -p "$BASE_PATH" + +URL="$BASE_URL/$OS""_$ARCH/qpm" +CMD="$BASE_PATH/qpm" + +if [ -f "$CMD" ]; then + echo "$CMD" + exit +fi + +cd "$BASE_PATH" +curl -O "$URL" +chmod +x "$CMD" + +popd > /dev/null + +echo "$CMD" From 914da94f5571a0ea5b1e23594d4bb86b31f0b2a2 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 20 Nov 2016 23:56:30 +0100 Subject: [PATCH 2/8] lowercase require call --- src/node_path/Gluon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/node_path/Gluon.js b/src/node_path/Gluon.js index b7afb25..5d6c96b 100644 --- a/src/node_path/Gluon.js +++ b/src/node_path/Gluon.js @@ -3,7 +3,7 @@ const Stream = require("stream"); const StringDecoder = require("string_decoder").StringDecoder; const Transform = Stream.Transform; const Duplex = Stream.Duplex; -const JSONStream = require("JSONStream2"); +const JSONStream = require("jsonstream2"); const Filter = require("through2-filter"); const Mapper = require("through2-map"); From f61db630487f6106e4d5469dc7dc88e8d58e00f8 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 20 Nov 2016 23:57:19 +0100 Subject: [PATCH 3/8] fix linux bootstrap script --- tools/arch.sh | 2 +- tools/downloadNode.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/arch.sh b/tools/arch.sh index 1d2d177..4ac30f1 100755 --- a/tools/arch.sh +++ b/tools/arch.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash set -e # A PosIX variable OPTIND=1 # Reset in case getopts has been used previously in the shell. diff --git a/tools/downloadNode.sh b/tools/downloadNode.sh index f5c9291..640fc01 100755 --- a/tools/downloadNode.sh +++ b/tools/downloadNode.sh @@ -29,7 +29,7 @@ if [ -f "$NODE_CMD" ]; then fi cd "$BASE_PATH/.." -curl -0 https://nodejs.org/dist/v7.1.0/node-v7.1.0-darwin-x64.tar.xz|tar -xz +curl -0 "$URL"|tar -xJ popd > /dev/null echo "$NODE_CMD" From 61a26d0898d5f563ea2f6a8d14443dbcdd96594c Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 21 Nov 2016 12:56:47 +0100 Subject: [PATCH 4/8] add default icon --- quark.svg | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 quark.svg diff --git a/quark.svg b/quark.svg new file mode 100644 index 0000000..e69de29 From 8241d48b7558312a0f20b5b70406e4b0cf43f361 Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 21 Nov 2016 12:57:25 +0100 Subject: [PATCH 5/8] fix scripts for linux --- tools/arch.sh | 47 ++++++++++--------------------------------- tools/bootstrap.sh | 21 +++++++++++++++++++ tools/deploy_linux.sh | 35 ++++++++++++++------------------ tools/downloadNode.sh | 2 +- 4 files changed, 48 insertions(+), 57 deletions(-) diff --git a/tools/arch.sh b/tools/arch.sh index 4ac30f1..470bf72 100755 --- a/tools/arch.sh +++ b/tools/arch.sh @@ -3,7 +3,7 @@ set -e # A PosIX variable OPTIND=1 # Reset in case getopts has been used previously in the shell. -valid_formats=( "std" "node" "qpm" ) +valid_formats=( "std" "node" "qpm" ) # Initialize our own variables: format="std" # or qpm, node show_arch=false @@ -17,24 +17,8 @@ case "$OSTYPE" in *) echo "unknown: $OSTYPE" ; exit 1; esac - -echo_std() { - if [[ "$show_arch" = true ]]; then - echo "$arch" - fi - if [[ "$show_os" = true ]]; then - echo "$os" - fi -} - echo_qpm() { arch="386" - if [[ "$show_arch" = true ]]; then - echo "$arch" - fi - if [[ "$show_os" = true ]]; then - echo "$os" - fi } echo_node() { @@ -43,13 +27,6 @@ echo_node() { i686) arch="x86";; *) echo "could not parse uname -m output: $arcg" ; exit 1; esac - - if [[ "$show_arch" = true ]]; then - echo "$arch" - fi - if [[ "$show_os" = true ]]; then - echo "$os" - fi } while getopts "aof:" opt; do case "$opt" in @@ -67,17 +44,15 @@ shift $((OPTIND-1)) [ "$1" = "--" ] && shift case "$format" in - std) - echo_std - exit - ;; - qpm) - echo_qpm - exit - ;; - node) - echo_node - exit - ;; + std);; + qpm) echo_qpm;; + node) echo_node;; *) echo "illegal format vale: $format. (valid: ${valid_formats[@]}))" ; exit 1; esac + +if [[ "$show_arch" = true ]]; then +echo "$arch" +fi +if [[ "$show_os" = true ]]; then +echo "$os" +fi diff --git a/tools/bootstrap.sh b/tools/bootstrap.sh index 6450e57..21080eb 100755 --- a/tools/bootstrap.sh +++ b/tools/bootstrap.sh @@ -2,8 +2,11 @@ set -e PROJECT_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )/.." +OS="$($PROJECT_PATH/tools/arch.sh -f node -o)" +echo "download node..." NODE_CMD=$("$PROJECT_PATH/tools/downloadNode.sh") NPM_CMD="$(dirname "$NODE_CMD")/npm" +echo "download qpm..." QPM_CMD=$("$PROJECT_PATH/tools/downloadQpm.sh") pushd . > /dev/null @@ -12,10 +15,28 @@ pushd . > /dev/null for i in $PROJECT_PATH/example/* ; do cd "$i" + echo "npm install $i" "$NPM_CMD" install done cd "$PROJECT_PATH/src/node_path" "$NPM_CMD" install +if [ "$OS" = "linux" ]; then + if [ ! -d "$PROJECT_PATH/tmp/linuxdeployqt-src" ] ; then + git clone "https://github.com/probonopd/linuxdeployqt" "$PROJECT_PATH/tmp/linuxdeployqt-src" + fi + if [ ! -d "$PROJECT_PATH/tmp/linuxdeployqt-build" ] ; then + mkdir "$PROJECT_PATH/tmp/linuxdeployqt-build" + cd "$PROJECT_PATH/tmp/linuxdeployqt-build" + qmake "../linuxdeployqt-src" + make + fi + + APPIMG_CMD="$PROJECT_PATH/tmp/appimagetool" + if [ ! -f "$APPIMG_CMD" ] ; then + curl -L -o "$APPIMG_CMD" "https://github.com/probonopd/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage" + chmod +x "$APPIMG_CMD" + fi +fi popd > /dev/null diff --git a/tools/deploy_linux.sh b/tools/deploy_linux.sh index cdcedef..262a40d 100755 --- a/tools/deploy_linux.sh +++ b/tools/deploy_linux.sh @@ -2,28 +2,23 @@ PROJECT_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )/../" TARGET_APP=$1 -NODE_CMD=$2 TARGET_PATH=$(dirname "$TARGET_APP") -QT_PATH="/home/dodo/Qt5.7.0aa/5.7/gcc_64" +DEPLOY_CMD="$PROJECT_PATH/tmp/linuxdeployqt-build/linuxdeployqt/linuxdeployqt" +TMP_PATH="$PROJECT_PATH/tmp" -linuxdeployqt $TARGET_APP --compiler-runtime --qmldir=$PROJECT_PATH/src/qml -bundle-non-qt-libs +cat << EOF > "$TARGET_PATH/quark.desktop" +[Desktop Entry] +Type=Application +Name=Quark +Exec=AppRun %F +Icon=default +Comment=Edit this default file +Terminal=true +EOF -: <<'END' -mkdir -p "$TARGET_PATH/platforms" -cp "$QT_PATH/plugins/platforms/libqxcb.so" "$TARGET_PATH/platforms/libqxcb.so" +cp "$PROJECT_PATH/quark.svg" "$TARGET_PATH/default.svg" +PATH="$TMP_PATH:$PATH" "$DEPLOY_CMD" $TARGET_APP -qmldir=$PROJECT_PATH/src/qml -bundle-non-qt-libs -no-strip -libs=( "libQt5DBus.so.5" ) -#libs=( "libQt5DBus.so.5" "libQt5XcbQpa.so.5" "libicudata.so.56" "libicuuc.so.56" "libicui18n.so.56" "libQt5Core.so.5" "libQt5Gui.so.5" "libQt5Qml.so.5" "libQt5Network.so.5" "libQt5Widgets.so.5" ) -for lib in ${libs[*]} -do - cp "$QT_PATH/lib/$lib" "$TARGET_PATH/$lib" -done - - -qmlPlugins=( "QtQuick" "QtQuick.2" "QtQml" ) -for qml in ${qmlPlugins[*]} -do - cp -r "$QT_PATH/qml/$qml" "$TARGET_PATH/$qml" -done -END +# we need to run this two times... +PATH="$TMP_PATH:$PATH" "$DEPLOY_CMD" $TARGET_APP -appimage -qmldir=$PROJECT_PATH/src/qml -bundle-non-qt-libs -no-strip \ No newline at end of file diff --git a/tools/downloadNode.sh b/tools/downloadNode.sh index 640fc01..9060706 100755 --- a/tools/downloadNode.sh +++ b/tools/downloadNode.sh @@ -11,7 +11,7 @@ BASE_PATH="$PROJECT_PATH/tmp/node-$NODE_VERSION-$OS-$ARCH" pushd . > /dev/null mkdir -p "$BASE_PATH" -if [ "$OS" == "$win" ]; then +if [ "$OS" == "win" ]; then URL="$BASE_URL/win-$ARCH/node.exe" NODE_CMD="$BASE_PATH/node.exe" From c3cf45f094f90542d45a67c0410e6daa2bcf8084 Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 21 Nov 2016 12:57:40 +0100 Subject: [PATCH 6/8] fix readme --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index dd8dcf4..e5084e4 100644 --- a/README.md +++ b/README.md @@ -133,7 +133,6 @@ make ``` ### Linux (Ubuntu 16.04) -Currently there is no linuxdeployqt scripty, you need to use the following: [linuxdeployqt](https://github.com/probonopd/linuxdeployqt) ```bash export PATH=/path/to/Qt/5.7/clang_64/bin:/path/to/linuxdeployqt:$PATH sudo apt-get install mesa-common-dev libglu1-mesa-dev patchelf @@ -143,5 +142,5 @@ cd build qmake .. make #if you want to deploy: -./../tools/deploy_mac.sh quark.app /path/to/node +./../tools/deploy_linux.sh quark ``` From 70b60f09adeaf40d7a13dd29b52bbe6bb2899018 Mon Sep 17 00:00:00 2001 From: freemountain Date: Mon, 21 Nov 2016 13:03:43 +0100 Subject: [PATCH 7/8] remove copy stuff --- tools/deploy_mac.sh | 6 ------ 1 file changed, 6 deletions(-) diff --git a/tools/deploy_mac.sh b/tools/deploy_mac.sh index c77ee88..bba4c8f 100755 --- a/tools/deploy_mac.sh +++ b/tools/deploy_mac.sh @@ -6,9 +6,3 @@ NODE_CMD=$2 macdeployqt $TARGET_APP -qmldir=$PROJECT_PATH/src/qml - -rm -f $TARGET_APP/Contents/MacOS/node -rm -rf $TARGET_APP/Contents/Resources/app - -cp $NODE_CMD $TARGET_APP/Contents/MacOS/node -cp -r $PROJECT_PATH/apps/default $TARGET_APP/Contents/Resources/app From 953db5d24d7d0e5c69f72bef8628b6b47d9cb3aa Mon Sep 17 00:00:00 2001 From: freemountain Date: Mon, 21 Nov 2016 13:04:11 +0100 Subject: [PATCH 8/8] fix readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e5084e4..08c88c0 100644 --- a/README.md +++ b/README.md @@ -114,7 +114,7 @@ cd build qmake .. make #if you want to deploy: -./../tools/deploy_mac.sh quark.app /path/to/node +./../tools/deploy_mac.sh quark.app ``` ### WIN (using mingw)