blob: 83f92f53b5c5c03058f0e88d000eb71b6d46a9ff [file] [log] [blame]
# 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 = absf = os.environ['MESON_INSTALL_DESTDIR_'+key] + f
f = os.environ['MESON_INSTALL_'+key] + f
if absf != f:
ddir = os.path.dirname(f)
if os.path.isdir(absf):
for root, _, files in os.walk(absf):
if ddir is not None:
ddir = root.replace(absf, 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])