diff options
| author | ruki <[email protected]> | 2020-04-06 23:15:55 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2020-04-06 23:15:55 +0800 |
| commit | cc765abc4843ca1a0bed451d7ae6d584bc9222b4 (patch) | |
| tree | 4dd8e918e14076b1a4882728c4777c8ebbc31a10 | |
| parent | e39f9aa0eb208e74c827bbae1bc20fba9fbb01d7 (diff) | |
| parent | 105bab82d3a915c1adee490a42c00a400ea6566e (diff) | |
Merge pull request #752 from shaoxie1986/dev
Support Qt private header
| -rw-r--r-- | tests/projects/qt/with_private/src/main.cpp | 11 | ||||
| -rw-r--r-- | tests/projects/qt/with_private/src/mainwindow.cpp | 16 | ||||
| -rw-r--r-- | tests/projects/qt/with_private/src/mainwindow.h | 22 | ||||
| -rw-r--r-- | tests/projects/qt/with_private/src/mainwindow.ui | 24 | ||||
| -rw-r--r-- | tests/projects/qt/with_private/xmake.lua | 22 | ||||
| -rw-r--r-- | xmake/rules/qt/load.lua | 59 |
6 files changed, 138 insertions, 16 deletions
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 <QApplication> + +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 <private/qquicktext_p.h> +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 <QMainWindow> + +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 @@ +<ui version="4.0"> + <class>MainWindow</class> + <widget class="QMainWindow" name="MainWindow" > + <property name="geometry" > + <rect> + <x>0</x> + <y>0</y> + <width>400</width> + <height>300</height> + </rect> + </property> + <property name="windowTitle" > + <string>MainWindow</string> + </property> + <widget class="QMenuBar" name="menuBar" /> + <widget class="QToolBar" name="mainToolBar" /> + <widget class="QWidget" name="centralWidget" /> + <widget class="QStatusBar" name="statusBar" /> + </widget> + <layoutDefault spacing="6" margin="11" /> + <pixmapfunction></pixmapfunction> + <resources/> + <connections/> +</ui> 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/xmake/rules/qt/load.lua b/xmake/rules/qt/load.lua index 62027aaa4..d035c734e 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 @@ -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 @@ -166,27 +166,54 @@ 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, -#("private") - 1); + 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", 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 + 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 + -- 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 + -- remove private frameworks + local local_frameworks = {} + for _, framework in ipairs(target:get("frameworks")) do + if not framework:lower():endswith("private") then + table.insert(local_frameworks, framework) + 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")) @@ -196,7 +223,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") |
