configure
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Thu Jun 11 21:47:19 2009 +0000 (2009-06-11)
branch1.4
changeset 1451 25d050084e98
parent 1302 7df725fc8f66
child 1455 e6a3b4ffe576
permissions -rwxr-xr-x
populate: fix installing dynamic linker 'ld.so'

The dynamic linker, ld.so, needs the execute bit to be set.
Detect tht the library being installed is in fact ld.so and
install it with 0755 instead of 0644.

Fix detecting src == dst.

Use a simpler command to copy src -> dst.

Also change echo to printf, get rid of 'echo -n', which is
highly non-portable.


-------- diffstat follows --------
/trunk/scripts/populate.in | 76 43 33 0 +++++++++++++++++++++++++++++-----------------------
1 file changed, 43 insertions(+), 33 deletions(-)
(transplanted from d7ddcb75e0f703e2ba6d17169167356389224870)
yann@182
     1
#!/bin/sh
yann@182
     2
yann@1105
     3
VERSION=$( cat .version )
yann@1105
     4
DATE=$( date +%Y%m%d )
yann@182
     5
yann@673
     6
# All absolutely required tools, one per line to ease diff.
yann@1299
     7
# See function 'has_or_abort', below, for syntax
yann@673
     8
#  - Hopefully, if gcc is present, then all associated tools will be
yann@673
     9
#  - makeinfo for building docs, even if discarded later on
yann@673
    10
#  - others obvious... :-/
yann@876
    11
#
yann@876
    12
# Format of a pattern to check for, one per line:
yann@1140
    13
#   pattern := var_name : tool_pattern  OR  tool_pattern
yann@1140
    14
#   tool_pattern := tool_test  OR  tool_pattern || tool_test
yann@1105
    15
#   tool_test := tool=regexp OR tool
yann@1105
    16
#   tool := basename of the tool  OR  absolute pathname to the tool
yann@1105
    17
#   regexp := valid grep(1) extended regular expression, $( tool --version)
yann@1105
    18
#             will be matched against this regexp.
yann@876
    19
#
yann@1106
    20
# In case a pattern list is given (eg foo || bar || buz), then tests are performed
yann@876
    21
# from left to right, stopping at the first matching test (like the shell
yann@876
    22
# would parse 'foo || bar || buz' ).
yann@876
    23
#
yann@876
    24
# Examples:
yann@1140
    25
#    bash:bash=^GNU bash, version 3\.
yann@1140
    26
#     - if ${bash} is set and non-null, does nothing
yann@1213
    27
#     - else ensures that bash exists in the PATH, and that $( bash --version )
yann@876
    28
#       matches the regexp '^GNU bash, version 3\.'
yann@1140
    29
#       - if so, then sets bash="$( which bash )"
yann@1106
    30
#    autoconf=(GNU Autoconf) || autoconf2.50
yann@1140
    31
#     - does not look at an existing variable
yann@1140
    32
#     - ensures that:
yann@1213
    33
#         - 'autoconf' is to be found in the PATH, and that $( autoconf --version )
yann@1105
    34
#           matches the regexp '(GNU Autoconf)' (which btw is the signature of
yann@1105
    35
#           autoconf >= 2.50),
yann@876
    36
#       OR that:
yann@876
    37
#         - 'autoconf2.50' is to be found in the PATH
yann@876
    38
#
yann@673
    39
TOOLS_TO_CHECK='
yann@1213
    40
bash:bash=^GNU bash, version [34]\.
yann@1106
    41
cut
yann@1106
    42
xargs
yann@1140
    43
install:install=GNU coreutils
yann@1140
    44
make:make=^GNU Make
yann@1105
    45
gcc
yann@1299
    46
awk
yann@1105
    47
bison
yann@1105
    48
flex
yann@1105
    49
makeinfo
yann@1106
    50
automake=\(GNU automake\) (1\.[[:digit:]]{2,}\.|[2-9][[:digit:]]*\.)
yann@1255
    51
