Add nodeeditor (#1046)

* Add nodeeditor

* qt5base: add support for MinGW on Linux and macOS

* Small refactor

* final fix

* final fix2 --'
pull/1047/head
Jérôme Leclercq 3 years ago committed by GitHub
parent 99c66bec69
commit 4359f03bcc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 34
      packages/n/nodeeditor/patches/2.1.3/fix_qt.patch
  2. 46
      packages/n/nodeeditor/xmake.lua
  3. 91
      packages/q/qt5base/xmake.lua

@ -0,0 +1,34 @@
diff --git a/include/nodes/internal/NodePainterDelegate.hpp b/include/nodes/internal/NodePainterDelegate.hpp
index d532619..f22496c 100644
--- a/include/nodes/internal/NodePainterDelegate.hpp
+++ b/include/nodes/internal/NodePainterDelegate.hpp
@@ -1,6 +1,6 @@
#pragma once
-#include <QPainter>
+#include <QtGui/QPainter>
#include "NodeGeometry.hpp"
#include "NodeDataModel.hpp"
diff --git a/include/nodes/internal/QStringStdHash.hpp b/include/nodes/internal/QStringStdHash.hpp
index 3d47a3f..cc5eb68 100644
--- a/include/nodes/internal/QStringStdHash.hpp
+++ b/include/nodes/internal/QStringStdHash.hpp
@@ -1,5 +1,11 @@
#pragma once
+#include <QtCore/QtGlobal>
+
+#if (QT_VERSION < QT_VERSION_CHECK(5, 14, 0))
+
+// As of 5.14 there is a specialization std::hash<QString>
+
#include <functional>
#include <QtCore/QString>
@@ -17,3 +23,5 @@ struct hash<QString>
}
};
}
+
+#endif

@ -0,0 +1,46 @@
package("nodeeditor")
set_homepage("https://github.com/paceholder/nodeeditor")
set_description("Qt Node Editor. Dataflow programming framework")
set_license("BSD-3")
set_urls("https://github.com/paceholder/nodeeditor/archive/refs/tags/$(version).tar.gz",
"https://github.com/paceholder/nodeeditor.git")
add_versions("2.1.3", "4e3194a04ac4a2a2bf4bc8eb6cc27d5cc154923143c1ecf579ce7f0115a90585")
add_patches("2.1.3", path.join(os.scriptdir(), "patches", "2.1.3", "fix_qt.patch"), "11b6e765f8c8b0002f84ef0c3eb7dde23076b0564679760b7f4c8ba7c7e46887")
add_deps("cmake")
on_load(function (package)
package:add("deps", "qt5core", "qt5gui", "qt5widgets", {debug = package:is_debug()})
if package:config("shared") then
package:add("defines", "NODE_EDITOR_SHARED")
else
package:add("defines", "NODE_EDITOR_STATIC")
end
end)
on_install("windows", "linux", "mingw", "macosx", function (package)
local qt = package:dep("qt5core"):fetch().qtdir
local configs = {"-DBUILD_EXAMPLES=OFF", "-DBUILD_TESTING=OFF"}
table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF"))
table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release"))
if qt then
table.insert(configs, "-DQt5_DIR=" .. path.join(qt.libdir, "cmake", "Qt5"))
end
import("package.tools.cmake").install(package, configs)
end)
on_test(function (package)
local cxflags
if not package:is_plat("windows") then
cxflags = "-fPIC"
end
assert(package:check_cxxsnippets({test = [[
void test() {
QtNodes::FlowScene scene(std::make_shared<QtNodes::DataModelRegistry>());
QtNodes::FlowView view(&scene);
}
]]}, {configs = {languages = "c++14", cxflags = cxflags}, includes = {"nodes/FlowScene", "nodes/FlowView"}}))
end)

