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.
This commit is contained in:
parent
d5f7ba862b
commit
5e5b3f00d8
|
@ -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…
Reference in New Issue