Spaces:
Sleeping
Sleeping
File size: 2,474 Bytes
739258a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# Provide factory names as list of arguments to use for later
macro( PangolinRegisterFactory interface_name)
list(APPEND PANGO_FACTORY_INTERFACES "${interface_name}")
list(REMOVE_DUPLICATES PANGO_FACTORY_INTERFACES)
foreach(arg ${ARGN})
list(APPEND PANGO_FACTORY_${interface_name} "${arg}")
endforeach()
endmacro()
# Actually Create the method call file
macro(create_factory_registry_file_now filename namespace interface_name)
list(APPEND factory_names ${ARGN})
file(WRITE ${filename} "// CMake generated file. Do Not Edit.\n\n#pragma once\n\nnamespace ${namespace} {\n\n")
file(APPEND ${filename} " // Forward declarations\n")
foreach(factory_name ${factory_names})
# file(APPEND ${filename} " bool Load${factory_name}Success;\n")
file(APPEND ${filename} " bool Register${factory_name}Factory();\n")
endforeach()
file(APPEND ${filename} "\n\n")
file(APPEND ${filename} " inline bool RegisterFactories${interface_name}() {\n")
file(APPEND ${filename} " bool success = true;\n")
foreach(factory_name ${factory_names})
# file(APPEND ${filename} " success &= Load${factory_name}Success;\n")
file(APPEND ${filename} " success &= Register${factory_name}Factory();\n")
endforeach()
file(APPEND ${filename} " return success;\n")
file(APPEND ${filename} " }\n")
file(APPEND ${filename} "\n\n} // ${namespace}\n")
endmacro()
# Sets up target for creating the file.
macro(create_factory_registry_file directory interface_name)
set(filename "${directory}/RegisterFactories${interface_name}.h")
add_custom_command(
OUTPUT ${filename}
DEPENDS ${PROJECT_SOURCE_DIR}/cmake/PangolinFactory.cmake
COMMAND
${CMAKE_COMMAND} -DFILENAME=${filename}
-DNAMESPACE=pangolin
-DINTERFACE_NAME=${interface_name}
"\"-DFACTORY_NAMES=${PANGO_FACTORY_${interface_name}}\""
-P ${PROJECT_SOURCE_DIR}/cmake/PangolinFactory.cmake
COMMENT "Creating ${filename} factory registry header"
)
endmacro()
if(CMAKE_SCRIPT_MODE_FILE AND NOT CMAKE_PARENT_LIST_FILE)
# Running in script mode as part of build-time procedure to actually to the thing
create_factory_registry_file_now(${FILENAME} ${NAMESPACE} ${INTERFACE_NAME} ${FACTORY_NAMES} )
endif()
|