libtool=\(GNU libtool.*\) (2[[:digit:]]*\.|1\.6[[:digit:]]*\.|1\.5\.[2-9][[:digit:]]+)
yann@1106
    52
curl || wget
yann@1105
    53
patch
yann@1105
    54
tar
yann@1105
    55
gzip
yann@1105
    56
bzip2
yann@673
    57
'
yann@673
    58
yann@183
    59
PREFIX_DEFAULT=/usr/local
yann@182
    60
yann@182
    61
BINDIR_set=
yann@182
    62
LIBDIR_set=
yann@182
    63
DOCDIR_set=
yann@182
    64
MANDIR_set=
yann@285
    65
LOCAL_set=
yann@182
    66
yann@641
    67
do_quit=
yann@614
    68
yann@673
    69
# Simply print the error message, and exit. Obvious, he?
yann@673
    70
do_error() {
yann@673
    71
    echo "${@}"
yann@673
    72
    exit 1
yann@673
    73
}
yann@673
    74
yann@673
    75
# A small function to test for existence of various tools
yann@876
    76
# Usage: has_or_abort test_pattern (see top of file, TOOLS_TO_CHECK, for
yann@876
    77
#                                   complete pattern format)
yann@673
    78
has_or_abort() {
yann@1140
    79
    local save_IFS
yann@1140
    80
    local var_name
yann@1140
    81
    local var_value
yann@1140
    82
    local tool_pattern
yann@1140
    83
    local field
yann@1140
    84
yann@1151
    85
    var_name="$( echo "${1}" |"${sed}" -r -e 's/^(([^=:]+):.+|[^:=]+=.+|[^:=]+)$/\2/;' )"
yann@1140
    86
    field="${var_name:+2}"
yann@1140
    87
    field="${field:-1}"
yann@1140
    88
    tool_pattern="$( echo "${1}" |cut -d : -f ${field}- |"${sed}" -r -e 's/ *\|\| */\n/g;' )"
yann@1140
    89
yann@1105
    90
    save_IFS="${IFS}"
yann@1140
    91
    # Set IFS to \n only
yann@1106
    92
    IFS='
yann@1106
    93
'
yann@1106
    94
    for item in ${tool_pattern}; do
yann@1105
    95
        case "${item}" in
yann@1105
    96
            *=*)
yann@1105
    97
                tool="${item%%=*}"
yann@1105
    98
                regexp="${item#*=}"
yann@1105
    99
                ;;
yann@1105
   100
            *)  tool="${item}"
yann@1105
   101
                regexp=
yann@1105
   102
                ;;
yann@1105
   103
        esac
yann@1140
   104
yann@1105
   105
        printf "Checking for '${tool}'... "
yann@1140
   106
        if [ -n "${var_name}" ]; then
yann@1140
   107
            eval var_value='"${'"${var_name}"'}"'
yann@1140
   108
            if [ -n "${var_value}" ]; then
yann@1140
   109
                echo "${var_value} (cached)"
yann@1140
   110
                return 0
yann@1140
   111
            fi
yann@1140
   112
        fi
yann@1105
   113
        where=$( which "${tool}" 2>/dev/null )
yann@1105
   114
        if [ -z "${where}" ]; then
yann@1105
   115
            echo "not found"
yann@1105
   116
            where=
yann@1105
   117
            continue
yann@1106
   118
        elif [ -n "${regexp}" ]; then
yann@1106
   119
            tool_version=$( ${tool} --version 2>&1 )
yann@1106
   120
            str=$( echo "${tool_version}" |"${grep}" -E "${regexp}" |head -n 1 )
yann@1106
   121
            if [ -z "${str}" ]; then
yann@1106
   122
                echo "not found"
yann@1106
   123
                where=""
yann@1106
   124
                continue
yann@1105
   125
            fi
yann@1105
   126
        fi
yann@1106
   127
        break
yann@1140
   128
    done
yann@1106
   129
    if [ -z "${where}" ]; then
yann@1106
   130
        for item in ${tool_pattern}; do
