# Copyright 2016 The Meson development team # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ignore all lints for this file, since it is run by python2 as well # type: ignore # pylint: disable=deprecated-module import json, os, subprocess, sys from compileall import compile_file quiet = int(os.environ.get('MESON_INSTALL_QUIET', 0)) def compileall(files): for f in files: # f is prefixed by {py_xxxxlib}, both variants are 12 chars # the key is the middle 10 chars of the prefix key = f[1:11].upper() f = f[12:] ddir = None fullpath = os.environ['MESON_INSTALL_DESTDIR_'+key] + f f = os.environ['MESON_INSTALL_'+key] + f if fullpath != f: ddir = os.path.dirname(f) if os.path.isdir(fullpath): for root, _, files in os.walk(fullpath): if ddir is not None: ddir = root.replace(fullpath, f, 1) for dirf in files: if dirf.endswith('.py'): fullpath = os.path.join(root, dirf) compile_file(fullpath, ddir, force=True, quiet=quiet) else: compile_file(fullpath, ddir, force=True, quiet=quiet) def run(manifest): data_file = os.path.join(os.path.dirname(__file__), manifest) with open(data_file, 'rb') as f: dat = json.load(f) compileall(dat) if __name__ == '__main__': manifest = sys.argv[1] run(manifest) if len(sys.argv) > 2: optlevel = int(sys.argv[2]) # python2 only needs one or the other if optlevel == 1 or (sys.version_info >= (3,) and optlevel > 0): subprocess.check_call([sys.executable, '-O'] + sys.argv[:2]) if optlevel == 2: subprocess.check_call([sys.executable, '-OO'] + sys.argv[:2])