Skip to content

Commit e01177e

Browse files
jcfrvyasr
andcommitted
wip(UseCython): Deprecate C and CXX option and introduce TARGET_LANGUAGE
Co-authored-by: Vyas Ramasubramani <[email protected]>
1 parent bb49959 commit e01177e

File tree

1 file changed

+42
-32
lines changed

1 file changed

+42
-32
lines changed

src/cython_cmake/cmake/UseCython.cmake

Lines changed: 42 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,12 @@
3030
#
3131
# Options:
3232
#
33-
# ``C | CXX``
33+
# ``TARGET_LANGUAGE [C | CXX]``
34+
# Force the generation of either a C or C++ file. By default, a C file is
35+
# generated, unless the C language is not enabled for the project; in this
36+
# case, a C++ file is generated by default.
37+
#
38+
# ``C | CXX`` (deprecated)
3439
# Force the generation of either a C or C++ file. By default, a C file is
3540
# generated, unless the C language is not enabled for the project; in this
3641
# case, a C++ file is generated by default.
@@ -97,23 +102,29 @@ set(CYTHON_FLAGS "" CACHE STRING
97102
"Extra flags to the cython compiler.")
98103
mark_as_advanced(CYTHON_ANNOTATE CYTHON_FLAGS)
99104

100-
set(CYTHON_CXX_EXTENSION "cxx")
101-
set(CYTHON_C_EXTENSION "c")
102-
103-
get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES)
104-
105105
function(add_cython_target _name)
106-
set(_options C CXX PY2 PY3)
107-
set(_one_value OUTPUT_VAR)
106+
seT(_deprecated_options C CXX)
107+
set(_options PY2 PY3)
108+
set(_one_value TARGET_LANGUAGE OUTPUT_VAR)
108109
set(_multi_value )
109110

110111
cmake_parse_arguments(_args
111-
"${_options}"
112+
"${_options} ${_deprecated_options}"
112113
"${_one_value}"
113114
"${_multi_value}"
114115
${ARGN}
115116
)
116117

118+
# Support deprecated options: C, CXX
119+
if(NOT _args_TARGET_LANGUAGE)
120+
if(_args_C)
121+
set(_args_TARGET_LANGUAGE "C")
122+
endif()
123+
if(_args_CXX)
124+
set(_args_TARGET_LANGUAGE "CXX")
125+
endif()
126+
endif()
127+
117128
list(GET _args_UNPARSED_ARGUMENTS 0 _arg0)
118129

119130
# if provided, use _arg0 as the input file path
@@ -135,22 +146,28 @@ function(add_cython_target _name)
135146
endif()
136147
endif()
137148

138-
139-
if("C" IN_LIST languages)
140-
set(target_language "C")
141-
elseif("CXX" IN_LIST languages)
142-
set(target_language "CXX")
149+
# Set target language
150+
get_property(_languages GLOBAL PROPERTY ENABLED_LANGUAGES)
151+
set(_target_language ${_args_TARGET_LANGUAGE})
152+
if(NOT _target_language)
153+
if("C" IN_LIST _languages)
154+
set(_target_language "C")
155+
elseif("CXX" IN_LIST _languages)
156+
set(_target_language "CXX")
157+
endif()
143158
else()
144-
message(FATAL_ERROR "Either C or CXX must be enabled to use Cython")
159+
if(NOT _target_language MATCHES "^(C|CXX)$")
160+
message(FATAL_ERROR "TARGET_LANGUAGE must be one of C or CXX")
161+
endif()
145162
endif()
146163

147-
if(_args_C)
148-
set(target_language "C")
149-
endif()
164+
set(_target_language_C_arg "")
165+
set(_target_language_C_extension "c")
166+
set(_target_language_CXX_arg "--cplus")
167+
set(_target_language_CXX_extension "cxx")
150168

151-
if(_args_CXX)
152-
set(target_language "CXX")
153-
endif()
169+
set(_target_language_arg ${_target_language_${_target_language}_arg})
170+
set(_target_language_extension ${_target_language_${_target_language}_extension})
154171

155172
# Doesn't select an input syntax - Cython
156173
# defaults to 2 for Cython 2 and 3 for Cython 3
@@ -164,21 +181,14 @@ function(add_cython_target _name)
164181
set(_input_syntax "PY3")
165182
endif()
166183

167-
set(cxx_arg "")
168-
set(extension "c")
169-
if(target_language STREQUAL "CXX")
170-
set(cxx_arg "--cplus")
171-
set(extension "cxx")
172-
endif()
173-
174184
set(language_level_arg "")
175185
if(_input_syntax STREQUAL "PY2")
176186
set(language_level_arg "-2")
177187
elseif(_input_syntax STREQUAL "PY3")
178188
set(language_level_arg "-3")
179189
endif()
180190

181-
set(generated_file "${CMAKE_CURRENT_BINARY_DIR}/${_name}.${extension}")
191+
set(generated_file "${CMAKE_CURRENT_BINARY_DIR}/${_name}.${_target_language_extension}")
182192
set_source_files_properties(${generated_file} PROPERTIES GENERATED TRUE)
183193

184194
set(_output_var ${_name})
@@ -190,7 +200,7 @@ function(add_cython_target _name)
190200
file(RELATIVE_PATH generated_file_relative
191201
${CMAKE_BINARY_DIR} ${generated_file})
192202

193-
set(comment "Generating ${target_language} source ${generated_file_relative}")
203+
set(comment "Generating ${_target_language} source ${generated_file_relative}")
194204
set(cython_include_directories "")
195205
set(pxd_dependencies "")
196206
set(c_header_dependencies "")
@@ -354,7 +364,7 @@ function(add_cython_target _name)
354364
OUTPUT ${generated_file}
355365
COMMAND ${CYTHON_EXECUTABLE}
356366
ARGS
357-
${cxx_arg}
367+
${_target_language_arg}
358368
${include_directory_arg}
359369
${language_level_arg}
360370
${annotate_arg}
@@ -367,7 +377,7 @@ function(add_cython_target _name)
367377
${_source_file}
368378
${pxd_dependencies}
369379
IMPLICIT_DEPENDS
370-
${target_language}
380+
${_target_language}
371381
${c_header_dependencies}
372382
COMMENT ${comment}
373383
)

0 commit comments

Comments
 (0)