aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFriedrich W. H. Kossebau <kossebau@kde.org>2018-06-25 18:26:20 +0200
committerFriedrich W. H. Kossebau <kossebau@kde.org>2018-06-26 18:50:10 +0200
commit5207cdeb23599145ffdecf57b17b514a7e368e62 (patch)
tree52ce9e7596b4ce1d835b49a3222bb28a9c21e8e3
parent06fa81af7f2e4fc12871426a7a493116883378b4 (diff)
downloadextra-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.cmake19
-rw-r--r--tests/ECMGenerateHeadersTest/headtest1.hpp0
-rw-r--r--tests/ECMGenerateHeadersTest/headtest2.hpp0
-rw-r--r--tests/ECMGenerateHeadersTest/run_test.cmake.config20
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