diff options
| author | Denys Vlasenko <vda.linux@googlemail.com> | 2015-10-24 02:29:00 +0200 |
|---|---|---|
| committer | Denys Vlasenko <vda.linux@googlemail.com> | 2015-10-24 02:29:00 +0200 |
| commit | 5c23f2566c1d26c62024cc2c78ca5aad4c99dd33 (patch) | |
| tree | d0d6dfadf3831123ae0b3cf44f28b01d94ea4111 /scripts/trylink | |
| parent | 7ab00a0de9cfeeacff70a74402808d225ba07397 (diff) | |
| download | busybox-w32-1_24_1.tar.gz busybox-w32-1_24_1.tar.bz2 busybox-w32-1_24_1.zip | |
Apply post-1.24.0 patches, bump version to 1.24.11_24_1
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to '')
| -rwxr-xr-x | scripts/trylink | 59 |
1 files changed, 35 insertions, 24 deletions
diff --git a/scripts/trylink b/scripts/trylink index 48c487bcd..357aa6277 100755 --- a/scripts/trylink +++ b/scripts/trylink | |||
| @@ -47,18 +47,22 @@ try() { | |||
| 47 | 47 | ||
| 48 | check_cc() { | 48 | check_cc() { |
| 49 | local tempname="$(mktemp)" | 49 | local tempname="$(mktemp)" |
| 50 | local r | ||
| 51 | echo "int main(int argc,char**argv){return argv?argc:0;}" >"$tempname".c | ||
| 50 | # Can use "-o /dev/null", but older gcc tend to *unlink it* on failure! :( | 52 | # Can use "-o /dev/null", but older gcc tend to *unlink it* on failure! :( |
| 51 | # "-xc": C language. "/dev/null" is an empty source file. | 53 | # Was using "-xc /dev/null", but we need a valid C program. |
| 52 | if $CC $CPPFLAGS $CFLAGS $1 -shared -xc /dev/null -o "$tempname".o >/dev/null 2>&1; then | 54 | # "eval" may be needed if CFLAGS can contain |
| 53 | echo "$1"; | 55 | # '... -D"BB_VER=KBUILD_STR(1.N.M)" ...' |
| 54 | else | 56 | # and we need shell to process quotes! |
| 55 | echo "$2"; | 57 | $CC $CFLAGS $1 "$tempname".c -o "$tempname" >/dev/null 2>&1 |
| 56 | fi | 58 | r=$? |
| 57 | rm -f "$tempname" "$tempname".o | 59 | rm -f "$tempname" "$tempname".c "$tempname".o |
| 60 | return $r | ||
| 58 | } | 61 | } |
| 59 | 62 | ||
| 60 | check_libc_is_glibc() { | 63 | check_libc_is_glibc() { |
| 61 | local tempname="$(mktemp)" | 64 | local tempname="$(mktemp)" |
| 65 | local r | ||
| 62 | echo "\ | 66 | echo "\ |
| 63 | #include <stdlib.h> | 67 | #include <stdlib.h> |
| 64 | /* Apparently uclibc defines __GLIBC__ (compat trick?). Oh well. */ | 68 | /* Apparently uclibc defines __GLIBC__ (compat trick?). Oh well. */ |
| @@ -66,12 +70,10 @@ check_libc_is_glibc() { | |||
| 66 | syntax error here | 70 | syntax error here |
| 67 | #endif | 71 | #endif |
| 68 | " >"$tempname".c | 72 | " >"$tempname".c |
| 69 | if $CC $CPPFLAGS $CFLAGS "$tempname".c -c -o "$tempname".o >/dev/null 2>&1; then | 73 | ! $CC $CFLAGS "$tempname".c -c -o "$tempname".o >/dev/null 2>&1 |
| 70 | echo "$2"; | 74 | r=$? |
| 71 | else | 75 | rm -f "$tempname" "$tempname".c "$tempname".o |
| 72 | echo "$1"; | 76 | return $r |
| 73 | fi | ||
| 74 | rm -f "$tempname" "$tempname".[co] | ||
| 75 | } | 77 | } |
| 76 | 78 | ||
| 77 | EXE="$1" | 79 | EXE="$1" |
| @@ -83,32 +85,41 @@ A_FILES="$6" | |||
| 83 | LDLIBS="$7" | 85 | LDLIBS="$7" |
| 84 | 86 | ||
| 85 | # The --sort-section option is not supported by older versions of ld | 87 | # The --sort-section option is not supported by older versions of ld |
| 86 | SORT_SECTION=`check_cc "-Wl,--sort-section,alignment" ""` | 88 | SORT_SECTION="-Wl,--sort-section,alignment" |
| 89 | if ! check_cc "-Wl,--sort-section,alignment"; then | ||
| 90 | echo "Your linker does not support --sort-section,alignment" | ||
| 91 | SORT_SECTION="" | ||
| 92 | fi | ||
| 87 | 93 | ||
| 88 | START_GROUP="-Wl,--start-group" | 94 | START_GROUP="-Wl,--start-group" |
| 89 | END_GROUP="-Wl,--end-group" | 95 | END_GROUP="-Wl,--end-group" |
| 90 | INFO_OPTS="-Wl,--warn-common -Wl,-Map,$EXE.map -Wl,--verbose" | 96 | INFO_OPTS="-Wl,--warn-common -Wl,-Map,$EXE.map -Wl,--verbose" |
| 91 | 97 | ||
| 92 | # gold may not support --sort-common (yet) | 98 | # gold may not support --sort-common (yet) |
| 93 | SORT_COMMON=`check_cc "-Wl,--sort-common" ""` | 99 | SORT_COMMON="-Wl,--sort-common" |
| 100 | if ! check_cc "-Wl,--sort-common"; then | ||
| 101 | echo "Your linker does not support --sort-common" | ||
| 102 | SORT_COMMON="" | ||
| 103 | fi | ||
| 94 | 104 | ||
| 95 | # Static linking against glibc produces buggy executables | 105 | # Static linking against glibc produces buggy executables |
| 96 | # (glibc does not cope well with ld --gc-sections). | 106 | # (glibc does not cope well with ld --gc-sections). |
| 97 | # See sources.redhat.com/bugzilla/show_bug.cgi?id=3400 | 107 | # See sources.redhat.com/bugzilla/show_bug.cgi?id=3400 |
| 98 | # Note that glibc is unsuitable for static linking anyway. | 108 | # Note that glibc is unsuitable for static linking anyway. |
| 99 | # We are removing -Wl,--gc-sections from link command line. | 109 | # We are removing -Wl,--gc-sections from link command line. |
| 100 | GC_SECTIONS=`( | 110 | GC_SECTIONS="-Wl,--gc-sections" |
| 101 | . ./.config | 111 | if (. ./.config && test x"$CONFIG_STATIC" = x"y") then |
| 102 | if test x"$CONFIG_STATIC" = x"y"; then | 112 | if check_libc_is_glibc; then |
| 103 | check_libc_is_glibc "" "-Wl,--gc-sections" | 113 | echo "Static linking against glibc, can't use --gc-sections" |
| 104 | else | 114 | # GC_SECTIONS="" |
| 105 | echo "-Wl,--gc-sections" | 115 | fi |
| 106 | fi | 116 | fi |
| 107 | )` | ||
| 108 | |||
| 109 | # The --gc-sections option is not supported by older versions of ld | 117 | # The --gc-sections option is not supported by older versions of ld |
| 110 | if test -n "$GC_SECTIONS"; then | 118 | if test -n "$GC_SECTIONS"; then |
| 111 | GC_SECTIONS=`check_cc "$GC_SECTIONS" ""` | 119 | if ! check_cc "$GC_SECTIONS"; then |
| 120 | echo "Your linker does not support $GC_SECTIONS" | ||
| 121 | GC_SECTIONS="" | ||
| 122 | fi | ||
| 112 | fi | 123 | fi |
| 113 | 124 | ||
| 114 | # Sanitize lib list (dups, extra spaces etc) | 125 | # Sanitize lib list (dups, extra spaces etc) |