@ -68,6 +68,7 @@ package("qt5base")
import("core.tool.toolchain")
local version = package:version()
local versionstr = version:shortstr()
local host
if is_host("windows") or package:is_plat("mingw") then
@ -136,7 +137,7 @@ package("qt5base")
elseif package:is_plat("macosx") then
arch = "clang_64"
elseif package:is_plat("android") then
if package:version():le("5.13") then
if version:le("5.13") then
if package:is_arch("x86_64", "x64") then
arch = "android_x86_64"
elseif package:is_arch("arm64", "arm64-v8a") then
@ -152,66 +153,52 @@ package("qt5base")
end
local installdir = package:installdir()
os.vrunv("aqt", {"install-qt", "-O", installdir, host, target, version:shortstr(), arch})
os.vrunv("aqt", {"install-qt", "-O", installdir, host, target, versionstr, arch})
-- move files to root
local subdirs = {}
if package:is_plat("linux") then
table.insert(subdirs, package:is_arch("x86_64") and "gcc_64" or "gcc_32")
table.insert(subdirs, package:is_arch("x86_64") and "clang_64" or "clang_32")
elseif package:is_plat("macosx") then
table.insert(subdirs, package:is_arch("x86_64") and "clang_64" or "clang_32")
elseif package:is_plat("windows") then
local vs = config.get("vs")
if vs then
table.insert(subdirs, package:is_arch("x64") and "msvc" .. vs .. "_64" or "msvc" .. vs .. "_32")
table.insert(subdirs, "msvc" .. vs)
end
table.insert(subdirs, package:is_arch("x64") and "msvc*_64" or "msvc*_32")
table.insert(subdirs, "msvc*")
elseif package:is_plat("mingw") then
table.insert(subdirs, package:is_arch("x86_64") and "mingw*_64" or "mingw*_32")
elseif package:is_plat("android") then
local subdir
if package:is_arch("arm64-v8a") then
subdir = "android_arm64_v8a"
elseif package:is_arch("armeabi-v7a", "armeabi", "armv7-a", "armv5te") then -- armv7-a/armv5te are deprecated
subdir = "android_armv7"
elseif package:is_arch("x86", "i386") then -- i386 is deprecated
subdir = "android_x86"
elseif package:is_arch("x86_64") then
subdir = "android_x86_64"
end
if subdir then
table.insert(subdirs, subdir)
os.mv(path.join(installdir, versionstr, "*", "*"), installdir)
os.rmdir(path.join(installdir, versionstr))
-- special case for cross-compilation using MinGW since we need binaries we can run on the host
if package:is_plat("mingw") and not is_host("windows") then
local runhost
if is_host("linux") then
runhost = "linux"
elseif is_host("macosx") then
runhost = "mac"
else
raise("unhandled host " .. os.host())
end
table.insert(subdirs, "android")
elseif package:is_plat("wasm") then
table.insert(subdirs, "wasm_32")
else
table.insert(subdirs, "*")
end
local installeddir
for _, subdir in pairs(subdirs) do
local results = os.dirs(path.join(installdir, version, subdir), function (file, isdir) return false end)
if results and #results > 0 then
installeddir = results[1]
break
-- download qtbase to bin_host folder
os.vrunv("aqt", {"install-qt", "-O", path.join(installdir, "bin_host"), runhost, "desktop", versionstr, "--archives", "qtbase"})
-- add symbolic links for useful tools
local tools = {
moc = true,
qmake = true,
rcc = true,
uic = true
}
for _, file in pairs(os.files(path.join(installdir, "bin_host", versionstr, "*", "bin", "*"))) do
local filename = path.filename(file)
if (tools[filename]) then
local targetpath = path.join(installdir, "bin", filename)
os.ln(file, path.join(installdir, "bin", filename))
-- some tools like CMake will try to run moc.exe, trick them
os.rm(targetpath .. ".exe")
os.ln(file, path.join(installdir, "bin", filename .. ".exe"))
end
end
end
assert(installdir, "couldn't find where qt was installed!")
os.mv(path.join(installeddir, "*"), installdir)
os.rmdir(path.join(installdir, version))
package:data_set("qt", qt_table(installdir, version:shortstr()))
package:data_set("qt", qt_table(installdir, versionstr))
end)
on_test(function (package)
local qt = assert(package:data("qt"))
if not package:is_plat("mingw") then
os.vrun(path.join(qt.bindir, "moc") .. " -v")
os.vrun(path.join(qt.bindir, "rcc") .. " -v")
end
os.vrun(path.join(qt.bindir, "moc") .. " -v")
os.vrun(path.join(qt.bindir, "rcc") .. " -v")
end)

Loading…
Cancel
Save