diff options
author | Daniel Mensinger <daniel@mensinger-ka.de> | 2019-11-20 22:16:17 +0100 |
---|---|---|
committer | Daniel Mensinger <daniel@mensinger-ka.de> | 2019-11-28 11:07:20 +0100 |
commit | b2b9c102b5610112231a321fca4479c09a6ba234 (patch) | |
tree | 3414bb710f8abdd3aafde019890d96d3936ec0b3 /mesonbuild/cmake/interpreter.py | |
parent | 8efbcb1e80d58fa39501a883968229270c4e4bec (diff) | |
download | meson-b2b9c102b5610112231a321fca4479c09a6ba234.zip meson-b2b9c102b5610112231a321fca4479c09a6ba234.tar.gz meson-b2b9c102b5610112231a321fca4479c09a6ba234.tar.bz2 |
cmake: Some minor fixup
Diffstat (limited to 'mesonbuild/cmake/interpreter.py')
-rw-r--r-- | mesonbuild/cmake/interpreter.py | 38 |
1 files changed, 26 insertions, 12 deletions
diff --git a/mesonbuild/cmake/interpreter.py b/mesonbuild/cmake/interpreter.py index 5fd8ce0..548acb1 100644 --- a/mesonbuild/cmake/interpreter.py +++ b/mesonbuild/cmake/interpreter.py @@ -170,6 +170,10 @@ class ConverterTarget: # Project default override options (c_std, cpp_std, etc.) self.override_options = [] + # Convert the target name to a valid meson target name + self.name = self.name.replace('-', '_') + self.name = generated_target_name_prefix + self.name + for i in target.files: # Determine the meson language lang = ConverterTarget.lang_cmake_to_meson.get(i.language.lower(), 'c') @@ -199,10 +203,6 @@ class ConverterTarget: std_regex = re.compile(r'([-]{1,2}std=|/std:v?|[-]{1,2}std:)(.*)') def postprocess(self, output_target_map: dict, root_src_dir: str, subdir: str, install_prefix: str, trace: CMakeTraceParser) -> None: - # Convert the target name to a valid meson target name - self.name = self.name.replace('-', '_') - self.name = generated_target_name_prefix + self.name - # Detect setting the C and C++ standard for i in ['c', 'cpp']: if i not in self.compile_opts: @@ -339,6 +339,7 @@ class ConverterTarget: self.link_libraries = [x for x in self.link_libraries if x.lower() not in blacklist_link_libs] self.link_flags = [x for x in self.link_flags if check_flag(x)] + # Handle explicit CMake add_dependency() calls for i in self.depends_raw: tgt = output_target_map.get(_target_key(i)) if tgt: @@ -382,6 +383,7 @@ class ConverterTarget: mlog.log(' -- generated: ', mlog.bold(str(self.generated))) mlog.log(' -- pie: ', mlog.bold('true' if self.pie else 'false')) mlog.log(' -- override_opts: ', mlog.bold(str(self.override_options))) + mlog.log(' -- depends: ', mlog.bold(str(self.depends))) mlog.log(' -- options:') for key, val in self.compile_opts.items(): mlog.log(' -', key, '=', mlog.bold(str(val))) @@ -412,6 +414,7 @@ class ConverterCustomTarget: if not self.name: self.name = 'custom_tgt_{}'.format(ConverterCustomTarget.tgt_counter) ConverterCustomTarget.tgt_counter += 1 + self.cmake_name = str(self.name) self.original_outputs = list(target.outputs) self.outputs = [os.path.basename(x) for x in self.original_outputs] self.conflict_map = {} @@ -421,8 +424,12 @@ class ConverterCustomTarget: self.inputs = [] self.depends = [] + # Convert the target name to a valid meson target name + self.name = self.name.replace('-', '_') + self.name = generated_target_name_prefix + self.name + def __repr__(self) -> str: - return '<{}: {}>'.format(self.__class__.__name__, self.outputs) + return '<{}: {} {}>'.format(self.__class__.__name__, self.name, self.outputs) def postprocess(self, output_target_map: dict, root_src_dir: str, subdir: str, build_dir: str, all_outputs: List[str]) -> None: # Default the working directory to the CMake build dir. This @@ -480,8 +487,15 @@ class ConverterCustomTarget: commands += [cmd] self.command = commands + # If the custom target does not declare any output, create a dummy + # one that can be used as dependency. + if not self.outputs: + self.outputs = [self.name + '.h'] + # Check dependencies and input files for i in self.depends_raw: + if not i: + continue tgt_key = _target_key(i) gen_key = _generated_file_key(i) @@ -725,16 +739,21 @@ class CMakeInterpreter: # generate the output_target_map output_target_map = {} output_target_map.update({x.full_name: x for x in self.targets}) - output_target_map.update({_target_key(x.name): x for x in self.targets}) + output_target_map.update({_target_key(x.cmake_name): x for x in self.targets}) for i in self.targets: for j in i.artifacts: output_target_map[os.path.basename(j)] = i for i in self.custom_targets: - output_target_map[_target_key(i.name)] = i + output_target_map[_target_key(i.cmake_name)] = i for j in i.original_outputs: output_target_map[_generated_file_key(j)] = i object_libs = [] + # Sometimes an empty string can be inserted (no full name, etc.) + # Delete the entry in this case + if '' in output_target_map: + del output_target_map[''] + # First pass: Basic target cleanup custom_target_outputs = [] # type: List[str] for i in self.custom_targets: @@ -973,11 +992,6 @@ class CMakeInterpreter: tgt_var = tgt.name # type: str - # If the custom target does not declare any output, create a dummy - # one that can be used as dependency. - if not tgt.outputs: - tgt.outputs = [tgt.name + '.h'] - def resolve_source(x: Any) -> Any: if isinstance(x, ConverterTarget): if x.name not in processed: |