Improve qt5 packages using a template (#1055)

* Improve qt5 packages using a template

* Qt: Fix install

* Qt: small refactor

* Fix kind of qt5lib

* Qt: requested changes

* Update xmake.lua

* Update xmake.lua

* Update xmake.lua

* Update xmake.lua

* Update xmake.lua

* Qt: fix qt5lib

Co-authored-by: ruki <waruqi@gmail.com>
pull/1056/head
Jérôme Leclercq 3 years ago committed by GitHub
parent 8fb1fa8e80
commit 198147e15c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 81
      packages/q/qt5core/xmake.lua
  2. 82
      packages/q/qt5gui/xmake.lua
  3. 73
      packages/q/qt5lib/xmake.lua
  4. 75
      packages/q/qt5widgets/xmake.lua

@ -1,83 +1,28 @@
package("qt5core")
set_homepage("https://www.qt.io")
set_description("Qt is the faster, smarter way to create innovative devices, modern UIs & applications for multiple screens. Cross-platform software development at its best.")
set_license("LGPL-3")
add_configs("shared", {description = "Download shared binaries.", default = true, type = "boolean", readonly = true})
add_configs("vs_runtime", {description = "Set vs compiler runtime.", default = "MD", readonly = true})
add_versions("5.15.2", "dummy")
add_versions("5.12.5", "dummy")
set_base("qt5lib")
on_load(function (package)
package:add("deps", "qt5base", {debug = package:is_debug(), version = package:version_str()})
end)
on_fetch(function (package)
local qt = package:dep("qt5base"):data("qt")
if not qt then
return
end
local syslinks
local linkname
local frameworks
local includedirs = {qt.includedir}
if package:is_plat("windows") then
linkname = "Qt5Core"
if package:is_debug() then
linkname = linkname .. "d"
end
table.insert(includedirs, path.join(qt.includedir, "QtCore"))
elseif package:is_plat("android") then
linkname = "Qt5Core"
if package:is_arch("x86_64", "x64") then
linkname = linkname .. "_x86_64"
elseif package:is_arch("arm64", "arm64-v8a") then
linkname = linkname .. "_arm64-v8a"
elseif package:is_arch("armv7", "armeabi-v7a", "armeabi", "armv7-a", "armv5te") then
linkname = linkname .. "_armeabi-v7a"
elseif package:is_arch("x86") then
linkname = linkname .. "_x86"
end
syslinks = "z"
table.insert(includedirs, path.join(qt.includedir, "QtCore"))
elseif package:is_plat("macosx") then
table.insert(includedirs, path.join(qt.libdir, "QtCore.framework/Versions/5/Headers"))
frameworks = "QtCore"
package:data_set("libname", "Core")
if package:is_plat("android") then
package:data_set("syslinks", "z")
elseif package:is_plat("iphoneos") then
linkname = "Qt5Core"
frameworks = {"UIKit", "CoreText", "CoreGraphics", "CoreServices", "CoreFoundation"}
syslinks = {"qtpcre2", "z"}
table.insert(includedirs, path.join(qt.includedir, "QtCore"))
else
linkname = "Qt5Core"
table.insert(includedirs, path.join(qt.includedir, "QtCore"))
package:data_set("frameworks", {"UIKit", "CoreText", "CoreGraphics", "CoreServices", "CoreFoundation"})
package:data_set("syslinks", {"qtpcre2", "z"})
end
return {
qtdir = qt,
version = qt.version,
includedirs = includedirs,
links = linkname,
linkdirs = qt.libdir,
frameworks = frameworks,
frameworkdirs = qt.libdir,
syslinks = syslinks
}
end)
on_install("windows", "linux", "macosx", "mingw", "android", "iphoneos", function (package)
local base = package:dep("qt5base")
local qt = base:data("qt")
assert(qt, "qt5base is required")
package:base():script("load")(package)
package:set("kind", "library")
end)
on_test(function (package)
local cxflags
if not package:is_plat("windows") then
cxflags = "-fPIC"
end
assert(package:check_cxxsnippets({test = [[
int test(int argc, char** argv) {
QCoreApplication app (argc, argv);
return app.exec();
}
]]}, {configs = {languages = "c++14", cxflags = not package:is_plat("windows") and "-fPIC" or nil}, includes = {"QCoreApplication"}}))
]]}, {configs = {languages = "c++14", cxflags = cxflags}, includes = {"QCoreApplication"}}))
end)

