From 308a0cc41101499c04308b4ef3bb2fff4ab8d783 Mon Sep 17 00:00:00 2001 From: zccrs Date: Mon, 15 Jan 2018 13:57:28 +0800 Subject: [PATCH] feat: add DtkCore and dtkcore_config.h headers Change-Id: I42976bd2930300a667ee31bf7e26e09ea475afdd --- .gitignore | 3 +++ src/dtkcore_global.h | 5 ++++ src/lib.pri | 31 +++++++++++++++++++++- src/src.pro | 62 ++++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 98 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index f33351f..c979ed9 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,6 @@ build*/ # executeable files *.qm + +src/DtkCore +src/dtkcore_config.h diff --git a/src/dtkcore_global.h b/src/dtkcore_global.h index 34ec344..6c501b7 100644 --- a/src/dtkcore_global.h +++ b/src/dtkcore_global.h @@ -19,6 +19,8 @@ #include +#include + #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) diff --git a/src/lib.pri b/src/lib.pri index ca23813..fcd8925 100644 --- a/src/lib.pri +++ b/src/lib.pri @@ -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 diff --git a/src/src.pro b/src/src.pro index 6659405..c137b7b 100644 --- a/src/src.pro +++ b/src/src.pro @@ -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) -- 2.30.2