mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-20 16:55:40 +00:00
7d6f6c28d7
This depends on https://github.com/eqrion/cbindgen/pull/308. Other than that, this should be ready to go. There's still a bit more magic than what I'd like to eventually. I should be able to make cbindgen not rename types if it doesn't know about them, or something. But this removes most of the manual binding function implementations (all but the ones that are declared via macros, which cbindgen doesn't see across). I need to give up on the _Drop functions taking an Owned<T> because of instantiation order fiasco. In order to define DefaultDelete I need Owned to be complete, but I cannot do it after including the generated file since some declarations already instantiate the specialization. Oh well. Differential Revision: https://phabricator.services.mozilla.com/D24798 --HG-- rename : servo/components/style/cbindgen.toml => servo/ports/geckolib/cbindgen.toml extra : moz-landing-system : lando
53 lines
1.7 KiB
Python
53 lines
1.7 KiB
Python
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
from __future__ import print_function
|
|
import buildconfig
|
|
import mozpack.path as mozpath
|
|
import os
|
|
import subprocess
|
|
import pytoml
|
|
|
|
# Try to read the package name or otherwise assume same name as the crate path.
|
|
def _get_crate_name(crate_path):
|
|
try:
|
|
with open(mozpath.join(crate_path, "Cargo.toml")) as f:
|
|
return pytoml.load(f)["package"]["name"]
|
|
except:
|
|
return mozpath.basename(crate_path)
|
|
|
|
CARGO_LOCK = mozpath.join(buildconfig.topsrcdir, "Cargo.lock")
|
|
|
|
def generate(output, cbindgen_crate_path, *in_tree_dependencies):
|
|
env = os.environ.copy()
|
|
env['CARGO'] = str(buildconfig.substs['CARGO'])
|
|
|
|
p = subprocess.Popen([
|
|
buildconfig.substs['CBINDGEN'],
|
|
mozpath.join(buildconfig.topsrcdir, "toolkit", "library", "rust"),
|
|
"--lockfile",
|
|
CARGO_LOCK,
|
|
"--crate",
|
|
_get_crate_name(cbindgen_crate_path)
|
|
], env=env, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
|
|
stdout, stderr = p.communicate()
|
|
if p.returncode != 0:
|
|
print(stdout)
|
|
print(stderr)
|
|
return p.returncode
|
|
|
|
output.write(stdout)
|
|
|
|
deps = set()
|
|
deps.add(CARGO_LOCK)
|
|
deps.add(mozpath.join(cbindgen_crate_path, "cbindgen.toml"))
|
|
for directory in in_tree_dependencies + (cbindgen_crate_path,):
|
|
for path, dirs, files in os.walk(directory):
|
|
for file in files:
|
|
if os.path.splitext(file)[1] == ".rs":
|
|
deps.add(mozpath.join(path, file))
|
|
|
|
return deps
|