mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-29 12:07:46 +00:00
Merge pull request #766 from nathanross/install
*nix install script and appveyor script
This commit is contained in:
commit
97793313c0
5 changed files with 103 additions and 28 deletions
49
Makefile
49
Makefile
|
@ -1,9 +1,15 @@
|
|||
# Config options
|
||||
PROFILE ?= debug
|
||||
ifneq (,$(filter install, $(MAKECMDGOALS)))
|
||||
override PROFILE:=release
|
||||
override BUILD:=INSTALL
|
||||
override DONT_BUILD:=DONT_INSTALL
|
||||
endif
|
||||
|
||||
MULTICALL ?= n
|
||||
|
||||
PROFILE_CMD :=
|
||||
ifeq (${PROFILE},release)
|
||||
ifeq ($(PROFILE),release)
|
||||
PROFILE_CMD = --release
|
||||
endif
|
||||
|
||||
|
@ -12,11 +18,16 @@ CARGO ?= cargo
|
|||
CARGOFLAGS ?=
|
||||
|
||||
# Install directories
|
||||
FS_ROOT ?= /
|
||||
PREFIX ?= /usr/local
|
||||
BINDIR ?= /bin
|
||||
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
|
||||
# make a symlink without spaces that points to the directory.
|
||||
|
@ -189,11 +200,11 @@ endef
|
|||
EXES := \
|
||||
$(sort $(filter $(BUILD),$(filter-out $(DONT_BUILD),$(PROGS))))
|
||||
|
||||
INSTALL ?= $(EXES)
|
||||
|
||||
INSTALLEES := \
|
||||
$(sort $(filter $(INSTALL),$(filter-out $(DONT_INSTALL),$(EXES) uutils)))
|
||||
|
||||
INSTALL ?= $(EXES)
|
||||
|
||||
# Shared library extension
|
||||
SYSTEM := $(shell uname)
|
||||
DYLIB_EXT :=
|
||||
|
@ -261,26 +272,24 @@ distclean: clean
|
|||
$(CARGO) clean $(CARGOFLAGS) && $(CARGO) update $(CARGOFLAGS)
|
||||
|
||||
# TODO: figure out if there is way for prefixes to work with the symlinks
|
||||
install: build
|
||||
PROFILE_CMD=--release
|
||||
mkdir -p $(INSTALLDIR)$(BINDIR)
|
||||
install: build
|
||||
mkdir -p $(INSTALLDIR_BIN)
|
||||
rm -f $(addprefix $(INSTALLDIR_BIN)/$(PROG_PREFIX),$(INSTALLEES))
|
||||
ifeq (${MULTICALL}, y)
|
||||
install $(BUILDDIR)/uutils $(INSTALLDIR)$(BINDIR)/$(PROG_PREFIX)uutils
|
||||
cd $(INSTALLDIR)$(BINDIR)
|
||||
$(foreach prog, $(INSTALLEES), ln -s $(PROG_PREFIX)uutils $$prog;)
|
||||
install $(BUILDDIR)/uutils $(INSTALLDIR_BIN)/$(PROG_PREFIX)uutils
|
||||
$(foreach prog, $(INSTALLEES), cd $(INSTALLDIR_BIN) && ln -s $(PROG_PREFIX)uutils $(PROG_PREFIX)$(prog);)
|
||||
else
|
||||
$(foreach prog, $(INSTALLEES); \
|
||||
install $(PKG_BUILDDIR)/$$prog $(INSTALLDIR)$(BINDIR)/$(PROG_PREFIX)$$prog;)
|
||||
$(foreach prog, $(INSTALLEES), \
|
||||
install $(PKG_BUILDDIR)/$(prog) $(INSTALLDIR_BIN)/$(PROG_PREFIX)$(prog);)
|
||||
endif
|
||||
mkdir -p $(INSTALLDIR)$(LIBDIR)
|
||||
$(foreach lib, $(LIBS), install $(BUILDDIR)/$$lib $(INSTALLDIR)$(LIBDIR)/$$lib;)
|
||||
mkdir -p $(INSTALLDIR_LIB)
|
||||
$(foreach lib, $(LIBS), install $(BUILDDIR)/$$lib $(INSTALLDIR_LIB)/$(lib);)
|
||||
|
||||
uninstall:
|
||||
rm -f $(addprefix $(INSTALLDIR)$(BINDIR)/$(PROG_PREFIX),$(PROGS))
|
||||
rm -f $(addprefix $(INSTALLDIR)$(LIBDIR)/,$(LIBS))
|
||||
|
||||
uninstall-multicall:
|
||||
rm -f $(addprefix $(INSTALLDIR)$(BINDIR)/,$(PROGS) $(PROG_PREFIX)uutils)
|
||||
rm -f $(addprefix $(INSTALLDIR)$(LIBDIR)/,$(LIBS))
|
||||
ifeq (${MULTICALL}, y)
|
||||
rm -f $(addprefix $(INSTALLDIR_BIN)/,$(PROG_PREFIX)uutils)
|
||||
endif
|
||||
rm -f $(addprefix $(INSTALLDIR_BIN)/$(PROG_PREFIX),$(PROGS))
|
||||
rm -f $(addprefix $(INSTALLDIR_LIB)/,$(LIBS))
|
||||
|
||||
.PHONY: all build test distclean clean busytest install uninstall
|
||||
|
|
16
README.md
16
README.md
|
@ -64,14 +64,19 @@ To install only a few of the available utilities:
|
|||
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
|
||||
```
|
||||
|
||||
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
|
||||
|
@ -89,7 +94,12 @@ make PROG_PREFIX=PREFIX_GOES_HERE uninstall
|
|||
|
||||
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
|
||||
|
|
38
appveyor.yml
Normal file
38
appveyor.yml
Normal file
|
@ -0,0 +1,38 @@
|
|||
platform:
|
||||
- x64
|
||||
|
||||
environment:
|
||||
global:
|
||||
MSYS2_BASEVER: 20150512
|
||||
MSYS2_ARCH: x86_64
|
||||
MBASH: msys64\usr\bin\sh --login -c
|
||||
|
||||
matrix:
|
||||
- TARGET: i686-pc-windows-gnu
|
||||
|
||||
install:
|
||||
- appveyor DownloadFile "http://kent.dl.sourceforge.net/project/msys2/Base/%MSYS2_ARCH%/msys2-base-%MSYS2_ARCH%-%MSYS2_BASEVER%.tar.xz" -FileName "msys2.tar.xz"
|
||||
- 7z x msys2.tar.xz
|
||||
- 7z x msys2.tar > NUL
|
||||
- call %MBASH% ""
|
||||
- call %MBASH% "for i in {1..3}; do pacman --noconfirm -Suy mingw-w64-%MSYS2_ARCH%-{ragel,freetype,icu,gettext} libtool pkg-config gcc make autoconf automake perl && break || sleep 15; done"
|
||||
- ps: Start-FileDownload "https://static.rust-lang.org/dist/rust-nightly-${env:TARGET}.exe"
|
||||
- rust-nightly-%TARGET%.exe /VERYSILENT /NORESTART /DIR="C:\Program Files (x86)\Rust"
|
||||
- call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" amd64
|
||||
- SET PATH=%PATH%;C:\Program Files (x86)\Rust\bin
|
||||
- SET PATH=%PATH%;C:\MinGW\bin
|
||||
- rustc -V
|
||||
- cargo -V
|
||||
|
||||
build_script:
|
||||
- call %MBASH% "cd $APPVEYOR_BUILD_FOLDER; PATH=$PATH:/mingw64/bin:/mingw32/bin; exec 0</dev/null; make PROFILE='release' build"
|
||||
- 7z a -tzip uutils.zip .\target\release\deps\*.exe
|
||||
|
||||
artifacts:
|
||||
- path: uutils.zip
|
||||
name: zipfile
|
||||
- path: target\release\uutils.exe
|
||||
name: uutils.exe
|
||||
|
||||
test_script:
|
||||
- call %MBASH% "cd $APPVEYOR_BUILD_FOLDER; PATH=$PATH:/mingw64/bin:/mingw32/bin; exec 0</dev/null; make test"
|
|
@ -49,14 +49,26 @@ fn main() {
|
|||
None => (),
|
||||
}
|
||||
|
||||
if !(binary_as_util.ends_with("uutils") || binary_as_util.starts_with("uutils")) {
|
||||
println!("{}: applet not found", binary_as_util);
|
||||
std::process::exit(1);
|
||||
if binary_as_util.ends_with("uutils") || binary_as_util.starts_with("uutils") {
|
||||
args.remove(0);
|
||||
} 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.
|
||||
if args.len() >= 2 {
|
||||
args.remove(0);
|
||||
if args.len() >= 1 {
|
||||
|
||||
let util = &args[0][..];
|
||||
|
||||
match umap.get(util) {
|
||||
|
|
|
@ -16,7 +16,13 @@ use std::ffi::OsStr;
|
|||
use self::tempdir::TempDir;
|
||||
use std::rc::Rc;
|
||||
|
||||
#[cfg(windows)]
|
||||
static PROGNAME: &'static str = "target\\debug\\uutils.exe";
|
||||
#[cfg(windows)]
|
||||
static FIXTURES_DIR: &'static str = "tests\\fixtures";
|
||||
#[cfg(not(windows))]
|
||||
static PROGNAME: &'static str = "target/debug/uutils";
|
||||
#[cfg(not(windows))]
|
||||
static FIXTURES_DIR: &'static str = "tests/fixtures";
|
||||
static ALREADY_RUN: &'static str = " you have already run this UCommand, if you want to run \
|
||||
another command in the same test, use TestSet::new instead of \
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue