From 68221becbcf2006f6313be1015a769458a9dceca Mon Sep 17 00:00:00 2001 From: Atul R Date: Sat, 22 Feb 2020 18:42:39 +0100 Subject: [PATCH] Adds qt installer --- config/qt.cmake | 20 +++++++++++--------- package.json | 14 ++++++-------- scripts/config.js | 37 +++++++++++++++++++++++++++++++++++++ scripts/preinstall.js | 19 ++++++++++--------- 4 files changed, 64 insertions(+), 26 deletions(-) create mode 100644 scripts/config.js diff --git a/config/qt.cmake b/config/qt.cmake index a661f68a0..d3783c563 100644 --- a/config/qt.cmake +++ b/config/qt.cmake @@ -6,12 +6,11 @@ set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) - -macro(AddQtSupport addonName) - # execute_process(COMMAND node -p "require('@nodegui/qode').qtHome" - # WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - # OUTPUT_VARIABLE QT_HOME_DIR - # ) +macro(AddQtSupport addonName) + execute_process(COMMAND node -p "require('./scripts/config.js').qtCmakeDir" + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE QT_CMAKE_HOME_DIR + ) # if(DEFINED ENV{QT_INSTALL_DIR}) # # Allows to use custom Qt installation via QT_INSTALL_DIR env variable @@ -19,9 +18,12 @@ macro(AddQtSupport addonName) # set(QT_HOME_DIR "$ENV{QT_INSTALL_DIR}") # endif() - # string(REPLACE "\n" "" QT_HOME_DIR "${QT_HOME_DIR}") - # string(REPLACE "\"" "" QT_HOME_DIR "${QT_HOME_DIR}") - set(Qt5_DIR "/Users/atulr/Project/nodegui/nodegui/miniqt/5.15.0/clang_64/lib/cmake/Qt5") + string(REPLACE "\n" "" QT_CMAKE_HOME_DIR "${QT_CMAKE_HOME_DIR}") + string(REPLACE "\"" "" QT_CMAKE_HOME_DIR "${QT_CMAKE_HOME_DIR}") + + message(STATUS "Using QT installation for ${addonName} QT_CMAKE_HOME_DIR:${QT_CMAKE_HOME_DIR}") + + set(Qt5_DIR ${QT_CMAKE_HOME_DIR}) find_package(Qt5 COMPONENTS Widgets Gui Core REQUIRED) endmacro(AddQtSupport addonName) diff --git a/package.json b/package.json index 0992a5c6b..35a47a2d4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@nodegui/nodegui", - "version": "0.13.4", + "version": "0.14.0", "description": "A cross platform library to build native desktop apps.", "main": "dist/index.js", "typings": "dist/index.d.ts", @@ -8,19 +8,18 @@ "license": "MIT", "private": false, "scripts": { - "dev": "npm run build && qode dist/demo.js", - "build": "tsc && npm run build:addon", - "preinstall": "node ./scripts/preinstall.js", + "dev": "cross-env npm run build && qode dist/demo.js", + "build": "cross-env tsc && npm run build:addon", "postinstall": "cross-env node ./scripts/skip.js || npm run prebuild:install || npm run build:addon", - "build:addon": "cross-env CMAKE_BUILD_PARALLEL_LEVEL=8 cmake-js compile", + "build:addon": "cross-env CMAKE_BUILD_PARALLEL_LEVEL=8 cmake-js build", "prebuild:install": "prebuild-install --backend=cmake-js --runtime=napi --verbose", "test": "qode ./node_modules/jest/bin/jest -i", "lint:cpp": "clang-format -i --glob=src/cpp/**/*.[h,c]*", "lint:ts": "tsc --noEmit && cross-env eslint './src/**/*.{ts,tsx,js,jsx}' --fix", - "docs": "typedoc && node ./website/docs/scripts/fixdocs.js" + "docs": "cross-env typedoc && node ./website/docs/scripts/fixdocs.js" }, "dependencies": { - "@nodegui/qode": "^1.0.6", + "@nodegui/qode": "^2.0.0", "cmake-js": "^6.0.0", "cross-env": "^7.0.0", "cuid": "^2.1.6", @@ -29,7 +28,6 @@ "prebuild-install": "^5.3.3" }, "devDependencies": { - "@nodegui/qt-installer": "^1.0.0", "@types/bindings": "^1.3.0", "@types/jest": "^25.1.1", "@types/node": "^13.1.2", diff --git a/scripts/config.js b/scripts/config.js new file mode 100644 index 000000000..1931e421d --- /dev/null +++ b/scripts/config.js @@ -0,0 +1,37 @@ +const os = require('os'); +const path = require('path'); + +const setupDir = path.resolve(__dirname, '..', 'miniqt'); + +const miniQt = { + downloadLink: null, + qtHome: null, + version: '5.15.0', + setupDir, +}; + +switch (os.platform()) { + case 'darwin': { + miniQt.qtHome = path.resolve(setupDir, miniQt.version, 'clang_64'); + miniQt.downloadLink = `https://download.qt.io/online/qtsdkrepository/mac_x64/desktop/qt5_5150/qt.qt5.5150.clang_64/5.15.0-0-202002122005qtbase-MacOS-MacOS_10_13-Clang-MacOS-MacOS_10_13-X86_64.7z`; + break; + } + case 'win32': { + miniQt.qtHome = path.resolve(setupDir, miniQt.version, 'msvc2017_64'); + miniQt.downloadLink = `https://download.qt.io/online/qtsdkrepository/mac_x64/desktop/qt5_5150/qt.qt5.5150.clang_64/5.15.0-0-202002122005qtbase-MacOS-MacOS_10_13-Clang-MacOS-MacOS_10_13-X86_64.7z`; + break; + } + case 'linux': { + miniQt.qtHome = path.resolve(setupDir, miniQt.version, 'gcc_64'); + miniQt.downloadLink = `https://download.qt.io/online/qtsdkrepository/mac_x64/desktop/qt5_5150/qt.qt5.5150.clang_64/5.15.0-0-202002122005qtbase-MacOS-MacOS_10_13-Clang-MacOS-MacOS_10_13-X86_64.7z`; + break; + } +} + +const qtHome = process.env.CUSTOM_QT_DIR ? process.env.CUSTOM_QT_DIR : miniQt.qtHome; + +module.exports = { + qtHome, + qtCmakeDir: path.resolve(qtHome, 'lib', 'cmake', 'Qt5'), + miniQt, +}; diff --git a/scripts/preinstall.js b/scripts/preinstall.js index 126d441f7..1184f8ec8 100644 --- a/scripts/preinstall.js +++ b/scripts/preinstall.js @@ -1,13 +1,14 @@ -const { setupQt } = require('@nodegui/qt-installer'); -const path = require('path'); +#!/usr/bin/env node -const qtDir = path.resolve(__dirname, '..', 'miniqt'); +const { setupArtifact } = require('@nodegui/artifact-installer'); +const { miniQt } = require('./config'); -setupQt({ - qtDir, - downloadLink: - 'https://download.qt.io/online/qtsdkrepository/mac_x64/desktop/qt5_5150/qt.qt5.5150.clang_64/5.15.0-0-202002122005qtbase-MacOS-MacOS_10_13-Clang-MacOS-MacOS_10_13-X86_64.7z', - osType: 'darwin', +setupArtifact({ + outDir: miniQt.setupDir, + id: 'nodegui-mini-qt', + displayName: `Minimal Qt ${miniQt.version} installation`, + downloadLink: miniQt.downloadLink, }).catch(err => { - throw err; + console.error(err); + process.exit(1); });