cython: Add an option for selecting python 3 vs python 2 output

pull/8706/head
Dylan Baker 4 years ago
parent 0cb05004ca
commit 0bc18f26a2
  1. 15
      mesonbuild/backend/ninjabackend.py
  2. 24
      mesonbuild/compilers/cython.py

@ -1559,10 +1559,21 @@ int dummy;
cython = target.compilers['cython']
opt_proxy = self.get_compiler_options_for_target(target)
args: T.List[str] = []
args += cython.get_always_args()
args += cython.get_buildtype_args(self.get_option_for_target(OptionKey('buildtype'), target))
args += cython.get_debug_args(self.get_option_for_target(OptionKey('debug'), target))
args += cython.get_optimization_args(self.get_option_for_target(OptionKey('optimization'), target))
args += cython.get_option_compile_args(opt_proxy)
args += self.build.get_global_args(cython, target.for_machine)
args += self.build.get_project_args(cython, target.subproject, target.for_machine)
for src in target.get_sources():
if src.endswith('.pyx'):
output = os.path.join(self.get_target_private_dir(target), f'{src}.c')
args = cython.get_always_args()
args = args.copy()
args += cython.get_output_args(output)
element = NinjaBuildElement(
self.all_outputs, [output],
@ -1580,8 +1591,8 @@ int dummy;
if isinstance(gen, GeneratedList):
ssrc = os.path.join(self.get_target_private_dir(target) , ssrc)
if ssrc.endswith('.pyx'):
args = args.copy()
output = os.path.join(self.get_target_private_dir(target), f'{ssrc}.c')
args = cython.get_always_args()
args += cython.get_output_args(output)
element = NinjaBuildElement(
self.all_outputs, [output],

@ -5,10 +5,12 @@
import typing as T
from ..mesonlib import EnvironmentException
from .. import coredata
from ..mesonlib import EnvironmentException, OptionKey
from .compilers import Compiler
if T.TYPE_CHECKING:
from ..coredata import KeyedOptionDictType
from ..environment import Environment
@ -24,8 +26,7 @@ class CythonCompiler(Compiler):
return False
def get_always_args(self) -> T.List[str]:
# XXX: we need an option to control this?
return ['--fast-fail', '-3']
return ['--fast-fail']
def get_werror_args(self) -> T.List[str]:
return ['-Werror']
@ -59,3 +60,20 @@ class CythonCompiler(Compiler):
new.append(i)
return new
def get_options(self) -> 'KeyedOptionDictType':
opts = super().get_options()
opts.update({
OptionKey('version', machine=self.for_machine, lang=self.language): coredata.UserComboOption(
'Python version to target',
['2', '3'],
'3',
)
})
return opts
def get_option_compile_args(self, options: 'KeyedOptionDictType') -> T.List[str]:
args: T.List[str] = []
key = options[OptionKey('version', machine=self.for_machine, lang=self.language)]
args.append(f'-{key.value}')
return args

Loading…
Cancel
Save