1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-29 12:07:46 +00:00

fixes for linux install see notes

calling install goal overrides utility build settings with utility install settings
calling install goal defaults profile to --release
PROG_PREFIX is now applied to all utilities
modify uutils.rs to make symbolic link bins possible
binary install paths rmd first to prevent errors due to lns
simplify vars for more readable install target
other minor fixes
This commit is contained in:
Nathan Ross 2015-12-23 23:14:55 -05:00
parent eab6c294d6
commit d99d5c1338
3 changed files with 59 additions and 28 deletions

View file

@ -1,9 +1,15 @@
# Config options # Config options
PROFILE ?= debug PROFILE ?= debug
ifneq (,$(filter install, $(MAKECMDGOALS)))
override PROFILE:=release
override BUILD:=INSTALL
override DONT_BUILD:=DONT_INSTALL
endif
MULTICALL ?= n MULTICALL ?= n
PROFILE_CMD := PROFILE_CMD :=
ifeq (${PROFILE},release) ifeq ($(PROFILE),release)
PROFILE_CMD = --release PROFILE_CMD = --release
endif endif
@ -12,11 +18,16 @@ CARGO ?= cargo
CARGOFLAGS ?= CARGOFLAGS ?=
# Install directories # Install directories
FS_ROOT ?= /
PREFIX ?= /usr/local PREFIX ?= /usr/local
BINDIR ?= /bin BINDIR ?= /bin
LIBDIR ?= /lib LIBDIR ?= /lib
INSTALLDIR=$(DESTDIR)$(PREFIX) INSTALLDIR_BIN=$(FS_ROOT)$(PREFIX)$(BINDIR)
INSTALLDIR_LIB=$(FS_ROOT)$(PREFIX)$(LIBDIR)
#prefix to apply to uutils binary and all tool binaries
PROG_PREFIX ?=
# This won't support any directory with spaces in its name, but you can just # This won't support any directory with spaces in its name, but you can just
# make a symlink without spaces that points to the directory. # make a symlink without spaces that points to the directory.
@ -189,11 +200,11 @@ endef
EXES := \ EXES := \
$(sort $(filter $(BUILD),$(filter-out $(DONT_BUILD),$(PROGS)))) $(sort $(filter $(BUILD),$(filter-out $(DONT_BUILD),$(PROGS))))
INSTALL ?= $(EXES)
INSTALLEES := \ INSTALLEES := \
$(sort $(filter $(INSTALL),$(filter-out $(DONT_INSTALL),$(EXES) uutils))) $(sort $(filter $(INSTALL),$(filter-out $(DONT_INSTALL),$(EXES) uutils)))
INSTALL ?= $(EXES)
# Shared library extension # Shared library extension
SYSTEM := $(shell uname) SYSTEM := $(shell uname)
DYLIB_EXT := DYLIB_EXT :=
@ -261,26 +272,24 @@ distclean: clean
$(CARGO) clean $(CARGOFLAGS) && $(CARGO) update $(CARGOFLAGS) $(CARGO) clean $(CARGOFLAGS) && $(CARGO) update $(CARGOFLAGS)
# TODO: figure out if there is way for prefixes to work with the symlinks # TODO: figure out if there is way for prefixes to work with the symlinks
install: build install: build
PROFILE_CMD=--release mkdir -p $(INSTALLDIR_BIN)
mkdir -p $(INSTALLDIR)$(BINDIR) rm -f $(addprefix $(INSTALLDIR_BIN)/$(PROG_PREFIX),$(INSTALLEES))
ifeq (${MULTICALL}, y) ifeq (${MULTICALL}, y)
install $(BUILDDIR)/uutils $(INSTALLDIR)$(BINDIR)/$(PROG_PREFIX)uutils install $(BUILDDIR)/uutils $(INSTALLDIR_BIN)/$(PROG_PREFIX)uutils
cd $(INSTALLDIR)$(BINDIR) $(foreach prog, $(INSTALLEES), cd $(INSTALLDIR_BIN) && ln -s $(PROG_PREFIX)uutils $(PROG_PREFIX)$(prog);)
$(foreach prog, $(INSTALLEES), ln -s $(PROG_PREFIX)uutils $$prog;)
else else
$(foreach prog, $(INSTALLEES); \ $(foreach prog, $(INSTALLEES), \
install $(PKG_BUILDDIR)/$$prog $(INSTALLDIR)$(BINDIR)/$(PROG_PREFIX)$$prog;) install $(PKG_BUILDDIR)/$(prog) $(INSTALLDIR_BIN)/$(PROG_PREFIX)$(prog);)
endif endif
mkdir -p $(INSTALLDIR)$(LIBDIR) mkdir -p $(INSTALLDIR_LIB)
$(foreach lib, $(LIBS), install $(BUILDDIR)/$$lib $(INSTALLDIR)$(LIBDIR)/$$lib;) $(foreach lib, $(LIBS), install $(BUILDDIR)/$$lib $(INSTALLDIR_LIB)/$(lib);)
uninstall: uninstall:
rm -f $(addprefix $(INSTALLDIR)$(BINDIR)/$(PROG_PREFIX),$(PROGS)) ifeq (${MULTICALL}, y)
rm -f $(addprefix $(INSTALLDIR)$(LIBDIR)/,$(LIBS)) rm -f $(addprefix $(INSTALLDIR_BIN)/,$(PROG_PREFIX)uutils)
endif
uninstall-multicall: rm -f $(addprefix $(INSTALLDIR_BIN)/$(PROG_PREFIX),$(PROGS))
rm -f $(addprefix $(INSTALLDIR)$(BINDIR)/,$(PROGS) $(PROG_PREFIX)uutils) rm -f $(addprefix $(INSTALLDIR_LIB)/,$(LIBS))
rm -f $(addprefix $(INSTALLDIR)$(LIBDIR)/,$(LIBS))
.PHONY: all build test distclean clean busytest install uninstall .PHONY: all build test distclean clean busytest install uninstall

