diff options
author | Friedrich W. H. Kossebau <kossebau@kde.org> | 2018-06-25 18:26:20 +0200 |
---|---|---|
committer | Friedrich W. H. Kossebau <kossebau@kde.org> | 2018-06-26 18:50:10 +0200 |
commit | 5207cdeb23599145ffdecf57b17b514a7e368e62 (patch) | |
tree | 52ce9e7596b4ce1d835b49a3222bb28a9c21e8e3 | |
parent | 06fa81af7f2e4fc12871426a7a493116883378b4 (diff) | |
download | extra-cmake-modules-5207cdeb23599145ffdecf57b17b514a7e368e62.tar.gz extra-cmake-modules-5207cdeb23599145ffdecf57b17b514a7e368e62.tar.bz2 |
[ECMGenerateHeaders] Add option for other header file extension than .h
Summary:
Quite some C++-based projects do not use .h as header file extension, but
.hpp, .hxx or other variants. Making the header file extension configurable
enables to make use of ECMGenerateHeaders in such projects.
Test Plan:
The added unit test works, existing unit tests work as before.
Also using in project with .hpp files works.
Reviewers: apol
Reviewed By: apol
Subscribers: apol, kde-frameworks-devel, kde-buildsystem
Tags: #frameworks, #build_system
Differential Revision: https://phabricator.kde.org/D13721
-rw-r--r-- | modules/ECMGenerateHeaders.cmake | 19 | ||||
-rw-r--r-- | tests/ECMGenerateHeadersTest/headtest1.hpp | 0 | ||||
-rw-r--r-- | tests/ECMGenerateHeadersTest/headtest2.hpp | 0 | ||||
-rw-r--r-- | tests/ECMGenerateHeadersTest/run_test.cmake.config | 20 |
4 files changed, 34 insertions, 5 deletions
diff --git a/modules/ECMGenerateHeaders.cmake b/modules/ECMGenerateHeaders.cmake index 255662d1..13edd92d 100644 --- a/modules/ECMGenerateHeaders.cmake +++ b/modules/ECMGenerateHeaders.cmake @@ -9,6 +9,7 @@ # ecm_generate_headers(<camelcase_forwarding_headers_var> # HEADER_NAMES <CamelCaseName> [<CamelCaseName> [...]] # [ORIGINAL <CAMELCASE|LOWERCASE>] +# [HEADER_EXTENSION <header_extension>] # [OUTPUT_DIR <output_dir>] # [PREFIX <prefix>] # [REQUIRED_HEADERS <variable>] @@ -16,7 +17,8 @@ # [RELATIVE <relative_path>]) # # For each CamelCase header name passed to HEADER_NAMES, a file of that name -# will be generated that will include a version with ``.h`` appended. +# will be generated that will include a version with ``.h`` or, if set, +# ``.<header_extension>`` appended. # For example, the generated header ``ClassA`` will include ``classa.h`` (or # ``ClassA.h``, see ORIGINAL). # If a CamelCaseName consists of multiple comma-separated files, e.g. @@ -28,6 +30,9 @@ # ORIGINAL specifies how the name of the original header is written: lowercased # or also camelcased. The default is LOWERCASE. Since 1.8.0. # +# HEADER_EXTENSION specifies what file name extension is used for the header +# files. The default is "h". Since 5.48.0. +# # PREFIX places the generated headers in subdirectories. This should be a # CamelCase name like ``KParts``, which will cause the CamelCase forwarding # headers to be placed in the ``KParts`` directory (e.g. ``KParts/Part``). It @@ -138,7 +143,7 @@ include(CMakeParseArguments) function(ECM_GENERATE_HEADERS camelcase_forwarding_headers_var) set(options) - set(oneValueArgs ORIGINAL OUTPUT_DIR PREFIX REQUIRED_HEADERS COMMON_HEADER RELATIVE) + set(oneValueArgs ORIGINAL HEADER_EXTENSION OUTPUT_DIR PREFIX REQUIRED_HEADERS COMMON_HEADER RELATIVE) set(multiValueArgs HEADER_NAMES) cmake_parse_arguments(EGH "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) @@ -158,6 +163,10 @@ function(ECM_GENERATE_HEADERS camelcase_forwarding_headers_var) message(FATAL_ERROR "Unexpected value for original argument to ECM_GENERATE_HEADERS: ${EGH_ORIGINAL}") endif() + if(NOT EGH_HEADER_EXTENSION) + set(EGH_HEADER_EXTENSION "h") + endif() + if(NOT EGH_OUTPUT_DIR) set(EGH_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}") endif() @@ -188,7 +197,7 @@ function(ECM_GENERATE_HEADERS camelcase_forwarding_headers_var) string(TOLOWER "${_baseclass}" originalbasename) endif() - set(_actualheader "${CMAKE_CURRENT_SOURCE_DIR}/${EGH_RELATIVE}${originalbasename}.h") + set(_actualheader "${CMAKE_CURRENT_SOURCE_DIR}/${EGH_RELATIVE}${originalbasename}.${EGH_HEADER_EXTENSION}") if (NOT EXISTS ${_actualheader}) message(FATAL_ERROR "Could not find \"${_actualheader}\"") endif() @@ -196,7 +205,7 @@ function(ECM_GENERATE_HEADERS camelcase_forwarding_headers_var) foreach(_CLASSNAME ${_classnames}) set(FANCY_HEADER_FILE "${EGH_OUTPUT_DIR}/${EGH_PREFIX}${_CLASSNAME}") if (NOT EXISTS ${FANCY_HEADER_FILE}) - file(WRITE ${FANCY_HEADER_FILE} "#include \"${originalprefix}${originalbasename}.h\"\n") + file(WRITE ${FANCY_HEADER_FILE} "#include \"${originalprefix}${originalbasename}.${EGH_HEADER_EXTENSION}\"\n") endif() list(APPEND ${camelcase_forwarding_headers_var} "${FANCY_HEADER_FILE}") if (EGH_PREFIX) @@ -206,7 +215,7 @@ function(ECM_GENERATE_HEADERS camelcase_forwarding_headers_var) else() string(TOLOWER "${_CLASSNAME}" originalclassname) endif() - set(REGULAR_HEADER_NAME ${EGH_OUTPUT_DIR}/${originalprefix}${originalclassname}.h) + set(REGULAR_HEADER_NAME ${EGH_OUTPUT_DIR}/${originalprefix}${originalclassname}.${EGH_HEADER_EXTENSION}) if (NOT EXISTS ${REGULAR_HEADER_NAME}) file(WRITE ${REGULAR_HEADER_NAME} "#include \"${_actualheader}\"\n") endif() diff --git a/tests/ECMGenerateHeadersTest/headtest1.hpp b/tests/ECMGenerateHeadersTest/headtest1.hpp new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/tests/ECMGenerateHeadersTest/headtest1.hpp diff --git a/tests/ECMGenerateHeadersTest/headtest2.hpp b/tests/ECMGenerateHeadersTest/headtest2.hpp new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/tests/ECMGenerateHeadersTest/headtest2.hpp diff --git a/tests/ECMGenerateHeadersTest/run_test.cmake.config b/tests/ECMGenerateHeadersTest/run_test.cmake.config index a9027dbc..29bfeba8 100644 --- a/tests/ECMGenerateHeadersTest/run_test.cmake.config +++ b/tests/ECMGenerateHeadersTest/run_test.cmake.config @@ -354,4 +354,24 @@ if (NOT "${file_contents}" STREQUAL "${exp_contents}") endif() +########################################################### + +message(STATUS "Test 14: HEADER_EXTENSION") +set(camelcase_headers) +set(expfiles "${CMAKE_CURRENT_BINARY_DIR}/HeadTest1" + "${CMAKE_CURRENT_BINARY_DIR}/HeadTest2") +set(origfiles headtest1.hpp headtest2.hpp) +file(REMOVE ${expfiles}) +ecm_generate_headers( + camelcase_headers + HEADER_NAMES HeadTest1 HeadTest2 + HEADER_EXTENSION hpp +) +if (NOT "${expfiles}" STREQUAL "${camelcase_headers}") + message(FATAL_ERROR "camelcase_headers was set to \"${camelcase_headers}\" instead of \"${expfiles}\"") +endif() +check_files(GENERATED ${expfiles} + ORIGINALS ${origfiles}) + + # vim:ft=cmake |