def process_dependencies(self, deps): cflags = set() for dep in mesonlib.listify(ensure_list(deps)): if isinstance(dep, InternalDependency): inc_args = self.state.get_include_args(dep.include_directories) cflags.update([self.replace_dirs_in_string(x) for x in inc_args]) cflags.update(self.process_dependencies(dep.libraries)) cflags.update(self.process_dependencies(dep.sources)) cflags.update(self.process_dependencies(dep.ext_deps)) elif isinstance(dep, Dependency): cflags.update(dep.get_compile_args()) elif isinstance(dep, (build.StaticLibrary, build.SharedLibrary)): self._dependencies.append(dep) for incd in dep.get_include_dirs(): cflags.update(incd.get_incdirs()) elif isinstance(dep, HotdocTarget): # Recurse in hotdoc target dependencies self.process_dependencies(dep.get_target_dependencies()) self._subprojects.extend(dep.subprojects) self.process_dependencies(dep.subprojects) self.add_include_path(os.path.join(self.builddir, dep.hotdoc_conf.subdir)) self.cmd += ['--extra-assets=' + p for p in dep.extra_assets] self.add_extension_paths(dep.extra_extension_paths) elif isinstance(dep, build.CustomTarget) or isinstance(dep, build.BuildTarget): self._dependencies.append(dep) elif isinstance(dep, build.CustomTargetIndex): self._dependencies.append(dep.target) return [f.strip('-I') for f in cflags]
def process_dependencies(self, deps): cflags = set() for dep in mesonlib.listify(ensure_list(deps)): dep = getattr(dep, "held_object", dep) if isinstance(dep, InternalDependency): inc_args = get_include_args(dep.include_directories) cflags.update([self.replace_dirs_in_string(x) for x in inc_args]) cflags.update(self.process_dependencies(dep.libraries)) cflags.update(self.process_dependencies(dep.sources)) cflags.update(self.process_dependencies(dep.ext_deps)) elif isinstance(dep, Dependency): cflags.update(dep.get_compile_args()) elif isinstance(dep, (build.StaticLibrary, build.SharedLibrary)): self._dependencies.append(dep) for incd in dep.get_include_dirs(): cflags.update(incd.get_incdirs()) elif isinstance(dep, HotdocTarget): # Recurse in hotdoc target dependencies self.process_dependencies(dep.get_target_dependencies()) self._subprojects.extend(dep.subprojects) self.process_dependencies(dep.subprojects) self.add_include_path(os.path.join(self.builddir, dep.hotdoc_conf.subdir)) self.cmd += ['--extra-assets=' + p for p in dep.extra_assets] self.add_extension_paths(dep.extra_extension_paths) elif isinstance(dep, build.CustomTarget) or isinstance(dep, build.BuildTarget): self._dependencies.append(dep) return [f.strip('-I') for f in cflags]
def load_impl(self) -> ReferenceManual: mlog.log('Loading YAML reference manual') with mlog.nested(): manual = ReferenceManual( functions=[ self._load_function(x) for x in self.func_dir.iterdir() ], objects=mesonlib.listify([ [ self._load_object(ObjectType.ELEMENTARY, x) for x in self.elem_dir.iterdir() ], [ self._load_object(ObjectType.RETURNED, x) for x in self.objs_dir.iterdir() ], [ self._load_object(ObjectType.BUILTIN, x) for x in self.builtin_dir.iterdir() ], [self._load_module(x) for x in self.modules_dir.iterdir()] ], flatten=True)) if not self.strict: mlog.warning( 'YAML reference manual loaded using the best-effort fastyaml loader. Results are not guaranteed to be stable or correct.' ) return manual
def flatten_config_command(self): cmd = [] for arg in mesonlib.listify(self.cmd, flatten=True): arg = getattr(arg, 'held_object', arg) if isinstance(arg, mesonlib.File): arg = arg.absolute_path( self.state.environment.get_source_dir(), self.state.environment.get_build_dir()) elif isinstance(arg, build.IncludeDirs): for inc_dir in arg.get_incdirs(): cmd.append( os.path.join(self.sourcedir, arg.get_curdir(), inc_dir)) cmd.append( os.path.join(self.builddir, arg.get_curdir(), inc_dir)) continue elif isinstance(arg, build.CustomTarget) or isinstance( arg, build.BuildTarget): self._dependencies.append(arg) arg = self.interpreter.backend.get_target_filename_abs(arg) cmd.append(arg) return cmd
def flatten_config_command(self): cmd = [] for arg in mesonlib.listify(self.cmd, flatten=True): if isinstance(arg, mesonlib.File): arg = arg.absolute_path( self.state.environment.get_source_dir(), self.state.environment.get_build_dir()) cmd.append(arg) return cmd
def load_impl(self) -> ReferenceManual: mlog.log('Loading YAML refererence manual') with mlog.nested(): return ReferenceManual( functions=[self._load_function(x) for x in self.func_dir.iterdir()], objects=mesonlib.listify([ [self._load_object(ObjectType.ELEMENTARY, x) for x in self.elem_dir.iterdir()], [self._load_object(ObjectType.RETURNED, x) for x in self.objs_dir.iterdir()], [self._load_object(ObjectType.BUILTIN, x) for x in self.builtin_dir.iterdir()], [self._load_module(x) for x in self.modules_dir.iterdir()] ], flatten=True) )
def generate_native_headers( self, state: ModuleState, args: T.Tuple[T.List[mesonlib.FileOrString]], kwargs: T.Dict[str, T.Optional[str]]) -> ModuleReturnValue: classes = T.cast('T.List[str]', kwargs.get('classes')) package = kwargs.get('package') headers: T.List[str] = [] for clazz in classes: underscore_clazz = clazz.replace(".", "_") if package: headers.append( f'{package.replace(".", "_")}_{underscore_clazz}.h') else: headers.append(f'{underscore_clazz}.h') javac = self.__get_java_compiler(state) command = mesonlib.listify([ javac.exelist, '-d', '@PRIVATE_DIR@', '-h', state.subdir, '@INPUT@', ]) prefix = classes[0] if not package else package target = CustomTarget(f'{prefix}-native-headers', state.subdir, state.subproject, state.environment, command, sources=args[0], outputs=headers, backend=state.backend) # It is only known that 1.8.0 won't pre-create the directory. 11 and 16 # do not exhibit this behavior. if version_compare(javac.version, '1.8.0'): pathlib.Path( state.backend.get_target_private_dir_abs(target)).mkdir( parents=True, exist_ok=True) return ModuleReturnValue(target, [target])
def generate_native_header( self, state: ModuleState, args: T.Tuple[T.Union[str, mesonlib.File]], kwargs: T.Dict[str, T.Optional[str]]) -> ModuleReturnValue: package = kwargs.get('package') if isinstance(args[0], mesonlib.File): file = args[0] else: file = mesonlib.File.from_source_file(state.source_root, state.subdir, args[0]) if package: header = f'{package.replace(".", "_")}_{pathlib.Path(file.fname).stem}.h' else: header = f'{pathlib.Path(file.fname).stem}.h' javac = self.__get_java_compiler(state) target = CustomTarget( os.path.basename(header), state.subdir, state.subproject, state.environment, mesonlib.listify([ javac.exelist, '-d', '@PRIVATE_DIR@', '-h', state.subdir, '@INPUT@', ]), [file], [header], backend=state.backend, ) # It is only known that 1.8.0 won't pre-create the directory. 11 and 16 # do not exhibit this behavior. if version_compare(javac.version, '1.8.0'): pathlib.Path( state.backend.get_target_private_dir_abs(target)).mkdir( parents=True, exist_ok=True) return ModuleReturnValue(target, [target])
def flatten_config_command(self): cmd = [] for arg in mesonlib.listify(self.cmd, flatten=True): arg = getattr(arg, 'held_object', arg) if isinstance(arg, mesonlib.File): arg = arg.absolute_path(self.state.environment.get_source_dir(), self.state.environment.get_build_dir()) elif isinstance(arg, build.IncludeDirs): for inc_dir in arg.get_incdirs(): cmd.append(os.path.join(self.sourcedir, arg.get_curdir(), inc_dir)) cmd.append(os.path.join(self.builddir, arg.get_curdir(), inc_dir)) continue elif isinstance(arg, build.CustomTarget) or isinstance(arg, build.BuildTarget): self._dependencies.append(arg) arg = self.interpreter.backend.get_target_filename_abs(arg) cmd.append(arg) return cmd
def flatten_config_command(self): cmd = [] for arg in mesonlib.listify(self.cmd, flatten=True): arg = getattr(arg, 'held_object', arg) if isinstance(arg, mesonlib.File): arg = arg.absolute_path( self.state.environment.get_source_dir(), self.state.environment.get_build_dir()) elif isinstance(arg, build.IncludeDirs): for inc_dir in arg.get_incdirs(): cmd.append( os.path.join(self.sourcedir, arg.get_curdir(), inc_dir)) cmd.append( os.path.join(self.builddir, arg.get_curdir(), inc_dir)) continue cmd.append(arg) return cmd