View file

@ -64,14 +64,19 @@ To install only a few of the available utilities:
make INSTALL='UTILITY_1 UTILITY_2' install make INSTALL='UTILITY_1 UTILITY_2' install
``` ```
To install every program with a prefix: To install every program with a prefix (e.g. uu-echo uu-cat):
``` ```
make PROG_PREFIX=PREFIX_GOES_HERE install make PROG_PREFIX=PREFIX_GOES_HERE install
``` ```
To install the multicall binary: To install the multicall binary:
``` ```
make install-multicall make MULTICALL=y install
```
Set install parent directory (default value is /usr/local):
```
make PREFIX=/my/path install
``` ```
Uninstallation Instructions Uninstallation Instructions
@ -89,7 +94,12 @@ make PROG_PREFIX=PREFIX_GOES_HERE uninstall
To uninstall the multicall binary: To uninstall the multicall binary:
``` ```
make uninstall-multicall make MULTICALL=y uninstall
```
To uninstall from a custom parent directory:
```
make PREFIX=/my/path uninstall
``` ```
Test Instructions Test Instructions

View file

@ -49,14 +49,26 @@ fn main() {
None => (), None => (),
} }
if !(binary_as_util.ends_with("uutils") || binary_as_util.starts_with("uutils")) { if binary_as_util.ends_with("uutils") || binary_as_util.starts_with("uutils") {
println!("{}: applet not found", binary_as_util); args.remove(0);
std::process::exit(1); } else {
let mut found = false;
for util in umap.keys() {
if binary_as_util.ends_with(util) {
args[0] = util.clone().to_owned();
found = true;
break;
}
}
if ! found {
println!("{}: applet not found", binary_as_util);
std::process::exit(1);
}
} }
// try first arg as util name. // try first arg as util name.
if args.len() >= 2 { if args.len() >= 1 {
args.remove(0);
let util = &args[0][..]; let util = &args[0][..];
match umap.get(util) { match umap.get(util) {