@ -1,81 +1,31 @@
package("qt5gui")
set_homepage("https://www.qt.io")
set_description("Qt is the faster, smarter way to create innovative devices, modern UIs & applications for multiple screens. Cross-platform software development at its best.")
set_license("LGPL-3")
add_configs("shared", {description = "Download shared binaries.", default = true, type = "boolean", readonly = true})
add_configs("vs_runtime", {description = "Set vs compiler runtime.", default = "MD", readonly = true})
add_versions("5.15.2", "dummy")
add_versions("5.12.5", "dummy")
set_base("qt5lib")
set_kind("library")
on_load(function (package)
package:add("deps", "qt5base", "qt5core", {debug = package:is_debug(), version = package:version_str()})
end)
on_fetch(function (package)
local qt = package:dep("qt5base"):data("qt")
if not qt then
return
end
package:add("deps", "qt5core", {debug = package:is_debug(), version = package:version_str()})
package:data_set("libname", "Gui")
local linkname
local syslinks
local frameworks
local includedirs = {qt.includedir}
if package:is_plat("windows") then
linkname = "Qt5Gui"
if package:is_debug() then
linkname = linkname .. "d"
end
table.insert(includedirs, path.join(qt.includedir, "QtGui"))
elseif package:is_plat("android") then
linkname = "Qt5Gui"
if package:is_arch("x86_64", "x64") then
linkname = linkname .. "_x86_64"
elseif package:is_arch("arm64", "arm64-v8a") then
linkname = linkname .. "_arm64-v8a"
elseif package:is_arch("armv7", "armeabi-v7a", "armeabi", "armv7-a", "armv5te") then
linkname = linkname .. "_armeabi-v7a"
elseif package:is_arch("x86") then
linkname = linkname .. "_x86"
end
syslinks = "GLESv2"
table.insert(includedirs, path.join(qt.includedir, "QtGui"))
elseif package:is_plat("macosx") then
table.insert(includedirs, path.join(qt.libdir, "QtGui.framework/Versions/5/Headers"))
frameworks = "QtGui"
if package:is_plat("android") then
package:data_set("syslinks", "GLESv2")
elseif package:is_plat("iphoneos") then
linkname = {"Qt5Gui", "qtharfbuzz"}
syslinks = {"qtlibpng", "z"}
table.insert(includedirs, path.join(qt.includedir, "QtGui"))
else
linkname = "Qt5Gui"
table.insert(includedirs, path.join(qt.includedir, "QtGui"))
package:data_set("links", "qtharfbuzz")
package:data_set("syslinks", {"qtlibpng", "z"})
end
return {
qtdir = qt,
version = qt.version,
includedirs = includedirs,
links = linkname,
linkdirs = qt.libdir,
frameworks = frameworks,
frameworkdirs = qt.libdir,
syslinks = syslinks
}
end)
on_install("windows", "linux", "macosx", "mingw", "android", "iphoneos", function (package)
local qt = package:dep("qt5base"):data("qt")
assert(qt, "qt5base is required")
package:base():script("load")(package)
package:set("kind", "library")
end)
on_test(function (package)
local cxflags
if not package:is_plat("windows") then
cxflags = "-fPIC"
end
assert(package:check_cxxsnippets({test = [[
int test(int argc, char** argv) {
QGuiApplication app (argc, argv);
return app.exec();
}
]]}, {configs = {languages = "c++14", cxflags = not package:is_plat("windows") and "-fPIC" or nil}, includes = {"QGuiApplication"}}))
]]}, {configs = {languages = "c++14", cxflags = cxflags}, includes = {"QGuiApplication"}}))
end)

@ -0,0 +1,73 @@
package("qt5lib")
set_homepage("https://www.qt.io")
set_description("Qt is the faster, smarter way to create innovative devices, modern UIs & applications for multiple screens. Cross-platform software development at its best.")
set_license("LGPL-3")
add_configs("shared", {description = "Download shared binaries.", default = true, type = "boolean", readonly = true})
add_configs("vs_runtime", {description = "Set vs compiler runtime.", default = "MD", readonly = true})
add_versions("5.15.2", "dummy")
add_versions("5.12.5", "dummy")
on_load(function (package)
if package.is_template then
package:set("kind", "template")
end
package:add("deps", "qt5base", {debug = package:is_debug(), version = package:version_str()})
end)
on_fetch(function (package)
local qt = package:dep("qt5base"):data("qt")
if not qt then
return
end
local libname = assert(package:data("libname"), "this package must not be used directly")
local links = table.wrap(package:data("links"))
local includedirs = {qt.includedir}
local linkname
if package:is_plat("windows") then
linkname = "Qt5" .. libname
if package:is_debug() then
linkname = linkname .. "d"
end
table.insert(includedirs, path.join(qt.includedir, "Qt" .. libname))
elseif package:is_plat("android") then
linkname = "Qt5" .. libname
if package:is_arch("x86_64", "x64") then
linkname = linkname .. "_x86_64"
elseif package:is_arch("arm64", "arm64-v8a") then
linkname = linkname .. "_arm64-v8a"
elseif package:is_arch("armv7", "armeabi-v7a", "armeabi", "armv7-a", "armv5te") then
linkname = linkname .. "_armeabi-v7a"
elseif package:is_arch("x86") then
linkname = linkname .. "_x86"
end
table.insert(includedirs, path.join(qt.includedir, "Qt" .. libname))
elseif package:is_plat("macosx") then
table.insert(includedirs, path.join(qt.libdir, "Qt" .. libname .. ".framework", "Versions", "5", "Headers"))
frameworks = "Qt" .. libname
else
linkname = "Qt5" .. libname
table.insert(includedirs, path.join(qt.includedir, "Qt" .. libname))
end
table.insert(links, 1, linkname)
return {
qtdir = qt,
version = qt.version,
includedirs = includedirs,
links = links,
linkdirs = qt.libdir,
frameworks = package:data("frameworks"),
frameworkdirs = qt.libdir,
syslinks = package:data("syslinks")
}
end)
on_install("windows", "linux", "macosx", "mingw", "android", "iphoneos", function (package)
local qt = package:dep("qt5base"):data("qt")
assert(qt, "qt5base is required")
end)

