From 9b3b8622ed81898ddb905c1f6bfcb768a9cc4798 Mon Sep 17 00:00:00 2001 From: Arcterus Date: Sat, 19 Jul 2014 14:25:28 -0700 Subject: [PATCH] Force programs to rebuild when a dependency changes --- Makefile | 48 +++++++++++++++++++++++++++++++----------------- common.mk | 7 ------- mkmain.rs | 2 +- mkuutils.rs | 10 ++++++++-- uutils/uutils.rs | 3 +-- 5 files changed, 41 insertions(+), 29 deletions(-) delete mode 100644 common.mk diff --git a/Makefile b/Makefile index 439b13765..400d1e268 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,12 @@ -include common.mk +# Binaries +RUSTC ?= rustc +RM := rm +# Flags +RUSTCFLAGS := --opt-level=3 +RMFLAGS := + +# Install directories PREFIX ?= /usr/local BINDIR ?= /bin @@ -87,8 +94,7 @@ BUILD ?= $(PROGS) EXES := \ $(sort $(filter $(BUILD),$(filter-out $(DONT_BUILD),$(PROGS)))) -CRATES := \ - $(sort $(EXES)) +CRATE_RLIBS := INSTALL ?= $(EXES) @@ -109,25 +115,33 @@ TEST ?= $(TEST_PROGS) TESTS := \ $(filter $(TEST),$(filter-out $(DONT_TEST),$(filter $(BUILD),$(filter-out $(DONT_BUILD),$(TEST_PROGS))))) +# Setup for building crates +define BUILD_SETUP +X := $(shell $(RUSTC) --print-file-name --crate-type rlib $(1)/$(1).rs) +$(1)_RLIB := $$(X) +CRATE_RLIBS += $$(X) +endef +$(foreach crate,$(EXES),$(eval $(call BUILD_SETUP,$(crate)))) + # Utils stuff EXES_PATHS := $(addprefix build/,$(EXES)) +RLIB_PATHS := $(addprefix build/,$(CRATE_RLIBS)) command = sh -c '$(1)' - # Main exe build rule define EXE_BUILD build/gen/$(1).rs: build/mkmain build/mkmain $(1) build/gen/$(1).rs -build/$(1): build/gen/$(1).rs build/$(1).timestamp | build deps +build/$(1): build/gen/$(1).rs build/$($(1)_RLIB) | build deps $(RUSTC) $(RUSTCFLAGS) -L build/ -o build/$(1) build/gen/$(1).rs endef define CRATE_BUILD -include build/$(1).d -build/$(1).timestamp: $(1)/$(1).rs | build deps + +build/$($(1)_RLIB): $(1)/$(1).rs | build deps $(RUSTC) $(RUSTCFLAGS) -L build/ --crate-type rlib --dep-info build/$(1).d $(1)/$(1).rs --out-dir build - @touch build/$(1).timestamp endef # Aliases build rule @@ -155,16 +169,22 @@ endef # Main rules all: $(EXES_PATHS) build/uutils +# Creating necessary rules for each targets +$(foreach crate,$(EXES),$(eval $(call CRATE_BUILD,$(crate)))) +$(foreach exe,$(EXES),$(eval $(call EXE_BUILD,$(exe)))) +$(foreach alias,$(ALIASES),$(eval $(call MAKE_ALIAS,$(alias)))) +$(foreach test,$(TESTS),$(eval $(call TEST_BUILD,$(test)))) + -include build/uutils.d -build/uutils: uutils/uutils.rs build/mkuutils $(addprefix build/, $(addsuffix .timestamp, $(CRATES))) +build/uutils: uutils/uutils.rs build/mkuutils $(RLIB_PATHS) build/mkuutils build/gen/uutils.rs $(BUILD) $(RUSTC) $(RUSTCFLAGS) -L build/ --dep-info $@.d build/gen/uutils.rs -o $@ # Dependencies -LIBCRYPTO := $(shell $(RUSTC) --print-file-name --crate-type rlib deps/rust-crypto/src/rust-crypto/lib.rs) -include build/rust-crypto.d -build/$(LIBCRYPTO): | build +build/.rust-crypto: | build $(RUSTC) $(RUSTCFLAGS) --crate-type rlib --dep-info build/rust-crypto.d deps/rust-crypto/src/rust-crypto/lib.rs --out-dir build/ + @touch $@ build/mkmain: mkmain.rs | build $(RUSTC) $(RUSTCFLAGS) -L build mkmain.rs -o $@ @@ -175,7 +195,7 @@ build/mkuutils: mkuutils.rs | build cksum/crc_table.rs: cksum/gen_table.rs cd cksum && $(RUSTC) $(RUSTCFLAGS) gen_table.rs && ./gen_table && $(RM) gen_table -deps: build/$(LIBCRYPTO) cksum/crc_table.rs +deps: build/.rust-crypto cksum/crc_table.rs crates: echo $(EXES) @@ -193,12 +213,6 @@ build: tmp: mkdir tmp -# Creating necessary rules for each targets -$(foreach crate,$(CRATES),$(eval $(call CRATE_BUILD,$(crate)))) -$(foreach exe,$(EXES),$(eval $(call EXE_BUILD,$(exe)))) -$(foreach alias,$(ALIASES),$(eval $(call MAKE_ALIAS,$(alias)))) -$(foreach test,$(TESTS),$(eval $(call TEST_BUILD,$(test)))) - install: $(addprefix build/,$(INSTALLEES)) mkdir -p $(DESTDIR)$(PREFIX)$(BINDIR) for prog in $(INSTALLEES); do \ diff --git a/common.mk b/common.mk deleted file mode 100644 index 364ad7558..000000000 --- a/common.mk +++ /dev/null @@ -1,7 +0,0 @@ -# Binaries -RUSTC ?= rustc -RM := rm - -# Flags -RUSTCFLAGS := --opt-level=3 -RMFLAGS := diff --git a/mkmain.rs b/mkmain.rs index 3f5d89bfa..0a4907ea1 100644 --- a/mkmain.rs +++ b/mkmain.rs @@ -3,7 +3,7 @@ use std::os; use std::path::Path; use std::str::replace; -static TEMPLATE : &'static str = r" +static TEMPLATE: &'static str = "\ extern crate @UTIL_CRATE@; use std::os; diff --git a/mkuutils.rs b/mkuutils.rs index 0d3aa1a8a..f8eac7fb8 100644 --- a/mkuutils.rs +++ b/mkuutils.rs @@ -15,12 +15,18 @@ fn main() { let mut hashsum = false; for prog in args.slice_from(2).iter() { match prog.as_slice() { - "md5sum" | "sha1sum" | "sha224sum" | "sha256sum" | "sha384sum" | "sha512sum" => { + "hashsum" | "md5sum" | "sha1sum" | "sha224sum" | "sha256sum" | "sha384sum" | "sha512sum" => { if !hashsum { crates.push_str("extern crate hashsum;\n"); + util_map.push_str("map.insert(\"hashsum\", hashsum::uumain);\n"); + util_map.push_str("map.insert(\"md5sum\", hashsum::uumain);\n"); + util_map.push_str("map.insert(\"sha1sum\", hashsum::uumain);\n"); + util_map.push_str("map.insert(\"sha224sum\", hashsum::uumain);\n"); + util_map.push_str("map.insert(\"sha256sum\", hashsum::uumain);\n"); + util_map.push_str("map.insert(\"sha384sum\", hashsum::uumain);\n"); + util_map.push_str("map.insert(\"sha512sum\", hashsum::uumain);\n"); hashsum = true; } - util_map.push_str(format!("map.insert(\"{}\", hashsum::uumain);\n", prog).as_slice()); } "test" => { crates.push_str("extern crate uutest;\n"); diff --git a/uutils/uutils.rs b/uutils/uutils.rs index fdb6a97ae..52c0b5386 100644 --- a/uutils/uutils.rs +++ b/uutils/uutils.rs @@ -29,14 +29,13 @@ fn usage(cmap: &HashMap<&'static str, fn(Vec) -> int>) { println!("{} {}", NAME, VERSION); println!(""); println!("Usage:"); - println!(" {} [util [arguments...]", NAME); + println!(" {} [util [arguments...]]\n", NAME); println!("Currently defined functions:"); let mut utils: Vec<&str> = cmap.keys().map(|&s| s).collect(); utils.sort(); for util in utils.iter() { println!("\t{}", util); } - println!(""); } fn main() {