rust: generate headers as part of build

pull/2746/head
Jason Ish 9 years ago
parent d0880d75ff
commit 9231b0ae92

1
rust/.gitignore vendored

@ -3,3 +3,4 @@
/Cargo.toml /Cargo.toml
/target /target
/vendor /vendor
/gen

@ -1,7 +1,9 @@
EXTRA_DIST = Cargo.toml \ EXTRA_DIST = Cargo.toml \
Cargo.lock \ Cargo.lock \
src/lib.rs \ src \
.cargo/config.in .cargo/config.in \
gen-c-headers.py \
gen/c-headers
if HAVE_RUST if HAVE_RUST
EXTRA_DIST += vendor EXTRA_DIST += vendor
@ -15,10 +17,23 @@ if !DEBUG
RELEASE = --release RELEASE = --release
endif endif
gen/c-headers:
if HAVE_PYTHON
cd $(top_srcdir)/rust && python ./gen-c-headers.py
else
@echo "python not available, will not generate headers"
endif
if HAVE_RUST if HAVE_RUST
all-local: all-local:
if HAVE_PYTHON
cd $(top_srcdir)/rust && CARGO_TARGET_DIR=$(abs_builddir)/target \ cd $(top_srcdir)/rust && CARGO_TARGET_DIR=$(abs_builddir)/target \
python ./gen-c-headers.py && \
cargo build $(RELEASE) $(FROZEN) cargo build $(RELEASE) $(FROZEN)
else
cd $(top_srcdir)/rust && CARGO_TARGET_DIR=$(abs_builddir)/target \
cargo build $(RELEASE) $(FROZEN)
endif
clean-local: clean-local:
cd $(top_srcdir)/rust && CARGO_TARGET_DIR=$(abs_builddir)/target \ cd $(top_srcdir)/rust && CARGO_TARGET_DIR=$(abs_builddir)/target \
@ -26,6 +41,7 @@ clean-local:
distclean-local: distclean-local:
rm -rf vendor rm -rf vendor
rm -rf gen
check: check:
cd $(top_srcdir)/rust && CARGO_TARGET_DIR=$(abs_builddir)/target \ cd $(top_srcdir)/rust && CARGO_TARGET_DIR=$(abs_builddir)/target \

@ -105,7 +105,7 @@ def convert_type(rs_type):
def make_output_filename(filename): def make_output_filename(filename):
parts = filename.split(os.path.sep)[2:] parts = filename.split(os.path.sep)[2:]
last = os.path.splitext(parts.pop())[0] last = os.path.splitext(parts.pop())[0]
outpath = "../src/rust-%s-%s.h" % ( outpath = "./gen/c-headers/rust-%s-%s-gen.h" % (
"-".join(parts), last) "-".join(parts), last)
return outpath.replace("--", "-") return outpath.replace("--", "-")
@ -172,6 +172,8 @@ def gen_headers(filename):
if writer.tell() > 0: if writer.tell() > 0:
print("Writing %s" % (output_filename)) print("Writing %s" % (output_filename))
if not os.path.exists(os.path.dirname(output_filename)):
os.makedirs(os.path.dirname(output_filename))
with open(output_filename, "w") as output: with open(output_filename, "w") as output:
output.write(template % { output.write(template % {
"prototypes": writer.getvalue(), "prototypes": writer.getvalue(),

Loading…
Cancel
Save