From 553485646e5c9914c9cee9831c9ee07736903d99 Mon Sep 17 00:00:00 2001 From: peri4 Date: Mon, 8 Aug 2022 15:38:50 +0300 Subject: [PATCH] cmake refactoring --- SHSTKMacros.cmake | 166 ++++++++++++++++++++------------------------ SHSTKQtMacros.cmake | 28 ++++---- 2 files changed, 90 insertions(+), 104 deletions(-) diff --git a/SHSTKMacros.cmake b/SHSTKMacros.cmake index 8ed562c..b960115 100644 --- a/SHSTKMacros.cmake +++ b/SHSTKMacros.cmake @@ -2,21 +2,21 @@ shstk_define_option(name desc) -shstk_begin_project(domain module) +shstk_begin_project(name) shstk_install(dir is_app target h_files) shstk_is_parent_exists(out) -shstk_copy_to_parent(domain) +shstk_copy_to_parent() -shstk_add_directories(domain) +shstk_add_directories() -shstk_add_directories_with_include(is_qt domain) +shstk_add_directories_with_include(is_qt name) -shstk_set_find_dirs(domain module) +shstk_set_find_dirs(name) -shstk_find_header(module filename add_find_info) +shstk_find_header(name filename add_find_info) align_list(list out) @@ -38,7 +38,9 @@ macro(shstk_define_option name desc) endmacro() -macro(shstk_begin_project domain module) +macro(shstk_begin_project name) + string(TOLOWER "${name}" ${name}_lowercase) + string(TOUPPER "${name}" ${name}_uppercase) set(INSTALL_PREFIX) set(_plugins_default_ 1) if (CMAKE_CROSSCOMPILING) @@ -118,45 +120,38 @@ macro(shstk_begin_project domain module) set(_qt_libs ) set(_qt_apps ) set(_qt_plugs) - if (NOT "x${domain}" STREQUAL "x") - set(BUILDING_${domain} ON CACHE BOOL "build ${domain}") - set(${domain}_ROOT_SRC "${CMAKE_CURRENT_SOURCE_DIR}" CACHE STRING "") - set(${domain}_ROOT_BIN "${CMAKE_CURRENT_BINARY_DIR}" CACHE STRING "") - set(SET_TARGETS_${domain} OFF CACHE BOOL "" FORCE) + if (NOT "x${name}" STREQUAL "x") + set(BUILDING_${name} ON CACHE BOOL "build ${name}") + set(${name}_ROOT_SRC "${CMAKE_CURRENT_SOURCE_DIR}" CACHE STRING "") + set(${name}_ROOT_BIN "${CMAKE_CURRENT_BINARY_DIR}" CACHE STRING "") + set(SET_TARGETS_${name} OFF CACHE BOOL "" FORCE) if(STATIC_LIB) - add_definitions(-D${module}_STATIC_DEFINE) - set(${domain}_LIB_TYPE STATIC) - set(${domain}_LIB_TYPE_MSG "Static") + add_definitions(-D${${name}_uppercase}_STATIC_DEFINE) + set(${name}_LIB_TYPE STATIC) + set(${name}_LIB_TYPE_MSG "Static") else() - set(${domain}_LIB_TYPE SHARED) - set(${domain}_LIB_TYPE_MSG "Shared") + set(${name}_LIB_TYPE SHARED) + set(${name}_LIB_TYPE_MSG "Shared") endif() if (CMAKE_BUILD_TYPE MATCHES Debug) - set(${domain}_BUILD_TYPE "Debug") - #add_definitions(-DPIP_DEBUG) + set(${name}_BUILD_TYPE "Debug") else() - set(${domain}_BUILD_TYPE "Release") + set(${name}_BUILD_TYPE "Release") endif() - #set(${domain}_MAJOR 1) - #set(${domain}_MINOR 8) - #set(${domain}_REVISION 0) - #set(${domain}_SUFFIX ) - #set(${domain}_COMPANY SHS) - #set(${domain}_DOMAIN org.SHS) - set(${domain}_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/${domain}_version.h") - set_version(${domain} - MAJOR "${${domain}_MAJOR}" - MINOR "${${domain}_MINOR}" - REVISION "${${domain}_REVISION}" + set(${name}_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/${${name}_lowercase}_version.h") + set_version(${name} + MAJOR "${${name}_MAJOR}" + MINOR "${${name}_MINOR}" + REVISION "${${name}_REVISION}" BUILD "${BUILD_NUMBER}" - SUFFIX "${${domain}_SUFFIX}" - OUTPUT "${${domain}_VERSION_FILE}") - set_deploy_property(${domain} ${${domain}_LIB_TYPE} - FULLNAME "${${domain}_DOMAIN}.*" - COMPANY "${${domain}_COMPANY}") + SUFFIX "${${name}_SUFFIX}" + OUTPUT "${${name}_VERSION_FILE}") + set_deploy_property(${name} ${${name}_LIB_TYPE} + FULLNAME "${${name}_DOMAIN}.*" + COMPANY "${${name}_COMPANY}") endif() @@ -227,7 +222,7 @@ macro(shstk_copy_to_parent) endmacro() -macro(shstk_add_directories domain) +macro(shstk_add_directories) file(GLOB _dl "[^.]*") foreach(_d ${_dl}) if(IS_DIRECTORY ${_d}) @@ -238,7 +233,7 @@ macro(shstk_add_directories domain) endmacro() -macro(shstk_add_directories_with_include is_qt domain) +macro(shstk_add_directories_with_include is_qt name) set(DIRS) file(GLOB _dl "[^.]*") foreach(_d ${_dl}) @@ -250,7 +245,7 @@ macro(shstk_add_directories_with_include is_qt domain) foreach(_d ${DIRS}) get_filename_component(_dname "${_d}" NAME) if (${is_qt}) - list(APPEND QT_MULTILIB_LIST ${domain}${_dname}) + list(APPEND QT_MULTILIB_LIST ${name}${_dname}) #set(QT_MULTILIB_LIST "${QT_MULTILIB_LIST}" CACHE STRING "") endif() endforeach() @@ -263,40 +258,35 @@ macro(shstk_add_directories_with_include is_qt domain) endmacro() -macro(shstk_set_find_dirs domain module) - #set(_PIP_INCDIR "${PIP_DIR}/include/pip") - #set(_PIP_LIBDIR "${PIP_DIR}/lib") - set(${domain}_INCDIR) - set(${domain}_LIBDIR) - set(${domain}_BINDIR) - set(${domain}_FIND_PROGRAM_ARG) - set(${domain}_BINEXT "") - #if (BUILDING_${domain}) - # list(APPEND ${domain}_INCDIR "${${domain}_ROOT_SRC}") - # list(APPEND ${domain}_LIBDIR "${${domain}_ROOT_BIN}") - #endif() - if(DEFINED ${module}_DIR) - list(APPEND ${domain}_LIBDIR "${${module}_DIR}/lib") - list(APPEND ${domain}_INCDIR "${${module}_DIR}/include/${domain}") - list(APPEND ${domain}_BINDIR "${${module}_DIR}/bin") +macro(shstk_set_find_dirs name) + string(TOLOWER "${name}" ${name}_lowercase) + set(${name}_INCDIR) + set(${name}_LIBDIR) + set(${name}_BINDIR) + set(${name}_FIND_PROGRAM_ARG) + set(${name}_BINEXT "") + if(DEFINED ${name}_DIR) + list(APPEND ${name}_LIBDIR "${${name}_DIR}/lib") + list(APPEND ${name}_INCDIR "${${name}_DIR}/include/${${name}_lowercase}") + list(APPEND ${name}_BINDIR "${${name}_DIR}/bin") endif() if(MINGW_INCLUDE) - list(APPEND ${domain}_INCDIR "${MINGW_INCLUDE}/${domain}") - list(APPEND ${domain}_LIBDIR "${MINGW_LIB}") - list(APPEND ${domain}_BINDIR "${MINGW_BIN}") + list(APPEND ${name}_INCDIR "${MINGW_INCLUDE}/${${name}_lowercase}") + list(APPEND ${name}_LIBDIR "${MINGW_LIB}") + list(APPEND ${name}_BINDIR "${MINGW_BIN}") endif() if(CMAKE_CROSSCOMPILING) - list(APPEND ${domain}_INCDIR "${CMAKE_PREFIX_PATH}/include/${domain}") - list(APPEND ${domain}_LIBDIR "${CMAKE_PREFIX_PATH}/lib") - set(${domain}_FIND_PROGRAM_ARG "NO_DEFAULT_PATH") - list(APPEND ${domain}_BINDIR "/usr/bin" "/usr/local/bin") + list(APPEND ${name}_INCDIR "${CMAKE_PREFIX_PATH}/include/${${name}_lowercase}") + list(APPEND ${name}_LIBDIR "${CMAKE_PREFIX_PATH}/lib") + set(${name}_FIND_PROGRAM_ARG "NO_DEFAULT_PATH") + list(APPEND ${name}_BINDIR "/usr/bin" "/usr/local/bin") include_directories(${CMAKE_PREFIX_PATH}/include) link_directories(${CMAKE_PREFIX_PATH}/lib) else() - list(APPEND ${domain}_BINDIR "${CMAKE_PREFIX_PATH}/bin") + list(APPEND ${name}_BINDIR "${CMAKE_PREFIX_PATH}/bin") if(NOT WIN32) - list(APPEND ${domain}_INCDIR "/usr/include/${domain}" "/usr/local/include/${domain}") - list(APPEND ${domain}_LIBDIR "/usr/lib" "/usr/local/lib") + list(APPEND ${name}_INCDIR "/usr/include/${${name}_lowercase}" "/usr/local/include/${${name}_lowercase}") + list(APPEND ${name}_LIBDIR "/usr/lib" "/usr/local/lib") endif() if(APPLE) include_directories(/usr/local/include) @@ -304,51 +294,47 @@ macro(shstk_set_find_dirs domain module) endif() endif() if ("x${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "xWindows") - set(${domain}_BINEXT ".exe") + set(${name}_BINEXT ".exe") if (CMAKE_CROSSCOMPILING) - set(${domain}_FIND_PROGRAM_ARG) + set(${name}_FIND_PROGRAM_ARG) endif() endif() - #list(APPEND ${domain}_BINDIR "${PIP_DIR}/bin") endmacro() -macro(shstk_find_header domain module filename add_find_info) - if(NOT ${module}_VERSION) - find_file(${domain}_H_INCLUDE "${filename}" HINTS ${${domain}_INCDIR}) - #message("${domain}_H_INCLUDE \"${filename}\" HINTS \"${${domain}_INCDIR}\" = \"${${domain}_H_INCLUDE}\"") - if (NOT ${domain}_H_INCLUDE) - message(FATAL_ERROR "Can`t find ${module} version file (\"${filename}\")!") +macro(shstk_find_header name filename add_find_info) + string(TOUPPER "${name}" ${name}_uppercase) + if(NOT ${name}_VERSION) + find_file(${name}_H_INCLUDE "${filename}" HINTS ${${name}_INCDIR}) + #message("${name}_H_INCLUDE \"${filename}\" HINTS \"${${name}_INCDIR}\" = \"${${name}_H_INCLUDE}\"") + if (NOT ${name}_H_INCLUDE) + message(FATAL_ERROR "Can`t find ${name} version file (\"${filename}\")!") endif() - #if (DEFINED ANDROID_PLATFORM) - # set(CD_INCLUDES ${ANDROID_SYSTEM_LIBRARY_PATH}/usr/include/${domain}) - #else() - get_filename_component(_inc ${${domain}_H_INCLUDE} PATH) - set(${domain}_INCLUDES "${_inc}" CACHE STRING "") - #endif() + get_filename_component(_inc ${${name}_H_INCLUDE} PATH) + set(${name}_INCLUDES "${_inc}" CACHE STRING "") include(CheckSymbolExists) - check_symbol_exists(${module}_VERSION_NAME "${${domain}_H_INCLUDE}" _${domain}_version_found) - if (_${domain}_version_found) - file(STRINGS "${${domain}_H_INCLUDE}" _version REGEX "^[ \t]*#define[ \t]+${module}_VERSION_NAME+[ \t]+.*$") + check_symbol_exists(${name}_VERSION_NAME "${${name}_H_INCLUDE}" _${name}_version_found) + if (_${name}_version_found) + file(STRINGS "${${name}_H_INCLUDE}" _version REGEX "^[ \t]*#define[ \t]+${${name}_uppercase}_VERSION_NAME+[ \t]+.*$") string(REGEX MATCH "\".*\"" _version ${_version}) string(LENGTH ${_version} SL) math(EXPR SL ${SL}-2) string(SUBSTRING ${_version} 1 ${SL} _version) - set(${module}_VERSION ${_version} CACHE STRING "${module}_VERSION") - if (NOT _FIND_${module}_MSG) - set(_FIND_${module}_MSG 1 CACHE BOOL "find_msg_${module}" FORCE) + set(${name}_VERSION ${_version} CACHE STRING "${name}_VERSION") + if (NOT _FIND_${name}_MSG) + set(_FIND_${name}_MSG 1 CACHE BOOL "find_msg_${name}" FORCE) set(_afi) if (NOT "x${add_find_info}" STREQUAL "x") set(_afi ": ${add_find_info}") endif() - message(STATUS "Found ${module}${_afi} (version \"${${module}_VERSION}\")") + message(STATUS "Found ${name}${_afi} (version \"${${name}_VERSION}\")") endif() else() - message(FATAL_ERROR "Can`t find ${module}_VERSION_NAME in \"${filename}\"!") + message(FATAL_ERROR "Can`t find ${${name}_uppercase}_VERSION_NAME in \"${filename}\"!") endif() endif() - if(${module}_FIND_VERSION VERSION_GREATER ${module}_VERSION) - message(FATAL_ERROR "${module} version ${${module}_VERSION} is available, but ${${module}_FIND_VERSION} requested!") + if(${name}_FIND_VERSION VERSION_GREATER ${name}_VERSION) + message(FATAL_ERROR "${name} version ${${name}_VERSION} is available, but ${${${name}_uppercase}_FIND_VERSION} requested!") endif() endmacro() diff --git a/SHSTKQtMacros.cmake b/SHSTKQtMacros.cmake index b67fa50..cff9d4d 100644 --- a/SHSTKQtMacros.cmake +++ b/SHSTKQtMacros.cmake @@ -4,7 +4,7 @@ shstk_qad_install(dir is_app target h_files qm_files) shstk_qad_plugin(name modules libs) -shstk_qad_project(name is_app domain modules libs) +shstk_qad_project(name is_app root_name modules libs) ]] @@ -113,44 +113,44 @@ macro(shstk_qad_plugin NAME _MODULES _LIBS) endmacro() -macro(shstk_qad_project NAME IS_APP DOMAIN _MODULES _LIBS) +macro(shstk_qad_project NAME IS_APP ROOT_NAME _MODULES _LIBS) project(${NAME}) #message("qad_find_qt ${NAME} ${IS_APP} \"${QtVersions}\" \"${_MODULES}\"") qad_find_qt(${QtVersions} Core ${_MODULES}) qad_sources(SRC) - import_version(${PROJECT_NAME} ${DOMAIN}) - import_deploy_properties(${PROJECT_NAME} ${DOMAIN}) + import_version(${PROJECT_NAME} ${ROOT_NAME}) + import_deploy_properties(${PROJECT_NAME} ${ROOT_NAME}) if (${IS_APP}) list(APPEND _qt_apps ${PROJECT_NAME}) set_deploy_property(${PROJECT_NAME} LABEL ${PROJECT_NAME} - FULLNAME "${${DOMAIN}_DOMAIN}.${PROJECT_NAME}" + FULLNAME "${${ROOT_NAME}_DOMAIN}.${PROJECT_NAME}" INFO "${APP_INFO}" ICON "${APP_ICON}") else() list(APPEND _qt_libs ${PROJECT_NAME}) set_deploy_property(${PROJECT_NAME} SHARED LABEL ${PROJECT_NAME} - FULLNAME "${${DOMAIN}_DOMAIN}.${PROJECT_NAME}" - INFO "${DOMAIN} ${NAME} library") + FULLNAME "${${ROOT_NAME}_DOMAIN}.${PROJECT_NAME}" + INFO "${ROOT_NAME} ${NAME} library") endif() make_rc(${PROJECT_NAME} out_RC) qad_wrap(${SRC} HDRS out_HDR CPPS out_CPP QMS out_QM ${out_RC}) - #message("add_exe proj ${NAME}, ${${DOMAIN}_DOMAIN}.${PROJECT_NAME}") + #message("add_exe proj ${NAME}, ${${ROOT_NAME}_DOMAIN}.${PROJECT_NAME}") if (${IS_APP}) set(_DEBUG_FLAG_) if (NOT CMAKE_BUILD_TYPE MATCHES Debug) set(_DEBUG_FLAG_ "WIN32") endif() - qad_add_executable(${PROJECT_NAME} ${_DEBUG_FLAG_} out_CPP ${${DOMAIN}_EXPORT_HEADER} ${ARGN}) + qad_add_executable(${PROJECT_NAME} ${_DEBUG_FLAG_} out_CPP ${${ROOT_NAME}_EXPORT_HEADER} ${ARGN}) else() set(_libtype SHARED) - if (NOT "x${${DOMAIN}_LIB_TYPE}" STREQUAL "x") - set(_libtype ${${DOMAIN}_LIB_TYPE}) + if (NOT "x${${ROOT_NAME}_LIB_TYPE}" STREQUAL "x") + set(_libtype ${${ROOT_NAME}_LIB_TYPE}) endif() - qad_add_library(${PROJECT_NAME} ${_libtype} out_CPP ${${DOMAIN}_EXPORT_HEADER} ${ARGN}) - #if(NOT ${DOMAIN}_STATIC_LIB) - # qad_target_compile_definitions(${PROJECT_NAME} PRIVATE ${DOMAIN}_SHARED_DEFINE) + qad_add_library(${PROJECT_NAME} ${_libtype} out_CPP ${${ROOT_NAME}_EXPORT_HEADER} ${ARGN}) + #if(NOT ${ROOT_NAME}_STATIC_LIB) + # qad_target_compile_definitions(${PROJECT_NAME} PRIVATE ${ROOT_NAME}_SHARED_DEFINE) #endif() qad_generate_export_header(${PROJECT_NAME}) list(APPEND out_HDR "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_export.h")