Changeset 29945


Ignore:
Timestamp:
2012-01-29T18:42:58+01:00 (6 years ago)
Author:
jow
Message:

[scripts] patch-specs.sh: fallback to ext-toolchain.sh --wrap if spec file patching is not possible (gcc < 4.3.0)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/scripts/patch-specs.sh

    r29767 r29945  
    22 
    33DIR="$1" 
    4 FOUND=0 
    54 
    65if [ -d "$DIR" ]; then 
     
    2726fi 
    2827 
    29 for lib in $(STAGING_DIR="$dir" "$CPP" -x c -v /dev/null 2>&1 | sed -ne 's#:# #g; s#^LIBRARY_PATH=##p'); do 
    30         if [ -d "$lib" ]; then 
    31                 grep -qs "STAGING_DIR" "$lib/specs" && rm -f "$lib/specs" 
    32                 if [ $FOUND -lt 1 ]; then 
    33                         echo -n "Patching specs ... " 
    34                         STAGING_DIR="$dir" "$CPP" -dumpspecs | awk ' 
    35                                 mode ~ "link" { 
    36                                         sub("%{L.}", "%{L*} -L %:getenv(STAGING_DIR /usr/lib) -rpath-link %:getenv(STAGING_DIR /usr/lib)") 
    37                                 } 
    38                                 mode ~ "cpp" { 
    39                                         $0 = $0 " -idirafter %:getenv(STAGING_DIR /usr/include)" 
    40                                 } 
    41                                 { 
    42                                         print $0 
    43                                         mode = "" 
    44                                 } 
    45                                 /^\*cpp:/ { 
    46                                         mode = "cpp" 
    47                                 } 
    48                                 /^\*link.*:/ { 
    49                                         mode = "link" 
    50                                 } 
    51                         ' > "$lib/specs" 
     28patch_specs() { 
     29        local found=0 
     30 
     31        for lib in $(STAGING_DIR="$DIR" "$CPP" -x c -v /dev/null 2>&1 | sed -ne 's#:# #g; s#^LIBRARY_PATH=##p'); do 
     32                if [ -d "$lib" ]; then 
     33                        grep -qs "STAGING_DIR" "$lib/specs" && rm -f "$lib/specs" 
     34                        if [ $found -lt 1 ]; then 
     35                                echo -n "Patching specs ... " 
     36                                STAGING_DIR="$DIR" "$CPP" -dumpspecs | awk ' 
     37                                        mode ~ "link" { 
     38                                                sub("%{L.}", "%{L*} -L %:getenv(STAGING_DIR /usr/lib) -rpath-link %:getenv(STAGING_DIR /usr/lib)") 
     39                                        } 
     40                                        mode ~ "cpp" { 
     41                                                $0 = $0 " -idirafter %:getenv(STAGING_DIR /usr/include)" 
     42                                        } 
     43                                        { 
     44                                                print $0 
     45                                                mode = "" 
     46                                        } 
     47                                        /^\*cpp:/ { 
     48                                                mode = "cpp" 
     49                                        } 
     50                                        /^\*link.*:/ { 
     51                                                mode = "link" 
     52                                        } 
     53                                ' > "$lib/specs" 
     54                                echo "ok" 
     55                                found=1 
     56                        fi 
     57                fi 
     58        done 
     59 
     60        [ $found -gt 0 ] 
     61        return $? 
     62} 
     63 
     64 
     65VERSION="$(STAGING_DIR="$DIR" "$CPP" --version | head -n1)" 
     66VERSION="${VERSION:-unknown}" 
     67 
     68case "${VERSION##* }" in 
     69        2.*|3.*|4.0.*|4.1.*|4.2.*) 
     70                echo "The compiler version does not support getenv() in spec files." 
     71                echo -n "Wrapping binaries instead ... " 
     72 
     73                if "${0%/*}/ext-toolchain.sh" --toolchain "$DIR" --wrap "${CPP%/*}"; then 
    5274                        echo "ok" 
    53                         FOUND=1 
     75                        exit 0 
     76                else 
     77                        echo "failed" 
     78                        exit $? 
    5479                fi 
    55         fi 
    56 done 
    57  
    58 if [ $FOUND -lt 1 ]; then 
    59         echo "Failed to locate library directory!" 
    60         exit 1 
    61 else 
    62         echo "Toolchain successfully patched." 
    63         exit 0 
    64 fi 
     80        ;; 
     81        *) 
     82                if patch_specs; then 
     83                        echo "Toolchain successfully patched." 
     84                        exit 0 
     85                else 
     86                        echo "Failed to locate library directory!" 
     87                        exit 1 
     88                fi 
     89        ;; 
     90esac 
Note: See TracChangeset for help on using the changeset viewer.