From 4d0807de9baf8a8cd307abc0ab0c0b8970125a36 Mon Sep 17 00:00:00 2001 From: Martchus Date: Thu, 29 Sep 2016 20:28:02 +0200 Subject: [PATCH] Fix minor issues in build scripts --- cmake/modules/AppTarget.cmake | 4 +- cmake/modules/BasicConfig.cmake | 20 ++--- cmake/modules/Doxygen.cmake | 120 ++++++++++++++------------ cmake/modules/ShellCompletion.cmake | 6 -- cmake/templates/Config.cmake.in | 14 +-- cmake/templates/bash-completion.sh.in | 4 +- 6 files changed, 84 insertions(+), 84 deletions(-) diff --git a/cmake/modules/AppTarget.cmake b/cmake/modules/AppTarget.cmake index 70c8e0f..755ce5e 100644 --- a/cmake/modules/AppTarget.cmake +++ b/cmake/modules/AppTarget.cmake @@ -132,11 +132,11 @@ endfunction() # convenience function to add *.desktop file from project meta data function(add_desktop_file) add_custom_desktop_file( - "${TARGET_EXECUTABLE}" + "${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}" "${META_APP_NAME}" "${META_APP_DESCRIPTION}" "${META_APP_CATEGORIES}" - "${META_PROJECT_NAME}" + "${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}" "${META_PROJECT_NAME}" ) endfunction() diff --git a/cmake/modules/BasicConfig.cmake b/cmake/modules/BasicConfig.cmake index 8efb27e..cefe238 100644 --- a/cmake/modules/BasicConfig.cmake +++ b/cmake/modules/BasicConfig.cmake @@ -3,12 +3,20 @@ # set project name (displayed in Qt Creator) project(${META_PROJECT_NAME}) +# set META_PROJECT_VARNAME and META_PROJECT_VARNAME_UPPER if not specified explicitely +if(NOT META_PROJECT_VARNAME) + set(META_PROJECT_VARNAME ${META_PROJECT_NAME}) +endif() +if(NOT META_PROJECT_VARNAME_UPPER) + string(TOUPPER ${META_PROJECT_VARNAME} META_PROJECT_VARNAME_UPPER) +endif() + # provide variables for other projects built as part of the same subdirs project # to access files from this project get_directory_property(HAS_PARENT PARENT_DIRECTORY) if(HAS_PARENT) - set(${META_PROJECT_VARNAME}_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" PARENT_SCOPE) - set(${META_PROJECT_VARNAME}_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}" PARENT_SCOPE) + set(${META_PROJECT_VARNAME_UPPER}_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" PARENT_SCOPE) + set(${META_PROJECT_VARNAME_UPPER}_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}" PARENT_SCOPE) set(${META_PROJECT_NAME}_DIR "${CMAKE_CURRENT_BINARY_DIR}" PARENT_SCOPE) if(CMAKE_FIND_ROOT_PATH AND MINGW) set(RUNTIME_LIBRARY_PATH "${CMAKE_CURRENT_BINARY_DIR}" ${RUNTIME_LIBRARY_PATH} PARENT_SCOPE) @@ -24,14 +32,6 @@ set(META_APP_URL_STR "\"${META_APP_URL}\"") set(META_APP_DESCRIPTION_STR "\"${META_APP_DESCRIPTION}\"") set(META_APP_VERSION_STR "\"${META_APP_VERSION}\"") -# set META_PROJECT_VARNAME and META_PROJECT_VARNAME_UPPER if not specified explicitely -if(NOT META_PROJECT_VARNAME) - set(META_PROJECT_VARNAME ${META_PROJECT_NAME}) -endif() -if(NOT META_PROJECT_VARNAME_UPPER) - string(TOUPPER ${META_PROJECT_VARNAME} META_PROJECT_VARNAME_UPPER) -endif() - # set TARGET_EXECUTABLE which is used to refer to the target executable at its installation location set(TARGET_EXECUTABLE "${CMAKE_INSTALL_PREFIX}/bin/${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}") diff --git a/cmake/modules/Doxygen.cmake b/cmake/modules/Doxygen.cmake index 0428c6a..f712a46 100644 --- a/cmake/modules/Doxygen.cmake +++ b/cmake/modules/Doxygen.cmake @@ -1,62 +1,68 @@ -# find doxygen.h template -include(TemplateFinder) -find_template_file("doxygen" CPP_UTILITIES DOXYGEN_TEMPLATE_FILE) +option(NO_DOXYGEN "whether creation of Doxygen targets is disabled (enabled by default)" OFF) -# find executables -find_program(DOXYGEN_BIN doxygen) -find_program(PERL_BIN perl) -find_program(DIA_BIN dia) -if(DIA_BIN) - set(HAVE_DIA "YES") -else() - set(HAVE_DIA "NO") -endif() -find_program(DOT_BIN dot) -if(DOT_BIN) - set(HAVE_DOT "YES") -else() - set(HAVE_DOT "NO") -endif() +if(NOT NO_DOXYGEN) + # find doxygen.h template + include(TemplateFinder) + find_template_file("doxygen" CPP_UTILITIES DOXYGEN_TEMPLATE_FILE) -if(NOT DOXYGEN_BIN) - message(WARNING "Doxygen not found, unable to add target for generating API documentation.") -else() - # load cached configuration and other variables - set(DOXY_LANGUAGE "English" CACHE STRING "specifies the language of the API documentation generated with Doxygen") - set(DOXY_CUSTOM_CONFIG "" CACHE STRING "specifies extra options for Doxygen") - set(DOXY_NUMBER "${META_APP_VERSION}") - set(DOXY_INPUT_FILES ${HEADER_FILES} ${SRC_FILES} ${TEST_HEADER_FILES} ${TEST_SRC_FILES} ${WIDGETS_HEADER_FILES} ${WIDGETS_SRC_FILES} ${QML_HEADER_FILES} ${QML_SRC_FILES}) - set(DOXY_PATH_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/") - list(GET DOC_FILES 0 DOXY_MAIN_PAGE_FILE) - set(DOXY_MAIN_PAGE_FILE "${DOXY_PATH_PREFIX}${DOXY_MAIN_PAGE_FILE}") - - # convert DOXY_INPUT_FILES to whitespace-separated list - include(ListToString) - list_to_string(" " "\"${DOXY_PATH_PREFIX}" "\"" "${DOXY_INPUT_FILES}" DOXY_INPUT_FILES_WHITESPACE_SEPARATED) - - # generate Doxygen configuration - configure_file( - "${DOXYGEN_TEMPLATE_FILE}" - "${CMAKE_CURRENT_BINARY_DIR}/doxygen.config" - ) - - # add target for generating API documentation - add_custom_target(${META_PROJECT_NAME}_apidoc - COMMAND "${DOXYGEN_BIN}" "${CMAKE_CURRENT_BINARY_DIR}/doxygen.config" - SOURCES ${DOXY_INPUT_FILES} - ) - - # add install target for API documentation - install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/api-doc" - DESTINATION "share/${META_PROJECT_NAME}" - COMPONENT api-doc - OPTIONAL - ) - - if(NOT TARGET install-api-doc) - add_custom_target(install-api-doc - COMMAND "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=api-doc -P "${CMAKE_BINARY_DIR}/cmake_install.cmake" - ) + # find executables + find_program(DOXYGEN_BIN doxygen) + find_program(PERL_BIN perl) + find_program(DIA_BIN dia) + if(DIA_BIN) + set(HAVE_DIA "YES") + else() + set(HAVE_DIA "NO") + endif() + find_program(DOT_BIN dot) + if(DOT_BIN) + set(HAVE_DOT "YES") + else() + set(HAVE_DOT "NO") endif() + if(NOT DOXYGEN_BIN) + message(WARNING "Doxygen not found, unable to add target for generating API documentation for ${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}") + else() + # load cached configuration and other variables + set(DOXY_LANGUAGE "English" CACHE STRING "specifies the language of the API documentation generated with Doxygen") + set(DOXY_CUSTOM_CONFIG "" CACHE STRING "specifies extra options for Doxygen") + set(DOXY_NUMBER "${META_APP_VERSION}") + set(DOXY_INPUT_FILES ${HEADER_FILES} ${SRC_FILES} ${TEST_HEADER_FILES} ${TEST_SRC_FILES} ${WIDGETS_HEADER_FILES} ${WIDGETS_SRC_FILES} ${QML_HEADER_FILES} ${QML_SRC_FILES}) + set(DOXY_PATH_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/") + list(GET DOC_FILES 0 DOXY_MAIN_PAGE_FILE) + set(DOXY_MAIN_PAGE_FILE "${DOXY_PATH_PREFIX}${DOXY_MAIN_PAGE_FILE}") + + # convert DOXY_INPUT_FILES to whitespace-separated list + include(ListToString) + list_to_string(" " "\"${DOXY_PATH_PREFIX}" "\"" "${DOXY_INPUT_FILES}" DOXY_INPUT_FILES_WHITESPACE_SEPARATED) + + # generate Doxygen configuration + configure_file( + "${DOXYGEN_TEMPLATE_FILE}" + "${CMAKE_CURRENT_BINARY_DIR}/doxygen.config" + ) + + # add target for generating API documentation + add_custom_target(${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}_apidoc + COMMAND "${DOXYGEN_BIN}" "${CMAKE_CURRENT_BINARY_DIR}/doxygen.config" + SOURCES ${DOXY_INPUT_FILES} + ) + + # add install target for API documentation + install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/api-doc" + DESTINATION "share/${META_PROJECT_NAME}" + COMPONENT api-doc + OPTIONAL + ) + + if(NOT TARGET install-api-doc) + add_custom_target(install-api-doc + COMMAND "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=api-doc -P "${CMAKE_BINARY_DIR}/cmake_install.cmake" + ) + endif() + + message(STATUS "Generating target for generating API documentation for ${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX} with Doxygen") + + endif() endif() diff --git a/cmake/modules/ShellCompletion.cmake b/cmake/modules/ShellCompletion.cmake index bec7021..aa0e8be 100644 --- a/cmake/modules/ShellCompletion.cmake +++ b/cmake/modules/ShellCompletion.cmake @@ -2,11 +2,6 @@ option(SHELL_COMPLETION_ENABLED "controls whether shell completion is enabled in option(BASH_COMPLETION_ENABLED "controls whether shell completion for bash is enabled" ON) if(SHELL_COMPLETION_ENABLED) - - if(NOT COMPLETION_META_PROJECT_NAME) - set(COMPLETION_META_PROJECT_NAME ${META_PROJECT_NAME}) - endif() - # add bash completion (currently the only supported shell completion) if(BASH_COMPLETION_ENABLED) # find bash-completion.sh template @@ -33,5 +28,4 @@ if(SHELL_COMPLETION_ENABLED) message(STATUS "Generating files for bash completion.") endif() - endif() diff --git a/cmake/templates/Config.cmake.in b/cmake/templates/Config.cmake.in index d2c8b11..f31c669 100644 --- a/cmake/templates/Config.cmake.in +++ b/cmake/templates/Config.cmake.in @@ -1,10 +1,10 @@ @PACKAGE_INIT@ set(@META_PROJECT_VARNAME_UPPER@_HAS_SHARED_LIB "@BUILD_SHARED_LIBS@") -set(@META_PROJECT_VARNAME_UPPER@_SHARED_LIB "@META_PROJECT_NAME@") +set(@META_PROJECT_VARNAME_UPPER@_SHARED_LIB "@TARGET_PREFIX@@META_PROJECT_NAME@@TARGET_SUFFIX@") set(@META_PROJECT_VARNAME_UPPER@_SHARED_LIB_COMPILE_DEFINITIONS @META_SHARED_LIB_COMPILE_DEFINITIONS@) set(@META_PROJECT_VARNAME_UPPER@_HAS_STATIC_LIB "@BUILD_STATIC_LIBS@") -set(@META_PROJECT_VARNAME_UPPER@_STATIC_LIB "@META_PROJECT_NAME@.a") +set(@META_PROJECT_VARNAME_UPPER@_STATIC_LIB "@TARGET_PREFIX@@META_PROJECT_NAME@@TARGET_SUFFIX@.a") set(@META_PROJECT_VARNAME_UPPER@_STATIC_LIB_DEPENDS @META_STATIC_LIB_DEPENDS@) set(@META_PROJECT_VARNAME_UPPER@_STATIC_LIB_COMPILE_DEFINITIONS @META_STATIC_LIB_COMPILE_DEFINITIONS@) set(@META_PROJECT_VARNAME_UPPER@_INCLUDE_DIRS "@PACKAGE_HEADER_INSTALL_DESTINATION@") @@ -19,22 +19,22 @@ else() set(@META_PROJECT_VARNAME_UPPER@_LIB "${@META_PROJECT_VARNAME_UPPER@_STATIC_LIB}") endif() -macro(use_@META_PROJECT_VARNAME_UPPER@) +macro(use_@META_PROJECT_VARNAME@) include_directories(BEFORE SYSTEM ${@META_PROJECT_VARNAME_UPPER@_INCLUDE_DIRS}) link_directories(${@META_PROJECT_VARNAME_UPPER@_LIB_DIR}) # add library to list of libraries to link against when building dynamic libraries or applications if(@META_PROJECT_VARNAME_UPPER@_HAS_STATIC_LIB AND ((NOT ARGV0 AND ((STATIC_LINKAGE AND "${META_PROJECT_TYPE}" STREQUAL "application") OR (STATIC_LIBRARY_LINKAGE AND ("${META_PROJECT_TYPE}" STREQUAL "" OR "${META_PROJECT_TYPE}" STREQUAL "library")))) OR ("${ARGV0}" STREQUAL "STATIC") OR (NOT ARGV0 AND NOT @META_PROJECT_VARNAME_UPPER@_HAS_SHARED_LIB))) list(APPEND LIBRARIES ${@META_PROJECT_VARNAME_UPPER@_STATIC_LIB} ${@META_PROJECT_VARNAME_UPPER@_STATIC_LIB_DEPENDS}) - message(STATUS "Linking ${META_PROJECT_NAME} statically against @META_PROJECT_NAME@ (${@META_PROJECT_VARNAME_UPPER@_STATIC_LIB} ${@META_PROJECT_VARNAME_UPPER@_STATIC_LIB_DEPENDS}).") + message(STATUS "Linking ${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX} statically against @TARGET_PREFIX@@META_PROJECT_NAME@@TARGET_SUFFIX@ (${@META_PROJECT_VARNAME_UPPER@_STATIC_LIB} ${@META_PROJECT_VARNAME_UPPER@_STATIC_LIB_DEPENDS}).") list(APPEND ADDITIONAL_STATIC_COMPILE_DEFINITIONS ${@META_PROJECT_VARNAME_UPPER@_STATIC_LIB_COMPILE_DEFINITIONS}) elseif(@META_PROJECT_VARNAME_UPPER@_HAS_SHARED_LIB AND (NOT ARGV0 OR ("${ARGV0}" STREQUAL "SHARED"))) list(APPEND LIBRARIES ${@META_PROJECT_VARNAME_UPPER@_SHARED_LIB}) - message(STATUS "Linking ${META_PROJECT_NAME} dynamically against @META_PROJECT_NAME@ (${@META_PROJECT_VARNAME_UPPER@_SHARED_LIB}).") + message(STATUS "Linking ${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX} dynamically against @TARGET_PREFIX@@META_PROJECT_NAME@@TARGET_SUFFIX@ (${@META_PROJECT_VARNAME_UPPER@_SHARED_LIB}).") list(APPEND ADDITIONAL_SHARED_COMPILE_DEFINITIONS ${@META_PROJECT_VARNAME_UPPER@_SHARED_LIB_COMPILE_DEFINITIONS}) elseif(ARGV0) - message(FATAL_ERROR "Can not link ${META_PROJECT_NAME} against @META_PROJECT_NAME@ with the specified linkage ${ARGV0}.") + message(FATAL_ERROR "Can not link ${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX} against @TARGET_PREFIX@@META_PROJECT_NAME@@TARGET_SUFFIX@ with the specified linkage ${ARGV0}.") else() - message(FATAL_ERROR "Can not link ${META_PROJECT_NAME} against @META_PROJECT_NAME@.") + message(FATAL_ERROR "Can not link ${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX} against @TARGET_PREFIX@@META_PROJECT_NAME@@TARGET_SUFFIX@.") endif() # add library (including dependencies) to list of libraries to be provided as transitive dependencies when building static libraries list(APPEND STATIC_LIBRARIES ${@META_PROJECT_VARNAME_UPPER@_STATIC_LIB} ${@META_PROJECT_VARNAME_UPPER@_STATIC_LIB_DEPENDS}) diff --git a/cmake/templates/bash-completion.sh.in b/cmake/templates/bash-completion.sh.in index 601e6f7..1ae6527 100755 --- a/cmake/templates/bash-completion.sh.in +++ b/cmake/templates/bash-completion.sh.in @@ -1,6 +1,6 @@ -_@META_PROJECT_NAME@() +_@TARGET_PREFIX@@META_PROJECT_NAME@@TARGET_SUFFIX@() { eval "$(@TARGET_EXECUTABLE@ --bash-completion-for "$((COMP_CWORD - 1))" "${COMP_WORDS[@]:1}")" return 0; } -complete -F _@META_PROJECT_NAME@ @COMPLETION_META_PROJECT_NAME@ +complete -F _@TARGET_PREFIX@@META_PROJECT_NAME@@TARGET_SUFFIX@ @TARGET_PREFIX@@META_PROJECT_NAME@@TARGET_SUFFIX@