Skip to content

Commit a403534

Browse files
jcfrhenryiii
andcommitted
refactor: Define cython argument and file extension in helper functions
Reorganize logic to define the Cython argument and generated file extension within the helper functions `_set_output` and `_compile_pyx`. This improves readability by ensuring these definitions are set where they are used. Co-authored-by: Henry Schreiner <[email protected]>
1 parent 68358b3 commit a403534

File tree

1 file changed

+38
-27
lines changed

1 file changed

+38
-27
lines changed

src/cython_cmake/cmake/UseCython.cmake

Lines changed: 38 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)