diff options
Diffstat (limited to 'mesonbuild')
-rw-r--r-- | mesonbuild/backend/backends.py | 2 | ||||
-rw-r--r-- | mesonbuild/build.py | 4 | ||||
-rw-r--r-- | mesonbuild/interpreter.py | 34 | ||||
-rw-r--r-- | mesonbuild/modules/gnome.py | 4 | ||||
-rw-r--r-- | mesonbuild/modules/i18n.py | 2 |
5 files changed, 27 insertions, 19 deletions
diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py index 8b6d181..ca013fa 100644 --- a/mesonbuild/backend/backends.py +++ b/mesonbuild/backend/backends.py @@ -641,7 +641,7 @@ class Backend(): child_env.update(env) for s in self.build.postconf_scripts: - cmd = s['exe'].get_command() + s['args'] + cmd = s['exe'] + s['args'] subprocess.check_call(cmd, env=child_env) # Subprojects of subprojects may cause the same dep args to be used diff --git a/mesonbuild/build.py b/mesonbuild/build.py index db92858..a9f10c5 100644 --- a/mesonbuild/build.py +++ b/mesonbuild/build.py @@ -1482,9 +1482,9 @@ class Data(): for s in self.sources: assert(isinstance(s, File)) -class InstallScript(dict): +class RunScript(dict): def __init__(self, script, args): - super(InstallScript, self).__init__() + super().__init__() assert(isinstance(script, list)) assert(isinstance(args, list)) self['exe'] = script diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index 2bef595..7e55b88 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -987,6 +987,7 @@ class MesonMain(InterpreterObject): InterpreterObject.__init__(self) self.build = build self.interpreter = interpreter + self._found_source_scripts = {} self.methods.update({'get_compiler': self.get_compiler_method, 'is_cross_build' : self.is_cross_build_method, 'has_exe_wrapper' : self.has_exe_wrapper_method, @@ -1006,27 +1007,34 @@ class MesonMain(InterpreterObject): 'backend' : self.backend_method, }) + def _find_source_script(self, name, args): + # Prefer scripts in the current source directory + search_dir = os.path.join(self.interpreter.environment.source_dir, + self.interpreter.subdir) + key = (name, search_dir) + if key in self._found_source_scripts: + found = self._found_source_scripts[key] + else: + found = dependencies.ExternalProgram(name, search_dir=search_dir) + if found: + self._found_source_scripts[key] = found + else: + raise InterpreterException('Script {!r} not found'.format(name)) + return build.RunScript(found.get_command(), args) + def add_install_script_method(self, args, kwargs): if len(args) < 1: raise InterpreterException('add_install_script takes one or more arguments') check_stringlist(args, 'add_install_script args must be strings') - scriptbase = args[0] - search_dir = os.path.join(self.interpreter.environment.source_dir, - self.interpreter.subdir) - script = dependencies.ExternalProgram(scriptbase, search_dir=search_dir) - extras = args[1:] - self.build.install_scripts.append({'exe': script.get_command(), 'args': extras}) + script = self._find_source_script(args[0], args[1:]) + self.build.install_scripts.append(script) def add_postconf_script_method(self, args, kwargs): if len(args) < 1: raise InterpreterException('add_postconf_script takes one or more arguments') check_stringlist(args, 'add_postconf_script arguments must be strings') - scriptbase = args[0] - search_dir = os.path.join(self.interpreter.environment.source_dir, - self.interpreter.subdir) - script = dependencies.ExternalProgram(scriptbase, search_dir=search_dir) - extras = args[1:] - self.build.postconf_scripts.append({'exe': script, 'args': extras}) + script = self._find_source_script(args[0], args[1:]) + self.build.postconf_scripts.append(script) def current_source_dir_method(self, args, kwargs): src = self.interpreter.environment.source_dir @@ -1236,7 +1244,7 @@ class Interpreter(InterpreterBase): outvalues.append(GeneratedListHolder(v)) elif isinstance(v, build.RunTarget): self.add_target(v.name, v) - elif isinstance(v, build.InstallScript): + elif isinstance(v, build.RunScript): self.build.install_scripts.append(v) elif isinstance(v, build.Data): self.build.data.append(v) diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py index dd4d409..f72ddfa 100644 --- a/mesonbuild/modules/gnome.py +++ b/mesonbuild/modules/gnome.py @@ -615,7 +615,7 @@ can not be used with the current version of glib-compiled-resources, due to args.append('--media=' + '@@'.join(media)) if langs: args.append('--langs=' + '@@'.join(langs)) - inscript = build.InstallScript(script, args) + inscript = build.RunScript(script, args) potargs = [state.environment.get_build_command(), '--internal', 'yelphelper', 'pot', '--subdir=' + state.subdir, @@ -699,7 +699,7 @@ can not be used with the current version of glib-compiled-resources, due to args += self._get_build_args(kwargs, state) res = [build.RunTarget(targetname, command[0], command[1:] + args, [], state.subdir)] if kwargs.get('install', True): - res.append(build.InstallScript(command, args)) + res.append(build.RunScript(command, args)) return res def _get_build_args(self, kwargs, state): diff --git a/mesonbuild/modules/i18n.py b/mesonbuild/modules/i18n.py index eaeb0a3..4df62f2 100644 --- a/mesonbuild/modules/i18n.py +++ b/mesonbuild/modules/i18n.py @@ -109,7 +109,7 @@ class I18nModule: pkg_arg] if lang_arg: args.append(lang_arg) - iscript = build.InstallScript(script, args) + iscript = build.RunScript(script, args) return [pottarget, gmotarget, iscript, updatepotarget] |