From: Iceyer Date: Mon, 12 Feb 2018 03:12:11 +0000 (+0800) Subject: feat: support qt module X-Git-Tag: archive/raspbian/5.7.12-2+rpi1^2~130^2~10 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=17ca0de9156a320cea32208dcff2f8cdf7d6a237;p=dtkcore.git feat: support qt module Change-Id: I29a99be4e5e410b70010fa56c1e042b4e3ee18e5 --- diff --git a/.gitignore b/.gitignore index c979ed9..a3bca22 100644 --- a/.gitignore +++ b/.gitignore @@ -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 index 9fd26b7..0000000 --- a/cmake/DtkCore/DtkCoreConfig.cmake +++ /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 index 0000000..cc7eb96 --- /dev/null +++ b/cmake/DtkCore/DtkCoreConfig.cmake.in @@ -0,0 +1,4 @@ + +set(DTKCORE_INCLUDE_DIR "/usr/include/libdtk-2.0.6/DCore") +set(DtkCore_LIBRARIES dtkcore) +include_directories("${INCLUDE_INSTALLED_DIR}") diff --git a/debian/libdtkcore-dev.install b/debian/libdtkcore-dev.install index 60e21e3..b549f55 100644 --- a/debian/libdtkcore-dev.install +++ b/debian/libdtkcore-dev.install @@ -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 index 0000000..44b6bcb --- /dev/null +++ b/src/dtk_build.prf @@ -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 index 0000000..7ee45f9 --- /dev/null +++ b/src/dtk_cmake.prf @@ -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 index 0000000..236d846 --- /dev/null +++ b/src/dtk_module.prf @@ -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 index adc4ea7..0000000 --- a/src/lib.pri +++ /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 diff --git a/src/src.pro b/src/src.pro index f898c5b..5c8fc04 100644 --- a/src/src.pro +++ b/src/src.pro @@ -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