feat: support qt module
authorIceyer <me@iceyer.net>
Mon, 12 Feb 2018 03:12:11 +0000 (11:12 +0800)
committerIceyer <me@iceyer.net>
Mon, 12 Feb 2018 04:54:43 +0000 (12:54 +0800)
Change-Id: I29a99be4e5e410b70010fa56c1e042b4e3ee18e5

.gitignore
cmake/DtkCore/DtkCoreConfig.cmake [deleted file]
cmake/DtkCore/DtkCoreConfig.cmake.in [new file with mode: 0644]
debian/libdtkcore-dev.install
src/dtk_build.prf [new file with mode: 0644]
src/dtk_cmake.prf [new file with mode: 0644]
src/dtk_module.prf [new file with mode: 0644]
src/lib.pri [deleted file]
src/src.pro

index c979ed9739e27e57c9c94ba4f9d0329c1b25a274..a3bca22ad7da21f204ea84fe66d4b89195d48042 100644 (file)
@@ -21,3 +21,4 @@ build*/
 
 src/DtkCore
 src/dtkcore_config.h
+cmake/DtkCore/DtkCoreConfig.cmake
diff --git a/cmake/DtkCore/DtkCoreConfig.cmake b/cmake/DtkCore/DtkCoreConfig.cmake
deleted file mode 100644 (file)
index 9fd26b7..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-
-set(INCLUDE_INSTALLED_DIR "/usr/include/libdtk-2.0.6/DCore")
-set(DtkCore_LIBRARIES dtkcore)
-include_directories("${INCLUDE_INSTALLED_DIR}")
diff --git a/cmake/DtkCore/DtkCoreConfig.cmake.in b/cmake/DtkCore/DtkCoreConfig.cmake.in
new file mode 100644 (file)
index 0000000..cc7eb96
--- /dev/null
@@ -0,0 +1,4 @@
+
+set(DTKCORE_INCLUDE_DIR "/usr/include/libdtk-2.0.6/DCore")
+set(DtkCore_LIBRARIES dtkcore)
+include_directories("${INCLUDE_INSTALLED_DIR}")
index 60e21e315c6098c660ef1fb45ae9a9b3569bd78b..b549f55677112c3fc4adedb46eb50f601feac2ea 100644 (file)
@@ -2,4 +2,5 @@ usr/lib/*/lib*.so
 usr/include
 usr/lib/*/pkgconfig/*.pc
 usr/lib/*/cmake/*/*.cmake
+usr/lib/*/qt5/*
 usr/lib/*/libdtk/modules/*
diff --git a/src/dtk_build.prf b/src/dtk_build.prf
new file mode 100644 (file)
index 0000000..44b6bcb
--- /dev/null
@@ -0,0 +1,64 @@
+defineTest(checkDtkVersion) {
+    isEmpty(VERSION) {
+        !isEqual(TARGET, dtkcore) {
+            PKG_CONFIG = $$pkgConfigExecutable()
+            !isEmpty(PKG_CONFIG): VERSION = $$system($$PKG_CONFIG --modversion dtkcore)
+        }
+
+        #TODO: faild in window
+        isEmpty(VERSION): VERSION = $$system(git describe --tags --abbrev=0)
+        isEmpty(VERSION): VERSION = $$DTK_VERSION
+        isEmpty(VERSION): return(false)
+        VERSION = $$replace(VERSION, [^0-9.],)
+    }
+
+    export(VERSION)
+    return(true)
+}
+
+!checkDtkVersion():error("check dtk version failed")
+
+message("build dtk with version $$VERSION")
+ver_list = $$split(VERSION, .)
+
+isEmpty(VER_MAJ) {
+    VER_MAJ = $$first(ver_list)
+}
+isEmpty(VER_MIN) {
+    VER_MIN = $$member(ver_list, 1, 1)
+    isEmpty(VER_MIN):VER_MIN = 0
+}
+isEmpty(VER_PAT) {
+    VER_PAT = $$member(ver_list, 2, 2)
+    isEmpty(VER_PAT):VER_PAT = 0
+}
+isEmpty(VER_BUI) {
+    VER_BUI = $$member(ver_list, 3, 3)
+    isEmpty(VER_BUI):VER_BUI = 0
+}
+
+TEMPLATE = lib
+
+CONFIG += c++11 create_pc create_prl no_install_prl
+CONFIG += no_keywords
+
+DEFINES += QT_MESSAGELOGCONTEXT
+
+isEmpty(PREFIX){
+    PREFIX = /usr
+}
+
+isEmpty(LIB_INSTALL_DIR) {
+    LIB_INSTALL_DIR=$$PREFIX/lib
+    target.path = $$PREFIX/lib
+} else {
+    target.path = $$LIB_INSTALL_DIR
+}
+
+isEmpty(INCLUDE_INSTALL_DIR) {
+    INCLUDE_INSTALL_DIR = $$PREFIX/include/libdtk-$${VER_MAJ}.$${VER_MIN}.$${VER_PAT}
+    DTK_INCLUDEPATH = $$PREFIX/include/libdtk-$${VER_MAJ}.$${VER_MIN}.$${VER_PAT}
+} else {
+    DTK_INCLUDEPATH = $$INCLUDE_INSTALL_DIR/libdtk-$${VER_MAJ}.$${VER_MIN}.$${VER_PAT}
+}
+
diff --git a/src/dtk_cmake.prf b/src/dtk_cmake.prf
new file mode 100644 (file)
index 0000000..7ee45f9
--- /dev/null
@@ -0,0 +1,23 @@
+# CMake configure
+
+#TODO: check cmake exist
+
+!win*: {
+isEmpty(CMAKE_MODULE): error("CMAKE_MODULE must not empty")
+WORK_DIR=$$_PRO_FILE_PWD_
+
+message("config cmake module: $$CMAKE_MODULE")
+message("write cmake file to: $$WORK_DIR")
+
+CMAKE_MODULE_INCLUDE_DIR=$$upper($${CMAKE_MODULE})_INCLUDE_DIR
+
+INC_DIR = $$replace(includes.path, "/", "\/")
+CMD = sed -E \'s/$${CMAKE_MODULE_INCLUDE_DIR} \".*\"\\)$/$${CMAKE_MODULE_INCLUDE_DIR} \"$${INC_DIR}\"\\)/\' $$WORK_DIR/../cmake/$${CMAKE_MODULE}/$${CMAKE_MODULE}Config.cmake.in > $$WORK_DIR/../cmake/$${CMAKE_MODULE}/$${CMAKE_MODULE}Config.cmake
+
+system($$CMD) | error("config cmake failed")
+
+cmake_config.files = $$PWD/../cmake
+cmake_config.path = $$LIB_INSTALL_DIR
+
+INSTALLS += cmake_config
+}
diff --git a/src/dtk_module.prf b/src/dtk_module.prf
new file mode 100644 (file)
index 0000000..236d846
--- /dev/null
@@ -0,0 +1,93 @@
+isEmpty(QT_MODULE): error("QT_MODULE must not empty")
+
+MODULE_ID=$$QT_MODULE
+mod_inst_pfx=$$_PRO_FILE_PWD_
+MODULE_PRI = $$mod_inst_pfx/qt_lib_$${MODULE_ID}.pri
+module_libs = $$target.path
+MODULE_INCLUDES = $$includes.path
+
+message("config qt module: $$MODULE_ID")
+message("write $$MODULE_PRI to: $$mod_inst_pfx")
+
+internal_module: \
+    MODULE_DEPENDS = $$replace(QT, -private$, _private)
+else: \
+    MODULE_DEPENDS = $$replace(QT, -private$, )
+MODULE_DEPENDS = $$unique(MODULE_DEPENDS)
+contains(MODULE_DEPENDS, $$MODULE): \
+    error("$$TARGET depends on itself.")
+
+# Create a module .pri file
+module_libs=$$LIB_INSTALL_DIR
+isEmpty(module_libs) {
+host_build: \
+    module_libs = "\$\$QT_MODULE_HOST_LIB_BASE"
+else: \
+    module_libs = "\$\$QT_MODULE_LIB_BASE"
+}
+# In addition to the library's private deps, the private module's deps
+# are logically runtime deps of the public module.
+runtime_deps = $$QT_PRIVATE $$QT_FOR_PRIVATE
+!isEmpty(runtime_deps): \
+    module_rundep = "QT.$${MODULE_ID}.run_depends = $$replace(runtime_deps, -private$, _private)"
+else: \
+    module_rundep =
+module_build_type = v2
+static: \
+    module_build_type += staticlib
+lib_bundle {
+    module_build_type += lib_bundle
+    MODULE_FRAMEWORKS = " \$\$QT_MODULE_LIB_BASE"
+}
+internal_module: \
+    module_build_type += internal_module
+ltcg: \
+    module_build_type += ltcg
+module_module =
+!equals(TEMPLATE, aux) {
+    module_module = $$TARGET$$QT_LIBINFIX
+    !lib_bundle: module_module ~= s,^Qt,Qt$$QT_MAJOR_VERSION,
+}
+!isEmpty(MODULE_CONFIG): \
+    module_config = "QT.$${MODULE_ID}.CONFIG = $$MODULE_CONFIG"
+else: \
+    module_config =
+!isEmpty(MODULE_PLUGIN_TYPES): \
+    module_plugtypes = "QT.$${MODULE_ID}.plugin_types = $$replace(MODULE_PLUGIN_TYPES, /.*$, )"
+else: \
+    module_plugtypes =
+!isEmpty(MODULE_MASTER_HEADER): \
+    module_master = "QT.$${MODULE_ID}.master_header = $$MODULE_MASTER_HEADER"
+else: \
+    module_master =
+
+MODULE_PRI_CONT = \
+    "QT.$${MODULE_ID}.VERSION = $${VERSION}" \
+    "QT.$${MODULE_ID}.MAJOR_VERSION = $$section(VERSION, ., 0, 0)" \
+    "QT.$${MODULE_ID}.MINOR_VERSION = $$section(VERSION, ., 1, 1)" \
+    "QT.$${MODULE_ID}.PATCH_VERSION = $$section(VERSION, ., 2, 2)" \
+    "" \
+    "QT.$${MODULE_ID}.name = $${TARGET}" \
+    "QT.$${MODULE_ID}.module = $$module_module" \
+    "QT.$${MODULE_ID}.libs = $$module_libs" \
+    $$module_master \
+    "QT.$${MODULE_ID}.includes = $$MODULE_INCLUDES" \
+    "QT.$${MODULE_ID}.frameworks =$$MODULE_FRAMEWORKS"
+
+MODULE_PRI_CONT += \
+    "QT.$${MODULE_ID}.depends =$$join(MODULE_DEPENDS, " ", " ")" \
+    $$module_rundep \
+    "QT.$${MODULE_ID}.module_config =$$join(module_build_type, " ", " ")" \
+    $$module_config \
+    "QT.$${MODULE_ID}.DEFINES = $$val_escape(MODULE_DEFINES)" \
+    "" \
+    "QT_MODULES += $$MODULE"
+
+write_file($$MODULE_PRI, MODULE_PRI_CONT)|error("Aborting.")
+
+
+QT_HOST_DATA=$$system(qmake -query QT_HOST_DATA)
+qt_module.files = $$MODULE_PRI
+qt_module.path = $${QT_HOST_DATA}/mkspecs/modules
+
+INSTALLS += qt_module
diff --git a/src/lib.pri b/src/lib.pri
deleted file mode 100644 (file)
index adc4ea7..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-TEMPLATE = lib
-
-include($$PWD/version.pri)
-
-CONFIG += c++11 create_pc create_prl no_install_prl
-CONFIG += no_keywords
-
-DEFINES += QT_MESSAGELOGCONTEXT
-
-isEmpty(PREFIX){
-    PREFIX = /usr
-}
-
-isEmpty(LIB_INSTALL_DIR) {
-    target.path = $$PREFIX/lib
-} else {
-    target.path = $$LIB_INSTALL_DIR
-}
-
-isEmpty(INCLUDE_INSTALL_DIR) {
-    DTK_INCLUDEPATH = $$PREFIX/include/libdtk-$${VER_MAJ}.$${VER_MIN}.$${VER_PAT}
-} else {
-    DTK_INCLUDEPATH = $$INCLUDE_INSTALL_DIR/libdtk-$${VER_MAJ}.$${VER_MIN}.$${VER_PAT}
-}
-
-win32* {
-    DEFINES += STATIC_LIB
-    CONFIG += staticlib
-}
-
-pri_dev.files += $$PWD/version.pri
-
-isEmpty(LIB_INSTALL_DIR) {
-    pri_dev.path = $$PREFIX/lib/libdtk/modules
-} else {
-    pri_dev.path = $$LIB_INSTALL_DIR/libdtk/modules
-}
-
-INSTALLS += pri_dev
index f898c5b784436a3a312030f464a8d42b4c1f6ad0..5c8fc0459542b6fd039658a05a88f1882bf84212 100644 (file)
@@ -11,37 +11,15 @@ INCLUDEPATH += $$PWD $$PWD/base
 HEADERS += \
     $$PWD/dtkcore_global.h
 
-include($$PWD/lib.pri)
+
+include(dtk_build.prf)
+
 include($$PWD/base/base.pri)
 include($$PWD/util/util.pri)
 include($$PWD/log/log.pri)
 include($$PWD/filesystem/filesystem.pri)
 include($$PWD/settings/settings.pri)
 
-# ----------------------------------------------
-# install config
-
-includes.files += $$PWD/*.h $$PWD/dtkcore_config.h $$PWD/DtkCore
-includes.path = $${DTK_INCLUDEPATH}/DCore
-
-# CMake configure
-INC_DIR = $$replace(includes.path, "/", "\/")
-CMD = sed -i -E \'s/INCLUDE_INSTALLED_DIR \".*\"\\)$/INCLUDE_INSTALLED_DIR \"$${INC_DIR}\"\\)/\' ../cmake/DtkCore/DtkCoreConfig.cmake
-system($$CMD)
-
-cmake_config.path = $$LIB_INSTALL_DIR
-cmake_config.files = $$PWD/../cmake
-
-INSTALLS += includes target cmake_config
-
-QMAKE_PKGCONFIG_LIBDIR = $$target.path
-QMAKE_PKGCONFIG_VERSION = $$VERSION
-QMAKE_PKGCONFIG_DESTDIR = pkgconfig
-
-QMAKE_PKGCONFIG_NAME = DTK_CORE
-QMAKE_PKGCONFIG_DESCRIPTION = Deepin Tool Kit Core Header Files
-QMAKE_PKGCONFIG_INCDIR = $$includes.path
-
 # create DtkCore file
 defineTest(containIncludeFiles) {
     header = $$absolute_path($$ARGS)
@@ -101,3 +79,46 @@ defineTest(updateDtkCoreConfigFile) {
 }
 
 !updateDtkCoreConfigFile():warning(Cannot create "dtkcore_config.h" header file)
+
+
+# ----------------------------------------------
+# install config
+includes.files += $$PWD/*.h $$PWD/dtkcore_config.h $$PWD/DtkCore
+includes.path = $${DTK_INCLUDEPATH}/DCore
+
+INSTALLS += includes target
+
+#pkg-config
+QMAKE_PKGCONFIG_LIBDIR = $$target.path
+QMAKE_PKGCONFIG_VERSION = $$VERSION
+QMAKE_PKGCONFIG_DESTDIR = pkgconfig
+
+QMAKE_PKGCONFIG_NAME = DTK_CORE
+QMAKE_PKGCONFIG_DESCRIPTION = Deepin Tool Kit Core Header Files
+QMAKE_PKGCONFIG_INCDIR = $$includes.path
+
+#cmake
+CMAKE_MODULE=DtkCore
+include(dtk_cmake.prf)
+
+#qt module
+QT_MODULE=dcore
+include(dtk_module.prf)
+
+prf.files+= $$PWD/*.prf
+prf.path = $${QT_HOST_DATA}/mkspecs/features
+
+INSTALLS += prf
+
+# -----------------------------------------------
+# TODO: remove this, replace with dtk_build
+
+pri_dev.files += $$PWD/version.pri
+
+isEmpty(LIB_INSTALL_DIR) {
+    pri_dev.path = $$PREFIX/lib/libdtk/modules
+} else {
+    pri_dev.path = $$LIB_INSTALL_DIR/libdtk/modules
+}
+
+INSTALLS += pri_dev