yann@1106
   131
            case "${item}" in
yann@1106
   132
                *=*)
yann@1106
   133
                    tool="${item%%=*}"
yann@1106
   134
                    regexp="${item#*=}"
yann@1106
   135
                    ;;
yann@1106
   136
                *)  tool="${item}"
yann@1106
   137
                    regexp=
yann@1106
   138
                    ;;
yann@1106
   139
            esac
yann@1151
   140
            printf "  could not find '${tool}'"
yann@1151
   141
            [ -n "${regexp}" ] && printf " matching regexp '${regexp}'"
yann@1151
   142
            echo
yann@1106
   143
        done
yann@1106
   144
        echo "Either you are missing entirely the needed tool,"
rpjday@1288
   145
        echo "or the version you have is too old."
yann@1151
   146
        if [ -n "${var_name}" ]; then
yann@1151
   147
            echo "You can give the path to this tool using: --with-${var_name}=PATH"
yann@1151
   148
        fi
yann@1132
   149
        # FORCE can be set in the environment
yann@1132
   150
        [ -z "${FORCE}" ] && do_error "Bailing out..."
yann@1140
   151
    else
yann@1140
   152
        echo "${where}"
yann@1140
   153
        if [ -n "${var_name}" ]; then
yann@1140
   154
            eval ${var_name}='"'"${where}"'"'
yann@1140
   155
        fi
yann@1106
   156
    fi
yann@1105
   157
    IFS="${save_IFS}"
yann@673
   158
    return 0
yann@673
   159
}
yann@673
   160
yann@641
   161
# Given an option string and the following argument,
yann@641
   162
# echoes the value of the option.
yann@641
   163
# If --var=val => echoes val and returns 0, meaning second arg was not consumed
yann@641
   164
# If --var val => echoes val and returns non null, meaning second arg was used
yann@182
   165
get_optval(){
yann@182
   166
    case "$1" in
yann@182
   167
        --*=?*)
yann@1140
   168
            echo "${1#*=}"
yann@1105
   169
            return 0
yann@182
   170
            ;;
yann@182
   171
        *)
yann@182
   172
            echo "${2}"
yann@1105
   173
            return 1
yann@182
   174
            ;;
yann@182
   175
    esac
yann@182
   176
}
yann@182
   177
yann@641
   178
# The set_xxx functions will set the corresponding configuration variable
yann@641
   179
# They return 0 if second arg was not consumed, and non-zero if it was consumed.
yann@182
   180
set_prefix() {
yann@1105
   181
    PREFIX="$( get_optval "$1" "$2" )"
yann@182
   182
}
yann@182
   183
set_bindir() {
yann@376
   184
    BINDIR_set=1
yann@1105
   185
    BINDIR="$( get_optval "$1" "$2" )"
yann@182
   186
}
yann@182
   187
set_libdir() {
yann@376
   188
    LIBDIR_set=1
yann@1105
   189
    LIBDIR="$( get_optval "$1" "$2" )"
yann@182
   190
}
yann@182
   191
set_docdir() {
yann@376
   192
    DOCDIR_set=1
yann@1105
   193
    DOCDIR="$( get_optval "$1" "$2" )"
yann@182
   194
}
yann@182
   195
set_mandir() {
yann@376
   196
    MANDIR_set=1
yann@1105
   197
    MANDIR="$( get_optval "$1" "$2" )"
yann@182
   198
}
yann@1140
   199
set_tool() {
yann@1140
   200
    local var_name="${1%%=*}"
yann@1140
   201
    var_name="${var_name#--with-}"
yann@1140
   202
    eval ${var_name}="\$( get_optval "$1" "$2" )"
yann@614
   203
}
yann@614
   204
yann@183
   205
