printf: fix printf "%u\n" +18446744073709551614
[oweals/busybox.git] / scripts / gen_build_files.sh
index 1a3d3e9b8998c2448784ac2d8be5ce63179bb131..f79fa2f83c60a45cc77950e73e97201e22eb6209 100755 (executable)
@@ -20,18 +20,25 @@ chk() { status "CHK" "$@"; }
 generate()
 {
        # NB: data to be inserted at INSERT line is coming on stdin
-       local src="$1" dst="$2" header="$3"
+       src="$1"
+       dst="$2"
+       header="$3"
        #chk "${dst}"
        {
                # Need to use printf: different shells have inconsistent
                # rules re handling of "\n" in echo params.
                printf "%s\n" "${header}"
                # print everything up to INSERT line
-               sed -n '/^INSERT$/q;1,/^INSERT$/p' "${src}"
+               sed -n '/^INSERT$/ q; p' "${src}"
                # copy stdin to stdout
                cat
                # print everything after INSERT line
-               sed -n '/^INSERT$/{:l;n;p;bl}' "${src}"
+               sed -n '/^INSERT$/ {
+               :l
+                   n
+                   p
+                   bl
+               }' "${src}"
        } >"${dst}.tmp"
        if ! cmp -s "${dst}" "${dst}.tmp"; then
                gen "${dst}"
@@ -52,14 +59,22 @@ sed -n 's@^//applet:@@p' "$srctree"/*/*.c "$srctree"/*/*/*.c \
 # We add line continuation backslash after each line,
 # and insert empty line before each line which doesn't start
 # with space or tab
-sed -n -e 's@^//usage:\([ \t].*\)$@\1 \\@p' -e 's@^//usage:\([^ \t].*\)$@\n\1 \\@p' "$srctree"/*/*.c "$srctree"/*/*/*.c \
+TAB="$(printf '\tX')"
+TAB="${TAB%X}"
+LF="$(printf '\nX')"
+LF="${LF%X}"
+sed -n -e 's@^//usage:\([ '"$TAB"'].*\)$@\1 \\@p' \
+       -e 's@^//usage:\([^ '"$TAB"'].*\)$@\'"$LF"'\1 \\@p' \
+       "$srctree"/*/*.c "$srctree"/*/*/*.c \
 | generate \
        "$srctree/include/usage.src.h" \
        "include/usage.h" \
        "/* DO NOT EDIT. This file is generated from usage.src.h */"
 
 # (Re)generate */Kbuild and */Config.in
-{ cd -- "$srctree" && find . -type d; } | while read -r d; do
+# We skip .dotdirs - makes git/svn/etc users happier
+{ cd -- "$srctree" && find . -type d ! '(' -name '.?*' -prune ')'; } \
+| while read -r d; do
        d="${d#./}"
 
        src="$srctree/$d/Kbuild.src"