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+ include_guard ()
30+
2931option (GT_ENABLE_BINDINGS_GENERATION "If turned off, bindings will not be generated." ON )
3032
3133# variables are unset after use for scoping, they need to be redefined in the macros
3234set (__C_BINDINGS_SOURCE_DIR @__C_BINDINGS_SOURCE_DIR @)
3335set (__C_BINDINGS_INCLUDE_DIR @__C_BINDINGS_INCLUDE_DIR@)
3436
37+ add_library (cpp_bindgen_interface INTERFACE )
38+ target_include_directories (cpp_bindgen_interface INTERFACE ${__C_BINDINGS_INCLUDE_DIR} )
39+ target_compile_features (cpp_bindgen_interface INTERFACE cxx_std_11 )
40+ if (CPP_BINDGEN_GT_LEGACY)
41+ target_compile_definitions (cpp_bindgen_interface INTERFACE CPP_BINDGEN_GT_LEGACY )
42+ endif ()
43+
3544add_library (cpp_bindgen_generator ${__C_BINDINGS_SOURCE_DIR} /cpp_bindgen/generator.cpp )
3645# PUBLIC to make export.hpp available in the sources passed to add_bindings_library()
37- target_include_directories (cpp_bindgen_generator PUBLIC ${__C_BINDINGS_INCLUDE_DIR} )
38- target_compile_features (cpp_bindgen_generator PUBLIC cxx_std_11 )
3946target_link_libraries (cpp_bindgen_generator PUBLIC Boost::boost )
47+ target_link_libraries (cpp_bindgen_generator PUBLIC cpp_bindgen_interface )
4048
4149add_library (c_bindings_handle ${__C_BINDINGS_SOURCE_DIR} /cpp_bindgen/handle.cpp )
42- target_include_directories (c_bindings_handle PRIVATE ${__C_BINDINGS_INCLUDE_DIR} )
43- target_compile_features (c_bindings_handle PRIVATE cxx_std_11 )
44- target_link_libraries (cpp_bindgen_generator PRIVATE Boost::boost ) #TODO make an interface target for options
50+ target_link_libraries (c_bindings_handle PUBLIC cpp_bindgen_interface )
4551
4652unset (__C_BINDINGS_SOURCE_DIR )
4753unset (__C_BINDINGS_INCLUDE_DIR)
@@ -55,19 +61,21 @@ unset(__C_BINDINGS_INCLUDE_DIR)
5561# be created by a call to cpp_bindgen_enable_fortran_library().
5662function (cpp_bindgen_enable_fortran_library target_name )
5763 set (__C_BINDINGS_SOURCE_DIR @__C_BINDINGS_SOURCE_DIR @)
64+ set (__C_BINDINGS_CMAKE_DIR @__C_BINDINGS_CMAKE_DIR@)
5865
5966 if (CMAKE_Fortran_COMPILER_LOADED)
6067 if (NOT TARGET fortran_bindings_handle)
6168 add_library (fortran_bindings_handle ${__C_BINDINGS_SOURCE_DIR} /cpp_bindgen/array_descriptor.f90 ${__C_BINDINGS_SOURCE_DIR} /cpp_bindgen/handle.f90 )
6269 target_link_libraries (fortran_bindings_handle PUBLIC c_bindings_handle )
6370 target_include_directories (fortran_bindings_handle PUBLIC ${CMAKE_CURRENT_BINARY_DIR} )
71+ include (${__C_BINDINGS_CMAKE_DIR} /fortran_helpers.cmake )
72+ gen_enable_fortran_preprocessing_on_target (fortran_bindings_handle )
6473 endif ()
6574 if (NOT TARGET ${target_name} _fortran)
6675 set_source_files_properties (GT_${${target_name}_fortran_bindings_path} PROPERTIES GENERATED TRUE )
6776 add_library (${target_name} _fortran EXCLUDE_FROM_ALL ${GT_${target_name}_fortran_bindings_path} )
6877 target_link_libraries (${target_name} _fortran PUBLIC ${target_name} )
6978 target_link_libraries (${target_name} _fortran PUBLIC fortran_bindings_handle )
70- target_include_directories (${target_name} _fortran PUBLIC ${CMAKE_CURRENT_BINARY_DIR} )
7179 add_dependencies (${target_name} _fortran ${target_name} _declarations )
7280 endif ()
7381 elseif (NOT ${ARGN} ) # internal: the second (optional) parameter can be used to surpress this fatal error
@@ -136,14 +144,16 @@ function(cpp_bindgen_add_library target_name)
136144 message (FATAL_ERROR "Cross-compilation for bindings is enabled: no bindings will be generated, but "
137145 "${bindings_c_decl_filename} and/or "
138146 "${bindings_fortran_decl_filename} "
139- "are missing. Generate the bindings and consider making them part of your repository." )
147+ "are missing. Generate the bindings and consider making them part of your repository." )
140148 endif ()
141149 endif ()
142150
143151 # bindings c library
144152 add_library (${target_name} _c INTERFACE )
145153 target_link_libraries (${target_name} _c INTERFACE ${target_name} )
146154 target_link_libraries (${target_name} _c INTERFACE c_bindings_handle )
155+ target_link_libraries (${target_name} _c INTERFACE cpp_bindgen_interface )
156+
147157 add_dependencies (${target_name} _c ${target_name} _declarations )
148158
149159 # bindings Fortran library
0 commit comments