diff --git a/modules/ECMGenerateHeaders.cmake b/modules/ECMGenerateHeaders.cmake --- a/modules/ECMGenerateHeaders.cmake +++ b/modules/ECMGenerateHeaders.cmake @@ -9,14 +9,16 @@ # ecm_generate_headers( # HEADER_NAMES [ [...]] # [ORIGINAL ] +# [HEADER_EXTENSION ] # [OUTPUT_DIR ] # [PREFIX ] # [REQUIRED_HEADERS ] # [COMMON_HEADER ] # [RELATIVE ]) # # 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, +# ``.`` 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 @@ 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 @@ 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,15 +197,15 @@ 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() 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 @@ 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 diff --git a/tests/ECMGenerateHeadersTest/headtest2.hpp b/tests/ECMGenerateHeadersTest/headtest2.hpp new file mode 100644 diff --git a/tests/ECMGenerateHeadersTest/run_test.cmake.config b/tests/ECMGenerateHeadersTest/run_test.cmake.config --- a/tests/ECMGenerateHeadersTest/run_test.cmake.config +++ b/tests/ECMGenerateHeadersTest/run_test.cmake.config @@ -354,4 +354,24 @@ 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