From a8d0d13376251e1ff35a557dddea1d2e3c81a149 Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Wed, 23 Mar 2016 03:25:37 -0500 Subject: Redo build stuff in response to Andy Chu's suggestions. Toybox single binaries are now made directly with the new name instead of stomping toybox and getting renamed. Unstripped files now live in generated/unstripped. Target to run all tests is now "make tests" to avoid conflict with "make test". .singleconfig now has .PHONY: entries for all test_$NAME targets. Default install location changed to /usr/toybox, code.html now says how to change it (set $PREFIX). scripts/install.sh --uninstall works now. (And you get to keep the pieces!) --- scripts/genconfig.sh | 16 +++++++--------- scripts/install.sh | 45 ++++++++++++++++++++++----------------------- scripts/make.sh | 15 +++++++++------ scripts/single.sh | 4 ++-- 4 files changed, 40 insertions(+), 40 deletions(-) (limited to 'scripts') diff --git a/scripts/genconfig.sh b/scripts/genconfig.sh index 5e7d1df2..e9bb5141 100755 --- a/scripts/genconfig.sh +++ b/scripts/genconfig.sh @@ -146,12 +146,10 @@ do [ "${FILE/pending//}" != "$FILE" ] && PENDING="$PENDING $NAME" || WORKING="$WORKING $NAME" -done > .singlemake && -echo -e "clean::\n\trm -f $WORKING $PENDING" >> .singlemake && -echo -e "list:\n\t@echo $(echo $WORKING $PENDING | tr ' ' '\n' | sort | xargs)"\ - >> .singlemake && -echo -e "list_working:\n\t@echo $(echo $WORKING | tr ' ' '\n' | sort | xargs)" \ - >> .singlemake && -echo -e "list_pending:\n\t@echo $(echo $PENDING | tr ' ' '\n' | sort | xargs)" \ - >> .singlemake -) +done && +echo -e "clean::\n\trm -f $WORKING $PENDING" && +echo -e "list:\n\t@echo $(echo $WORKING $PENDING | tr ' ' '\n' | sort | xargs)" && +echo -e "list_working:\n\t@echo $(echo $WORKING | tr ' ' '\n' | sort | xargs)" && +echo -e "list_pending:\n\t@echo $(echo $PENDING | tr ' ' '\n' | sort | xargs)" && +echo -e ".PHONY: $WORKING $PENDING" | sed 's/ \([^ ]\)/ test_\1/g' +) > .singlemake diff --git a/scripts/install.sh b/scripts/install.sh index 8891a314..961341e6 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -4,31 +4,24 @@ source ./configure -# Parse command line arguments. +[ -z "$PREFIX" ] && PREFIX="/usr/toybox" -[ -z "$PREFIX" ] && PREFIX="." +# Parse command line arguments. LONG_PATH="" while [ ! -z "$1" ] do # Create symlinks instead of hardlinks? - [ "$1" == "--symlink" ] && LINK_TYPE="-s" # Uninstall? - - [ "$1" == "--uninstall" ] && UNINSTALL=1 + [ "$1" == "--uninstall" ] && UNINSTALL=Uninstall # Delete destination command if it exists? - [ "$1" == "--force" ] && DO_FORCE="-f" # Use {,usr}/{bin,sbin} paths instead of all files in one directory? - - if [ "$1" == "--long" ] - then - LONG_PATH="bin/" - fi + [ "$1" == "--long" ] && LONG_PATH="bin/" shift done @@ -38,22 +31,24 @@ echo "Compile instlist..." $DEBUG $HOSTCC -I . scripts/install.c -o generated/instlist || exit 1 COMMANDS="$(generated/instlist $LONG_PATH)" -echo "Install commands..." +echo "${UNINSTALL:-Install} commands..." # Copy toybox itself if [ -z "$UNINSTALL" ] then - mkdir -p ${PREFIX}/${LONG_PATH} || exit 1 + mkdir -p "${PREFIX}/${LONG_PATH}" && + rm -f "${PREFIX}/${LONG_PATH}/toybox" && cp toybox ${PREFIX}/${LONG_PATH} || exit 1 else - rm "${PREFIX}/${LONG_PATH}/toybox" 2>/dev/null - rmdir "${PREFIX}/${LONG_PATH}" 2>/dev/null + rm -f "${PREFIX}/${LONG_PATH}/toybox" 2>/dev/null fi -cd "${PREFIX}" +cd "$PREFIX" || exit 1 # Make links to toybox +EXIT=0 + for i in $COMMANDS do # Figure out target of link @@ -64,20 +59,19 @@ do else # Create subdirectory for command to go in (if necessary) - DOTPATH="$(echo $i | sed 's@\(.*/\).*@\1@')" + DOTPATH="$(dirname "$i")"/ if [ -z "$UNINSTALL" ] then mkdir -p "$DOTPATH" || exit 1 - else - rmdir "$DOTPATH" 2>/dev/null fi if [ -z "$LINK_TYPE" ] then - dotpath="bin/" + DOTPATH="bin/" else if [ "$DOTPATH" != "$LONG_PATH" ] then + # For symlinks we need ../../bin style relative paths DOTPATH="$(echo $DOTPATH | sed -e 's@[^/]*/@../@g')"$LONG_PATH else DOTPATH="" @@ -86,7 +80,12 @@ do fi # Create link - [ -z "$UNINSTALL" ] && - ln $DO_FORCE $LINK_TYPE ${DOTPATH}toybox $i || - rm $i 2>/dev/null + if [ -z "$UNINSTALL" ] + then + ln $DO_FORCE $LINK_TYPE ${DOTPATH}toybox $i || EXIT=1 + else + rm -f $i || EXIT=1 + fi done + +exit $EXIT diff --git a/scripts/make.sh b/scripts/make.sh index 8be4c3be..d3dc8eb9 100755 --- a/scripts/make.sh +++ b/scripts/make.sh @@ -7,7 +7,9 @@ export LC_ALL=C set -o pipefail source ./configure -[ -z "$KCONFIG_CONFIG" ] && KCONFIG_CONFIG=".config" +[ -z "$KCONFIG_CONFIG" ] && KCONFIG_CONFIG=.config +[ -z "$OUTNAME" ] && OUTNAME=toybox +UNSTRIPPED="generated/unstripped/$(basename "$OUTNAME")" # Since each cc invocation is short, launch half again as many processes # as we have processors so they don't exit faster than we can start them. @@ -30,7 +32,7 @@ isnewer() echo "Generate headers from toys/*/*.c..." -mkdir -p generated +mkdir -p generated/unstripped if isnewer generated/Config.in toys then @@ -111,7 +113,7 @@ fi # LINK needs optlibs.dat, above -LINK="$(echo $LDOPTIMIZE $LDFLAGS -o toybox_unstripped -Wl,--as-needed $(cat generated/optlibs.dat))" +LINK="$(echo $LDOPTIMIZE $LDFLAGS -o "$UNSTRIPPED" -Wl,--as-needed $(cat generated/optlibs.dat))" genbuildsh > generated/build.sh && chmod +x generated/build.sh || exit 1 echo "Make generated/config.h from $KCONFIG_CONFIG." @@ -293,9 +295,10 @@ done [ $DONE -ne 0 ] && exit 1 do_loudly $BUILD $LFILES $LINK || exit 1 -if [ ! -z "$NOSTRIP" ] || ! do_loudly ${CROSS_COMPILE}strip toybox_unstripped -o toybox +if [ ! -z "$NOSTRIP" ] || + ! do_loudly ${CROSS_COMPILE}strip "$UNSTRIPPED" -o "$OUTNAME" then - echo "strip failed, using unstripped" && cp toybox_unstripped toybox || + echo "strip failed, using unstripped" && cp "$UNSTRIPPED" "$OUTNAME" || exit 1 fi @@ -303,6 +306,6 @@ fi # its output the way SUSv4 suggests it do so. While we're at it, make sure # we don't have the "w" bit set so things like bzip2's "cp -f" install don't # overwrite our binary through the symlink. -do_loudly chmod 555 toybox || exit 1 +do_loudly chmod 555 "$OUTNAME" || exit 1 echo diff --git a/scripts/single.sh b/scripts/single.sh index e3c9ebbd..cadb2fcd 100755 --- a/scripts/single.sh +++ b/scripts/single.sh @@ -38,6 +38,6 @@ do echo "# CONFIG_TOYBOX is not set" >> "$KCONFIG_CONFIG" && grep "CONFIG_TOYBOX_" .config >> "$KCONFIG_CONFIG" && - make && - mv -f toybox $PREFIX$i || exit 1 + rm -f "$PREFIX$i" && + OUTNAME="$PREFIX$i" scripts/make.sh || exit 1 done -- cgit v1.2.3