aboutsummaryrefslogtreecommitdiff
path: root/modules/ECMGenerateHeaders.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'modules/ECMGenerateHeaders.cmake')
-rw-r--r--modules/ECMGenerateHeaders.cmake28
1 files changed, 19 insertions, 9 deletions
diff --git a/modules/ECMGenerateHeaders.cmake b/modules/ECMGenerateHeaders.cmake
index 7fac1649..f72b1c0b 100644
--- a/modules/ECMGenerateHeaders.cmake
+++ b/modules/ECMGenerateHeaders.cmake
@@ -13,11 +13,14 @@
# ECM_GENERATE_HEADERS( ClassA ClassB ...
# [MODULE_NAME name]
# [OUTPUT_DIR path]
+# [PREFIX prefix]
# [REQUIRED_HEADERS variable])
#
# The MODULE_NAME argument is used to provide information about where the
-# directories will be generated. By default, PROJECT_NAME will be used in both
-# CamelCase and lowercase version.
+# directories will be generated. By default, PROJECT_NAME will be used.
+#
+# The optional PREFIX will be prepended to the filenames, e.g. PREFIX KParts
+# will generate KParts/Part and kparts/part.h
#
# The OUTPUT_DIR argument specifies where the files will be generated; this
# should be within the build directory. By default, CMAKE_CURRENT_BINARY_DIR
@@ -40,7 +43,7 @@
include(CMakeParseArguments)
function(ECM_GENERATE_HEADERS)
- set(oneValueArgs MODULE_NAME OUTPUT_DIR REQUIRED_HEADERS RELATIVE)
+ set(oneValueArgs MODULE_NAME OUTPUT_DIR PREFIX REQUIRED_HEADERS RELATIVE)
cmake_parse_arguments(EGH "" "${oneValueArgs}" "" ${ARGN})
if(NOT EGH_MODULE_NAME)
set(EGH_MODULE_NAME ${PROJECT_NAME})
@@ -50,22 +53,29 @@ function(ECM_GENERATE_HEADERS)
set(EGH_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
endif()
+ if (EGH_PREFIX)
+ string(TOLOWER "${EGH_PREFIX}/" lowercaseprefix)
+ endif()
string(TOLOWER ${EGH_MODULE_NAME} lowercasemodule)
foreach(_CLASSNAME ${EGH_UNPARSED_ARGUMENTS})
string(TOLOWER ${_CLASSNAME} lowercaseclassname)
- set(REGULAR_HEADER_NAME ${EGH_OUTPUT_DIR}/${lowercasemodule}/${lowercaseclassname}.h)
- set(FANCY_HEADER_NAME ${EGH_OUTPUT_DIR}/${EGH_MODULE_NAME}/${_CLASSNAME})
+ set(FANCY_HEADER_NAME ${EGH_OUTPUT_DIR}/${EGH_MODULE_NAME}/${EGH_PREFIX}/${_CLASSNAME})
set(_actualheader "${CMAKE_CURRENT_SOURCE_DIR}/${EGH_RELATIVE}/${lowercaseclassname}.h")
if (NOT EXISTS ${_actualheader})
message(FATAL_ERROR "Could not find \"${_actualheader}\"")
endif()
- if (NOT EXISTS ${REGULAR_HEADER_NAME})
- file(WRITE ${REGULAR_HEADER_NAME} "#include \"${_actualheader}\"\n")
- endif()
if (NOT EXISTS ${FANCY_HEADER_NAME})
- file(WRITE ${FANCY_HEADER_NAME} "#include \"${lowercasemodule}/${lowercaseclassname}.h\"\n")
+ file(WRITE ${FANCY_HEADER_NAME} "#include \"${lowercaseprefix}${lowercaseclassname}.h\"\n")
endif()
list(APPEND REQUIRED_HEADERS "${_actualheader}")
+ if (EGH_PREFIX)
+ #local forwarding header, for namespaced headers, e.g. kparts/part.h
+ #this should not get installed, so we don't put it under EGH_MODULE_NAME
+ set(REGULAR_HEADER_NAME ${EGH_OUTPUT_DIR}/${lowercaseprefix}${lowercaseclassname}.h)
+ if (NOT EXISTS ${REGULAR_HEADER_NAME})
+ file(WRITE ${REGULAR_HEADER_NAME} "#include \"${_actualheader}\"\n")
+ endif()
+ endif()
endforeach()
if (NOT EGH_REQUIRED_HEADERS STREQUAL "")
set(${EGH_REQUIRED_HEADERS} ${${EGH_REQUIRED_HEADERS}} ${REQUIRED_HEADERS} PARENT_SCOPE)