mirror of
https://github.com/denoland/deno.git
synced 2025-01-06 14:26:02 -05:00
50 lines
2 KiB
Python
50 lines
2 KiB
Python
#!/usr/bin/env python
|
|
# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
|
|
# This file just executes its arguments, except that also adds GN_OUT_DIR and
|
|
# CARGO_PKG_VERSION to the environ. This is for compatibility with cargo.
|
|
import subprocess
|
|
import sys
|
|
import os
|
|
import re
|
|
|
|
args = sys.argv[1:]
|
|
env = os.environ.copy()
|
|
|
|
if sys.platform == 'win32':
|
|
# On Windows, when gn is setting up the build toolchain, it produces a set
|
|
# of environment variables that are required to invoke the right build
|
|
# toolchain. We need to load those environment variables here too in order
|
|
# for rustc to be able to successfully invoke the linker tool.
|
|
# The file is in 'windows environment block' format, which contains
|
|
# multiple 'key=value' pairs, separated by '\0' bytes, and terminated by
|
|
# two '\0' bytes at the end.
|
|
gn_env_pairs = open("environment.x64").read()[:-2].split('\0')
|
|
gn_env = dict([pair.split('=', 1) for pair in gn_env_pairs])
|
|
env.update(gn_env)
|
|
|
|
# This is for src/msg.rs to know where to find msg_generated.rs.
|
|
# When building with Cargo this variable is set by build.rs.
|
|
env["GN_OUT_DIR"] = os.path.abspath(".")
|
|
assert os.path.isdir(env["GN_OUT_DIR"])
|
|
|
|
# Some crates (e.g. 'typenum') generate source files and place them in the
|
|
# directory indicated by the 'OUT_DIR' environment variable, which is normally
|
|
# set by Cargo. We pre-generate these files and store them in the source repo.
|
|
# Therefore, set 'OUT_DIR' so these crates can find their generated sources.
|
|
for i, arg in enumerate(args):
|
|
match = re.search('--generated-source-dir=(.*)', arg)
|
|
if match:
|
|
env["OUT_DIR"] = os.path.abspath(match.group(1))
|
|
del args[i]
|
|
break
|
|
|
|
# Set the CARGO_PKG_VERSION env variable if provided as an argument
|
|
# When building with Cargo this variable is set automatically
|
|
for i, arg in enumerate(args):
|
|
match = re.search('--cargo-pkg-version="?([^"]*)"?', arg)
|
|
if match:
|
|
env["CARGO_PKG_VERSION"] = match.group(1)
|
|
del args[i]
|
|
break
|
|
|
|
sys.exit(subprocess.call(args, env=env))
|