@@ -109,31 +109,15 @@ function(Cython_compile_pyx)
109109 message (FATAL_ERROR "One and only one input file must be specified, got '${_source_files} '" )
110110 endif ()
111111
112- # Set target language
113- get_property (_languages GLOBAL PROPERTY ENABLED_LANGUAGES )
114- set (_language ${_args_LANGUAGE} )
115- if ( NOT _language )
116- if ( "C" IN_LIST _languages )
117- set (_language "C " )
118- elseif ( "CXX" IN_LIST _languages )
119- set (_language " CXX" )
112+ function (_compile_pyx _source_file generated_file language )
113+
114+ if ( language STREQUAL "C" )
115+ set (_language_arg "" )
116+ elseif ( language STREQUAL "CXX" )
117+ set (_language_arg "--cplus " )
118+ else ( )
119+ message (FATAL_ERROR "_compile_pyx language must be one of C or CXX" )
120120 endif ()
121- else ()
122- if (NOT _language MATCHES "^(C|CXX)$" )
123- message (FATAL_ERROR "LANGUAGE must be one of C or CXX" )
124- endif ()
125- endif ()
126-
127- set (_language_C_arg "" )
128- set (_language_C_extension "c" )
129- set (_language_CXX_arg "--cplus" )
130- set (_language_CXX_extension "cxx" )
131-
132- set (_language_arg ${_language_${_language} _arg})
133- set (_language_extension ${_language_${_language} _extension})
134-
135- function (_compile_pyx _source_file generated_file)
136-
137121
138122 set_source_files_properties (${generated_file} PROPERTIES GENERATED TRUE )
139123
@@ -168,7 +152,15 @@ function(Cython_compile_pyx)
168152 )
169153 endfunction ()
170154
171- function (_set_output _input_file _output_var)
155+ function (_set_output _input_file _language _output_var)
156+ if (_language STREQUAL "C" )
157+ set (_language_extension "c" )
158+ elseif (_language STREQUAL "CXX" )
159+ set (_language_extension "cxx" )
160+ else ()
161+ message (FATAL_ERROR "_set_output language must be one of C or CXX" )
162+ endif ()
163+
172164 # Can use cmake_path for CMake 3.20+
173165 # cmake_path(GET _input_file STEM basename)
174166 get_filename_component (_basename "${_input_file} " NAME_WE )
@@ -180,15 +172,34 @@ function(Cython_compile_pyx)
180172
181173 list (GET _source_files 0 _source_file)
182174
175+ # Set target language
176+ set (_language ${_args_LANGUAGE} )
177+ if (NOT _language)
178+ get_property (_languages GLOBAL PROPERTY ENABLED_LANGUAGES )
179+ if ("C" IN_LIST _languages)
180+ # If only C is enabled globally, assume C
181+ set (_language "C" )
182+ elseif ("CXX" IN_LIST _languages)
183+ # Likewise for CXX
184+ set (_language "CXX" )
185+ else ()
186+ message (FATAL_ERROR "LANGUAGE keyword required if neither C nor CXX enabled globally" )
187+ endif ()
188+ else ()
189+ if (NOT _language MATCHES "^(C|CXX)$" )
190+ message (FATAL_ERROR "cython_compile_pyx LANGUAGE must be one of C or CXX" )
191+ endif ()
192+ endif ()
193+
183194 # Place the cython files in the current binary dir if no path given
184195 if (NOT _args_OUTPUT)
185- _set_output(${_source_file} _args_OUTPUT)
196+ _set_output(${_source_file} ${_language} _args_OUTPUT)
186197 elseif (NOT IS_ABSOLUTE ${_args_OUTPUT} )
187198 set (_args_OUTPUT "${CMAKE_CURRENT_BINARY_DIR} /${_args_OUTPUT} " )
188199 endif ()
189200
190201 set (generated_file ${_args_OUTPUT} )
191- _compile_pyx(${_source_file} ${generated_file} )
202+ _compile_pyx(${_source_file} ${generated_file} ${_language} )
192203 list (APPEND generated_files ${generated_file} )
193204
194205 # Output variable only if set
0 commit comments