diff options
author | Rob Landley <rob@landley.net> | 2016-12-07 22:22:38 -0600 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2016-12-07 22:22:38 -0600 |
commit | 72e2591018e7414958b576382dd4679223c95168 (patch) | |
tree | d88b17dae038d36bc302f9ed33bb7da504f9cda4 | |
parent | 0322afbc01cae09811a3f7b71088749100d2e6c9 (diff) | |
download | toybox-72e2591018e7414958b576382dd4679223c95168.tar.gz |
People keep wanting to cross-compile from macs, where the stock sed is broken.
So use $SED to indicate the sed to use, and set it to 'gsed' if available.
-rwxr-xr-x | scripts/make.sh | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/scripts/make.sh b/scripts/make.sh index 7ae13c22..9c61292d 100755 --- a/scripts/make.sh +++ b/scripts/make.sh @@ -16,6 +16,11 @@ UNSTRIPPED="generated/unstripped/$(basename "$OUTNAME")" [ -z "$CPUS" ] && CPUS=$((($(echo /sys/devices/system/cpu/cpu[0-9]* | wc -w)*3)/2)) +if [ -z "$SED" ] +then + [ ! -z "$(which gsed)" ] && SED=gsed || SED=sed +fi + # Respond to V= by echoing command lines as well as running them DOTPROG= do_loudly() @@ -52,9 +57,9 @@ then echo -n "generated/newtoys.h " echo "USE_TOYBOX(NEWTOY(toybox, NULL, TOYFLAG_STAYROOT))" > generated/newtoys.h - sed -n -e 's/^USE_[A-Z0-9_]*(/&/p' toys/*/*.c \ - | sed 's/\(.*TOY(\)\([^,]*\),\(.*\)/\2 \1\2,\3/' | sort -s -k 1,1 \ - | sed 's/[^ ]* //' >> generated/newtoys.h || exit 1 + $SED -n -e 's/^USE_[A-Z0-9_]*(/&/p' toys/*/*.c \ + | $SED 's/\(.*TOY(\)\([^,]*\),\(.*\)/\2 \1\2,\3/' | sort -s -k 1,1 \ + | $SED 's/[^ ]* //' >> generated/newtoys.h || exit 1 fi [ ! -z "$V" ] && echo "Which C files to build..." @@ -64,7 +69,7 @@ fi GITHASH="$(git describe --tags --abbrev=12 2>/dev/null)" [ ! -z "$GITHASH" ] && GITHASH="-DTOYBOX_VERSION=\"$GITHASH\"" -TOYFILES="$(sed -n 's/^CONFIG_\([^=]*\)=.*/\1/p' "$KCONFIG_CONFIG" | xargs | tr ' [A-Z]' '|[a-z]')" +TOYFILES="$($SED -n 's/^CONFIG_\([^=]*\)=.*/\1/p' "$KCONFIG_CONFIG" | xargs | tr ' [A-Z]' '|[a-z]')" TOYFILES="$(egrep -l "TOY[(]($TOYFILES)[ ,]" toys/*/*.c)" CFLAGS="$CFLAGS $(cat generated/cflags)" BUILD="$(echo ${CROSS_COMPILE}${CC} $CFLAGS -I . $OPTIMIZE $GITHASH)" @@ -119,7 +124,7 @@ fi LINK="$(echo $LDOPTIMIZE $LDFLAGS -o "$UNSTRIPPED" -Wl,--as-needed $(cat generated/optlibs.dat))" genbuildsh > generated/build.sh && chmod +x generated/build.sh || exit 1 -#TODO: "make sed && make" doesn't regenerate config.h because diff .config +#TODO: "make $SED && make" doesn't regenerate config.h because diff .config if true #isnewer generated/config.h "$KCONFIG_CONFIG" then echo "Make generated/config.h from $KCONFIG_CONFIG." @@ -128,7 +133,7 @@ then # happy. New ones have '\n' so can replace one line with two without all # the branches and tedious mucking about with hold space. - sed -n \ + $SED -n \ -e 's/^# CONFIG_\(.*\) is not set.*/\1/' \ -e 't notset' \ -e 's/^CONFIG_\(.*\)=y.*/\1/' \ @@ -174,7 +179,7 @@ make_flagsh() then cat generated/config.h else - sed '/USE_.*([^)]*)$/s/$/ __VA_ARGS__/' generated/config.h + $SED '/USE_.*([^)]*)$/s/$/ __VA_ARGS__/' generated/config.h fi cat generated/newtoys.h @@ -184,7 +189,7 @@ make_flagsh() # handle "" with nothing in it, and mkflags uses that). ) | ${CROSS_COMPILE}${CC} -E - | \ - sed -n -e 's/" *"//g;/^#/d;t clear;:clear;s/"/"/p;t;s/\( [AB] \).*/\1 " "/p' + $SED -n -e 's/" *"//g;/^#/d;t clear;:clear;s/"/"/p;t;s/\( [AB] \).*/\1 " "/p' # Sort resulting line pairs and glue them together into triplets of # command "flags" "allflags" @@ -192,7 +197,7 @@ make_flagsh() # If no pair (because command's disabled in config), use " " for flags # so allflags can define the appropriate zero macros. - done | sort -s | sed -n -e 's/ A / /;t pair;h;s/\([^ ]*\).*/\1 " "/;x' \ + done | sort -s | $SED -n -e 's/ A / /;t pair;h;s/\([^ ]*\).*/\1 " "/;x' \ -e 'b single;:pair;h;n;:single;s/[^ ]* B //;H;g;s/\n/ /;p' | \ tee generated/flags.raw | generated/mkflags > generated/flags.h || exit 1 } @@ -209,8 +214,8 @@ function getglobals() { for i in toys/*/*.c do - NAME="$(echo $i | sed 's@.*/\(.*\)\.c@\1@')" - DATA="$(sed -n -e '/^GLOBALS(/,/^)/b got;b;:got' \ + NAME="$(echo $i | $SED 's@.*/\(.*\)\.c@\1@')" + DATA="$($SED -n -e '/^GLOBALS(/,/^)/b got;b;:got' \ -e 's/^GLOBALS(/struct '"$NAME"'_data {/' \ -e 's/^)/};/' -e 'p' $i)" @@ -227,7 +232,7 @@ then echo echo "extern union global_union {" echo "$GLOBSTRUCT" | \ - sed -n 's/struct \(.*\)_data {/ struct \1_data \1;/p' + $SED -n 's/struct \(.*\)_data {/ struct \1_data \1;/p' echo "} this;" ) > generated/globals.h fi @@ -241,7 +246,7 @@ if isnewer generated/tags.h toys then echo -n "generated/tags.h " - sed -n '/TAGGED_ARRAY(/,/^)/{s/.*TAGGED_ARRAY[(]\([^,]*\),/\1/;p}' \ + $SED -n '/TAGGED_ARRAY(/,/^)/{s/.*TAGGED_ARRAY[(]\([^,]*\),/\1/;p}' \ toys/*/*.c lib/*.c | generated/mktags > generated/tags.h fi |