feat: add DtkCore and dtkcore_config.h headers
authorzccrs <ccrr1314@live.com>
Mon, 15 Jan 2018 05:57:28 +0000 (13:57 +0800)
committerzccrs <ccrr1314@live.com>
Mon, 15 Jan 2018 06:34:46 +0000 (14:34 +0800)
Change-Id: I42976bd2930300a667ee31bf7e26e09ea475afdd

.gitignore
src/dtkcore_global.h
src/lib.pri
src/src.pro

index f33351fbf589eccdc6a72f5b9f3707f6fa2be3b5..c979ed9739e27e57c9c94ba4f9d0329c1b25a274 100644 (file)
@@ -18,3 +18,6 @@ build*/
 
 # executeable files
 *.qm
+
+src/DtkCore
+src/dtkcore_config.h
index 34ec344eb9e79647c5c63e64d3a1e32644a8e8ce..6c501b75232eb7432fecf4a6b2901f481c1bb9e7 100644 (file)
@@ -19,6 +19,8 @@
 
 #include <QtCore/qglobal.h>
 
+#include <dtkcore_config.h>
+
 #define DTK_NAMESPACE Dtk
 
 #if !defined(DTK_NAMESPACE)
@@ -62,3 +64,6 @@
 #define D_DECL_DEPRECATED Q_DECL_DEPRECATED
 #define D_DECL_DEPRECATED_X Q_DECL_DEPRECATED_X
 #endif
+
+#define DTK_VERSION_CHECK(major, minor, patch, build) ((major<<24)|(minor<<16)|(patch<<8)|build)
+#define DTK_VERSION DTK_VERSION_CHECK(DTK_VERSION_MAJOR, DTK_VERSION_MINOR, DTK_VERSION_PATCH, DTK_VERSION_BUILD)
index ca2381322e1b619c3c2e397ecb6204a1e59a8655..fcd892522b9bd5a9d252b1ea2182025113c46823 100644 (file)
@@ -1,5 +1,34 @@
 TEMPLATE = lib
-VERSION = 2.0
+
+isEmpty(VERSION) {
+    VERSION = $$system(git describe --tags --abbrev=0)
+    isEmpty(VERSION):error(VERSION is empty)
+    VERSION = $$replace(VERSION, [^0-9.],)
+    message(Version \"$$VERSION\" from git)
+}
+
+isEmpty(VER_MAJ) {
+    ver_list = $$split(VERSION, .)
+    VER_MAJ = $$first(ver_list)
+}
+
+isEmpty(VER_MIN) {
+    ver_list = $$split(VERSION, .)
+    VER_MIN = $$member(ver_list, 1, 1)
+    isEmpty(VER_MIN):VER_MIN = 0
+}
+
+isEmpty(VER_PAT) {
+    ver_list = $$split(VERSION, .)
+    VER_PAT = $$member(ver_list, 2, 2)
+    isEmpty(VER_PAT):VER_PAT = 0
+}
+
+isEmpty(VER_BUI) {
+    ver_list = $$split(VERSION, .)
+    VER_BUI = $$member(ver_list, 3, 3)
+    isEmpty(VER_BUI):VER_BUI = 0
+}
 
 CONFIG += c++11 create_pc create_prl no_install_prl
 CONFIG += no_keywords
index 665940501501fa7e50e378bbb0d08b2206768a34..c137b7bddd9814717e626e101a2f074e206660c8 100644 (file)
@@ -11,7 +11,7 @@ DEFINES += LIBDTKCORE_LIBRARY
 INCLUDEPATH += $$PWD $$PWD/base
 
 HEADERS += \
-    $$PWD/dtkcore_global.h \
+    $$PWD/dtkcore_global.h
 
 include($$PWD/base/base.pri)
 include($$PWD/util/util.pri)
@@ -22,7 +22,7 @@ include($$PWD/settings/settings.pri)
 # ----------------------------------------------
 # install config
 
-includes.files += $$PWD/*.h
+includes.files += $$PWD/*.h $$PWD/dtkcore_config.h $$PWD/DtkCore
 includes.path = $${DTK_INCLUDEPATH}/DCore
 
 # CMake configure
@@ -43,4 +43,62 @@ 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)
+    header_dir = $$quote($$dirname(header))
 
+    for (file, includes.files) {
+        file_ap = $$absolute_path($$file)
+        file_dir = $$quote($$dirname(file_ap))
+
+        isEqual(file_dir, $$header_dir) {
+            return(true)
+        }
+    }
+
+    return(false)
+}
+
+defineTest(updateDtkCoreFile) {
+    include_files = $$HEADERS
+    file_content = $$quote($${LITERAL_HASH}ifndef DTK_CORE_MODULE_H)
+    file_content += $$quote($${LITERAL_HASH}define DTK_CORE_MODULE_H)
+
+    for(header, include_files) {
+        containIncludeFiles($$header) {
+            file_content += $$quote($${LITERAL_HASH}include \"$$basename(header)\")
+        }
+    }
+
+    file_content += $$quote($${LITERAL_HASH}endif)
+    !write_file($$PWD/DtkCore, file_content):return(false)
+
+    return(true)
+}
+
+!updateDtkCoreFile():warning(Cannot create "DtkCore" header file)
+
+# create dtkwidget_config.h file
+defineTest(updateDtkCoreConfigFile) {
+    config_content += $$quote($${LITERAL_HASH}define DTK_VERSION_MAJOR $$VER_MAJ)
+    config_content += $$quote($${LITERAL_HASH}define DTK_VERSION_MINOR $$VER_MIN)
+    config_content += $$quote($${LITERAL_HASH}define DTK_VERSION_PATCH $$VER_PAT)
+    config_content += $$quote($${LITERAL_HASH}define DTK_VERSION_BUILD $$VER_BUI)
+    config_content += $$quote($${LITERAL_HASH}define DTK_VERSION_STR \"$$VERSION\")
+    config_content += $$quote(//)
+
+    for(file, includes.files) {
+        file = $$quote($$basename(file))
+
+        !isEqual(file, DtkCore):contains(file, D[A-Za-z0-9_]+) {
+            config_content += $$quote($${LITERAL_HASH}define DTKCORE_CLASS_$$file)
+        }
+    }
+
+    !write_file($$PWD/dtkcore_config.h, config_content):return(false)
+
+    return(true)
+}
+
+!updateDtkCoreConfigFile():warning(Cannot create "dtkcore_config.h" header file)