do_help() {
yann@183
   206
    cat <<__EOF__
yann@1140
   207
\`configure' configures crosstool-NG-${VERSION} to adapt to many kind of systems.
yann@183
   208
yann@183
   209
USAGE: ./configure [OPTION]...
yann@183
   210
yann@183
   211
Defaults for the options are specified in brackets.
yann@183
   212
yann@183
   213
Configuration:
yann@1105
   214
  -h, --help              display this help and exit
yann@615
   215
yann@615
   216
Installation directories:
yann@185
   217
  --prefix=PREFIX         install files in PREFIX [${PREFIX_DEFAULT}]
yann@285
   218
  --local                 don't install, and use current directory
yann@183
   219
yann@183
   220
By default, \`make install' will install all the files in
yann@183
   221
\`${PREFIX_DEFAULT}/bin', \`${PREFIX_DEFAULT}/lib' etc.  You can specify
yann@183
   222
an installation prefix other than \`${PREFIX_DEFAULT}' using \`--prefix',
yann@183
   223
for instance \`--prefix=\${HOME}'.
yann@183
   224
yann@183
   225
For better control, use the options below.
yann@183
   226
yann@183
   227
Fine tuning of the installation directories:
yann@683
   228
  --bindir=DIR            user executables [PREFIX/bin]
yann@683
   229
  --libdir=DIR            object code libraries [PREFIX/lib]
yann@683
   230
  --docdir=DIR            info documentation [PREFIX/share/doc]
yann@683
   231
  --mandir=DIR            man documentation [PREFIX/share/man]
yann@614
   232
yann@614
   233
Optional Features:
yann@1140
   234
  --with-install=PATH     Specify the full PATH to GNU install
yann@1140
   235
  --with-make=PATH        Specify the full PATH to GNU make
yann@1140
   236
  --with-grep=PATH        Specify the full PATH to GNU grep
yann@1140
   237
  --with-sed=PATH         Specify the full PATH to GNU sed
yann@1140
   238
  --with-bash=PATH        Specify the full PATH to bash >= 3.0
yann@183
   239
__EOF__
yann@183
   240
}
yann@183
   241
yann@376
   242
#---------------------------------------------------------------------
yann@376
   243
# Set user's options
yann@376
   244
yann@182
   245
while [ $# -ne 0 ]; do
yann@182
   246
    case "$1" in
yann@1297
   247
        --local)    LOCAL_set="y"; shift;;
yann@182
   248
        --prefix*)  set_prefix "$1" "$2" && shift || shift 2;;
yann@182
   249
        --bindir*)  set_bindir "$1" "$2" && shift || shift 2;;
yann@182
   250
        --libdir*)  set_libdir "$1" "$2" && shift || shift 2;;
yann@182
   251
        --docdir*)  set_docdir "$1" "$2" && shift || shift 2;;
yann@182
   252
        --mandir*)  set_mandir "$1" "$2" && shift || shift 2;;
yann@1140
   253
        --with-*)   set_tool   "$1" "$2" && shift || shift 2;;
yann@183
   254
        --help|-h)  do_help; exit 0;;
yann@1140
   255
        *)          echo "Unrecognised option: '${1}'"; do_help; exit 1;;
yann@182
   256
    esac
yann@182
   257
done
yann@182
   258
yann@641
   259
# Use defaults
yann@185
   260
[ -z "${PREFIX}" ] && set_prefix "" "${PREFIX_DEFAULT}"
yann@641
   261
yann@641
   262
# Special case when installing locally
yann@1297
   263
if [ "${LOCAL_set}" = "y" ]; then
yann@1105
   264
    set_prefix "" "$( pwd )"
yann@1105
   265
    set_bindir "" "$( pwd )"
yann@1105
   266
    set_libdir "" "$( pwd )"
yann@1105
   267
    set_docdir "" "$( pwd )/docs"
yann@1105
   268
    set_mandir "" "$( pwd )/docs"
yann@285
   269
fi
yann@183
   270
yann@376
   271
#---------------------------------------------------------------------
yann@1140
   272
# Some sanity checks, now
yann@1106
   273
yann@1140
   274
# We check for grep and sed manually, because they are used in has_or_abort
yann@1140
   275
printf "Checking for 'grep'... "
yann@1140
   276
if [ -n "${grep}" ]; then
yann@1140
   277
    echo "${grep} (cached)"
yann@1140
   278
else
yann@1140
   279
    grep="$( which grep 2>/dev/null )"
yann@1187
   280
    if [ -z "${grep}" ]; then
yann@1187
   281
        echo "not found"
yann@1187
   282
    else
yann@1187
   283
        echo "${grep}"
yann@1187
   284
        printf "Checking whether '${grep}' supports -E... "
yann@1187
   285
        if echo 'foo' |"${grep}" -E 'foo' >/dev/null 2>&1; then
yann@1187
   286
            echo "yes"
yann@1187
   287
        else
yann@1187
   288
            echo "no"
yann@1187
   289
            grep=
yann@1187
   290
        fi
yann@1187
   291
    fi
yann@1106
   292
fi
yann@1187
   293
if [ -z "${grep}" ]; then
yann@1187
   294
    echo "Either you are missing entirely the needed tool,"
rpjday@1288
   295
    echo "or the version you have is too old."
yann@1187
   296
    echo "You can give the path to this tool using: --with-grep=PATH"
yann@1187
   297
    do_error "Bailing out..."
yann@1140
   298
fi
yann@1140
   299
yann@1140
   300
printf "Checking for 'sed'... "
yann@1140
   301
if [ -n "${sed}" ]; then
yann@1140
   302
    echo "${sed} (cached)"
yann@1140
   303
else
yann@1140
   304
    sed="$( which sed 2>/dev/null )"
yann@1187
   305
    if [ -z "${sed}" ]; then
yann@1187
   306
        echo "not found"
yann@1187
   307
    else
yann@1187
   308
        echo "${sed}"
rpjday@1288
   309
        printf "Checking whether '${sed}' supports -i and -e... "
yann@1187
   310
        touch .ct-ng.sed.test
yann@1187
   311
        if "${sed}" -r -i -e 's/foo/bar/' .ct-ng.sed.test >/dev/null 2>&1; then
yann@1187
   312
            echo "yes"
yann@1187
   313
        else
yann@1187
   314
            echo "no"
yann@1187
   315
            sed=
yann@1187
   316
        fi
yann@1187
   317
        rm -f .ct-ng.sed.test
yann@1187
   318
    fi
yann@1140
   319
fi
yann@1187
   320
if [ -z "${sed}" ]; then
yann@1187
   321
    echo "Either you are missing entirely the needed tool,"
rpjday@1288
   322
    echo "or the version you have is too old."
yann@1187
   323
    echo "You can give the path to this tool using: --with-sed=PATH"
yann@1187
   324
    do_error "Bailing out..."
yann@1140
   325
fi
yann@1140
   326
yann@1140
   327
# Check the existence of absolutely required tools
yann@1140
   328
save_IFS="${IFS}"
yann@1140
   329
IFS='
yann@1140
   330
'
yann@1140
   331
for tool in ${TOOLS_TO_CHECK}; do
yann@1140
   332
    has_or_abort "${tool}"
yann@1140
   333
done
yann@1140
   334
IFS="${save_IFS}"
yann@1106
   335
yann@1106
   336
#---------------------------------------------------------------------
yann@1106
   337
# Compute the version string
yann@376
   338
yann@435
   339
# If this version is a svn snapshot, try to get the revision number
yann@435
   340
# If we can't get the revision number, use date
yann@641
   341
printf "Computing version string... "
yann@435
   342
case "${VERSION}" in
yann@1450
   343
    *+hg|hg)
yann@1450
   344
        REVISION="$( hg id -n 2>/dev/null )"
yann@1105
   345
        case "${REVISION}" in
yann@1450
   346
            "")
yann@1105
   347
                VERSION="${VERSION}_unknown@$( date +%Y%m%d.%H%M%S )";;
yann@1105
   348
            *)
yann@1450
   349
                VERSION="${VERSION}_$( hg id -b )@${REVISION%%+}_$( hg id -i )"
yann@1105
   350
                ;;
yann@1105
   351
        esac
yann@1105
   352
        # Arrange to have no / in the directory name, no need to create an
yann@1105
   353
        # arbitrarily deep directory structure
yann@1106
   354
        VERSION="$( echo "${VERSION}" |"${sed}" -r -e 's|/+|_|g;' )"
yann@444
   355
        ;;
yann@435
   356
esac
yann@553
   357
echo "${VERSION}"
yann@435
   358
yann@1106
   359
#---------------------------------------------------------------------
yann@1106
   360
# Compute and check install paths
yann@1106
   361
yann@614
   362
# Now we have the version string, we can build up the paths
yann@554
   363
[ -z "${BINDIR_set}" ] && BINDIR="${PREFIX}/bin"
yann@554
   364
[ -z "${LIBDIR_set}" ] && LIBDIR="${PREFIX}/lib/ct-ng-${VERSION}"
yann@554
   365
[ -z "${DOCDIR_set}" ] && DOCDIR="${PREFIX}/share/doc/ct-ng-${VERSION}"
yann@554
   366
[ -z "${MANDIR_set}" ] && MANDIR="${PREFIX}/share/man/man1"
yann@554
   367
yann@1047
   368
# Check that install PATHs are absolute
yann@1047
   369
for p in BIN LIB DOC MAN; do
yann@1105
   370
    var="${p}DIR"
yann@1105
   371
    eval v='"${'"${var}"'}"'
yann@1105
   372
    case "${v}" in
yann@1105
   373
        /*) ;;
yann@1105
   374
        *)  do_error "'${var}' is not an absolute path: '${v}'"
yann@1105
   375
    esac
yann@1047
   376
done
yann@1047
   377
yann@1106
   378
#---------------------------------------------------------------------
yann@1106
   379
# That's all, folks!
yann@614
   380
yann@641
   381
printf "Building up Makefile... "
yann@1140
   382
var_list="grep
yann@1140
   383
          sed
yann@1140
   384
          $( printf "${TOOLS_TO_CHECK}"                                 \
yann@1151
   385
             |"${sed}" -r -e 's/^(([^=:]+):.+|[^:=]+=.+|[^:=]+)$/\2/;'
yann@1140
   386
           )"
yann@1140
   387
var_sed="$( for var_name in ${var_list}; do
yann@1140
   388
                eval echo 's,@@${var_name}@@,${'"${var_name}"'},g'
yann@1140
   389
            done 
yann@1140
   390
          )"
yann@1106
   391
"${sed}" -r -e "s,@@BINDIR@@,${BINDIR},g
yann@1106
   392
                s,@@LIBDIR@@,${LIBDIR},g
yann@1106
   393
                s,@@DOCDIR@@,${DOCDIR},g
yann@1106
   394
                s,@@MANDIR@@,${MANDIR},g
yann@1106
   395
                s,@@VERSION@@,${VERSION},g
yann@1106
   396
                s,@@DATE@@,${DATE},g
yann@1140
   397
                ${var_sed}
yann@1106
   398
                s,@@LOCAL@@,${LOCAL_set},g"  Makefile.in >Makefile
yann@673
   399
echo "done"
yann@185
   400
yann@185
   401
cat <<__EOF__
yann@673
   402
yann@197
   403
crosstool-NG configured as follows:
yann@554
   404
  PREFIX='${PREFIX}'
yann@554
   405
  BINDIR='${BINDIR}'
yann@554
   406
  LIBDIR='${LIBDIR}'
yann@554
   407
  DOCDIR='${DOCDIR}'
yann@554
   408
  MANDIR='${MANDIR}'
yann@1106
   409
yann@1106
   410
Now run:
yann@1106
   411
  make
yann@185
   412
__EOF__
yann@1298
   413
if [ "${LOCAL_set}" != "y" ]; then
yann@1297
   414
    printf "  make install\n"
yann@1297
   415
fi