From 10297381b8d2efb071247d07ece52d8d418abb1d Mon Sep 17 00:00:00 2001 From: ws Date: Mon, 23 Mar 2020 22:19:29 +0800 Subject: add qt private header for window and linux --- xmake/rules/qt/load.lua | 40 ++++++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/xmake/rules/qt/load.lua b/xmake/rules/qt/load.lua index 62027aaa4..e4c96e5ef 100644 --- a/xmake/rules/qt/load.lua +++ b/xmake/rules/qt/load.lua @@ -11,7 +11,7 @@ -- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- See the License for the specific language governing permissions and -- limitations under the License. --- +-- -- Copyright (C) 2015-2020, TBOOX Open Source Group. -- -- @author ruki @@ -167,22 +167,34 @@ function main(target, opt) -- translate qt frameworks if framework:startswith("Qt") then - -- add defines - target:add("defines", "QT_" .. framework:sub(3):upper() .. "_LIB") - - -- add includedirs - if is_plat("macosx") then - local frameworkdir = path.join(qt.sdkdir, "lib", framework .. ".framework") - if os.isdir(frameworkdir) then - target:add("includedirs", path.join(frameworkdir, "Headers")) - useframeworks = true + if (framework:lower():endswith("private")) then + -- add private includedirs + print("private") + if is_plat("macosx") then + print("macosx") + else + local private_dir = framework:sub(1, -string.len("private") - 1); + target:add("includedirs", path.join(qt.sdkdir, "include", private_dir, qt.sdkver, private_dir)) + target:add("includedirs", path.join(qt.sdkdir, "include", private_dir, qt.sdkver)) + end + else + -- add defines + target:add("defines", "QT_" .. framework:sub(3):upper() .. "_LIB") + + -- add includedirs + if is_plat("macosx") then + local frameworkdir = path.join(qt.sdkdir, "lib", framework .. ".framework") + if os.isdir(frameworkdir) then + target:add("includedirs", path.join(frameworkdir, "Headers")) + useframeworks = true + else + target:add("syslinks", _link(framework, major)) + target:add("includedirs", path.join(qt.sdkdir, "include", framework)) + end else target:add("syslinks", _link(framework, major)) target:add("includedirs", path.join(qt.sdkdir, "include", framework)) end - else - target:add("syslinks", _link(framework, major)) - target:add("includedirs", path.join(qt.sdkdir, "include", framework)) end end end @@ -196,7 +208,7 @@ function main(target, opt) target:add("syslinks", syslinks_user) end - -- add includedirs, linkdirs + -- add includedirs, linkdirs if is_plat("macosx") then target:add("frameworks", "DiskArbitration", "IOKit", "CoreFoundation", "CoreGraphics", "OpenGL") target:add("frameworks", "Carbon", "Foundation", "AppKit", "Security", "SystemConfiguration") -- cgit v1.3.1 From 7e8c09127594572bdf01127d14d5bd090b0c26f1 Mon Sep 17 00:00:00 2001 From: carols Date: Mon, 23 Mar 2020 23:49:47 +0800 Subject: add private includedirs for macos --- xmake/rules/qt/load.lua | 47 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 15 deletions(-) diff --git a/xmake/rules/qt/load.lua b/xmake/rules/qt/load.lua index e4c96e5ef..cfc297cfa 100644 --- a/xmake/rules/qt/load.lua +++ b/xmake/rules/qt/load.lua @@ -166,29 +166,34 @@ function main(target, opt) -- translate qt frameworks if framework:startswith("Qt") then - + -- add private includedirs if (framework:lower():endswith("private")) then - -- add private includedirs - print("private") + local private_dir = framework:sub(1, -string.len("private") - 1); if is_plat("macosx") then - print("macosx") + local frameworkdir = path.join(qt.sdkdir, "lib", framework .. ".framework") + if os.isdir(frameworkdir) then + target:add("includedirs", path.join(frameworkdir, "Headers", qt.sdkver)) + target:add("includedirs", path.join(frameworkdir, "Headers", qt.sdkver, private_dir)) + else + target:add("includedirs", path.join(qt.sdkdir, "include", private_dir, qt.sdkver, private_dir)) + target:add("includedirs", path.join(qt.sdkdir, "include", private_dir, qt.sdkver)) + end else - local private_dir = framework:sub(1, -string.len("private") - 1); target:add("includedirs", path.join(qt.sdkdir, "include", private_dir, qt.sdkver, private_dir)) target:add("includedirs", path.join(qt.sdkdir, "include", private_dir, qt.sdkver)) end else - -- add defines - target:add("defines", "QT_" .. framework:sub(3):upper() .. "_LIB") + -- add defines + target:add("defines", "QT_" .. framework:sub(3):upper() .. "_LIB") - -- add includedirs - if is_plat("macosx") then - local frameworkdir = path.join(qt.sdkdir, "lib", framework .. ".framework") - if os.isdir(frameworkdir) then - target:add("includedirs", path.join(frameworkdir, "Headers")) - useframeworks = true - else - target:add("syslinks", _link(framework, major)) + -- add includedirs + if is_plat("macosx") then + local frameworkdir = path.join(qt.sdkdir, "lib", framework .. ".framework") + if os.isdir(frameworkdir) then + target:add("includedirs", path.join(frameworkdir, "Headers")) + useframeworks = true + else + target:add("syslinks", _link(framework, major)) target:add("includedirs", path.join(qt.sdkdir, "include", framework)) end else @@ -199,6 +204,18 @@ function main(target, opt) end end + -- remove private frameworks + local local_frameworks = {} + local index = 1 + for _, framework in ipairs(target:get("frameworks")) do + if not framework:lower():endswith("private") then + local_frameworks[index] = framework + index = index + 1 + end + end + + target:set("frameworks", local_frameworks) + -- add some static third-party links if exists, e.g. libqtmain.a, libqtfreetype.q, libqtlibpng.a -- and exclude qt framework libraries, e.g. libQt5xxx.a, Qt5xxx.lib target:add("syslinks", _find_static_links_3rd(qt.linkdirs, major, is_plat("windows") and "qt*.lib" or "libqt*.a")) -- cgit v1.3.1 From fb427e840d5d193b958b607137b516662edd6446 Mon Sep 17 00:00:00 2001 From: carols Date: Mon, 6 Apr 2020 22:06:03 +0800 Subject: add qt with private test --- tests/projects/qt/with_privete/src/main.cpp | 11 +++++++++++ tests/projects/qt/with_privete/src/mainwindow.cpp | 16 +++++++++++++++ tests/projects/qt/with_privete/src/mainwindow.h | 22 +++++++++++++++++++++ tests/projects/qt/with_privete/src/mainwindow.ui | 24 +++++++++++++++++++++++ tests/projects/qt/with_privete/xmake.lua | 22 +++++++++++++++++++++ 5 files changed, 95 insertions(+) create mode 100644 tests/projects/qt/with_privete/src/main.cpp create mode 100644 tests/projects/qt/with_privete/src/mainwindow.cpp create mode 100644 tests/projects/qt/with_privete/src/mainwindow.h create mode 100644 tests/projects/qt/with_privete/src/mainwindow.ui create mode 100644 tests/projects/qt/with_privete/xmake.lua diff --git a/tests/projects/qt/with_privete/src/main.cpp b/tests/projects/qt/with_privete/src/main.cpp new file mode 100644 index 000000000..b48f94ec8 --- /dev/null +++ b/tests/projects/qt/with_privete/src/main.cpp @@ -0,0 +1,11 @@ +#include "mainwindow.h" +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.show(); + + return a.exec(); +} diff --git a/tests/projects/qt/with_privete/src/mainwindow.cpp b/tests/projects/qt/with_privete/src/mainwindow.cpp new file mode 100644 index 000000000..4d9a6bcae --- /dev/null +++ b/tests/projects/qt/with_privete/src/mainwindow.cpp @@ -0,0 +1,16 @@ +#include "mainwindow.h" +#include "ui_mainwindow.h" +#include +MainWindow::MainWindow(QWidget *parent) : + QMainWindow(parent), + ui(new Ui::MainWindow) +{ + ui->setupUi(this); + QQuickText *text = new QQuickText(); + delete text; +} + +MainWindow::~MainWindow() +{ + delete ui; +} diff --git a/tests/projects/qt/with_privete/src/mainwindow.h b/tests/projects/qt/with_privete/src/mainwindow.h new file mode 100644 index 000000000..8e06f4918 --- /dev/null +++ b/tests/projects/qt/with_privete/src/mainwindow.h @@ -0,0 +1,22 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include + +namespace Ui { +class MainWindow; +} + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + explicit MainWindow(QWidget *parent = 0); + ~MainWindow(); + +private: + Ui::MainWindow *ui; +}; + +#endif // MAINWINDOW_H diff --git a/tests/projects/qt/with_privete/src/mainwindow.ui b/tests/projects/qt/with_privete/src/mainwindow.ui new file mode 100644 index 000000000..1c59b695e --- /dev/null +++ b/tests/projects/qt/with_privete/src/mainwindow.ui @@ -0,0 +1,24 @@ + + MainWindow + + + + 0 + 0 + 400 + 300 + + + + MainWindow + + + + + + + + + + + diff --git a/tests/projects/qt/with_privete/xmake.lua b/tests/projects/qt/with_privete/xmake.lua new file mode 100644 index 000000000..6cc6378e7 --- /dev/null +++ b/tests/projects/qt/with_privete/xmake.lua @@ -0,0 +1,22 @@ + +-- add modes: debug and release +add_rules("mode.debug", "mode.release") + +-- add target +target("qt_demo") + + -- add rules + add_rules("qt.widgetapp") + add_frameworks("QtCore", "QtGui", "QtWidgets", "QtQuick", "QtQuickPrivate", "QtQml", "QtQmlPrivate", "QtCorePrivate", "QtGuiPrivate") + + -- add headers + add_headerfiles("src/*.h") + + -- add files + add_files("src/*.cpp") + add_files("src/mainwindow.ui") + + -- add files with Q_OBJECT meta (only for qt.moc) + add_files("src/mainwindow.h") + + -- cgit v1.3.1 From a88d4dc9322430377ce6ff8b0e2e0ff3fa1eda92 Mon Sep 17 00:00:00 2001 From: carols Date: Mon, 6 Apr 2020 22:07:15 +0800 Subject: fix linux link suffix for qt --- xmake/rules/qt/load.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xmake/rules/qt/load.lua b/xmake/rules/qt/load.lua index cfc297cfa..06a33fede 100644 --- a/xmake/rules/qt/load.lua +++ b/xmake/rules/qt/load.lua @@ -30,7 +30,7 @@ function _link(framework, major) debug_suffix = "d" elseif is_plat("mingw") then debug_suffix = "d" - elseif is_plat("android") then + elseif is_plat("android") or is_plat("linux") then debug_suffix = "" end framework = "Qt" .. major .. framework:sub(3) .. (is_mode("debug") and debug_suffix or "") @@ -46,7 +46,7 @@ function _find_static_links_3rd(linkdirs, major, libpattern) debug_suffix = "d" elseif is_plat("mingw") then debug_suffix = "d" - elseif is_plat("android") then + elseif is_plat("android") or is_plat("linux") then debug_suffix = "" end for _, linkdir in ipairs(linkdirs) do -- cgit v1.3.1 From f4ecb2c0dfb21b0566e15efdae5b4f4069a274c9 Mon Sep 17 00:00:00 2001 From: carols Date: Tue, 7 Apr 2020 06:14:45 +0800 Subject: fix with_private name --- tests/projects/qt/with_private/src/main.cpp | 11 +++++++++++ tests/projects/qt/with_private/src/mainwindow.cpp | 16 +++++++++++++++ tests/projects/qt/with_private/src/mainwindow.h | 22 +++++++++++++++++++++ tests/projects/qt/with_private/src/mainwindow.ui | 24 +++++++++++++++++++++++ tests/projects/qt/with_private/xmake.lua | 22 +++++++++++++++++++++ tests/projects/qt/with_privete/src/main.cpp | 11 ----------- tests/projects/qt/with_privete/src/mainwindow.cpp | 16 --------------- tests/projects/qt/with_privete/src/mainwindow.h | 22 --------------------- tests/projects/qt/with_privete/src/mainwindow.ui | 24 ----------------------- tests/projects/qt/with_privete/xmake.lua | 22 --------------------- 10 files changed, 95 insertions(+), 95 deletions(-) create mode 100644 tests/projects/qt/with_private/src/main.cpp create mode 100644 tests/projects/qt/with_private/src/mainwindow.cpp create mode 100644 tests/projects/qt/with_private/src/mainwindow.h create mode 100644 tests/projects/qt/with_private/src/mainwindow.ui create mode 100644 tests/projects/qt/with_private/xmake.lua delete mode 100644 tests/projects/qt/with_privete/src/main.cpp delete mode 100644 tests/projects/qt/with_privete/src/mainwindow.cpp delete mode 100644 tests/projects/qt/with_privete/src/mainwindow.h delete mode 100644 tests/projects/qt/with_privete/src/mainwindow.ui delete mode 100644 tests/projects/qt/with_privete/xmake.lua diff --git a/tests/projects/qt/with_private/src/main.cpp b/tests/projects/qt/with_private/src/main.cpp new file mode 100644 index 000000000..b48f94ec8 --- /dev/null +++ b/tests/projects/qt/with_private/src/main.cpp @@ -0,0 +1,11 @@ +#include "mainwindow.h" +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.show(); + + return a.exec(); +} diff --git a/tests/projects/qt/with_private/src/mainwindow.cpp b/tests/projects/qt/with_private/src/mainwindow.cpp new file mode 100644 index 000000000..4d9a6bcae --- /dev/null +++ b/tests/projects/qt/with_private/src/mainwindow.cpp @@ -0,0 +1,16 @@ +#include "mainwindow.h" +#include "ui_mainwindow.h" +#include +MainWindow::MainWindow(QWidget *parent) : + QMainWindow(parent), + ui(new Ui::MainWindow) +{ + ui->setupUi(this); + QQuickText *text = new QQuickText(); + delete text; +} + +MainWindow::~MainWindow() +{ + delete ui; +} diff --git a/tests/projects/qt/with_private/src/mainwindow.h b/tests/projects/qt/with_private/src/mainwindow.h new file mode 100644 index 000000000..8e06f4918 --- /dev/null +++ b/tests/projects/qt/with_private/src/mainwindow.h @@ -0,0 +1,22 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include + +namespace Ui { +class MainWindow; +} + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + explicit MainWindow(QWidget *parent = 0); + ~MainWindow(); + +private: + Ui::MainWindow *ui; +}; + +#endif // MAINWINDOW_H diff --git a/tests/projects/qt/with_private/src/mainwindow.ui b/tests/projects/qt/with_private/src/mainwindow.ui new file mode 100644 index 000000000..1c59b695e --- /dev/null +++ b/tests/projects/qt/with_private/src/mainwindow.ui @@ -0,0 +1,24 @@ + + MainWindow + + + + 0 + 0 + 400 + 300 + + + + MainWindow + + + + + + + + + + + diff --git a/tests/projects/qt/with_private/xmake.lua b/tests/projects/qt/with_private/xmake.lua new file mode 100644 index 000000000..6cc6378e7 --- /dev/null +++ b/tests/projects/qt/with_private/xmake.lua @@ -0,0 +1,22 @@ + +-- add modes: debug and release +add_rules("mode.debug", "mode.release") + +-- add target +target("qt_demo") + + -- add rules + add_rules("qt.widgetapp") + add_frameworks("QtCore", "QtGui", "QtWidgets", "QtQuick", "QtQuickPrivate", "QtQml", "QtQmlPrivate", "QtCorePrivate", "QtGuiPrivate") + + -- add headers + add_headerfiles("src/*.h") + + -- add files + add_files("src/*.cpp") + add_files("src/mainwindow.ui") + + -- add files with Q_OBJECT meta (only for qt.moc) + add_files("src/mainwindow.h") + + diff --git a/tests/projects/qt/with_privete/src/main.cpp b/tests/projects/qt/with_privete/src/main.cpp deleted file mode 100644 index b48f94ec8..000000000 --- a/tests/projects/qt/with_privete/src/main.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include "mainwindow.h" -#include - -int main(int argc, char *argv[]) -{ - QApplication a(argc, argv); - MainWindow w; - w.show(); - - return a.exec(); -} diff --git a/tests/projects/qt/with_privete/src/mainwindow.cpp b/tests/projects/qt/with_privete/src/mainwindow.cpp deleted file mode 100644 index 4d9a6bcae..000000000 --- a/tests/projects/qt/with_privete/src/mainwindow.cpp +++ /dev/null @@ -1,16 +0,0 @@ -#include "mainwindow.h" -#include "ui_mainwindow.h" -#include -MainWindow::MainWindow(QWidget *parent) : - QMainWindow(parent), - ui(new Ui::MainWindow) -{ - ui->setupUi(this); - QQuickText *text = new QQuickText(); - delete text; -} - -MainWindow::~MainWindow() -{ - delete ui; -} diff --git a/tests/projects/qt/with_privete/src/mainwindow.h b/tests/projects/qt/with_privete/src/mainwindow.h deleted file mode 100644 index 8e06f4918..000000000 --- a/tests/projects/qt/with_privete/src/mainwindow.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef MAINWINDOW_H -#define MAINWINDOW_H - -#include - -namespace Ui { -class MainWindow; -} - -class MainWindow : public QMainWindow -{ - Q_OBJECT - -public: - explicit MainWindow(QWidget *parent = 0); - ~MainWindow(); - -private: - Ui::MainWindow *ui; -}; - -#endif // MAINWINDOW_H diff --git a/tests/projects/qt/with_privete/src/mainwindow.ui b/tests/projects/qt/with_privete/src/mainwindow.ui deleted file mode 100644 index 1c59b695e..000000000 --- a/tests/projects/qt/with_privete/src/mainwindow.ui +++ /dev/null @@ -1,24 +0,0 @@ - - MainWindow - - - - 0 - 0 - 400 - 300 - - - - MainWindow - - - - - - - - - - - diff --git a/tests/projects/qt/with_privete/xmake.lua b/tests/projects/qt/with_privete/xmake.lua deleted file mode 100644 index 6cc6378e7..000000000 --- a/tests/projects/qt/with_privete/xmake.lua +++ /dev/null @@ -1,22 +0,0 @@ - --- add modes: debug and release -add_rules("mode.debug", "mode.release") - --- add target -target("qt_demo") - - -- add rules - add_rules("qt.widgetapp") - add_frameworks("QtCore", "QtGui", "QtWidgets", "QtQuick", "QtQuickPrivate", "QtQml", "QtQmlPrivate", "QtCorePrivate", "QtGuiPrivate") - - -- add headers - add_headerfiles("src/*.h") - - -- add files - add_files("src/*.cpp") - add_files("src/mainwindow.ui") - - -- add files with Q_OBJECT meta (only for qt.moc) - add_files("src/mainwindow.h") - - -- cgit v1.3.1 From be8a297e88822f95cebcbcf8c6d15fc844050507 Mon Sep 17 00:00:00 2001 From: carols Date: Tue, 7 Apr 2020 06:27:55 +0800 Subject: simplify code --- xmake/rules/qt/load.lua | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/xmake/rules/qt/load.lua b/xmake/rules/qt/load.lua index 06a33fede..295512d87 100644 --- a/xmake/rules/qt/load.lua +++ b/xmake/rules/qt/load.lua @@ -167,8 +167,8 @@ function main(target, opt) -- translate qt frameworks if framework:startswith("Qt") then -- add private includedirs - if (framework:lower():endswith("private")) then - local private_dir = framework:sub(1, -string.len("private") - 1); + if framework:lower():endswith("private") then + local private_dir = framework:sub(1, -#("private") - 1); if is_plat("macosx") then local frameworkdir = path.join(qt.sdkdir, "lib", framework .. ".framework") if os.isdir(frameworkdir) then @@ -206,11 +206,9 @@ function main(target, opt) -- remove private frameworks local local_frameworks = {} - local index = 1 for _, framework in ipairs(target:get("frameworks")) do if not framework:lower():endswith("private") then - local_frameworks[index] = framework - index = index + 1 + table.insert(local_frameworks, framework) end end -- cgit v1.3.1 From 105bab82d3a915c1adee490a42c00a400ea6566e Mon Sep 17 00:00:00 2001 From: carols Date: Tue, 7 Apr 2020 06:37:25 +0800 Subject: format code --- xmake/rules/qt/load.lua | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/xmake/rules/qt/load.lua b/xmake/rules/qt/load.lua index 295512d87..d035c734e 100644 --- a/xmake/rules/qt/load.lua +++ b/xmake/rules/qt/load.lua @@ -183,17 +183,17 @@ function main(target, opt) target:add("includedirs", path.join(qt.sdkdir, "include", private_dir, qt.sdkver)) end else - -- add defines - target:add("defines", "QT_" .. framework:sub(3):upper() .. "_LIB") + -- add defines + target:add("defines", "QT_" .. framework:sub(3):upper() .. "_LIB") - -- add includedirs - if is_plat("macosx") then - local frameworkdir = path.join(qt.sdkdir, "lib", framework .. ".framework") - if os.isdir(frameworkdir) then - target:add("includedirs", path.join(frameworkdir, "Headers")) - useframeworks = true - else - target:add("syslinks", _link(framework, major)) + -- add includedirs + if is_plat("macosx") then + local frameworkdir = path.join(qt.sdkdir, "lib", framework .. ".framework") + if os.isdir(frameworkdir) then + target:add("includedirs", path.join(frameworkdir, "Headers")) + useframeworks = true + else + target:add("syslinks", _link(framework, major)) target:add("includedirs", path.join(qt.sdkdir, "include", framework)) end else -- cgit v1.3.1