From 5e12d4d4f27e4ce27a8c9e6145bc6e45840e00f2 Mon Sep 17 00:00:00 2001
From: Sine Striker <trueful@163.com>
Date: 周日, 17 12月 2023 15:11:48 +0800
Subject: [PATCH] Add qmake and msbuild config files

---
 /dev/null                          |    0 
 share/qmake/QWKCore.pri.in         |   23 +++++
 share/qmake/QWKQuick.pri.in        |   11 ++
 share/qmake/QWKStyleSupport.pri.in |   11 ++
 src/CMakeLists.txt                 |    4 
 src/quick/quickwindowagent_win.cpp |    3 
 share/msbuild/QWindowKit.props.in  |   18 ++++
 share/qmake/QWKWidgets.pri.in      |   11 ++
 README.md                          |   46 +++++++++++
 share/install.cmake                |   86 +++++++++++++++++++++
 10 files changed, 206 insertions(+), 7 deletions(-)

diff --git a/README.md b/README.md
index cef2f0f..5b9b809 100644
--- a/README.md
+++ b/README.md
@@ -32,6 +32,50 @@
 
 + [qmsetup](https://github.com/stdware/qmsetup)
 
+## Integrate
+
+### Build & Install
+
+```sh
+cmake -B build \
+  -Dqmsetup_DIR=<dir> \ # Optional
+  -DCMAKE_INSTALL_PREFIX=/path/install \
+  -G "Ninja Multi-Config"
+
+cmake --build build --target install --config Debug
+cmake --build build --target install --config Release
+```
+
+You can also include this directory as a sub-project if you choose CMake as your build system.
+
+For other build systems, you need to install with CMake first and include the corresponding configuration files in your project.
+
+### Import
+
+#### CMake Project
+
+```cmake
+cmake -B build -DQWindowKit_DIR=/path/install/cmake/QWindowKit
+```
+```cmake
+find_package(QWindowKit REQUIRED)
+taraget_link_libraries(widgets_app PUBLIC QWindowKit::Widgets)
+taraget_link_libraries(quick_app PUBLIC QWindowKit::Quick)
+```
+
+#### QMake Project
+```qmake
+# WidgetsApp.pro
+include("/path/install/share/QWindowKit/qmake/QWKWidgets.pri")
+
+# QuickApp.pro
+include("/path/install/share/QWindowKit/qmake/QWKQuick.pri")
+```
+
+#### Visual Studio Project
+
+TODO
+
 ## Quick Start
 
 ### Initialization
@@ -41,7 +85,7 @@
 ```c++
 int main(int argc, char *argv[]) {
 #ifdef Q_OS_WINDOWS
-    qApp->setAttribute(Qt::AA_DontCreateNativeWidgetSiblings);
+    QCoreApplication::setAttribute(Qt::AA_DontCreateNativeWidgetSiblings);
 #elif defined(Q_OS_MAC)
 # if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
     qputenv("QT_MAC_WANTS_LAYER", "1");
diff --git a/share/install.cmake b/share/install.cmake
new file mode 100644
index 0000000..cb4aec1
--- /dev/null
+++ b/share/install.cmake
@@ -0,0 +1,86 @@
+set(_build_data_dir ${CMAKE_CURRENT_BINARY_DIR}/../etc/share)
+
+# Install qmake files
+if(TRUE)
+    set(_qmake_install_dir "${CMAKE_INSTALL_DATADIR}/QWindowKit/qmake")
+    set(_qmake_build_dir ${_build_data_dir}/${_qmake_install_dir})
+    file(RELATIVE_PATH _qmake_install_prefix
+        "${CMAKE_INSTALL_PREFIX}/${_qmake_install_dir}"
+        "${CMAKE_INSTALL_PREFIX}"
+    )
+    string(REGEX REPLACE "/$" "" _qmake_install_prefix "${_qmake_install_prefix}")
+
+    set(QMAKE_QWK_INSTALL_PREFIX "\$\$PWD/${_qmake_install_prefix}")
+    set(QMAKE_QWK_INSTALL_BINDIR ${CMAKE_INSTALL_BINDIR})
+    set(QMAKE_QWK_INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR})
+    set(QMAKE_QWK_INSTALL_INCDIR ${CMAKE_INSTALL_INCLUDEDIR})
+
+    set(QMAKE_QWK_CORE_NAME_RELEASE QWKCore)
+    set(QMAKE_QWK_WIDGETS_NAME_RELEASE QWKWidgets)
+    set(QMAKE_QWK_QUICK_NAME_RELEASE QWKQuick)
+    set(QMAKE_QWK_STYLESUPPORT_NAME_RELEASE QWKStyleSupport)
+
+    set(QMAKE_QWK_CORE_NAME_DEBUG QWKCore${CMAKE_DEBUG_POSTFIX})
+    set(QMAKE_QWK_WIDGETS_NAME_DEBUG QWKWidgets${CMAKE_DEBUG_POSTFIX})
+    set(QMAKE_QWK_QUICK_NAME_DEBUG QWKQuick${CMAKE_DEBUG_POSTFIX})
+    set(QMAKE_QWK_STYLESUPPORT_NAME_DEBUG QWKStyleSupport${CMAKE_DEBUG_POSTFIX})
+
+    file(GLOB _qmake_components "${CMAKE_CURRENT_LIST_DIR}/qmake/*.pri.in")
+
+    foreach(_item IN LISTS _qmake_components)
+        get_filename_component(_name ${_item} NAME_WLE)
+        configure_file(${_item} ${_build_data_dir}/qmake/${_name} @ONLY)
+    endforeach()
+
+    install(DIRECTORY ${_build_data_dir}/qmake/
+        DESTINATION ${_qmake_install_dir}
+    )
+endif()
+
+# Install msbuild files
+if(MSVC)
+    macro(to_dos_separator _var)
+        string(REPLACE "/" "\\" ${_var} ${${_var}})
+    endmacro()
+
+    set(_msbuild_install_dir "${CMAKE_INSTALL_DATADIR}/QWindowKit/msbuild")
+    set(_msbuild_build_dir ${_build_data_dir}/${_msbuild_install_dir})
+    file(RELATIVE_PATH _msbuild_install_prefix
+        "${CMAKE_INSTALL_PREFIX}/${_msbuild_install_dir}"
+        "${CMAKE_INSTALL_PREFIX}"
+    )
+    string(REGEX REPLACE "/$" "" _msbuild_install_prefix "${_msbuild_install_prefix}")
+
+    set(MSBUILD_QWK_INSTALL_PREFIX "\$(MSBuildThisFileDirectory)${_msbuild_install_prefix}")
+    set(MSBUILD_QWK_INSTALL_BINDIR ${CMAKE_INSTALL_BINDIR})
+    set(MSBUILD_QWK_INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR})
+    set(MSBUILD_QWK_INSTALL_INCDIR ${CMAKE_INSTALL_INCLUDEDIR})
+
+    set(MSBUILD_QWK_LIBRARY_LIST_DEBUG
+        QWKCore${CMAKE_DEBUG_POSTFIX}.lib
+        QWKWidgets${CMAKE_DEBUG_POSTFIX}.lib
+        QWKQuick${CMAKE_DEBUG_POSTFIX}.lib
+        QWKStyleSupport${CMAKE_DEBUG_POSTFIX}.lib
+    )
+
+    set(MSBUILD_QWK_LIBRARY_LIST_RELEASE
+        QWKCore.lib
+        QWKWidgets.lib
+        QWKQuick.lib
+        QWKStyleSupport.lib
+    )
+
+    to_dos_separator(MSBUILD_QWK_INSTALL_PREFIX)
+    to_dos_separator(MSBUILD_QWK_INSTALL_BINDIR)
+    to_dos_separator(MSBUILD_QWK_INSTALL_LIBDIR)
+    to_dos_separator(MSBUILD_QWK_INSTALL_INCDIR)
+
+    configure_file(${CMAKE_CURRENT_LIST_DIR}/msbuild/QWindowKit.props.in
+        ${_build_data_dir}/msbuild/QWindowKit.props
+        @ONLY
+    )
+
+    install(DIRECTORY ${_build_data_dir}/msbuild/
+        DESTINATION ${_msbuild_install_dir}
+    )
+endif()
\ No newline at end of file
diff --git a/share/msbuild/.gitkeep b/share/msbuild/.gitkeep
deleted file mode 100644
index e69de29..0000000
--- a/share/msbuild/.gitkeep
+++ /dev/null
diff --git a/share/msbuild/QWindowKit.props.in b/share/msbuild/QWindowKit.props.in
new file mode 100644
index 0000000..2a7e619
--- /dev/null
+++ b/share/msbuild/QWindowKit.props.in
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <LibraryPath>@MSBUILD_QWK_INSTALL_PREFIX@\@MSBUILD_QWK_INSTALL_LIBDIR@;$(LibraryPath)</LibraryPath>
+  </PropertyGroup>
+  <PropertyGroup Label="QtSettings">
+    <QtHeaderSearchPath>@MSBUILD_QWK_INSTALL_PREFIX@\@MSBUILD_QWK_INSTALL_INCDIR@;$(QtHeaderSearchPath)</QtHeaderSearchPath>
+  </PropertyGroup>
+  <ItemDefinitionGroup>
+    <ClCompile>
+      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies Condition="'$(Configuration)'=='Debug'">@MSBUILD_QWK_LIBRARY_LIST_DEBUG@;%(AdditionalDependencies);</AdditionalDependencies>
+      <AdditionalDependencies Condition="'$(Configuration)'=='Release'">@MSBUILD_QWK_LIBRARY_LIST_RELEASE@;%(AdditionalDependencies);</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+</Project>
diff --git a/share/qmake/.gitkeep b/share/qmake/.gitkeep
deleted file mode 100644
index e69de29..0000000
--- a/share/qmake/.gitkeep
+++ /dev/null
diff --git a/share/qmake/QWKCore.pri.in b/share/qmake/QWKCore.pri.in
new file mode 100644
index 0000000..a07cd80
--- /dev/null
+++ b/share/qmake/QWKCore.pri.in
@@ -0,0 +1,23 @@
+!defined(QMAKE_QWK_CORE_INCLUDED, var) {
+    QMAKE_QWK_CORE_INCLUDED = 1
+
+    # CMake variables
+    QMAKE_QWK_INSTALL_PREFIX = @QMAKE_QWK_INSTALL_PREFIX@
+    QMAKE_QWK_INSTALL_BINDIR = @QMAKE_QWK_INSTALL_BINDIR@
+    QMAKE_QWK_INSTALL_LIBDIR = @QMAKE_QWK_INSTALL_LIBDIR@
+    QMAKE_QWK_INSTALL_INCDIR = @QMAKE_QWK_INSTALL_INCDIR@
+
+    # Shared include directory
+    INCLUDEPATH += \
+        $$QMAKE_QWK_INSTALL_PREFIX/$$QMAKE_QWK_INSTALL_INCDIR/QWindowKit
+
+    # Shared link directory
+    LIBS += \
+        "-L$$QMAKE_QWK_INSTALL_PREFIX/$$QMAKE_QWK_INSTALL_LIBDIR"
+    
+    CONFIG(debug, debug|release) {
+        LIBS += -l@QMAKE_QWK_CORE_NAME_DEBUG@
+    } else {
+        LIBS += -l@QMAKE_QWK_CORE_NAME_RELEASE@
+    }
+}
\ No newline at end of file
diff --git a/share/qmake/QWKQuick.pri.in b/share/qmake/QWKQuick.pri.in
new file mode 100644
index 0000000..4c6bdd1
--- /dev/null
+++ b/share/qmake/QWKQuick.pri.in
@@ -0,0 +1,11 @@
+!defined(QMAKE_QWK_QUICK_INCLUDED, var) {
+    QMAKE_QWK_QUICK_INCLUDED = 1
+
+    include($$PWD/QWKCore.pri)
+
+    CONFIG(debug, debug|release) {
+        LIBS += -l@QMAKE_QWK_QUICK_NAME_DEBUG@
+    } else {
+        LIBS += -l@QMAKE_QWK_QUICK_NAME_RELEASE@
+    }
+}
\ No newline at end of file
diff --git a/share/qmake/QWKStyleSupport.pri.in b/share/qmake/QWKStyleSupport.pri.in
new file mode 100644
index 0000000..0e7be64
--- /dev/null
+++ b/share/qmake/QWKStyleSupport.pri.in
@@ -0,0 +1,11 @@
+!defined(QMAKE_QWK_STYLESUPPORT_INCLUDED, var) {
+    QMAKE_QWK_STYLESUPPORT_INCLUDED = 1
+
+    include($$PWD/QWKCore.pri)
+
+    CONFIG(debug, debug|release) {
+        LIBS += -l@QMAKE_QWK_STYLESUPPORT_NAME_DEBUG@
+    } else {
+        LIBS += -l@QMAKE_QWK_STYLESUPPORT_NAME_RELEASE@
+    }
+}
\ No newline at end of file
diff --git a/share/qmake/QWKWidgets.pri.in b/share/qmake/QWKWidgets.pri.in
new file mode 100644
index 0000000..ca76273
--- /dev/null
+++ b/share/qmake/QWKWidgets.pri.in
@@ -0,0 +1,11 @@
+!defined(QMAKE_QWK_WIDGETS_INCLUDED, var) {
+    QMAKE_QWK_WIDGETS_INCLUDED = 1
+
+    include($$PWD/QWKCore.pri)
+
+    CONFIG(debug, debug|release) {
+        LIBS += -l@QMAKE_QWK_WIDGETS_NAME_DEBUG@
+    } else {
+        LIBS += -l@QMAKE_QWK_WIDGETS_NAME_RELEASE@
+    }
+}
\ No newline at end of file
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 4c6bd44..25d290a 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -208,7 +208,5 @@
     )
 
     # Install shared files
-    install(DIRECTORY ../share/
-        DESTINATION share/${QWINDOWKIT_INSTALL_NAME}
-    )
+    include("../share/install.cmake")
 endif()
\ No newline at end of file
diff --git a/src/quick/quickwindowagent_win.cpp b/src/quick/quickwindowagent_win.cpp
index cfc3eb1..0d7fe92 100644
--- a/src/quick/quickwindowagent_win.cpp
+++ b/src/quick/quickwindowagent_win.cpp
@@ -8,7 +8,6 @@
 namespace QWK {
 
     class BorderItem : public QQuickPaintedItem, public NativeEventFilter {
-        Q_OBJECT
     public:
         explicit BorderItem(QQuickItem *parent, AbstractWindowContext *context);
         ~BorderItem() override;
@@ -120,5 +119,3 @@
     }
 
 }
-
-#include "quickwindowagent_win.moc"

--
Gitblit v1.9.1