@ -1,73 +1,20 @@
package("qt5widgets")
set_homepage("https://www.qt.io")
set_description("Qt is the faster, smarter way to create innovative devices, modern UIs & applications for multiple screens. Cross-platform software development at its best.")
set_license("LGPL-3")
add_configs("shared", {description = "Download shared binaries.", default = true, type = "boolean", readonly = true})
add_configs("vs_runtime", {description = "Set vs compiler runtime.", default = "MD", readonly = true})
add_versions("5.15.2", "dummy")
add_versions("5.12.5", "dummy")
set_base("qt5lib")
set_kind("library")
on_load(function (package)
package:add("deps", "qt5base", "qt5core", "qt5gui", {debug = package:is_debug(), version = package:version_str()})
end)
on_fetch(function (package)
local qt = package:dep("qt5base"):data("qt")
if not qt then
return
end
package:add("deps", "qt5core", "qt5gui", {debug = package:is_debug(), version = package:version_str()})
package:data_set("libname", "Widgets")
local linkname
local syslinks
local frameworks
local includedirs = {qt.includedir}
if package:is_plat("windows") then
linkname = "Qt5Widgets"
if package:is_debug() then
linkname = linkname .. "d"
end
table.insert(includedirs, path.join(qt.includedir, "QtWidgets"))
elseif package:is_plat("android") then
linkname = "Qt5Widgets"
if package:is_arch("x86_64", "x64") then
linkname = linkname .. "_x86_64"
elseif package:is_arch("arm64", "arm64-v8a") then
linkname = linkname .. "_arm64-v8a"
elseif package:is_arch("armv7", "armeabi-v7a", "armeabi", "armv7-a", "armv5te") then
linkname = linkname .. "_armeabi-v7a"
elseif package:is_arch("x86") then
linkname = linkname .. "_x86"
end
table.insert(includedirs, path.join(qt.includedir, "QtWidgets"))
elseif package:is_plat("macosx") then
table.insert(includedirs, path.join(qt.libdir, "QtWidgets.framework/Versions/5/Headers"))
frameworks = "QtWidgets"
else
linkname = "Qt5Widgets"
table.insert(includedirs, path.join(qt.includedir, "QtWidgets"))
end
return {
qtdir = qt,
version = qt.version,
includedirs = includedirs,
links = linkname,
linkdirs = qt.libdir,
frameworks = frameworks,
frameworkdirs = qt.libdir,
syslinks = syslinks
}
end)
on_install("windows", "linux", "macosx", "mingw", "android", "iphoneos", function (package)
local base = package:dep("qt5base")
local qt = base:data("qt")
assert(qt, "qt5base is required")
package:base():script("load")(package)
package:set("kind", "library")
end)
on_test(function (package)
local cxflags
if not package:is_plat("windows") then
cxflags = "-fPIC"
end
assert(package:check_cxxsnippets({test = [[
int test(int argc, char** argv) {
QApplication app (argc, argv);
@ -75,5 +22,5 @@ package("qt5widgets")
button.show();
return app.exec();
}
]]}, {configs = {languages = "c++14", cxflags = not package:is_plat("windows") and "-fPIC" or nil}, includes = {"QApplication", "QPushButton"}}))
]]}, {configs = {languages = "c++14", cxflags = cxflags}, includes = {"QApplication", "QPushButton"}}))
end)

Loading…
Cancel
Save