modules: Cache programs found by find_program

This avoids printing several 'Found:' messages during configure, and
also avoids doing several searches for the same binary. This is already
done by the interpreter for `find_program` calls from build files.

Also move it to the module-wide __init__.py file so it can be used by
other modules as-needed.

Also use it for g-ir-scanner where it was missed in one place, also fix
exception name in the same place.
pull/1194/head
Nirbheek Chauhan 8 years ago
parent d5f7ba862b
commit 5e5b3f00d8
  1. 13
      mesonbuild/modules/__init__.py
  2. 16
      mesonbuild/modules/gnome.py
  3. 2
      mesonbuild/modules/qt4.py

@ -1,4 +1,17 @@
from .. import build
from .. import dependencies
_found_programs = {}
def find_program(program_name, target_name):
if program_name in _found_programs:
return _found_programs[program_name]
program = dependencies.ExternalProgram(program_name)
if not program.found():
m = "Target {!r} can't be generated as {!r} could not be found"
raise MesonException(m.format(target_name, program_name))
_found_programs[program_name] = program
return program
class GResourceTarget(build.CustomTarget):
def __init__(self, name, subdir, kwargs):

@ -25,7 +25,7 @@ from .. import dependencies
from .. import mlog
from .. import mesonlib
from .. import interpreter
from . import GResourceTarget, GResourceHeaderTarget, GirTarget, TypelibTarget, VapiTarget
from . import find_program, GResourceTarget, GResourceHeaderTarget, GirTarget, TypelibTarget, VapiTarget
# gresource compilation is broken due to the way
# the resource compiler and Ninja clash about it
@ -46,19 +46,13 @@ def gir_has_extra_lib_arg():
_gir_has_extra_lib_arg = False
try:
scanner_options = subprocess.check_output(['g-ir-scanner', '--help']).decode()
_gir_has_extra_lib_arg = '--extra-library' in scanner_options
except (FileNotFound, subprocess.CalledProcessError):
g_ir_scanner = find_program('g-ir-scanner', '').get_command()
opts = Popen_safe(g_ir_scanner + ['--help'], stderr=subprocess.STDOUT)[1]
_gir_has_extra_lib_arg = '--extra-library' in opts
except (MesonException, FileNotFoundError, subprocess.CalledProcessError):
pass
return _gir_has_extra_lib_arg
def find_program(program_name, target_name):
program = dependencies.ExternalProgram(program_name)
if not program.found():
raise MesonException('%s can\'t be generated as %s could not be found' % (
target_name, program_name))
return program
class GnomeModule:
@staticmethod

@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import os, subprocess
import os
from .. import mlog
from .. import build
from ..mesonlib import MesonException, Popen_safe

Loading…
Cancel
Save