1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-26 09:10:40 -05:00
denoland-deno/build_extra/rust/run.py

40 lines
1.5 KiB
Python
Raw Normal View History

#!/usr/bin/env python
2019-01-21 14:03:30 -05:00
# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
2018-12-13 16:16:58 -05:00
# 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
2018-12-13 16:16:58 -05:00
import re
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"])
2018-12-13 16:16:58 -05:00
# Set the CARGO_PKG_VERSION env variable if provided as an argument
# When building with Cargo this variable is set automatically
args = sys.argv[1:]
for i, arg in enumerate(args):
match = re.search('--cargo-pkg-version="?([^"]*)"?', arg)
if match:
env["CARGO_PKG_VERSION"] = match.group(1)
2018-12-13 16:16:58 -05:00
del args[i]
break
sys.exit(subprocess.call(args, env=env))