2626# - <library_name>_c the C-bindings with <library_name> linked to it
2727# - <library_name>_fortran the Fortran-bindings with <library_name> linked to it
2828
29-
3029option (GT_ENABLE_BINDINGS_GENERATION "If turned off, bindings will not be generated." ON )
3130
32- set ( BINDINGS_SOURCE_DIR @ BINDINGS_SOURCE_DIR @)
33- set (BINDINGS_CMAKE_DIR @BINDINGS_CMAKE_DIR @)
34- set (BINDINGS_INCLUDE_DIR @BINDINGS_INCLUDE_DIR @)
31+ # variables are unset after use for scoping, they need to be redefined in the macros
32+ set (__C_BINDINGS_SOURCE_DIR @ __C_BINDINGS_SOURCE_DIR @)
33+ set (__C_BINDINGS_INCLUDE_DIR @__C_BINDINGS_INCLUDE_DIR @)
3534
36- add_library (c_bindings_generator ${BINDINGS_SOURCE_DIR } /c_bindings/generator.cpp )
35+ add_library (c_bindings_generator ${__C_BINDINGS_SOURCE_DIR } /c_bindings/generator.cpp )
3736# PUBLIC to make export.hpp available in the sources passed to add_bindings_library()
38- target_include_directories (c_bindings_generator PUBLIC ${BINDINGS_INCLUDE_DIR } )
37+ target_include_directories (c_bindings_generator PUBLIC ${__C_BINDINGS_INCLUDE_DIR } )
3938target_compile_features (c_bindings_generator PUBLIC cxx_std_11 )
4039target_link_libraries (c_bindings_generator PUBLIC Boost::boost )
4140
42- add_library (c_bindings_handle ${BINDINGS_SOURCE_DIR } /c_bindings/handle.cpp )
43- target_include_directories (c_bindings_handle PRIVATE ${BINDINGS_INCLUDE_DIR } )
41+ add_library (c_bindings_handle ${__C_BINDINGS_SOURCE_DIR } /c_bindings/handle.cpp )
42+ target_include_directories (c_bindings_handle PRIVATE ${__C_BINDINGS_INCLUDE_DIR } )
4443target_compile_features (c_bindings_handle PRIVATE cxx_std_11 )
4544target_link_libraries (c_bindings_generator PRIVATE Boost::boost ) #TODO make an interface target for options
4645
46+ unset (__C_BINDINGS_SOURCE_DIR )
47+ unset (__C_BINDINGS_INCLUDE_DIR)
48+
4749# gt_enable_bindings_library_fortran()
4850#
4951# Create a target to compile the generated Fortran module.
5052# In the default case, when Fortran is enabled on the call to gt_add_bindings_library(), this target is automatically created.
5153# In case when the Fortran language was not enabled, we cannot create a library (add_library()) with Fortran files.
5254# However if the user wants to use the target at a later stage, e.g. in testing (with Fortran enabled), the target can
5355# be created by a call to gt_enable_bindings_library_fortran().
54- macro (gt_enable_bindings_library_fortran target_name )
56+ function (gt_enable_bindings_library_fortran target_name )
57+ set (__C_BINDINGS_SOURCE_DIR @__C_BINDINGS_SOURCE_DIR @)
58+
5559 if (CMAKE_Fortran_COMPILER_LOADED)
5660 if (NOT TARGET fortran_bindings_handle)
57- add_library (fortran_bindings_handle ${BINDINGS_SOURCE_DIR } /c_bindings/array_descriptor.f90 ${BINDINGS_SOURCE_DIR } /c_bindings/handle.f90 )
61+ add_library (fortran_bindings_handle ${__C_BINDINGS_SOURCE_DIR } /c_bindings/array_descriptor.f90 ${__C_BINDINGS_SOURCE_DIR } /c_bindings/handle.f90 )
5862 target_link_libraries (fortran_bindings_handle PUBLIC c_bindings_handle )
5963 target_include_directories (fortran_bindings_handle PUBLIC ${CMAKE_CURRENT_BINARY_DIR} )
6064 endif ()
@@ -69,14 +73,17 @@ macro(gt_enable_bindings_library_fortran target_name)
6973 elseif (NOT ${ARGN} ) # internal: the second (optional) parameter can be used to surpress this fatal error
7074 message (FATAL_ERROR "Please enable_language(Fortran) to compile the Fortran bindings." )
7175 endif ()
72- endmacro ()
76+ endfunction ()
7377
74- macro (gt_add_bindings_library target_name )
78+ function (gt_add_bindings_library target_name )
7579 set (options)
7680 set (one_value_args FORTRAN_OUTPUT_DIR C_OUTPUT_DIR FORTRAN_MODULE_NAME)
7781 set (multi_value_args SOURCES)
7882 cmake_parse_arguments (ARG "${options} " "${one_value_args} ;" "${multi_value_args} " ${ARGN} )
7983
84+ set (__C_BINDINGS_SOURCE_DIR @__C_BINDINGS_SOURCE_DIR @)
85+ set (__C_BINDINGS_CMAKE_DIR @__C_BINDINGS_CMAKE_DIR@)
86+
8087 if (NOT DEFINED ARG_FORTRAN_MODULE_NAME)
8188 set (ARG_FORTRAN_MODULE_NAME ${target_name} ) # default value
8289 endif ()
@@ -99,7 +106,7 @@ macro(gt_add_bindings_library target_name)
99106 if (GT_ENABLE_BINDINGS_GENERATION)
100107 # generator
101108 add_executable (${target_name} _decl_generator
102- ${BINDINGS_SOURCE_DIR } /c_bindings/generator_main.cpp )
109+ ${__C_BINDINGS_SOURCE_DIR } /c_bindings/generator_main.cpp )
103110 set_target_properties (${target_name} _decl_generator PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR} /CMakeFiles/decl_generator" )
104111 target_link_libraries (${target_name} _decl_generator c_bindings_generator )
105112
@@ -119,7 +126,7 @@ macro(gt_add_bindings_library target_name)
119126 -DBINDINGS_C_DECL_FILENAME=${bindings_c_decl_filename}
120127 -DBINDINGS_FORTRAN_DECL_FILENAME=${bindings_fortran_decl_filename}
121128 -DFORTRAN_MODULE_NAME=${ARG_FORTRAN_MODULE_NAME}
122- -P ${BINDINGS_CMAKE_DIR } /gt_bindings_generate.cmake
129+ -P ${__C_BINDINGS_CMAKE_DIR } /gt_bindings_generate.cmake
123130 BYPRODUCTS ${bindings_c_decl_filename} ${bindings_fortran_decl_filename}
124131 DEPENDS $<TARGET_FILE :${target_name} _decl_generator >)
125132 else ()
@@ -145,4 +152,4 @@ macro(gt_add_bindings_library target_name)
145152 set (GT_${target_name} _fortran_bindings_path ${bindings_fortran_decl_filename}
146153 CACHE INTERNAL "Path to the generated Fortran file for ${target_name} " )
147154 gt_enable_bindings_library_fortran (${target_name} TRUE )
148- endmacro ()
155+ endfunction ()
0 commit comments