From 502957dc3e005403a1294e094e1667b9630a8891 Mon Sep 17 00:00:00 2001 From: Nathan Ross Date: Sun, 22 Nov 2015 15:45:04 -0500 Subject: [PATCH] use cargo idioms to manage dependency resolution and compilation --- .gitignore | 5 - Cargo.toml | 5 +- Makefile | 353 +++++++------------------------------ appveyor.yml | 33 ---- deps/Cargo.toml | 25 --- mkmain.rs | 49 ----- mkuutils.rs | 63 ------- src/base64/Cargo.toml | 4 + src/base64/base64.rs | 5 + src/base64/deps.mk | 1 - src/basename/Cargo.toml | 4 + src/basename/basename.rs | 5 + src/cat/Cargo.toml | 4 + src/cat/cat.rs | 5 + src/chmod/Cargo.toml | 4 + src/chmod/chmod.rs | 5 + src/chmod/deps.mk | 1 - src/chroot/Cargo.toml | 4 + src/chroot/chroot.rs | 5 + src/cksum/Cargo.toml | 4 + src/cksum/cksum.rs | 5 + src/comm/Cargo.toml | 4 + src/comm/comm.rs | 5 + src/cp/Cargo.toml | 4 + src/cp/cp.rs | 5 + src/cut/.gitignore | 1 + src/cut/Cargo.toml | 4 + src/cut/cut.rs | 5 + src/dirname/Cargo.toml | 4 + src/dirname/dirname.rs | 5 + src/du/Cargo.toml | 4 + src/du/deps.mk | 1 - src/du/du.rs | 5 + src/echo/Cargo.toml | 4 + src/echo/echo.rs | 5 + src/env/Cargo.toml | 4 + src/env/env.rs | 5 + src/expand/Cargo.toml | 4 + src/expand/deps.mk | 1 - src/expand/expand.rs | 5 + src/expr/Cargo.toml | 4 + src/expr/expr.rs | 5 + src/factor/Cargo.toml | 4 + src/factor/deps.mk | 1 - src/factor/factor.rs | 5 + src/false/Cargo.toml | 4 + src/false/false.rs | 5 + src/fmt/Cargo.toml | 4 + src/fmt/deps.mk | 1 - src/fmt/fmt.rs | 5 + src/fold/Cargo.toml | 4 + src/fold/fold.rs | 5 + src/groups/Cargo.toml | 4 + src/groups/groups.rs | 5 + src/hashsum/Cargo.toml | 4 + src/hashsum/deps.mk | 1 - src/hashsum/hashsum.rs | 5 + src/head/Cargo.toml | 4 + src/head/head.rs | 5 + src/hostid/Cargo.toml | 4 + src/hostid/hostid.rs | 5 + src/hostname/Cargo.toml | 4 + src/hostname/hostname.rs | 5 + src/id/Cargo.toml | 4 + src/id/id.rs | 5 + src/kill/Cargo.toml | 4 + src/kill/kill.rs | 5 + src/link/Cargo.toml | 4 + src/link/link.rs | 5 + src/ln/Cargo.toml | 4 + src/ln/ln.rs | 5 + src/logname/Cargo.toml | 4 + src/logname/logname.rs | 5 + src/mkdir/Cargo.toml | 4 + src/mkdir/mkdir.rs | 5 + src/mkfifo/Cargo.toml | 4 + src/mkfifo/mkfifo.rs | 5 + src/mv/Cargo.toml | 6 + src/mv/deps.mk | 1 - src/mv/mv.rs | 5 + src/nice/Cargo.toml | 4 + src/nice/nice.rs | 5 + src/nl/Cargo.toml | 4 + src/nl/deps.mk | 1 - src/nl/nl.rs | 5 + src/nohup/Cargo.toml | 4 + src/nohup/nohup.rs | 7 +- src/nproc/Cargo.toml | 4 + src/nproc/deps.mk | 1 - src/nproc/nproc.rs | 7 +- src/od/Cargo.toml | 4 + src/od/od.rs | 9 +- src/paste/Cargo.toml | 4 + src/paste/paste.rs | 5 + src/printenv/Cargo.toml | 4 + src/printenv/printenv.rs | 7 +- src/ptx/Cargo.toml | 4 + src/ptx/deps.mk | 1 - src/ptx/ptx.rs | 5 + src/pwd/Cargo.toml | 4 + src/pwd/pwd.rs | 7 +- src/readlink/Cargo.toml | 4 + src/readlink/readlink.rs | 5 + src/realpath/Cargo.toml | 4 + src/realpath/realpath.rs | 5 + src/relpath/Cargo.toml | 4 + src/relpath/relpath.rs | 5 + src/rm/Cargo.toml | 4 + src/rm/rm.rs | 5 + src/rmdir/Cargo.toml | 4 + src/rmdir/rmdir.rs | 5 + src/seq/Cargo.toml | 4 + src/seq/seq.rs | 5 + src/shuf/Cargo.toml | 4 + src/shuf/deps.mk | 1 - src/shuf/shuf.rs | 5 + src/sleep/Cargo.toml | 4 + src/sleep/sleep.rs | 5 + src/sort/Cargo.toml | 4 + src/sort/sort.rs | 5 + src/split/Cargo.toml | 4 + src/split/deps.mk | 1 - src/split/split.rs | 5 + src/stdbuf/Cargo.toml | 16 ++ src/stdbuf/stdbuf.rs | 8 +- src/sum/Cargo.toml | 4 + src/sum/sum.rs | 5 + src/sync/Cargo.toml | 4 + src/sync/deps.mk | 1 - src/sync/sync.rs | 5 + src/tac/Cargo.toml | 4 + src/tac/tac.rs | 5 + src/tail/Cargo.toml | 4 + src/tail/tail.rs | 5 + src/tee/Cargo.toml | 4 + src/tee/tee.rs | 5 + src/test/Cargo.toml | 4 + src/test/test.rs | 5 + src/timeout/Cargo.toml | 4 + src/timeout/deps.mk | 1 - src/timeout/timeout.rs | 5 + src/touch/Cargo.toml | 4 + src/touch/deps.mk | 1 - src/touch/touch.rs | 5 + src/tr/Cargo.toml | 4 + src/tr/deps.mk | 1 - src/tr/tr.rs | 5 + src/true/Cargo.toml | 4 + src/true/true.rs | 6 + src/truncate/Cargo.toml | 4 + src/truncate/truncate.rs | 5 + src/tsort/Cargo.toml | 4 + src/tsort/tsort.rs | 5 + src/tty/Cargo.toml | 4 + src/tty/tty.rs | 5 + src/uname/Cargo.toml | 4 + src/uname/uname.rs | 5 + src/unexpand/Cargo.toml | 4 + src/unexpand/deps.mk | 1 - src/unexpand/unexpand.rs | 5 + src/uniq/Cargo.toml | 4 + src/uniq/uniq.rs | 5 + src/unlink/Cargo.toml | 4 + src/unlink/unlink.rs | 5 + src/uptime/Cargo.toml | 4 + src/uptime/deps.mk | 1 - src/uptime/uptime.rs | 5 + src/users/Cargo.toml | 4 + src/users/users.rs | 5 + src/uutils/uutils.rs | 24 +-- src/uutils/uutils_cargo.rs | 107 ----------- src/wc/Cargo.toml | 4 + src/wc/wc.rs | 5 + src/whoami/Cargo.toml | 4 + src/whoami/deps.mk | 1 - src/whoami/whoami.rs | 5 + src/yes/Cargo.toml | 4 + src/yes/yes.rs | 5 + 178 files changed, 765 insertions(+), 616 deletions(-) delete mode 100644 appveyor.yml delete mode 100644 deps/Cargo.toml delete mode 100644 mkmain.rs delete mode 100644 mkuutils.rs delete mode 100644 src/base64/deps.mk delete mode 100644 src/chmod/deps.mk create mode 100644 src/cut/.gitignore delete mode 100644 src/du/deps.mk delete mode 100644 src/expand/deps.mk delete mode 100644 src/factor/deps.mk delete mode 100644 src/fmt/deps.mk delete mode 100644 src/hashsum/deps.mk delete mode 100644 src/mv/deps.mk delete mode 100644 src/nl/deps.mk delete mode 100644 src/nproc/deps.mk delete mode 100644 src/ptx/deps.mk delete mode 100644 src/shuf/deps.mk delete mode 100644 src/split/deps.mk create mode 100644 src/stdbuf/Cargo.toml delete mode 100644 src/sync/deps.mk delete mode 100644 src/timeout/deps.mk delete mode 100644 src/touch/deps.mk delete mode 100644 src/tr/deps.mk delete mode 100644 src/unexpand/deps.mk delete mode 100644 src/uptime/deps.mk delete mode 100644 src/uutils/uutils_cargo.rs delete mode 100644 src/whoami/deps.mk diff --git a/.gitignore b/.gitignore index 65b62036a..37ee9f928 100644 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1,7 @@ /src/*/gen_table -/build/ /target/ /tmp/ /busybox/ -/deps/regex/ -/deps/rust-crypto/ -/deps/target/ -/deps/time/ *~ .*.swp .*.swo diff --git a/Cargo.toml b/Cargo.toml index dff7e660c..5313c1978 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,6 +4,7 @@ version = "0.0.1" authors = [] build = "build.rs" + [features] default = ["all"] all = [ @@ -58,6 +59,7 @@ all = [ "sleep", "sort", "split", + "stdbuf", "sum", "sync", "tac", @@ -134,6 +136,7 @@ shuf = { optional=true, path="src/shuf" } sleep = { optional=true, path="src/sleep" } sort = { optional=true, path="src/sort" } split = { optional=true, path="src/split" } +stdbuf = { optional=true, path="src/stdbuf" } sum = { optional=true, path="src/sum" } sync = { optional=true, path="src/sync" } tac = { optional=true, path="src/tac" } @@ -173,5 +176,5 @@ tempdir="*" [[bin]] name="uutils" -path="src/uutils/uutils_cargo.rs" +path="src/uutils/uutils.rs" diff --git a/Makefile b/Makefile index 4019bc9e3..07828acf7 100644 --- a/Makefile +++ b/Makefile @@ -1,43 +1,30 @@ # Config options -ENABLE_LTO ?= n -ENABLE_STRIP ?= n +ENABLE_RELEASE ?= n +PROFILE ?= debug +MULTICALL ?= n + +PROFILE_CMD := +ifeq (${PROFILE},release) + PROFILE_CMD = --release +endif # Binaries -RUSTC ?= rustc CARGO ?= cargo -CC ?= gcc -RM := rm # Install directories PREFIX ?= /usr/local BINDIR ?= /bin LIBDIR ?= /lib +INSTALLDIR=$(DESTDIR)$(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. BASEDIR ?= $(shell pwd) -SRCDIR := $(BASEDIR)/src -BUILDDIR := $(BASEDIR)/build -TESTDIR := $(BASEDIR)/tests -TEMPDIR := $(BASEDIR)/tmp +BUILDDIR := $(BASEDIR)/target/${PROFILE}/ +PKG_BUILDDIR := $(BUILDDIR)/deps/ -# Flags -RUSTCFLAGS := -O -RMFLAGS := -RUSTCLIBFLAGS := $(RUSTCFLAGS) -L $(BUILDDIR)/ -RUSTCTESTFLAGS := $(RUSTCFLAGS) - -# Handle config setup -ifeq ($(ENABLE_LTO),y) -RUSTCBINFLAGS := $(RUSTCLIBFLAGS) -C lto -else -RUSTCBINFLAGS := $(RUSTCLIBFLAGS) -endif - -ifneq ($(ENABLE_STRIP),y) -ENABLE_STRIP := -endif # Possible programs PROGS := \ @@ -83,7 +70,7 @@ PROGS := \ sync \ tac \ tee \ - test \ + test_uu \ tr \ true \ truncate \ @@ -132,17 +119,20 @@ ALIASES := \ BUILD ?= $(PROGS) +TESTS := \ + $(filter $(PROGS),$(filter-out $(DONT_TEST),$(filter $(BUILD),$(filter-out $(DONT_BUILD),$(TEST_PROGS))))) + +TEST ?= $(TEST_PROGS) + # Output names EXES := \ $(sort $(filter $(BUILD),$(filter-out $(DONT_BUILD),$(PROGS)))) -CRATE_RLIBS := - -INSTALL ?= $(EXES) - INSTALLEES := \ $(filter $(INSTALL),$(filter-out $(DONT_INSTALL),$(EXES) uutils)) +INSTALL ?= $(EXES) + # Shared library extension SYSTEM := $(shell uname) DYLIB_EXT := @@ -161,282 +151,57 @@ ifneq (,$(findstring stdbuf, $(INSTALLEES))) LIBS += libstdbuf.$(DYLIB_EXT) endif -# Programs with usable tests -TEST_PROGS := \ - base64 \ - basename \ - cat \ - cksum \ - cp \ - cut \ - env \ - dirname \ - echo \ - factor \ - false \ - fold \ - hashsum \ - head \ - link \ - ln \ - mkdir \ - mv \ - nl \ - paste \ - ptx \ - pwd \ - readlink \ - realpath \ - rm \ - rmdir \ - seq \ - sort \ - split \ - stdbuf \ - sum \ - tac \ - test \ - touch \ - tr \ - true \ - truncate \ - tsort \ - unlink \ - unexpand \ - wc - -TEST ?= $(TEST_PROGS) - -TESTS := \ - $(filter $(TEST),$(filter-out $(DONT_TEST),$(filter $(BUILD),$(filter-out $(DONT_BUILD),$(TEST_PROGS))))) - -# figure out what dependencies we need based on which programs we're building -define DEP_INCLUDE --include $(SRCDIR)/$(1)/deps.mk -endef -# we always depend on libc because common/util does -# we also depend on getopts since all utilities support command-line arguments -DEPLIBS := libc getopts -DEPPLUGS := -# now, add in deps in src/utilname/deps.mk -# if we're testing, only consider the TESTS variable, -# otherwise consider the EXES variable -ifeq ($(MAKECMDGOALS),test) -$(foreach build,$(TESTS),$(eval $(call DEP_INCLUDE,$(build)))) -else -$(foreach build,$(sort $(TESTS) $(EXES)),$(eval $(call DEP_INCLUDE,$(build)))) -endif -# uniqify deps -DEPLIBS := $(sort $(DEPLIBS)) -DEPPLUGS := $(sort $(DEPPLUGS)) -# build --extern commandline for rustc -DEP_EXTERN := $(foreach lib,$(subst -,_,$(DEPLIBS)),--extern $(lib)=$(BUILDDIR)/lib$(lib).rlib) -DEP_EXTERN += $(foreach plug,$(subst -,_,$(DEPPLUGS)),--extern $(plug)=$(BUILDDIR)/lib$(plug).$(DYLIB_EXT)) - -# Setup for building crates -define BUILD_SETUP -X := $(shell $(RUSTC) --print file-names --crate-type rlib $(SRCDIR)/$(1)/$(1).rs) -$(1)_RLIB := $$(X) -CRATE_RLIBS += $$(X) -endef -$(foreach crate,$(EXES),$(eval $(call BUILD_SETUP,$(crate)))) - -# Utils stuff -EXES_PATHS := $(addprefix $(BUILDDIR)/,$(EXES)) -RLIB_PATHS := $(addprefix $(BUILDDIR)/,$(CRATE_RLIBS)) -command = sh -c '$(1)' -RESERVED_EXTERNS := --extern uufalse=$(BUILDDIR)/libfalse.rlib --extern uutrue=$(BUILDDIR)/libtrue.rlib --extern uutest=$(BUILDDIR)/libtest.rlib - -# Main exe build rule -define EXE_BUILD -$(BUILDDIR)/gen/$(1).rs: $(BUILDDIR)/mkmain - $(BUILDDIR)/mkmain $(1) $$@ - -$(BUILDDIR)/$(1): $(BUILDDIR)/gen/$(1).rs $(BUILDDIR)/$($(1)_RLIB) | $(BUILDDIR) deps - $(RUSTC) $(RUSTCBINFLAGS) $(RESERVED_EXTERNS) -o $$@ $$< - $(if $(ENABLE_STRIP),strip $$@,) -endef - -# GRRR rust-crypto makes a crate called "crypto". -# This should NOT be allowed by crates.io. GRRRR. -define DEP_BUILD -DEP_$(1): -ifeq ($(1),crypto) - cd $(BASEDIR)/deps && $(CARGO) build --package rust-crypto --release -else ifeq ($(1),kernel32) - cd $(BASEDIR)/deps && $(CARGO) build --package kernel32-sys --release -else ifeq ($(1),advapi32) - cd $(BASEDIR)/deps && $(CARGO) build --package advapi32-sys --release -else - cd $(BASEDIR)/deps && $(CARGO) build --package $(1) --release -endif -endef - -define CRATE_BUILD --include $(BUILDDIR)/$(1).d - -$(BUILDDIR)/$($(1)_RLIB): $(SRCDIR)/$(1)/$(1).rs | $(BUILDDIR) deps - $(RUSTC) $(RUSTCLIBFLAGS) $(DEP_EXTERN) --crate-type rlib --emit link,dep-info $$< --out-dir $(BUILDDIR) -endef - -# Aliases build rule -ALIAS_SOURCE = $(firstword $(subst :, ,$(1))) -ALIAS_TARGET = $(word 2,$(subst :, ,$(1))) -define MAKE_ALIAS - -ifneq ($(ALIAS_TARGET,$(1)),) -all: $(BUILDDIR)/$(call ALIAS_TARGET,$(1)) -$(BUILDDIR)/$(call ALIAS_TARGET,$(1)): $(BUILDDIR)/$(call ALIAS_SOURCE,$(1)) - $(call command,install $$@ $$<) -endif - -endef - -# Test exe built rules -define TEST_BUILD -test_$(1): $(BUILDDIR)/$(1) $(TEMPDIR)/$(1)/$(1)_test - $(call command,cp $(BUILDDIR)/$(1) $(TEMPDIR)/$(1) && cd $(TEMPDIR)/$(1) && $(TEMPDIR)/$(1)/$(1)_test) - -$(TEMPDIR)/$(1)/$(1)_test: $(TESTDIR)/$(1).rs | $(TEMPDIR)/$(1) - $(call command,$(RUSTC) $(RUSTCTESTFLAGS) $(DEP_EXTERN) --test -o $$@ $$<) - -$(TEMPDIR)/$(1): | $(TEMPDIR) - $(call command,cp -r $(TESTDIR)/fixtures/$(1) $$@ || mkdir $$@) -endef - -# Main rules -all: $(EXES_PATHS) $(BUILDDIR)/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)))) -$(foreach dep,$(sort $(DEPLIBS) $(DEPPLUGS)),$(eval $(call DEP_BUILD,$(dep)))) - --include $(BUILDDIR)/uutils.d -$(BUILDDIR)/uutils: $(SRCDIR)/uutils/uutils.rs $(BUILDDIR)/mkuutils $(RLIB_PATHS) - $(BUILDDIR)/mkuutils $(BUILDDIR)/gen/uutils.rs $(EXES) - $(RUSTC) $(RUSTCBINFLAGS) $(RESERVED_EXTERNS) --emit link,dep-info $(BUILDDIR)/gen/uutils.rs --out-dir $(BUILDDIR) - $(if $(ENABLE_STRIP),strip $@) - -# Library for stdbuf -$(BUILDDIR)/libstdbuf.$(DYLIB_EXT): $(SRCDIR)/stdbuf/libstdbuf.rs $(SRCDIR)/stdbuf/libstdbuf.c $(SRCDIR)/stdbuf/libstdbuf.h | $(BUILDDIR) - cd $(SRCDIR)/stdbuf && \ - $(RUSTC) libstdbuf.rs --extern libc=$(BUILDDIR)/liblibc.rlib && \ - $(CC) -c -Wall -Werror -fPIC libstdbuf.c && \ - $(CC) $(DYLIB_FLAGS) -o libstdbuf.$(DYLIB_EXT) liblibstdbuf.a libstdbuf.o && \ - mv *.$(DYLIB_EXT) $(BUILDDIR) && $(RM) *.o && $(RM) *.a - -$(BUILDDIR)/stdbuf: $(BUILDDIR)/libstdbuf.$(DYLIB_EXT) - -deps: $(BUILDDIR) $(SRCDIR)/cksum/crc_table.rs $(addprefix DEP_,$(DEPLIBS) $(DEPPLUGS)) - $(foreach lib,$(subst -,_,$(DEPLIBS)),$(shell cp $(BASEDIR)/deps/target/release/deps/lib$(lib)-*.rlib $(BUILDDIR)/lib$(lib).rlib)) - $(foreach plug,$(subst -,_,$(DEPPLUGS)),$(shell cp $(BASEDIR)/deps/target/release/deps/lib$(plug)-*.$(DYLIB_EXT) $(BUILDDIR)/lib$(plug).$(DYLIB_EXT))) - -$(BUILDDIR)/mkmain: mkmain.rs | $(BUILDDIR) - $(RUSTC) $(RUSTCFLAGS) $< -o $@ - -$(BUILDDIR)/mkuutils: mkuutils.rs | $(BUILDDIR) - $(RUSTC) $(RUSTCFLAGS) $< -o $@ - -$(SRCDIR)/cksum/crc_table.rs: $(SRCDIR)/cksum/gen_table.rs - cd $(SRCDIR)/cksum && $(RUSTC) $(RUSTCBINFLAGS) gen_table.rs && ./gen_table && $(RM) gen_table - -$(SRCDIR)/factor/prime_table.rs: $(SRCDIR)/factor/gen_table.rs - cd $(SRCDIR)/factor && $(RUSTC) $(RUSTCBINFLAGS) gen_table.rs && ./gen_table > $@ && $(RM) gen_table +all: build crates: - echo $(EXES) + echo "okay" $(EXES) -test: $(TEMPDIR) $(addprefix test_,$(TESTS)) - $(RM) -rf $(TEMPDIR) +build_uutils = ${CARGO} build --features "${1}" ${PROFILE_CMD} --no-default-features +build_pkg = ${CARGO} build ${PROFILE_CMD} -p "${1}" +run_integration_tests = ${CARGO} test --test "${1}" +run_unit_tests = ${CARGO} test -p "${l}" +do_install = install ${1} +use_default := 1 + +test: + $(call build_uutils, ${TESTS}) + $(foreach util, ${TESTS}, $(call run_integration_tests, ${util});) + $(foreach util, ${TESTS}, $(call run_unit_tests, ${util});) + +build: + $(call build_uutils,${EXES}) + $(foreach util, ${EXES}, $(call build_pkg,${util});) clean: - $(RM) -rf $(BUILDDIR) $(TEMPDIR) + $(RM) -rf $(BUILDDIR) distclean: clean - cd $(BASEDIR)/deps && $(CARGO) clean && $(CARGO) update + $(CARGO) clean && $(CARGO) update -$(BUILDDIR): - mkdir -p $(BUILDDIR)/gen - -$(TEMPDIR): - $(RM) -rf $(TEMPDIR) - mkdir $(TEMPDIR) - -install: $(addprefix $(BUILDDIR)/,$(INSTALLEES)) - mkdir -p $(DESTDIR)$(PREFIX)$(BINDIR) - for prog in $(INSTALLEES); do \ - install $(BUILDDIR)/$$prog $(DESTDIR)$(PREFIX)$(BINDIR)/$(PROG_PREFIX)$$prog; \ - done - mkdir -p $(DESTDIR)$(PREFIX)$(LIBDIR) - for lib in $(LIBS); do \ - install $(BUILDDIR)/$$lib $(DESTDIR)$(PREFIX)$(LIBDIR)/$$lib; \ - done +build-check: build clean +test-check: test clean # TODO: figure out if there is way for prefixes to work with the symlinks -install-multicall: $(BUILDDIR)/uutils - mkdir -p $(DESTDIR)$(PREFIX)$(BINDIR) - install $(BUILDDIR)/uutils $(DESTDIR)$(PREFIX)$(BINDIR)/$(PROG_PREFIX)uutils - cd $(DESTDIR)$(PREFIX)$(BINDIR) - for prog in $(INSTALLEES); do \ - ln -s $(PROG_PREFIX)uutils $$prog; \ - done - mkdir -p $(DESTDIR)$(PREFIX)$(LIBDIR) - for lib in $(LIBS); do \ - install $(BUILDDIR)/$$lib $(DESTDIR)$(PREFIX)$(LIBDIR)/$$lib; \ - done +install: build + PROFILE_CMD=--release + mkdir -p $(INSTALLDIR)$(BINDIR) +ifeq (${MULTICALL}, y) + install $(BUILDDIR)/uutils $(INSTALLDIR)$(BINDIR)/$(PROG_PREFIX)uutils + cd $(INSTALLDIR)$(BINDIR) + $(foreach prog, $(INSTALLEES), ln -s $(PROG_PREFIX)uutils $$prog;) +else + $(foreach prog, $(INSTALLEES); \ + install $(PKG_BUILDDIR)/$$prog $(INSTALLDIR)$(BINDIR)/$(PROG_PREFIX)$$prog;) +endif + mkdir -p $(INSTALLDIR)$(LIBDIR) + $(foreach lib, $(LIBS), install $(BUILDDIR)/$$lib $(INSTALLDIR)$(LIBDIR)/$$lib;) uninstall: - rm -f $(addprefix $(DESTDIR)$(PREFIX)$(BINDIR)/$(PROG_PREFIX),$(PROGS)) - rm -f $(addprefix $(DESTDIR)$(PREFIX)$(LIBDIR)/,$(LIBS)) + rm -f $(addprefix $(INSTALLDIR)$(BINDIR)/$(PROG_PREFIX),$(PROGS)) + rm -f $(addprefix $(INSTALLDIR)$(LIBDIR)/,$(LIBS)) uninstall-multicall: - rm -f $(addprefix $(DESTDIR)$(PREFIX)$(BINDIR)/,$(PROGS) $(PROG_PREFIX)uutils) - rm -f $(addprefix $(DESTDIR)$(PREFIX)$(LIBDIR)/,$(LIBS)) + rm -f $(addprefix $(INSTALLDIR)$(BINDIR)/,$(PROGS) $(PROG_PREFIX)uutils) + rm -f $(addprefix $(INSTALLDIR)$(LIBDIR)/,$(LIBS)) -# Test under the busybox testsuite -$(BUILDDIR)/busybox: $(BUILDDIR)/uutils - rm -f $(BUILDDIR)/busybox - ln -s $(BUILDDIR)/uutils $(BUILDDIR)/busybox - -# This is a busybox-specific config file their test suite wants to parse. -$(BUILDDIR)/.config: $(BASEDIR)/.busybox-config $(BUILDDIR)/uutils - cp $< $@ - -ifeq ($(BUSYBOX_SRC),) -busytest: - @echo - @echo "To run \`busytest\` set BUSYBOX_SRC to the directory of the compiled busybox source code." - @echo "Optionally set RUNTEST_ARGS to arguments to pass to the busybox \`runtest\` program." - @echo - @false -else -busytest: $(BUILDDIR)/busybox $(BUILDDIR)/.config - (cd $(BUSYBOX_SRC)/testsuite && bindir=$(BUILDDIR) ./runtest $(RUNTEST_ARGS)) -endif - -# This rule will build each program, ignore all output, and return pass -# or fail depending on whether the build has errors. -build-check: - @for prog in $(sort $(PROGS)); do \ - make BUILD="$$prog" >/dev/null 2>&1; status=$$?; \ - if [ $$status -eq 0 ]; \ - then printf "%-10s\t\033[1;32mpass\033[00;m\n" $$prog; \ - else printf "%-10s\t\033[1;31mfail\033[00;m\n" $$prog; \ - fi; \ - done - -# This rule will test each program, ignore all output, and return pass -# or fail depending on whether the test has errors. -test-check: - @for prog in $(sort $(TEST_PROGS)); do \ - make TEST="$$prog" test >/dev/null 2>&1; status=$$?; \ - if [ $$status -eq 0 ]; \ - then printf "%-10s\t\033[1;32mpass\033[00;m\n" $$prog; \ - else printf "%-10s\t\033[1;31mfail\033[00;m\n" $$prog; \ - fi; \ - done - -.PHONY: $(TEMPDIR) all deps test distclean clean busytest install uninstall +.PHONY: $(TEMPDIR) all build test distclean clean busytest install uninstall diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index b571c1390..000000000 --- a/appveyor.yml +++ /dev/null @@ -1,33 +0,0 @@ -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 = env::args().collect(); - if args.len() != 3 { - println!("usage: mkbuild "); - std::process::exit(1); - } - - let crat = match &args[1][..] { - "false" => "uufalse", - "test" => "uutest", - "true" => "uutrue", - _ => &args[1][..], - }; - let outfile = &args[2][..]; - - let main = TEMPLATE.replace("@UTIL_CRATE@", crat); - match File::create(outfile) { - Ok(mut out) => match out.write_all(main.as_bytes()) { - Err(e) => panic!("{}", e), - _ => (), - }, - Err(e) => panic!("{}", e), - } -} diff --git a/mkuutils.rs b/mkuutils.rs deleted file mode 100644 index 772b68435..000000000 --- a/mkuutils.rs +++ /dev/null @@ -1,63 +0,0 @@ -use std::env; -use std::fs::File; -use std::io::{Read, Write}; - -fn main() { - let args : Vec = env::args().collect(); - if args.len() < 3 { - println!("usage: mkuutils "); - std::process::exit(1); - } - - let mut crates = String::new(); - let mut util_map = String::new(); - let mut hashsum = false; - for prog in args[2..].iter() { - match &prog[..] { - "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; - } - }, - "true" => { - util_map.push_str("fn uutrue(_: Vec) -> i32 { 0 }\n"); - util_map.push_str("map.insert(\"true\", uutrue as fn(Vec) -> i32);\n"); - }, - "false" => { - util_map.push_str("fn uufalse(_: Vec) -> i32 { 1 }\n"); - util_map.push_str("map.insert(\"false\", uufalse as fn(Vec) -> i32);\n"); - }, - _ => { - if prog == "test" { - crates.push_str(&(format!("extern crate uu{0} as uu{0};\n", prog))[..]); - } else { - crates.push_str(&(format!("extern crate {0} as uu{0};\n", prog))[..]); - } - util_map.push_str(&(format!("map.insert(\"{prog}\", uu{prog}::uumain as fn(Vec) -> i32);\n", prog = prog))[..]); - } - } - } - let outfile = &(args[1])[..]; - - // XXX: this all just assumes that the IO works correctly - let mut out = File::create(outfile).unwrap(); - let mut input = File::open("src/uutils/uutils.rs").unwrap(); - - let mut template = String::new(); - input.read_to_string(&mut template).unwrap(); - let template = template; - - let main = template.replace("@CRATES@", &crates[..]).replace("@UTIL_MAP@", &util_map[..]); - match out.write_all(main.as_bytes()) { - Err(e) => panic!("{}", e), - _ => (), - } -} diff --git a/src/base64/Cargo.toml b/src/base64/Cargo.toml index 6e0c8ec1f..2d379acea 100644 --- a/src/base64/Cargo.toml +++ b/src/base64/Cargo.toml @@ -11,3 +11,7 @@ path = "base64.rs" getopts = "*" libc = "*" rustc-serialize = "*" + +[[bin]] +name="base64" +path="base64.rs" diff --git a/src/base64/base64.rs b/src/base64/base64.rs index 3ea79a7c3..0fa88de1a 100644 --- a/src/base64/base64.rs +++ b/src/base64/base64.rs @@ -160,3 +160,8 @@ fn help(opts: Options) { fn version() { println!("{} {}", NAME, VERSION); } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/base64/deps.mk b/src/base64/deps.mk deleted file mode 100644 index 5f486e20e..000000000 --- a/src/base64/deps.mk +++ /dev/null @@ -1 +0,0 @@ -DEPLIBS += rustc-serialize diff --git a/src/basename/Cargo.toml b/src/basename/Cargo.toml index ade2a3236..82f68686c 100644 --- a/src/basename/Cargo.toml +++ b/src/basename/Cargo.toml @@ -10,3 +10,7 @@ path = "basename.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="basename" +path="basename.rs" diff --git a/src/basename/basename.rs b/src/basename/basename.rs index 95736067d..4fa9d4df9 100644 --- a/src/basename/basename.rs +++ b/src/basename/basename.rs @@ -106,3 +106,8 @@ fn strip_suffix(name: &str, suffix: &str) -> String { name.to_string() } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/cat/Cargo.toml b/src/cat/Cargo.toml index 36066a55f..1bcb50c16 100644 --- a/src/cat/Cargo.toml +++ b/src/cat/Cargo.toml @@ -10,3 +10,7 @@ path = "cat.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="cat" +path="cat.rs" diff --git a/src/cat/cat.rs b/src/cat/cat.rs index 4ee5cf56c..cfc65e668 100644 --- a/src/cat/cat.rs +++ b/src/cat/cat.rs @@ -344,3 +344,8 @@ impl<'a, W: Write> Drop for UnsafeWriter<'a, W> { } /* vim: set ai ts=4 sw=4 sts=4 et : */ + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/chmod/Cargo.toml b/src/chmod/Cargo.toml index 5d1508101..d97b17592 100644 --- a/src/chmod/Cargo.toml +++ b/src/chmod/Cargo.toml @@ -15,3 +15,7 @@ memchr = "*" regex = "*" regex-syntax = "*" walker = "*" + +[[bin]] +name="chmod" +path="chmod.rs" diff --git a/src/chmod/chmod.rs b/src/chmod/chmod.rs index 958e56390..21ba9d7c5 100644 --- a/src/chmod/chmod.rs +++ b/src/chmod/chmod.rs @@ -324,3 +324,8 @@ fn chmod_file(file: &Path, name: &str, changes: bool, quiet: bool, verbose: bool Ok(()) } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/chmod/deps.mk b/src/chmod/deps.mk deleted file mode 100644 index 07a0616b6..000000000 --- a/src/chmod/deps.mk +++ /dev/null @@ -1 +0,0 @@ -DEPLIBS += aho-corasick memchr regex regex-syntax walker diff --git a/src/chroot/Cargo.toml b/src/chroot/Cargo.toml index 25c36d15f..2c6bfc660 100644 --- a/src/chroot/Cargo.toml +++ b/src/chroot/Cargo.toml @@ -10,3 +10,7 @@ path = "chroot.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="chroot" +path="chroot.rs" diff --git a/src/chroot/chroot.rs b/src/chroot/chroot.rs index 35646212e..7575ca401 100644 --- a/src/chroot/chroot.rs +++ b/src/chroot/chroot.rs @@ -218,3 +218,8 @@ If $(SHELL) is not set, /bin/sh is used.", NAME, VERSION); print!("{}", options.usage(&msg)); } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/cksum/Cargo.toml b/src/cksum/Cargo.toml index a76fd6dc4..b6685f0fa 100644 --- a/src/cksum/Cargo.toml +++ b/src/cksum/Cargo.toml @@ -10,3 +10,7 @@ path = "cksum.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="cksum" +path="cksum.rs" diff --git a/src/cksum/cksum.rs b/src/cksum/cksum.rs index 02696ba62..8b0823c16 100644 --- a/src/cksum/cksum.rs +++ b/src/cksum/cksum.rs @@ -129,3 +129,8 @@ Print CRC and size for each file.", NAME, VERSION); exit_code } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/comm/Cargo.toml b/src/comm/Cargo.toml index 214a0ea22..3e5e77a56 100644 --- a/src/comm/Cargo.toml +++ b/src/comm/Cargo.toml @@ -10,3 +10,7 @@ path = "comm.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="comm" +path="comm.rs" diff --git a/src/comm/comm.rs b/src/comm/comm.rs index ded6a83cb..5518f6461 100644 --- a/src/comm/comm.rs +++ b/src/comm/comm.rs @@ -158,3 +158,8 @@ Compare sorted files line by line.", NAME, VERSION); 0 } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/cp/Cargo.toml b/src/cp/Cargo.toml index b443112d6..32f7d0e8f 100644 --- a/src/cp/Cargo.toml +++ b/src/cp/Cargo.toml @@ -10,3 +10,7 @@ path = "cp.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="cp" +path="cp.rs" diff --git a/src/cp/cp.rs b/src/cp/cp.rs index 3c0fa2944..18dd12093 100644 --- a/src/cp/cp.rs +++ b/src/cp/cp.rs @@ -159,3 +159,8 @@ pub fn paths_refer_to_same_file(p1: &Path, p2: &Path) -> Result { Ok(pathbuf1 == pathbuf2) } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/cut/.gitignore b/src/cut/.gitignore new file mode 100644 index 000000000..1de565933 --- /dev/null +++ b/src/cut/.gitignore @@ -0,0 +1 @@ +target \ No newline at end of file diff --git a/src/cut/Cargo.toml b/src/cut/Cargo.toml index dc3d30ca9..3c28bf93c 100644 --- a/src/cut/Cargo.toml +++ b/src/cut/Cargo.toml @@ -10,3 +10,7 @@ path = "cut.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="cut" +path="cut.rs" diff --git a/src/cut/cut.rs b/src/cut/cut.rs index 1381e115b..c27849de5 100644 --- a/src/cut/cut.rs +++ b/src/cut/cut.rs @@ -544,3 +544,8 @@ pub fn uumain(args: Vec) -> i32 { } } } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/dirname/Cargo.toml b/src/dirname/Cargo.toml index 8c4e65c75..74c8ebc16 100644 --- a/src/dirname/Cargo.toml +++ b/src/dirname/Cargo.toml @@ -10,3 +10,7 @@ path = "dirname.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="dirname" +path="dirname.rs" diff --git a/src/dirname/dirname.rs b/src/dirname/dirname.rs index 0ad6f68e5..c1a3ce60f 100644 --- a/src/dirname/dirname.rs +++ b/src/dirname/dirname.rs @@ -68,3 +68,8 @@ directory).", NAME, VERSION); 0 } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/du/Cargo.toml b/src/du/Cargo.toml index dd6851c34..2bbeba09e 100644 --- a/src/du/Cargo.toml +++ b/src/du/Cargo.toml @@ -11,3 +11,7 @@ path = "du.rs" getopts = "*" libc = "*" time = "*" + +[[bin]] +name="du" +path="du.rs" diff --git a/src/du/deps.mk b/src/du/deps.mk deleted file mode 100644 index bc0c2cf05..000000000 --- a/src/du/deps.mk +++ /dev/null @@ -1 +0,0 @@ -DEPLIBS += time kernel32 winapi diff --git a/src/du/du.rs b/src/du/du.rs index b80d1f193..b1cbb1ad7 100644 --- a/src/du/du.rs +++ b/src/du/du.rs @@ -396,3 +396,8 @@ Try '{} --help' for more information.", s, NAME); 0 } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/echo/Cargo.toml b/src/echo/Cargo.toml index 1e56ce491..deddcf2e4 100644 --- a/src/echo/Cargo.toml +++ b/src/echo/Cargo.toml @@ -10,3 +10,7 @@ path = "echo.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="echo" +path="echo.rs" diff --git a/src/echo/echo.rs b/src/echo/echo.rs index f7e9bae2b..9102287d9 100644 --- a/src/echo/echo.rs +++ b/src/echo/echo.rs @@ -252,3 +252,8 @@ pub fn uumain(args: Vec) -> i32 { 0 } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/env/Cargo.toml b/src/env/Cargo.toml index 69d049a76..7edb50740 100644 --- a/src/env/Cargo.toml +++ b/src/env/Cargo.toml @@ -10,3 +10,7 @@ path = "env.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="env" +path="env.rs" diff --git a/src/env/env.rs b/src/env/env.rs index 89fc38718..b40c44942 100644 --- a/src/env/env.rs +++ b/src/env/env.rs @@ -205,3 +205,8 @@ pub fn uumain(args: Vec) -> i32 { 0 } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(env::args().collect())); +} diff --git a/src/expand/Cargo.toml b/src/expand/Cargo.toml index 75176539a..1924ca905 100644 --- a/src/expand/Cargo.toml +++ b/src/expand/Cargo.toml @@ -11,3 +11,7 @@ path = "expand.rs" getopts = "*" libc = "*" unicode-width = "*" + +[[bin]] +name="expand" +path="expand.rs" diff --git a/src/expand/deps.mk b/src/expand/deps.mk deleted file mode 100644 index fb8005c0c..000000000 --- a/src/expand/deps.mk +++ /dev/null @@ -1 +0,0 @@ -DEPLIBS += unicode-width diff --git a/src/expand/expand.rs b/src/expand/expand.rs index 09bf427b1..a64313206 100644 --- a/src/expand/expand.rs +++ b/src/expand/expand.rs @@ -242,3 +242,8 @@ fn expand(options: Options) { } } } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/expr/Cargo.toml b/src/expr/Cargo.toml index 164c2070d..31793d6b1 100644 --- a/src/expr/Cargo.toml +++ b/src/expr/Cargo.toml @@ -11,3 +11,7 @@ path = "expr.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="expr" +path="expr.rs" diff --git a/src/expr/expr.rs b/src/expr/expr.rs index d6a7664d2..9a461b68b 100644 --- a/src/expr/expr.rs +++ b/src/expr/expr.rs @@ -133,3 +133,8 @@ Environment variables: fn print_version() { println!("{} {}", NAME, VERSION); } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/factor/Cargo.toml b/src/factor/Cargo.toml index ab32fae68..2cbb4e9d4 100644 --- a/src/factor/Cargo.toml +++ b/src/factor/Cargo.toml @@ -11,3 +11,7 @@ path = "factor.rs" getopts = "*" libc = "*" rand = "*" + +[[bin]] +name="factor" +path="factor.rs" diff --git a/src/factor/deps.mk b/src/factor/deps.mk deleted file mode 100644 index ea0f8a6b8..000000000 --- a/src/factor/deps.mk +++ /dev/null @@ -1 +0,0 @@ -DEPLIBS += rand diff --git a/src/factor/factor.rs b/src/factor/factor.rs index b037be020..92254370f 100644 --- a/src/factor/factor.rs +++ b/src/factor/factor.rs @@ -200,3 +200,8 @@ read from standard input.", NAME, VERSION); } 0 } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/false/Cargo.toml b/src/false/Cargo.toml index e101245ec..15e1690a2 100644 --- a/src/false/Cargo.toml +++ b/src/false/Cargo.toml @@ -10,3 +10,7 @@ path = "false.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="false" +path="false.rs" diff --git a/src/false/false.rs b/src/false/false.rs index bd19e7dea..0363495be 100644 --- a/src/false/false.rs +++ b/src/false/false.rs @@ -12,3 +12,8 @@ pub fn uumain(_: Vec) -> i32 { 1 } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/fmt/Cargo.toml b/src/fmt/Cargo.toml index 3c3f3fa93..14d16f529 100644 --- a/src/fmt/Cargo.toml +++ b/src/fmt/Cargo.toml @@ -11,3 +11,7 @@ path = "fmt.rs" getopts = "*" libc = "*" unicode-width = "*" + +[[bin]] +name="fmt" +path="fmt.rs" diff --git a/src/fmt/deps.mk b/src/fmt/deps.mk deleted file mode 100644 index fb8005c0c..000000000 --- a/src/fmt/deps.mk +++ /dev/null @@ -1 +0,0 @@ -DEPLIBS += unicode-width diff --git a/src/fmt/fmt.rs b/src/fmt/fmt.rs index 9d2b2df2e..1e0067e8f 100644 --- a/src/fmt/fmt.rs +++ b/src/fmt/fmt.rs @@ -219,3 +219,8 @@ pub fn uumain(args: Vec) -> i32 { 0 } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/fold/Cargo.toml b/src/fold/Cargo.toml index 54bb67150..9712b86ef 100644 --- a/src/fold/Cargo.toml +++ b/src/fold/Cargo.toml @@ -10,3 +10,7 @@ path = "fold.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="fold" +path="fold.rs" diff --git a/src/fold/fold.rs b/src/fold/fold.rs index 5b8da31cd..367e0360f 100644 --- a/src/fold/fold.rs +++ b/src/fold/fold.rs @@ -220,3 +220,8 @@ fn rfind_whitespace(slice: &str) -> Option { } None } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/groups/Cargo.toml b/src/groups/Cargo.toml index ad8f0c86d..0f6a05413 100644 --- a/src/groups/Cargo.toml +++ b/src/groups/Cargo.toml @@ -10,3 +10,7 @@ path = "groups.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="groups" +path="groups.rs" diff --git a/src/groups/groups.rs b/src/groups/groups.rs index 167905111..4883efd34 100644 --- a/src/groups/groups.rs +++ b/src/groups/groups.rs @@ -50,3 +50,8 @@ Prints the groups a user is in to standard output.", NAME, VERSION); 0 } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/hashsum/Cargo.toml b/src/hashsum/Cargo.toml index 78111a679..fa0547553 100644 --- a/src/hashsum/Cargo.toml +++ b/src/hashsum/Cargo.toml @@ -13,3 +13,7 @@ libc = "*" regex = "*" regex-syntax = "*" rust-crypto = "*" + +[[bin]] +name="hashsum" +path="hashsum.rs" diff --git a/src/hashsum/deps.mk b/src/hashsum/deps.mk deleted file mode 100644 index 83178fa58..000000000 --- a/src/hashsum/deps.mk +++ /dev/null @@ -1 +0,0 @@ -DEPLIBS += regex regex-syntax crypto rand rustc-serialize time winapi kernel32 diff --git a/src/hashsum/hashsum.rs b/src/hashsum/hashsum.rs index a47aa1ca1..7afd0d40a 100644 --- a/src/hashsum/hashsum.rs +++ b/src/hashsum/hashsum.rs @@ -307,3 +307,8 @@ fn digest_reader<'a, T: Read>(digest: &mut Box, reader: &mut BufReade Ok(digest.result_str()) } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/head/Cargo.toml b/src/head/Cargo.toml index 42341acc1..e5f012e16 100644 --- a/src/head/Cargo.toml +++ b/src/head/Cargo.toml @@ -10,3 +10,7 @@ path = "head.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="head" +path="head.rs" diff --git a/src/head/head.rs b/src/head/head.rs index 17790c969..cc61e6521 100644 --- a/src/head/head.rs +++ b/src/head/head.rs @@ -208,3 +208,8 @@ fn head(reader: &mut BufReader, settings: &Settings) -> bool { fn version() { println!("{} {}", NAME, VERSION); } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/hostid/Cargo.toml b/src/hostid/Cargo.toml index 146c0879e..796e96457 100644 --- a/src/hostid/Cargo.toml +++ b/src/hostid/Cargo.toml @@ -10,3 +10,7 @@ path = "hostid.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="hostid" +path="hostid.rs" diff --git a/src/hostid/hostid.rs b/src/hostid/hostid.rs index 9cca3d7c5..30fe092ca 100644 --- a/src/hostid/hostid.rs +++ b/src/hostid/hostid.rs @@ -88,3 +88,8 @@ fn hostid() { result &= 0xffffffff; println!("{:0>8x}", result); } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/hostname/Cargo.toml b/src/hostname/Cargo.toml index 2d2db8ee1..6f67767dc 100644 --- a/src/hostname/Cargo.toml +++ b/src/hostname/Cargo.toml @@ -10,3 +10,7 @@ path = "hostname.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="hostname" +path="hostname.rs" diff --git a/src/hostname/hostname.rs b/src/hostname/hostname.rs index d22a8d9e3..6353f7c6c 100644 --- a/src/hostname/hostname.rs +++ b/src/hostname/hostname.rs @@ -174,3 +174,8 @@ fn xsethostname(name: &str) { println!("Cannot set hostname to {}", name); } } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/id/Cargo.toml b/src/id/Cargo.toml index 39035c77a..c2803d60f 100644 --- a/src/id/Cargo.toml +++ b/src/id/Cargo.toml @@ -10,3 +10,7 @@ path = "id.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="id" +path="id.rs" diff --git a/src/id/id.rs b/src/id/id.rs index 03e8afa9c..5d5f74f79 100644 --- a/src/id/id.rs +++ b/src/id/id.rs @@ -394,3 +394,8 @@ fn id_print(possible_pw: Option, p_euid: bool, p_egid: bool) { println!(""); } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/kill/Cargo.toml b/src/kill/Cargo.toml index 7f36a1bd6..cb0939dea 100644 --- a/src/kill/Cargo.toml +++ b/src/kill/Cargo.toml @@ -10,3 +10,7 @@ path = "kill.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="kill" +path="kill.rs" diff --git a/src/kill/kill.rs b/src/kill/kill.rs index 2195e0e7d..99aa40178 100644 --- a/src/kill/kill.rs +++ b/src/kill/kill.rs @@ -192,3 +192,8 @@ fn kill(signalname: &str, pids: std::vec::Vec) -> i32 { } status } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/link/Cargo.toml b/src/link/Cargo.toml index 84044b784..c762bd738 100644 --- a/src/link/Cargo.toml +++ b/src/link/Cargo.toml @@ -10,3 +10,7 @@ path = "link.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="link" +path="link.rs" diff --git a/src/link/link.rs b/src/link/link.rs index a762550b7..3777b0444 100644 --- a/src/link/link.rs +++ b/src/link/link.rs @@ -64,3 +64,8 @@ Create a link named FILE2 to FILE1.", NAME, VERSION); } } } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/ln/Cargo.toml b/src/ln/Cargo.toml index 8ec3cb1d7..f617aa8e0 100644 --- a/src/ln/Cargo.toml +++ b/src/ln/Cargo.toml @@ -10,3 +10,7 @@ path = "ln.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="ln" +path="ln.rs" diff --git a/src/ln/ln.rs b/src/ln/ln.rs index 6a7646e93..5c2a9c866 100644 --- a/src/ln/ln.rs +++ b/src/ln/ln.rs @@ -331,3 +331,8 @@ pub fn is_symlink>(path: P) -> bool { Err(_) => false } } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/logname/Cargo.toml b/src/logname/Cargo.toml index b207e91bf..2fc373c2e 100644 --- a/src/logname/Cargo.toml +++ b/src/logname/Cargo.toml @@ -10,3 +10,7 @@ path = "logname.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="logname" +path="logname.rs" diff --git a/src/logname/logname.rs b/src/logname/logname.rs index c587bf038..39c1fc3c6 100644 --- a/src/logname/logname.rs +++ b/src/logname/logname.rs @@ -79,3 +79,8 @@ fn exec() { None => println!("{}: no login name", NAME) } } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/mkdir/Cargo.toml b/src/mkdir/Cargo.toml index 11f916bb0..1afcf60c6 100644 --- a/src/mkdir/Cargo.toml +++ b/src/mkdir/Cargo.toml @@ -10,3 +10,7 @@ path = "mkdir.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="mkdir" +path="mkdir.rs" diff --git a/src/mkdir/mkdir.rs b/src/mkdir/mkdir.rs index b68fe0d09..7fce74011 100644 --- a/src/mkdir/mkdir.rs +++ b/src/mkdir/mkdir.rs @@ -158,3 +158,8 @@ fn mkdir(path: &Path, mode: u16, verbose: bool) -> i32 { } chmod(path, mode) } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/mkfifo/Cargo.toml b/src/mkfifo/Cargo.toml index a8b347e2c..c733a2cb9 100644 --- a/src/mkfifo/Cargo.toml +++ b/src/mkfifo/Cargo.toml @@ -10,3 +10,7 @@ path = "mkfifo.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="mkfifo" +path="mkfifo.rs" diff --git a/src/mkfifo/mkfifo.rs b/src/mkfifo/mkfifo.rs index 99965231c..ff8c11ed3 100644 --- a/src/mkfifo/mkfifo.rs +++ b/src/mkfifo/mkfifo.rs @@ -77,3 +77,8 @@ Create a FIFO with the given name.", NAME, VERSION); exit_status } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/mv/Cargo.toml b/src/mv/Cargo.toml index a9e89f11d..5a3a1cf03 100644 --- a/src/mv/Cargo.toml +++ b/src/mv/Cargo.toml @@ -10,3 +10,9 @@ path = "mv.rs" [dependencies] getopts = "*" libc = "*" + +[dev-dependencies] +time = "*" +[[bin]] +name="mv" +path="mv.rs" diff --git a/src/mv/deps.mk b/src/mv/deps.mk deleted file mode 100644 index 0e162f8f0..000000000 --- a/src/mv/deps.mk +++ /dev/null @@ -1 +0,0 @@ -DEPLIBS += kernel32 winapi filetime time diff --git a/src/mv/mv.rs b/src/mv/mv.rs index f8317ccd9..2ce69b256 100644 --- a/src/mv/mv.rs +++ b/src/mv/mv.rs @@ -356,3 +356,8 @@ fn existing_backup_path(path: &PathBuf, suffix: &String) -> PathBuf { } simple_backup_path(path, suffix) } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/nice/Cargo.toml b/src/nice/Cargo.toml index 812e0f61b..38bf0a322 100644 --- a/src/nice/Cargo.toml +++ b/src/nice/Cargo.toml @@ -10,3 +10,7 @@ path = "nice.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="nice" +path="nice.rs" diff --git a/src/nice/nice.rs b/src/nice/nice.rs index d5e13576d..2b4e9285b 100644 --- a/src/nice/nice.rs +++ b/src/nice/nice.rs @@ -110,3 +110,8 @@ process).", NAME, VERSION); show_error!("{}", Error::last_os_error()); if Error::last_os_error().raw_os_error().unwrap() as c_int == libc::ENOENT { 127 } else { 126 } } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/nl/Cargo.toml b/src/nl/Cargo.toml index 3ca33339e..1c05d75ca 100644 --- a/src/nl/Cargo.toml +++ b/src/nl/Cargo.toml @@ -14,3 +14,7 @@ aho-corasick = "*" memchr = "*" regex = "*" regex-syntax = "*" + +[[bin]] +name="nl" +path="nl.rs" diff --git a/src/nl/deps.mk b/src/nl/deps.mk deleted file mode 100644 index 78a05f8b6..000000000 --- a/src/nl/deps.mk +++ /dev/null @@ -1 +0,0 @@ -DEPLIBS += aho-corasick memchr regex regex-syntax diff --git a/src/nl/nl.rs b/src/nl/nl.rs index b6048d32d..7d5a3a8e9 100644 --- a/src/nl/nl.rs +++ b/src/nl/nl.rs @@ -328,3 +328,8 @@ fn print_usage(opts: &getopts::Options) { fn version() { println!("{} {}", NAME, VERSION); } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/nohup/Cargo.toml b/src/nohup/Cargo.toml index e4d916481..70766b16b 100644 --- a/src/nohup/Cargo.toml +++ b/src/nohup/Cargo.toml @@ -10,3 +10,7 @@ path = "nohup.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="nohup" +path="nohup.rs" diff --git a/src/nohup/nohup.rs b/src/nohup/nohup.rs index f0fb64712..fb7958faa 100644 --- a/src/nohup/nohup.rs +++ b/src/nohup/nohup.rs @@ -14,12 +14,12 @@ extern crate libc; use libc::{c_char, signal, dup2, execvp, isatty}; use libc::{SIG_IGN, SIGHUP}; -use std::env; use std::ffi::CString; use std::fs::{File, OpenOptions}; use std::io::{Error, Write}; use std::os::unix::prelude::*; use std::path::{Path, PathBuf}; +use std::env; #[path = "../common/util.rs"] #[macro_use] mod util; #[path = "../common/c_types.rs"] mod c_types; @@ -144,3 +144,8 @@ If standard error is terminal, it'll be redirected to stdout.", NAME, VERSION); print!("{}", opts.usage(&msg)); } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/nproc/Cargo.toml b/src/nproc/Cargo.toml index 289086eb5..d0c1ea9be 100644 --- a/src/nproc/Cargo.toml +++ b/src/nproc/Cargo.toml @@ -11,3 +11,7 @@ path = "nproc.rs" getopts = "*" libc = "*" num_cpus = "*" + +[[bin]] +name="nproc" +path="nproc.rs" diff --git a/src/nproc/deps.mk b/src/nproc/deps.mk deleted file mode 100644 index 8bd1a6c62..000000000 --- a/src/nproc/deps.mk +++ /dev/null @@ -1 +0,0 @@ -DEPLIBS += num_cpus diff --git a/src/nproc/nproc.rs b/src/nproc/nproc.rs index 037d2a3e7..0e64c8500 100644 --- a/src/nproc/nproc.rs +++ b/src/nproc/nproc.rs @@ -12,8 +12,8 @@ extern crate getopts; extern crate num_cpus; -use std::env; use std::io::Write; +use std::env; static NAME : &'static str = "nproc"; static VERSION : &'static str = "0.0.0"; @@ -85,3 +85,8 @@ Print the number of cores available to the current process.", NAME, VERSION); println!("{}", cores); 0 } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/od/Cargo.toml b/src/od/Cargo.toml index e6e1d7183..e3fff21b0 100644 --- a/src/od/Cargo.toml +++ b/src/od/Cargo.toml @@ -10,3 +10,7 @@ path = "od.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="od" +path="od.rs" diff --git a/src/od/od.rs b/src/od/od.rs index da9295855..471abf859 100644 --- a/src/od/od.rs +++ b/src/od/od.rs @@ -56,12 +56,12 @@ pub fn uumain(args: Vec) -> i32 { None => { panic!("Need fname for now") ; } }; - main(&input_offset_base, &fname); + odfunc(&input_offset_base, &fname); 0 } -fn main(input_offset_base: &Radix, fname: &str) { +fn odfunc(input_offset_base: &Radix, fname: &str) { let mut f = match File::open(Path::new(fname)) { Ok(f) => f, Err(e) => panic!("file error: {}", e) @@ -124,3 +124,8 @@ fn print_with_radix(r: &Radix, x: usize) { Radix::Binary => print!("{:07b}", x) } } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/paste/Cargo.toml b/src/paste/Cargo.toml index 9800ef127..95f992752 100644 --- a/src/paste/Cargo.toml +++ b/src/paste/Cargo.toml @@ -10,3 +10,7 @@ path = "paste.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="paste" +path="paste.rs" diff --git a/src/paste/paste.rs b/src/paste/paste.rs index 6a8592138..8b6c15f3c 100644 --- a/src/paste/paste.rs +++ b/src/paste/paste.rs @@ -128,3 +128,8 @@ fn unescape(s: String) -> String { .replace("\\\\", "\\") .replace("\\", "") } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/printenv/Cargo.toml b/src/printenv/Cargo.toml index 166816d5c..a3ee2009e 100644 --- a/src/printenv/Cargo.toml +++ b/src/printenv/Cargo.toml @@ -10,3 +10,7 @@ path = "printenv.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="printenv" +path="printenv.rs" diff --git a/src/printenv/printenv.rs b/src/printenv/printenv.rs index d895449f9..0995bea92 100644 --- a/src/printenv/printenv.rs +++ b/src/printenv/printenv.rs @@ -14,8 +14,8 @@ extern crate getopts; extern crate libc; -use std::env; use std::io::Write; +use std::env; #[path = "../common/util.rs"] #[macro_use] @@ -76,3 +76,8 @@ pub fn exec(args: Vec, separator: &str) { } } } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/ptx/Cargo.toml b/src/ptx/Cargo.toml index 65f0cc7b7..9d43268c6 100644 --- a/src/ptx/Cargo.toml +++ b/src/ptx/Cargo.toml @@ -14,3 +14,7 @@ aho-corasick = "*" memchr = "*" regex-syntax = "*" regex = "*" + +[[bin]] +name="ptx" +path="ptx.rs" diff --git a/src/ptx/deps.mk b/src/ptx/deps.mk deleted file mode 100644 index 78a05f8b6..000000000 --- a/src/ptx/deps.mk +++ /dev/null @@ -1 +0,0 @@ -DEPLIBS += aho-corasick memchr regex regex-syntax diff --git a/src/ptx/ptx.rs b/src/ptx/ptx.rs index 0569d130b..d766e88ae 100644 --- a/src/ptx/ptx.rs +++ b/src/ptx/ptx.rs @@ -562,3 +562,8 @@ pub fn uumain(args: Vec) -> i32 { write_traditional_output(&config, &file_map, &word_set, &output_file); 0 } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/pwd/Cargo.toml b/src/pwd/Cargo.toml index 9b4c9afbd..cdf4c7f48 100644 --- a/src/pwd/Cargo.toml +++ b/src/pwd/Cargo.toml @@ -10,3 +10,7 @@ path = "pwd.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="pwd" +path="pwd.rs" diff --git a/src/pwd/pwd.rs b/src/pwd/pwd.rs index 3205e0c32..ac645626e 100644 --- a/src/pwd/pwd.rs +++ b/src/pwd/pwd.rs @@ -12,8 +12,8 @@ extern crate getopts; extern crate libc; -use std::env; use std::io::Write; +use std::env; #[path = "../common/util.rs"] #[macro_use] @@ -51,3 +51,8 @@ Print the full filename of the current working directory.", NAME, VERSION); 0 } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/readlink/Cargo.toml b/src/readlink/Cargo.toml index 42e5db253..d46dd5954 100644 --- a/src/readlink/Cargo.toml +++ b/src/readlink/Cargo.toml @@ -10,3 +10,7 @@ path = "readlink.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="readlink" +path="readlink.rs" diff --git a/src/readlink/readlink.rs b/src/readlink/readlink.rs index 58640b97d..da65d5056 100644 --- a/src/readlink/readlink.rs +++ b/src/readlink/readlink.rs @@ -138,3 +138,8 @@ fn show_usage(opts: &getopts::Options) { print!("Print value of a symbolic link or canonical file name"); print!("{}", opts.usage("")); } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/realpath/Cargo.toml b/src/realpath/Cargo.toml index b481bf0a0..329415b86 100644 --- a/src/realpath/Cargo.toml +++ b/src/realpath/Cargo.toml @@ -10,3 +10,7 @@ path = "realpath.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="realpath" +path="realpath.rs" diff --git a/src/realpath/realpath.rs b/src/realpath/realpath.rs index 62b1f951b..7a2c9d325 100644 --- a/src/realpath/realpath.rs +++ b/src/realpath/realpath.rs @@ -140,3 +140,8 @@ fn show_usage(opts: &getopts::Options) { Each resolved FILENAME will be written to the standard output, one per line.") ); } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/relpath/Cargo.toml b/src/relpath/Cargo.toml index c45a18deb..11efcca2c 100644 --- a/src/relpath/Cargo.toml +++ b/src/relpath/Cargo.toml @@ -10,3 +10,7 @@ path = "relpath.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="relpath" +path="relpath.rs" diff --git a/src/relpath/relpath.rs b/src/relpath/relpath.rs index 1f4cebcbc..c0c01185f 100644 --- a/src/relpath/relpath.rs +++ b/src/relpath/relpath.rs @@ -105,3 +105,8 @@ fn show_usage(opts: &getopts::Options) { If FROM path is omitted, current working dir will be used.") ); } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/rm/Cargo.toml b/src/rm/Cargo.toml index 953e7caf0..dc4128ec3 100644 --- a/src/rm/Cargo.toml +++ b/src/rm/Cargo.toml @@ -10,3 +10,7 @@ path = "rm.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="rm" +path="rm.rs" diff --git a/src/rm/rm.rs b/src/rm/rm.rs index f8a9c8d44..34e1e1e42 100644 --- a/src/rm/rm.rs +++ b/src/rm/rm.rs @@ -290,3 +290,8 @@ fn prompt(msg: &str) -> bool { _ => false, } } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/rmdir/Cargo.toml b/src/rmdir/Cargo.toml index ec6dc3639..667643385 100644 --- a/src/rmdir/Cargo.toml +++ b/src/rmdir/Cargo.toml @@ -10,3 +10,7 @@ path = "rmdir.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="rmdir" +path="rmdir.rs" diff --git a/src/rmdir/rmdir.rs b/src/rmdir/rmdir.rs index 56df54c3c..68ddf76e3 100644 --- a/src/rmdir/rmdir.rs +++ b/src/rmdir/rmdir.rs @@ -124,3 +124,8 @@ fn remove_dir(path: &Path, ignore: bool, verbose: bool) -> Result<(), i32> { r } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/seq/Cargo.toml b/src/seq/Cargo.toml index 4b56530a8..dc3634507 100644 --- a/src/seq/Cargo.toml +++ b/src/seq/Cargo.toml @@ -10,3 +10,7 @@ path = "seq.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="seq" +path="seq.rs" diff --git a/src/seq/seq.rs b/src/seq/seq.rs index 88fcb2e71..e28714633 100644 --- a/src/seq/seq.rs +++ b/src/seq/seq.rs @@ -258,3 +258,8 @@ fn print_seq(first: f64, step: f64, last: f64, largest_dec: usize, separator: St } pipe_flush!(); } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/shuf/Cargo.toml b/src/shuf/Cargo.toml index 81101d39f..944d4ddd9 100644 --- a/src/shuf/Cargo.toml +++ b/src/shuf/Cargo.toml @@ -11,3 +11,7 @@ path = "shuf.rs" getopts = "*" libc = "*" rand = "*" + +[[bin]] +name="shuf" +path="shuf.rs" diff --git a/src/shuf/deps.mk b/src/shuf/deps.mk deleted file mode 100644 index ea0f8a6b8..000000000 --- a/src/shuf/deps.mk +++ /dev/null @@ -1 +0,0 @@ -DEPLIBS += rand diff --git a/src/shuf/shuf.rs b/src/shuf/shuf.rs index b4ea0ebbe..34ca1614e 100644 --- a/src/shuf/shuf.rs +++ b/src/shuf/shuf.rs @@ -267,3 +267,8 @@ impl WrappedRng { } } } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/sleep/Cargo.toml b/src/sleep/Cargo.toml index 6c29d728d..4a14913ce 100644 --- a/src/sleep/Cargo.toml +++ b/src/sleep/Cargo.toml @@ -10,3 +10,7 @@ path = "sleep.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="sleep" +path="sleep.rs" diff --git a/src/sleep/sleep.rs b/src/sleep/sleep.rs index 91d0d7999..545ba6600 100644 --- a/src/sleep/sleep.rs +++ b/src/sleep/sleep.rs @@ -80,3 +80,8 @@ fn sleep(args: Vec) { }; thread::sleep(Duration::new(0, sleep_dur)); } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/sort/Cargo.toml b/src/sort/Cargo.toml index c88e0b7fb..c0c9290a9 100644 --- a/src/sort/Cargo.toml +++ b/src/sort/Cargo.toml @@ -10,3 +10,7 @@ path = "sort.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="sort" +path="sort.rs" diff --git a/src/sort/sort.rs b/src/sort/sort.rs index bbed394ec..67d72b8fe 100644 --- a/src/sort/sort.rs +++ b/src/sort/sort.rs @@ -207,3 +207,8 @@ fn open<'a>(path: &str) -> Option<(Box, bool)> { }, } } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/split/Cargo.toml b/src/split/Cargo.toml index 3c0d0de3b..7c6e1b579 100644 --- a/src/split/Cargo.toml +++ b/src/split/Cargo.toml @@ -10,3 +10,7 @@ path = "split.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="split" +path="split.rs" diff --git a/src/split/deps.mk b/src/split/deps.mk deleted file mode 100644 index 62b0140cc..000000000 --- a/src/split/deps.mk +++ /dev/null @@ -1 +0,0 @@ -DEPLIBS += aho-corasick memchr rand regex regex-syntax diff --git a/src/split/split.rs b/src/split/split.rs index 08d57cd18..dfd320789 100644 --- a/src/split/split.rs +++ b/src/split/split.rs @@ -315,3 +315,8 @@ fn split(settings: &Settings) -> i32 { } 0 } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/stdbuf/Cargo.toml b/src/stdbuf/Cargo.toml new file mode 100644 index 000000000..c21aa55f5 --- /dev/null +++ b/src/stdbuf/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "stdbuf" +version = "0.0.1" +authors = [] + +[lib] +name = "stdbuf" +path = "stdbuf.rs" + +[dependencies] +getopts = "*" +libc = "*" + +[[bin]] +name="stdbuf" +path="stdbuf.rs" diff --git a/src/stdbuf/stdbuf.rs b/src/stdbuf/stdbuf.rs index ecb30fa76..300ffd83e 100644 --- a/src/stdbuf/stdbuf.rs +++ b/src/stdbuf/stdbuf.rs @@ -13,7 +13,6 @@ extern crate getopts; extern crate libc; use getopts::{Matches, Options}; -use std::env; use std::io::{self, Write}; use std::os::unix::process::ExitStatusExt; use std::path::PathBuf; @@ -192,7 +191,7 @@ fn set_command_env(command: &mut Command, buffer_name: &str, buffer_type: Buffer } fn exe_path() -> io::Result { - let exe_path = try!(env::current_exe()); + let exe_path = try!(std::env::current_exe()); let absolute_path = try!(canonicalize(exe_path, CanonicalizeMode::Normal)); Ok(match absolute_path.parent() { Some(p) => p.to_path_buf(), @@ -270,3 +269,8 @@ pub fn uumain(args: Vec) -> i32 { Err(e) => crash!(1, "{}", e) }; } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/sum/Cargo.toml b/src/sum/Cargo.toml index 7655fd221..f10bc5745 100644 --- a/src/sum/Cargo.toml +++ b/src/sum/Cargo.toml @@ -10,3 +10,7 @@ path = "sum.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="sum" +path="sum.rs" diff --git a/src/sum/sum.rs b/src/sum/sum.rs index 75f25adee..690ce1198 100644 --- a/src/sum/sum.rs +++ b/src/sum/sum.rs @@ -138,3 +138,8 @@ Checksum and count the blocks in a file.", NAME, VERSION); 0 } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/sync/Cargo.toml b/src/sync/Cargo.toml index 2c17e5550..5e58cb359 100644 --- a/src/sync/Cargo.toml +++ b/src/sync/Cargo.toml @@ -10,3 +10,7 @@ path = "sync.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="sync" +path="sync.rs" diff --git a/src/sync/deps.mk b/src/sync/deps.mk deleted file mode 100644 index bd85e154d..000000000 --- a/src/sync/deps.mk +++ /dev/null @@ -1 +0,0 @@ -DEPLIBS += winapi kernel32 diff --git a/src/sync/sync.rs b/src/sync/sync.rs index 3f3834774..a0dfccf69 100644 --- a/src/sync/sync.rs +++ b/src/sync/sync.rs @@ -144,3 +144,8 @@ fn sync() -> isize { platform::do_sync() } } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/tac/Cargo.toml b/src/tac/Cargo.toml index 2a4dd498f..aa3b3d563 100644 --- a/src/tac/Cargo.toml +++ b/src/tac/Cargo.toml @@ -10,3 +10,7 @@ path = "tac.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="tac" +path="tac.rs" diff --git a/src/tac/tac.rs b/src/tac/tac.rs index 995d5c2d7..49997fa57 100644 --- a/src/tac/tac.rs +++ b/src/tac/tac.rs @@ -147,3 +147,8 @@ fn show_line(out: &mut Stdout, sep: &[u8], dat: &[u8], before: bool) { out.write_all(sep).unwrap_or_else(|e| crash!(1, "failed to write to stdout: {}", e)); } } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/tail/Cargo.toml b/src/tail/Cargo.toml index beac774b1..bc3e0e2f6 100644 --- a/src/tail/Cargo.toml +++ b/src/tail/Cargo.toml @@ -10,3 +10,7 @@ path = "tail.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="tail" +path="tail.rs" diff --git a/src/tail/tail.rs b/src/tail/tail.rs index f49519f1a..45d91ec33 100644 --- a/src/tail/tail.rs +++ b/src/tail/tail.rs @@ -299,3 +299,8 @@ fn print_string(_: &mut T, s: &String) { fn version () { println!("{} {}", NAME, VERSION); } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/tee/Cargo.toml b/src/tee/Cargo.toml index d91409f52..f30515dbe 100644 --- a/src/tee/Cargo.toml +++ b/src/tee/Cargo.toml @@ -10,3 +10,7 @@ path = "tee.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="tee" +path="tee.rs" diff --git a/src/tee/tee.rs b/src/tee/tee.rs index 52279708f..ba712670e 100644 --- a/src/tee/tee.rs +++ b/src/tee/tee.rs @@ -172,3 +172,8 @@ fn warn(message: &str) -> Error { eprintln!("{}: {}", NAME, message); Error::new(ErrorKind::Other, format!("{}: {}", NAME, message)) } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/test/Cargo.toml b/src/test/Cargo.toml index bebada638..17bf8e03e 100644 --- a/src/test/Cargo.toml +++ b/src/test/Cargo.toml @@ -10,3 +10,7 @@ path = "test.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="test" +path="test.rs" diff --git a/src/test/test.rs b/src/test/test.rs index f0e6b1e7c..5e0c1d685 100644 --- a/src/test/test.rs +++ b/src/test/test.rs @@ -406,3 +406,8 @@ fn path(path: &[u8], cond: PathCondition) -> bool { PathCondition::Executable => false, // TODO } } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/timeout/Cargo.toml b/src/timeout/Cargo.toml index 18d3c3ba2..1dac40526 100644 --- a/src/timeout/Cargo.toml +++ b/src/timeout/Cargo.toml @@ -11,3 +11,7 @@ path = "timeout.rs" getopts = "*" libc = "*" time = "*" + +[[bin]] +name="timeout" +path="timeout.rs" diff --git a/src/timeout/deps.mk b/src/timeout/deps.mk deleted file mode 100644 index b6534caec..000000000 --- a/src/timeout/deps.mk +++ /dev/null @@ -1 +0,0 @@ -DEPLIBS += time diff --git a/src/timeout/timeout.rs b/src/timeout/timeout.rs index 8a16c2b38..c6867076a 100644 --- a/src/timeout/timeout.rs +++ b/src/timeout/timeout.rs @@ -157,3 +157,8 @@ fn timeout(cmdname: &str, args: &[String], duration: f64, signal: usize, kill_af }, } } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/touch/Cargo.toml b/src/touch/Cargo.toml index 4c2c7c509..bb9b40438 100644 --- a/src/touch/Cargo.toml +++ b/src/touch/Cargo.toml @@ -12,3 +12,7 @@ filetime = "*" getopts = "*" libc = "*" time = "*" + +[[bin]] +name="touch" +path="touch.rs" diff --git a/src/touch/deps.mk b/src/touch/deps.mk deleted file mode 100644 index 0e162f8f0..000000000 --- a/src/touch/deps.mk +++ /dev/null @@ -1 +0,0 @@ -DEPLIBS += kernel32 winapi filetime time diff --git a/src/touch/touch.rs b/src/touch/touch.rs index 9f51f9837..efee232cc 100644 --- a/src/touch/touch.rs +++ b/src/touch/touch.rs @@ -209,3 +209,8 @@ fn parse_timestamp(s: &str) -> FileTime { } } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/tr/Cargo.toml b/src/tr/Cargo.toml index 0c47ab424..cbbed1673 100644 --- a/src/tr/Cargo.toml +++ b/src/tr/Cargo.toml @@ -12,3 +12,7 @@ getopts = "*" libc = "*" bit-set = "*" vec_map = "*" + +[[bin]] +name="tr" +path="tr.rs" diff --git a/src/tr/deps.mk b/src/tr/deps.mk deleted file mode 100644 index 5e9f37b70..000000000 --- a/src/tr/deps.mk +++ /dev/null @@ -1 +0,0 @@ -DEPLIBS += bit-vec bit-set vec_map diff --git a/src/tr/tr.rs b/src/tr/tr.rs index 7ec6627ff..877788691 100644 --- a/src/tr/tr.rs +++ b/src/tr/tr.rs @@ -162,3 +162,8 @@ pub fn uumain(args: Vec) -> i32 { 0 } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/true/Cargo.toml b/src/true/Cargo.toml index d5b7fe5cc..2b0154c53 100644 --- a/src/true/Cargo.toml +++ b/src/true/Cargo.toml @@ -10,3 +10,7 @@ path = "true.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="true" +path="true.rs" diff --git a/src/true/true.rs b/src/true/true.rs index 772870f54..f37b1a8eb 100644 --- a/src/true/true.rs +++ b/src/true/true.rs @@ -9,6 +9,12 @@ * file that was distributed with this source code. */ + pub fn uumain(_: Vec) -> i32 { 0 } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/truncate/Cargo.toml b/src/truncate/Cargo.toml index 2795af9fb..d36728324 100644 --- a/src/truncate/Cargo.toml +++ b/src/truncate/Cargo.toml @@ -10,3 +10,7 @@ path = "truncate.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="truncate" +path="truncate.rs" diff --git a/src/truncate/truncate.rs b/src/truncate/truncate.rs index 7cffc301b..8f0b79d84 100644 --- a/src/truncate/truncate.rs +++ b/src/truncate/truncate.rs @@ -213,3 +213,8 @@ fn parse_size(size: &str) -> (u64, TruncateMode) { } (number, mode) } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/tsort/Cargo.toml b/src/tsort/Cargo.toml index 877cf9707..12b45b748 100644 --- a/src/tsort/Cargo.toml +++ b/src/tsort/Cargo.toml @@ -10,3 +10,7 @@ path = "tsort.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="tsort" +path="tsort.rs" diff --git a/src/tsort/tsort.rs b/src/tsort/tsort.rs index 6f43aaebb..0bca10b41 100644 --- a/src/tsort/tsort.rs +++ b/src/tsort/tsort.rs @@ -194,3 +194,8 @@ impl Graph { true } } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/tty/Cargo.toml b/src/tty/Cargo.toml index 40e4f8a82..699033899 100644 --- a/src/tty/Cargo.toml +++ b/src/tty/Cargo.toml @@ -10,3 +10,7 @@ path = "tty.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="tty" +path="tty.rs" diff --git a/src/tty/tty.rs b/src/tty/tty.rs index 7bac51a0f..12cbd25d9 100644 --- a/src/tty/tty.rs +++ b/src/tty/tty.rs @@ -81,3 +81,8 @@ pub fn uumain(args: Vec) -> i32 { 0 } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/uname/Cargo.toml b/src/uname/Cargo.toml index 4f10bc75a..c6d381cf7 100644 --- a/src/uname/Cargo.toml +++ b/src/uname/Cargo.toml @@ -10,3 +10,7 @@ path = "uname.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="uname" +path="uname.rs" diff --git a/src/uname/uname.rs b/src/uname/uname.rs index 7b5700f85..e8a7c075f 100644 --- a/src/uname/uname.rs +++ b/src/uname/uname.rs @@ -106,3 +106,8 @@ pub fn uumain(args: Vec) -> i32 { 0 } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/unexpand/Cargo.toml b/src/unexpand/Cargo.toml index 4e631f138..01612c5d5 100644 --- a/src/unexpand/Cargo.toml +++ b/src/unexpand/Cargo.toml @@ -11,3 +11,7 @@ path = "unexpand.rs" getopts = "*" libc = "*" unicode-width = "*" + +[[bin]] +name="unexpand" +path="unexpand.rs" diff --git a/src/unexpand/deps.mk b/src/unexpand/deps.mk deleted file mode 100644 index fb8005c0c..000000000 --- a/src/unexpand/deps.mk +++ /dev/null @@ -1 +0,0 @@ -DEPLIBS += unicode-width diff --git a/src/unexpand/unexpand.rs b/src/unexpand/unexpand.rs index af138dcef..481aa84e7 100644 --- a/src/unexpand/unexpand.rs +++ b/src/unexpand/unexpand.rs @@ -281,3 +281,8 @@ fn unexpand(options: Options) { } pipe_flush!(output); } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/uniq/Cargo.toml b/src/uniq/Cargo.toml index 81245beb1..a1997a355 100644 --- a/src/uniq/Cargo.toml +++ b/src/uniq/Cargo.toml @@ -10,3 +10,7 @@ path = "uniq.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="uniq" +path="uniq.rs" diff --git a/src/uniq/uniq.rs b/src/uniq/uniq.rs index b70b0881a..c042a5948 100644 --- a/src/uniq/uniq.rs +++ b/src/uniq/uniq.rs @@ -240,3 +240,8 @@ fn open_output_file(out_file_name: String) -> BufWriter> { }; BufWriter::new(out_file) } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/unlink/Cargo.toml b/src/unlink/Cargo.toml index 11c4a5a33..bb9b0ef94 100644 --- a/src/unlink/Cargo.toml +++ b/src/unlink/Cargo.toml @@ -10,3 +10,7 @@ path = "unlink.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="unlink" +path="unlink.rs" diff --git a/src/unlink/unlink.rs b/src/unlink/unlink.rs index 15817b334..f05eb7537 100644 --- a/src/unlink/unlink.rs +++ b/src/unlink/unlink.rs @@ -91,3 +91,8 @@ pub fn uumain(args: Vec) -> i32 { 0 } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/uptime/Cargo.toml b/src/uptime/Cargo.toml index 9572f295f..baf9f9d16 100644 --- a/src/uptime/Cargo.toml +++ b/src/uptime/Cargo.toml @@ -11,3 +11,7 @@ path = "uptime.rs" getopts = "*" libc = "*" time = "*" + +[[bin]] +name="uptime" +path="uptime.rs" diff --git a/src/uptime/deps.mk b/src/uptime/deps.mk deleted file mode 100644 index b6534caec..000000000 --- a/src/uptime/deps.mk +++ /dev/null @@ -1 +0,0 @@ -DEPLIBS += time diff --git a/src/uptime/uptime.rs b/src/uptime/uptime.rs index 7b3730ef5..63e1d47e1 100644 --- a/src/uptime/uptime.rs +++ b/src/uptime/uptime.rs @@ -205,3 +205,8 @@ fn print_uptime(upsecs: i64) { print!("up {:2}:{:02}, ", uphours, upmins); } } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/users/Cargo.toml b/src/users/Cargo.toml index ce7cea1f5..2ffc7148d 100644 --- a/src/users/Cargo.toml +++ b/src/users/Cargo.toml @@ -10,3 +10,7 @@ path = "users.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="users" +path="users.rs" diff --git a/src/users/users.rs b/src/users/users.rs index d46092f8b..7832208aa 100644 --- a/src/users/users.rs +++ b/src/users/users.rs @@ -120,3 +120,8 @@ fn exec(filename: &str) { println!("{}", users.join(" ")); } } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/uutils/uutils.rs b/src/uutils/uutils.rs index 934acede4..45a5353e7 100644 --- a/src/uutils/uutils.rs +++ b/src/uutils/uutils.rs @@ -9,21 +9,23 @@ * file that was distributed with this source code. */ -@CRATES@ +include!(concat!(env!("OUT_DIR"), "/uutils_crates.rs")); -use std::env; use std::collections::hash_map::HashMap; use std::path::Path; +use std::env; static NAME: &'static str = "uutils"; -static VERSION: &'static str = "1.0.0"; +static VERSION: &'static str = "0.0.1"; -type UtilityMap = HashMap<&'static str, fn(Vec) -> i32>; +include!(concat!(env!("OUT_DIR"), "/uutils_map.rs")); -fn util_map() -> UtilityMap { - let mut map: UtilityMap = HashMap::new(); - @UTIL_MAP@ - map +fn name_sub(util_name: &str) -> &str { + match util_name { + "test" => "test_uu", + "test_uu" => "test", + x @ _ => x + } } fn usage(cmap: &UtilityMap) { @@ -32,7 +34,7 @@ fn usage(cmap: &UtilityMap) { println!("Usage:"); println!(" {} [util [arguments...]]\n", NAME); println!("Currently defined functions:"); - let mut utils: Vec<&str> = cmap.keys().map(|&s| s).collect(); + let mut utils: Vec<&str> = cmap.keys().map(|&s| name_sub(s)).collect(); utils.sort(); for util in utils.iter() { println!("\t{}", util); @@ -70,7 +72,7 @@ fn main() { args.remove(0); let util = &args[0][..]; - match umap.get(util) { + match umap.get(name_sub(util)) { Some(&uumain) => { std::process::exit(uumain(args.clone())); } @@ -79,7 +81,7 @@ fn main() { // see if they want help on a specific util if args.len() >= 2 { let util = &args[1][..]; - match umap.get(util) { + match umap.get(name_sub(util)) { Some(&uumain) => { std::process::exit(uumain(vec![util.to_string(), "--help".to_string()])); } diff --git a/src/uutils/uutils_cargo.rs b/src/uutils/uutils_cargo.rs deleted file mode 100644 index 627c62c43..000000000 --- a/src/uutils/uutils_cargo.rs +++ /dev/null @@ -1,107 +0,0 @@ -#![crate_name = "uutils"] - -/* - * This file is part of the uutils coreutils package. - * - * (c) Michael Gehring - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -include!(concat!(env!("OUT_DIR"), "/uutils_crates.rs")); - -use std::env; -use std::collections::hash_map::HashMap; -use std::path::Path; - -static NAME: &'static str = "uutils"; -static VERSION: &'static str = "0.0.1"; - -include!(concat!(env!("OUT_DIR"), "/uutils_map.rs")); - -fn name_sub(util_name: &str) -> &str { - match util_name { - "test" => "test_uu", - "test_uu" => "test", - x @ _ => x - } -} - -fn usage(cmap: &UtilityMap) { - println!("{} {}", NAME, VERSION); - println!(""); - println!("Usage:"); - println!(" {} [util [arguments...]]\n", NAME); - println!("Currently defined functions:"); - let mut utils: Vec<&str> = cmap.keys().map(|&s| name_sub(s)).collect(); - utils.sort(); - for util in utils.iter() { - println!("\t{}", util); - } -} - -fn main() { - let umap = util_map(); - let mut args : Vec = env::args().collect(); - - // try binary name as util name. - let args0 = args[0].clone(); - let binary = Path::new(&args0[..]); - let binary_as_util = binary.file_name().unwrap().to_str().unwrap(); - - match umap.get(binary_as_util) { - Some(&uumain) => { - std::process::exit(uumain(args)); - } - None => (), - } - - if binary_as_util.ends_with("uutils") || binary_as_util.starts_with("uutils") || - binary_as_util.ends_with("busybox") || binary_as_util.starts_with("busybox") { - // uutils can be called as either "uutils", "busybox" - // "uutils-suffix" or "busybox-suffix". Not sure - // what busybox uses the -suffix pattern for. - } else { - println!("{}: applet not found", binary_as_util); - std::process::exit(1); - } - - // try first arg as util name. - if args.len() >= 2 { - args.remove(0); - let util = &args[0][..]; - - match umap.get(name_sub(util)) { - Some(&uumain) => { - std::process::exit(uumain(args.clone())); - } - None => { - if &args[0][..] == "--help" { - // see if they want help on a specific util - if args.len() >= 2 { - let util = &args[1][..]; - match umap.get(name_sub(util)) { - Some(&uumain) => { - std::process::exit(uumain(vec![util.to_string(), "--help".to_string()])); - } - None => { - println!("{}: applet not found", util); - std::process::exit(1); - } - } - } - usage(&umap); - std::process::exit(0); - } else { - println!("{}: applet not found", util); - std::process::exit(1); - } - } - } - } else { - // no arguments provided - usage(&umap); - std::process::exit(0); - } -} diff --git a/src/wc/Cargo.toml b/src/wc/Cargo.toml index cb46772b6..235b46d11 100644 --- a/src/wc/Cargo.toml +++ b/src/wc/Cargo.toml @@ -10,3 +10,7 @@ path = "wc.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="wc" +path="wc.rs" diff --git a/src/wc/wc.rs b/src/wc/wc.rs index a4215b88c..9160b1c60 100644 --- a/src/wc/wc.rs +++ b/src/wc/wc.rs @@ -282,3 +282,8 @@ fn open(path: &str) -> StdResult>, i32> { } } } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/whoami/Cargo.toml b/src/whoami/Cargo.toml index 91ee10c24..c5036711c 100644 --- a/src/whoami/Cargo.toml +++ b/src/whoami/Cargo.toml @@ -10,3 +10,7 @@ path = "whoami.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="whoami" +path="whoami.rs" diff --git a/src/whoami/deps.mk b/src/whoami/deps.mk deleted file mode 100644 index dab27f417..000000000 --- a/src/whoami/deps.mk +++ /dev/null @@ -1 +0,0 @@ -DEPLIBS += winapi advapi32 kernel32 diff --git a/src/whoami/whoami.rs b/src/whoami/whoami.rs index fbcf90f27..14325b537 100644 --- a/src/whoami/whoami.rs +++ b/src/whoami/whoami.rs @@ -63,3 +63,8 @@ pub fn exec() { } } } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +} diff --git a/src/yes/Cargo.toml b/src/yes/Cargo.toml index e5280f83e..36d86854d 100644 --- a/src/yes/Cargo.toml +++ b/src/yes/Cargo.toml @@ -10,3 +10,7 @@ path = "yes.rs" [dependencies] getopts = "*" libc = "*" + +[[bin]] +name="yes" +path="yes.rs" diff --git a/src/yes/yes.rs b/src/yes/yes.rs index 52af0f53a..bc492095a 100644 --- a/src/yes/yes.rs +++ b/src/yes/yes.rs @@ -61,3 +61,8 @@ pub fn uumain(args: Vec) -> i32 { pub fn exec(string: &str) { while pipe_println!("{}", string) { } } + +#[allow(dead_code)] +fn main() { + std::process::exit(uumain(std::env::args().collect())); +}