mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-29 03:57:44 +00:00
Force programs to rebuild when a dependency changes
This commit is contained in:
parent
ab0a51fcb0
commit
9b3b8622ed
5 changed files with 41 additions and 29 deletions
48
Makefile
48
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 \
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
# Binaries
|
||||
RUSTC ?= rustc
|
||||
RM := rm
|
||||
|
||||
# Flags
|
||||
RUSTCFLAGS := --opt-level=3
|
||||
RMFLAGS :=
|
|
@ -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;
|
||||
|
|
10
mkuutils.rs
10
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");
|
||||
|
|
|
@ -29,14 +29,13 @@ fn usage(cmap: &HashMap<&'static str, fn(Vec<String>) -> 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() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue