configure
author Michael Hope <michael.hope@linaro.org>
Wed Oct 19 15:27:32 2011 +1300 (2011-10-19)
changeset 2739 f320e22f2cba
parent 2717 13df2720b374
child 2744 d77d04661cd9
permissions -rwxr-xr-x
arch: add softfp support

Some architectures support a mixed hard/soft floating point, where
the compiler emits hardware floating point instructions, but passes
the operands in core (aka integer) registers.

For example, ARM supports this mode (to come in the next changeset).

Add support for softfp cross compilers to the GCC and GLIBC
configuration. Needed for Ubuntu and other distros that are softfp.

Signed-off-by: Michael Hope <michael.hope@linaro.org>
[yann.morin.1998@anciens.enib.fr: split the original patch]
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
yann@182
     1
#!/bin/sh
yann@182
     2
yann@1311
     3
myname="${0##*/}"
yann@1311
     4
yann@1105
     5
VERSION=$( cat .version )
yann@1105
     6
DATE=$( date +%Y%m%d )
yann@182
     7
yann@183
     8
PREFIX_DEFAULT=/usr/local
yann@182
     9
yann@182
    10
BINDIR_set=
yann@182
    11
LIBDIR_set=
yann@182
    12
DOCDIR_set=
yann@182
    13
MANDIR_set=
yann@2621
    14
PROG_PFX=
yann@2622
    15
PROG_SFX=
yann@2623
    16
PROG_SED=
yann@285
    17
LOCAL_set=
yann@1311
    18
FORCE=
yann@182
    19
yann@641
    20
do_quit=
yann@614
    21
yann@673
    22
# Simply print the error message, and exit. Obvious, he?
yann@673
    23
do_error() {
yann@1333
    24
    printf "${myname}: ${@}\n"
yann@673
    25
    exit 1
yann@673
    26
}
yann@673
    27
yann@641
    28
# Given an option string and the following argument,
yann@641
    29
# echoes the value of the option.
yann@641
    30
# If --var=val => echoes val and returns 0, meaning second arg was not consumed
yann@641
    31
# If --var val => echoes val and returns non null, meaning second arg was used
yann@182
    32
get_optval(){
yann@182
    33
    case "$1" in
yann@182
    34
        --*=?*)
yann@1333
    35
            printf "${1#*=}"
yann@1105
    36
            return 0
yann@182
    37
            ;;
yann@182
    38
        *)
yann@1333
    39
            printf "${2}"
yann@1105
    40
            return 1
yann@182
    41
            ;;
yann@182
    42
    esac
yann@182
    43
}
yann@182
    44
yann@641
    45
# The set_xxx functions will set the corresponding configuration variable
yann@641
    46
# They return 0 if second arg was not consumed, and non-zero if it was consumed.
yann@182
    47
set_prefix() {
yann@1105
    48
    PREFIX="$( get_optval "$1" "$2" )"
yann@182
    49
}
yann@182
    50
set_bindir() {
yann@376
    51
    BINDIR_set=1
yann@1105
    52
    BINDIR="$( get_optval "$1" "$2" )"
yann@182
    53
}
yann@182
    54
set_libdir() {
yann@376
    55
    LIBDIR_set=1
yann@1105
    56
    LIBDIR="$( get_optval "$1" "$2" )"
yann@182
    57
}
yann@182
    58
set_docdir() {
yann@376
    59
    DOCDIR_set=1
yann@1105
    60
    DOCDIR="$( get_optval "$1" "$2" )"
yann@182
    61
}
yann@182
    62
set_mandir() {
yann@376
    63
    MANDIR_set=1
yann@1105
    64
    MANDIR="$( get_optval "$1" "$2" )"
yann@182
    65
}
yann@2621
    66
set_program_prefix() {
yann@2621
    67
    PROG_PFX="$( get_optval "$1" "$2" )"
yann@2621
    68
}
yann@2622
    69
set_program_suffix() {
yann@2622
    70
    PROG_SFX="$( get_optval "$1" "$2" )"
yann@2622
    71
}
yann@2623
    72
set_program_transform_name() {
yann@2623
    73
    PROG_SED="$( get_optval "$1" "$2" )"
yann@2623
    74
}
yann@1140
    75
set_tool() {
yann@1140
    76
    local var_name="${1%%=*}"
yann@1140
    77
    var_name="${var_name#--with-}"
yann@1140
    78
    eval ${var_name}="\$( get_optval "$1" "$2" )"
yann@614
    79
}
yann@614
    80
yann@1311
    81
# var_list is a list of variables, each one holding a path to a
yann@1311
    82
# tool, either detected by ./configure, or specified by the user.
yann@1311
    83
var_list=""
yann@2481
    84
kconfig_list=""
yann@1311
    85
yann@1311
    86
# This function adds a variable name to the above list of variable names.
yann@1311
    87
# $1: the name of the variable to add to the list
yann@1311
    88
add_to_var_list() {
yann@2481
    89
    local v
yann@2481
    90
    for v in ${var_list}; do
yann@2481
    91
        [ "${v}" = "${1}" ] && return 0
yann@2481
    92
    done
yann@1311
    93
    var_list="${var_list} ${1}"
yann@1311
    94
}
yann@2481
    95
add_to_kconfig_list() {
yann@2481
    96
    local k
yann@2481
    97
    for k in ${kconfig_list}; do
yann@2481
    98
        [ "${k}" = "${1}" ] && return 0
yann@2481
    99
    done
yann@2481
   100
    kconfig_list="${kconfig_list} ${1}"
yann@2481
   101
}
yann@1311
   102
yann@1311
   103
# A function to test for required tools/headers/libraries
yann@1560
   104
# Return 0 (true) if found, !0 (false) if not found
yann@1560
   105
#
yann@1311
   106
# $*: [prog|inc|lib]=<name[ name...]>
yann@1311
   107
#     the name(s) of tool(s) to test for
yann@1311
   108
#     mandatory
yann@1311
   109
#       eg: prog=bash   prog="curl wget"
yann@1311
   110
# $*: var=<var_name>
yann@1311
   111
#     the name of the variable to test and set
yann@1311
   112
#     optional
yann@1311
   113
#       eg: var=bash    if ${bash} is set and non-null, use that,
yann@1311
   114
#                       else check for bash and set bash=$(which bash)
yann@1311
   115
# $*: ver=<regexp>
yann@1311
   116
#     for each 'prog', test if $(prog --version) matches 'regexp'
yann@1311
   117
#     optional
yann@1311
   118
#       eg: ver='^GNU bash, version [34]\.'
yann@2527
   119
# $*: lib_exts=<extension[ extension...]>
yann@2527
   120
#     the list of allowed library extension
yann@2527
   121
#     mandatory
yann@2527
   122
#       eg: lib_exts="so dylib"     lib_exts="so dylib a"
yann@1311
   123
# $*: err=<error_message>
yann@1311
   124
#     the error message to print if tool is missing
yann@1311
   125
#     optional, defaults to: '${prog}: none found'
yann@1311
   126
#       eg: err="'bash' 3.x or above was not found"
yann@2480
   127
#     Note: err may be printed by caller, not us
yann@2481
   128
# $*: kconfig=<var_name>
yann@2481
   129
#     the name of a variable to pass down to kconfig if
yann@2481
   130
#     the prog/inc/lib was found
yann@2481
   131
#     optional, defaults to none
yann@2481
   132
#       eg: kconfig=has_libncurses
yann@2528
   133
# $*: skip=[y|n|]
yann@2528
   134
#     if set to 'y', skip the test, but still register the
yann@2528
   135
#     kconfig and var variables; if 'n' or empty, do the
yann@2528
   136
#     test.
yann@2528
   137
#     optional, default to 'n'
yann@2528
   138
#       eg: skip="${static_link_ko}"
yann@1560
   139
check_for() {
yann@2527
   140
    local lib_exts
yann@2528
   141
    local skip
yann@1311
   142
    local val
yann@1311
   143
    local item
yann@1311
   144
    local where
yann@1312
   145
    local status
yann@2527
   146
    local ext
yann@1311
   147
yann@2481
   148
    # Note: prog/inc/lib and var/kconfig/ver/err are set here,
yann@2479
   149
    # but declared by the caller (because it needs it)
yann@1311
   150
    for item in "${@}"; do
yann@1311
   151
        case "${item}" in
yann@2528
   152
            prog=*|inc=*|lib=*|var=*|ver=*|err=*|kconfig=*|lib_exts=*|skip=*)
yann@2497
   153
                eval ${item%%=*}=\"${item#*=}\"
yann@1311
   154
                ;;
yann@2527
   155
            *)  do_error "check_for: incorrect parameters: '${item}'";;
yann@1311
   156
        esac
yann@1311
   157
    done
yann@1311
   158
benoit@2507
   159
    case "${prog}:${inc}:${lib}" in
benoit@2507
   160
        ?*:?*:|?*::?*|:?*:?*|?*:?*:?*)
benoit@2507
   161
            if [ -n "${var}" ]; then
benoit@2507
   162
                do_error "check_for: the use of var is not compatible with passing several of [prog|inc|lib] at once"
benoit@2507
   163
            fi
benoit@2507
   164
            ;;
benoit@2507
   165
        ::) do_error "check_for: [prog|inc|lib] is mandatory";;
benoit@2507
   166
    esac
benoit@2507
   167
yann@2528
   168
    if [ -n "${var}" ]; then
yann@2528
   169
        add_to_var_list "${var}"
yann@2528
   170
    fi
yann@2481
   171
    if [ -n "${kconfig}" ]; then
yann@2481
   172
        add_to_kconfig_list "${kconfig}"
yann@2481
   173
    fi
yann@2481
   174
yann@2528
   175
    if [ "${skip}" = "y" ]; then
yann@2528
   176
        return 0
yann@2528
   177
    fi
yann@2528
   178
benoit@2507
   179
    if [ -n "${prog}" ]; then
benoit@2507
   180
        for item in ${prog}; do
benoit@2507
   181
            printf "Checking for '${item}'... "
benoit@2507
   182
            if [ -n "${var}" ]; then
benoit@2507
   183
                eval val="\${${var}}"
benoit@2507
   184
                if [ -n "${val}" ]; then
yann@2528
   185
                    status="${val} (cached)\n"
titus@2625
   186
                    where="${val}"
yann@2528
   187
                    break
yann@1311
   188
                fi
benoit@2507
   189
            fi
benoit@2507
   190
            where="$( which "${item}" 2>/dev/null )"
benoit@2507
   191
            if [ -z "${where}" ]; then
benoit@2507
   192
                printf "no\n"
benoit@2507
   193
                continue
benoit@2507
   194
            elif [ -n "${ver}" ]; then
benoit@2507
   195
                str=$( LC_ALL=C "${where}" --version 2>&1   \
benoit@2507
   196
                       |grep -E "${ver}"                    \
benoit@2507
   197
                       |head -n 1
benoit@2507
   198
                     )
benoit@2507
   199
                if [ -z "${str}" ]; then
yann@1312
   200
                    printf "no\n"
benoit@2507
   201
                    unset where
yann@1311
   202
                    continue
yann@1311
   203
                fi
benoit@2507
   204
            fi
benoit@2507
   205
            status="${where}"
benoit@2507
   206
            break
benoit@2507
   207
        done
benoit@2507
   208
        if [ -z "${status}" ]; then
benoit@2507
   209
            return 1
benoit@2507
   210
        fi
benoit@2507
   211
        printf "${status}\n"
benoit@2507
   212
        unset status
yann@1560
   213
    fi
yann@1560
   214
benoit@2507
   215
    if [ -n "${inc}" ]; then
benoit@2507
   216
        for item in ${inc}; do
benoit@2507
   217
            printf "Checking for '${item}'... "
benoit@2507
   218
            if printf "#include \"${item}\"" |gcc -x c -c - -o /dev/null >/dev/null 2>&1; then
benoit@2507
   219
                where="${item}"
benoit@2507
   220
                status=yes
benoit@2507
   221
                break;
benoit@2507
   222
            fi
benoit@2507
   223
            printf "no\n"
benoit@2507
   224
        done
benoit@2507
   225
        if [ -z "${status}" ]; then
benoit@2507
   226
            return 1
benoit@2507
   227
        fi
benoit@2507
   228
        printf "${status}\n"
benoit@2507
   229
        unset status
benoit@2507
   230
    fi
benoit@2507
   231
benoit@2507
   232
    if [ -n "${lib}" ]; then
yann@2527
   233
        if [ -z "${lib_exts}" ]; then
yann@2527
   234
            do_error "check_for: no library extension specified for '${lib}'"
yann@2527
   235
        fi
benoit@2507
   236
        for item in ${lib}; do
yann@2527
   237
            for ext in ${lib_exts}; do
yann@2527
   238
                printf "Checking for '${item}.${ext}'... "
yann@2527
   239
                where="$( gcc -print-file-name="${item}.${ext}" )"
yann@2527
   240
                if [ "${where}" != "${item}.${ext}" ]; then
yann@2527
   241
                    where="$( readlink "${where}" )"
yann@2527
   242
                    status=yes
yann@2527
   243
                    break 2;
yann@2527
   244
                fi
yann@2527
   245
                printf "no\n"
yann@2527
   246
            done
benoit@2507
   247
        done
benoit@2507
   248
        if [ -z "${status}" ]; then
benoit@2507
   249
            return 1
benoit@2507
   250
        fi
benoit@2507
   251
        printf "${status}\n"
benoit@2507
   252
        unset status
benoit@2507
   253
    fi
benoit@2507
   254
yann@1560
   255
    if [ -n "${var}" ]; then
yann@1560
   256
        eval ${var}='"'"${where}"'"'
yann@1560
   257
    fi
yann@2481
   258
    if [ -n "${kconfig}" ]; then
yann@2481
   259
        eval ${kconfig}=y
yann@2481
   260
    fi
yann@1560
   261
}
yann@1560
   262
yann@1560
   263
# This function checks for a tool, and aborts if not found
yann@1560
   264
# See check_for(), above, for how to call has_or_abort
yann@1560
   265
has_or_abort() {
yann@2479
   266
    # We declare these 6 variables here, although they are
yann@2479
   267
    # set in check_for(), called below
yann@2479
   268
    local prog inc lib
yann@2481
   269
    local var ver err kconfig
yann@2479
   270
yann@1560
   271
    if ! check_for "$@"; then
yann@2524
   272
        printf " * A mandatory dependency is missing, or version mis-match:\n"
yann@2524
   273
        printf " * - ${err:-${prog}${inc}${lib}: none found}\n"
yann@2479
   274
        if [ -n "${var}" ]; then
yann@2498
   275
            printf " * --> You can give the path to this tool using: --with-${var}=PATH\n"
yann@2479
   276
        fi
yann@2479
   277
        printf "\n"
yann@2479
   278
        # Bail out if --force is not specified
yann@1312
   279
        [ -z "${FORCE}" ] && do_error "Bailing out..."
yann@1312
   280
        printf "<*                                          *>\n"
yann@1312
   281
        printf "<*            FORCE in action:              *>\n"
yann@1312
   282
        printf "<* Continuing despite missing pre-requisite *>\n"
yann@1312
   283
        printf "<*          Prepare for breakage            *>\n"
yann@1312
   284
        printf "<*                                          *>\n"
yann@1312
   285
        printf "\n"
yann@1312
   286
    fi
yann@1311
   287
}
yann@1311
   288
yann@2480
   289
# This function checks for a tool, and warns if not found
yann@2480
   290
# See check_for(), above, for how to call has_or_abort
yann@2480
   291
# Note: if err is not set, then no error message is printed
yann@2480
   292
has_or_warn() {
yann@2480
   293
    # We declare these 6 variables here, although they are
yann@2480
   294
    # set in check_for(), called below
yann@2480
   295
    local prog inc lib
yann@2481
   296
    local var ver err kconfig
yann@2480
   297
yann@2480
   298
    if ! check_for "$@"; then
yann@2524
   299
        printf " * An optional dependency is missing, some features will be disabled"
yann@2524
   300
        printf "${err:+:\n * - ${err}}\n"
yann@2480
   301
        if [ -n "${var}" ]; then
yann@2498
   302
            printf " * --> You can give the path to this tool using: --with-${var}=PATH\n"
yann@2480
   303
        fi
yann@2480
   304
    fi
yann@2480
   305
}
yann@2480
   306
yann@183
   307
do_help() {
yann@183
   308
    cat <<__EOF__
yann@1140
   309
\`configure' configures crosstool-NG-${VERSION} to adapt to many kind of systems.
yann@183
   310
yann@183
   311
USAGE: ./configure [OPTION]...
yann@183
   312
yann@183
   313
Defaults for the options are specified in brackets.
yann@183
   314
yann@183
   315
Configuration:
yann@1105
   316
  -h, --help              display this help and exit
yann@1311
   317
      --force             force configure to continue, even in case
yann@1311
   318
                          some pre-requisites are missing
yann@615
   319
yann@615
   320
Installation directories:
yann@185
   321
  --prefix=PREFIX         install files in PREFIX [${PREFIX_DEFAULT}]
yann@285
   322
  --local                 don't install, and use current directory
yann@183
   323
yann@183
   324
By default, \`make install' will install all the files in
yann@183
   325
\`${PREFIX_DEFAULT}/bin', \`${PREFIX_DEFAULT}/lib' etc.  You can specify
yann@183
   326
an installation prefix other than \`${PREFIX_DEFAULT}' using \`--prefix',
yann@183
   327
for instance \`--prefix=\${HOME}'.
yann@183
   328
yann@183
   329
For better control, use the options below.
yann@2619
   330
Note: options marked as \`ignored' are recognised, but not acted upon, as
yann@2619
   331
they make no sense for crosstool-NG, or they are not implemented yet.
yann@183
   332
yann@183
   333
Fine tuning of the installation directories:
yann@683
   334
  --bindir=DIR            user executables [PREFIX/bin]
yann@683
   335
  --libdir=DIR            object code libraries [PREFIX/lib]
yann@683
   336
  --docdir=DIR            info documentation [PREFIX/share/doc]
yann@683
   337
  --mandir=DIR            man documentation [PREFIX/share/man]
yann@2619
   338
  --infodir=DIR           info documentation [DATAROOTDIR/info] (ignored)
yann@2619
   339
  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
yann@2619
   340
                          (ignored)
yann@2619
   341
  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc] (ignored)
yann@2619
   342
  --localstatedir=DIR     modifiable single-machine data [PREFIX/var] (ignored)
yann@2619
   343
yann@2619
   344
Program names:
yann@2619
   345
  --program-prefix=PREFIX            prepend PREFIX to installed program names
yann@2622
   346
  --program-suffix=SUFFIX            append SUFFIX to installed program names
yann@2623
   347
  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
yann@2619
   348
yann@2619
   349
System types:
yann@2619
   350
  --build=BUILD     configure for building on BUILD [guessed] (ignored)
yann@2619
   351
  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
yann@2619
   352
                    (ignored)
yann@614
   353
yann@614
   354
Optional Features:
yann@2619
   355
  --enable-shared[=PKGS]  build shared libraries [default=yes] (ignored)
yann@2619
   356
  --enable-static[=PKGS]  build static libraries [default=yes] (ignored)
yann@2619
   357
yann@2619
   358
Optional Packages:
yann@1140
   359
  --with-install=PATH     Specify the full PATH to GNU install
yann@1311
   360
  --with-make=PATH        Specify the full PATH to GNU make >= 3.80
yann@1140
   361
  --with-grep=PATH        Specify the full PATH to GNU grep
yann@1140
   362
  --with-sed=PATH         Specify the full PATH to GNU sed
yann@1140
   363
  --with-bash=PATH        Specify the full PATH to bash >= 3.0
yann@183
   364
__EOF__
yann@183
   365
}
yann@183
   366
yann@376
   367
#---------------------------------------------------------------------
yann@376
   368
# Set user's options
yann@376
   369
yann@182
   370
while [ $# -ne 0 ]; do
yann@182
   371
    case "$1" in
yann@1297
   372
        --local)    LOCAL_set="y"; shift;;
yann@182
   373
        --prefix*)  set_prefix "$1" "$2" && shift || shift 2;;
yann@182
   374
        --bindir*)  set_bindir "$1" "$2" && shift || shift 2;;
yann@182
   375
        --libdir*)  set_libdir "$1" "$2" && shift || shift 2;;
yann@182
   376
        --docdir*)  set_docdir "$1" "$2" && shift || shift 2;;
yann@182
   377
        --mandir*)  set_mandir "$1" "$2" && shift || shift 2;;
yann@1140
   378
        --with-*)   set_tool   "$1" "$2" && shift || shift 2;;
yann@2621
   379
        --program-prefix=*|--program-prefix)
yann@2621
   380
                    set_program_prefix "$1" "$2" && shift || shift 2
yann@2621
   381
                    ;;
yann@2622
   382
        --program-suffix=*|--program-suffix)
yann@2622
   383
                    set_program_suffix "$1" "$2" && shift || shift 2
yann@2622
   384
                    ;;
yann@2623
   385
        --program-transform-name=*|--program-transform-name)
yann@2623
   386
                    set_program_transform_name "$1" "$2" && shift || shift 2
yann@2623
   387
                    ;;
yann@1311
   388
        --force)    FORCE=1; shift;;
yann@183
   389
        --help|-h)  do_help; exit 0;;
blueness@1739
   390
        # Skip, auto-stuff compatibility
blueness@1739
   391
        --build=*|--host=*|--infodir=*|--datadir=*|--sysconfdir=*|--localstatedir=*) shift;;
blueness@1739
   392
        --build|--host|--infodir|--datadir|--sysconfdir|--localstatedir)             shift 2;;
yann@2551
   393
        --enable-shared|--disable-shared|--enable-static|--disable-static)           shift;;
yann@1333
   394
        *)          printf "Unrecognised option: '${1}'\n"; do_help; exit 1;;
yann@182
   395
    esac
yann@182
   396
done
yann@182
   397
yann@641
   398
# Use defaults
yann@185
   399
[ -z "${PREFIX}" ] && set_prefix "" "${PREFIX_DEFAULT}"
yann@641
   400
yann@641
   401
# Special case when installing locally
yann@1297
   402
if [ "${LOCAL_set}" = "y" ]; then
yann@1105
   403
    set_prefix "" "$( pwd )"
yann@1105
   404
    set_bindir "" "$( pwd )"
yann@1105
   405
    set_libdir "" "$( pwd )"
yann@1105
   406
    set_docdir "" "$( pwd )/docs"
yann@1105
   407
    set_mandir "" "$( pwd )/docs"
yann@2621
   408
    set_program_prefix "" ""
yann@2622
   409
    set_program_suffix "" ""
yann@2623
   410
    set_program_transform_name "" ""
yann@285
   411
fi
yann@183
   412
yann@376
   413
#---------------------------------------------------------------------
yann@1140
   414
# Some sanity checks, now
yann@1106
   415
yann@1560
   416
# We check for grep and sed manually, because they are used in check_for()
yann@1140
   417
printf "Checking for 'grep'... "
yann@1140
   418
if [ -n "${grep}" ]; then
yann@1333
   419
    printf "${grep} (cached)\n"
yann@1140
   420
else
yann@1140
   421
    grep="$( which grep 2>/dev/null )"
yann@1187
   422
    if [ -z "${grep}" ]; then
yann@1333
   423
        printf "not found\n"
yann@1187
   424
    else
yann@1333
   425
        printf "${grep}\n"
yann@1187
   426
        printf "Checking whether '${grep}' supports -E... "
yann@1187
   427
        if echo 'foo' |"${grep}" -E 'foo' >/dev/null 2>&1; then
yann@1333
   428
            printf "yes\n"
yann@1187
   429
        else
yann@1333
   430
            printf "no\n"
yann@1187
   431
            grep=
yann@1187
   432
        fi
yann@1187
   433
    fi
yann@1106
   434
fi
yann@1187
   435
if [ -z "${grep}" ]; then
yann@1333
   436
    printf "Either you are missing entirely the needed tool,\n"
yann@1333
   437
    printf "or the version you have is too old.\n"
yann@1333
   438
    printf "You can give the path to this tool using: --with-grep=PATH\n"
yann@1187
   439
    do_error "Bailing out..."
yann@1140
   440
fi
yann@1311
   441
add_to_var_list grep
yann@1140
   442
yann@1140
   443
printf "Checking for 'sed'... "
yann@1140
   444
if [ -n "${sed}" ]; then
yann@1333
   445
    printf "${sed} (cached)\n"
yann@1140
   446
else
yann@1140
   447
    sed="$( which sed 2>/dev/null )"
yann@1187
   448
    if [ -z "${sed}" ]; then
yann@1333
   449
        printf "not found\n"
yann@1187
   450
    else
yann@1333
   451
        printf "${sed}\n"
rpjday@1288
   452
        printf "Checking whether '${sed}' supports -i and -e... "
yann@1187
   453
        touch .ct-ng.sed.test
yann@1187
   454
        if "${sed}" -r -i -e 's/foo/bar/' .ct-ng.sed.test >/dev/null 2>&1; then
yann@1333
   455
            printf "yes\n"
yann@1187
   456
        else
yann@1333
   457
            printf "no\n"
yann@1187
   458
            sed=
yann@1187
   459
        fi
yann@1187
   460
        rm -f .ct-ng.sed.test
yann@1187
   461
    fi
yann@1140
   462
fi
yann@1187
   463
if [ -z "${sed}" ]; then
yann@1333
   464
    printf "Either you are missing entirely the needed tool,\n"
yann@1333
   465
    printf "or the version you have is too old.\n"
yann@1333
   466
    printf "You can give the path to this tool using: --with-sed=PATH\n"
yann@1187
   467
    do_error "Bailing out..."
yann@1140
   468
fi
yann@1311
   469
add_to_var_list sed
yann@1140
   470
yann@1311
   471
# The regular list of tools we can now easily check for
yann@1311
   472
has_or_abort prog=bash                              \
yann@1311
   473
             var=bash                               \
yann@1477
   474
             ver='^GNU bash, version (3\.[1-9]|4)'  \
yann@1477
   475
             err="'bash' 3.1 or above was not found"
yann@1311
   476
has_or_abort prog=cut
yann@1311
   477
has_or_abort prog=install var=install
yann@1311
   478
has_or_abort prog=make                                  \
yann@1311
   479
             var=make                                   \
yann@1311
   480
             ver='^GNU Make (3.[89][[:digit:]]|[4-9])'  \
yann@1311
   481
             err="GNU 'make' 3.80 or above was not found"
yann@1311
   482
has_or_abort prog=gcc
yann@1431
   483
has_or_abort prog="awk gawk" ver='^GNU Awk' err="GNU 'awk' was not found"
yann@1311
   484
has_or_abort prog=bison
yann@1311
   485
has_or_abort prog=flex
yann@1311
   486
has_or_abort prog=makeinfo
yann@1311
   487
has_or_abort prog=automake                                                      \
oron@1432
   488
             ver='\(GNU automake\) (1\.[[:digit:]]{2,}|[2-9][[:digit:]]*\.)'    \
yann@1311
   489
             err="'automake' 1.10 or above was not found"
yann@1311
   490
has_or_abort prog=libtool                                                                           \
titus@1969
   491
             var=libtool                                                                            \
yann@1311
   492
             ver='\(GNU libtool.*\) (2[[:digit:]]*\.|1\.6[[:digit:]]*\.|1\.5\.[2-9][[:digit:]]+)'   \
yann@1311
   493
             err="'libtool' 1.5.26 or above was not found"
titus@2626
   494
has_or_abort prog=libtoolize                                                                        \
titus@2626
   495
             var=libtoolize                                                                         \
titus@2626
   496
             ver='\(GNU libtool.*\) (2[[:digit:]]*\.|1\.6[[:digit:]]*\.|1\.5\.[2-9][[:digit:]]+)'   \
titus@2626
   497
             err="'libtoolize' 1.5.26 or above was not found"
titus@1957
   498
has_or_abort prog=stat
yann@2660
   499
has_or_abort prog="curl"
yann@1311
   500
has_or_abort prog=patch
yann@1311
   501
has_or_abort prog=tar
yann@1311
   502
has_or_abort prog=gzip
yann@1311
   503
has_or_abort prog=bzip2
yann@2607
   504
has_or_warn  prog=xz                                        \
yann@2607
   505
             kconfig=has_xzutils                            \
yann@2644
   506
             err="xz-compressed tarballs will not be used"
yann@2645
   507
has_or_warn  prog=lzma                                      \
yann@2645
   508
             kconfig=has_lzma                               \
yann@2646
   509
             skip="${has_xzutils}"                          \
yann@2645
   510
             err="lzma-compressed tarballs will not be used"
yann@1313
   511
has_or_abort prog=readlink
titus@1962
   512
has_or_abort prog=objcopy var=objcopy
titus@1962
   513
has_or_abort prog=objdump var=objdump
titus@1962
   514
has_or_abort prog=readelf var=readelf
titus@1962
   515
has_or_abort prog=patch var=patch
yann@2535
   516
has_or_warn  prog=cvs                                                   \
yann@2535
   517
             kconfig=has_cvs                                            \
yann@2535
   518
             err="it will not be possible to use newlib cvs snapshots"
yann@2591
   519
has_or_warn  prog=svn                               \
yann@2540
   520
             kconfig=has_svn                        \
yann@2540
   521
             err="subversion is required to download eglibc"
yann@1311
   522
yann@2526
   523
# Library checks
yann@2717
   524
libs_exts="so dylib a"
yann@2527
   525
yann@2509
   526
ncurses_hdrs="ncurses/ncurses.h ncurses/curses.h ncurses.h curses.h"
yann@2527
   527
ncurses_libs="libncursesw libncurses libcurses"
yann@2509
   528
has_or_abort lib="${ncurses_libs}"                                          \
yann@2527
   529
             lib_exts="${libs_exts}"                                        \
yann@2509
   530
             inc="${ncurses_hdrs}"                                          \
yann@2506
   531
             err="The 'ncurses' library is needed fo the menuconfig frontend"
yann@1106
   532
yann@1106
   533
#---------------------------------------------------------------------
yann@1106
   534
# Compute the version string
yann@376
   535
yann@1576
   536
# If this version is n hg clone, try to get the revision number
yann@435
   537
# If we can't get the revision number, use date
yann@2498
   538
printf "\nComputing version string... "
yann@435
   539
case "${VERSION}" in
Yann@1409
   540
    *+hg|hg)
yann@1740
   541
        REVISION="$( hg id -n 2>/dev/null || true )"
yann@1105
   542
        case "${REVISION}" in
Yann@1409
   543
            "")
yann@1105
   544
                VERSION="${VERSION}_unknown@$( date +%Y%m%d.%H%M%S )";;
yann@1105
   545
            *)
yann@1430
   546
                VERSION="${VERSION}_$( hg id -b )@${REVISION%%+}_$( hg id -i )"
yann@1105
   547
                ;;
yann@1105
   548
        esac
yann@1105
   549
        # Arrange to have no / in the directory name, no need to create an
yann@1105
   550
        # arbitrarily deep directory structure
yann@1333
   551
        VERSION="$( printf "${VERSION}\n" |"${sed}" -r -e 's|/+|_|g;' )"
yann@444
   552
        ;;
yann@435
   553
esac
yann@1740
   554
printf "${VERSION}\n"
yann@435
   555
yann@1106
   556
#---------------------------------------------------------------------
yann@1106
   557
# Compute and check install paths
yann@1106
   558
yann@614
   559
# Now we have the version string, we can build up the paths
yann@554
   560
[ -z "${BINDIR_set}" ] && BINDIR="${PREFIX}/bin"
yann@1660
   561
[ -z "${LIBDIR_set}" ] && LIBDIR="${PREFIX}/lib"
yann@1660
   562
[ -z "${DOCDIR_set}" ] && DOCDIR="${PREFIX}/share/doc"
yann@2026
   563
[ -z "${MANDIR_set}" ] && MANDIR="${PREFIX}/share/man"
yann@554
   564
yann@1660
   565
# Install support files in our own sub-dir, so as not to mangle (system)
yann@1660
   566
# files and dirs, but only if not --local
yann@1660
   567
if [ -z "${LOCAL_set}" ]; then
yann@1660
   568
    LIBDIR="${LIBDIR}/ct-ng-${VERSION}"
yann@1660
   569
    DOCDIR="${DOCDIR}/ct-ng-${VERSION}"
yann@1660
   570
fi
yann@1660
   571
yann@1047
   572
# Check that install PATHs are absolute
yann@1047
   573
for p in BIN LIB DOC MAN; do
yann@1105
   574
    var="${p}DIR"
yann@1105
   575
    eval v='"${'"${var}"'}"'
yann@1105
   576
    case "${v}" in
yann@1105
   577
        /*) ;;
yann@2621
   578
        *)  do_error "'${var}' is not an absolute path: '${v}'";;
yann@1105
   579
    esac
yann@1047
   580
done
yann@2621
   581
case "${PROG_PFX}" in
yann@2621
   582
    */*)    do_error "program prefix '${PROG_PFX}' contains a '/'";;
yann@2621
   583
esac
yann@2622
   584
case "${PROG_SFX}" in
yann@2622
   585
    */*)    do_error "program suffix '${PROG_SFX}' contains a '/'";;
yann@2622
   586
esac
yann@1047
   587
yann@1106
   588
#---------------------------------------------------------------------
yann@1106
   589
# That's all, folks!
yann@614
   590
yann@641
   591
printf "Building up Makefile... "
yann@1140
   592
var_sed="$( for var_name in ${var_list}; do
yann@1140
   593
                eval echo 's,@@${var_name}@@,${'"${var_name}"'},g'
yann@2481
   594
            done
yann@1140
   595
          )"
yann@2481
   596
kconfig_sed="s/@@KCONFIG@@/$( for k_name in ${kconfig_list}; do
yann@2481
   597
                                  eval printf \"${k_name}=\${${k_name}} \"
yann@2481
   598
                              done
yann@2481
   599
                            )/"
yann@2481
   600
"${sed}" -r -e "s,@@BINDIR@@,${BINDIR},g"       \
yann@2481
   601
            -e "s,@@LIBDIR@@,${LIBDIR},g"       \
yann@2481
   602
            -e "s,@@DOCDIR@@,${DOCDIR},g"       \
yann@2481
   603
            -e "s,@@MANDIR@@,${MANDIR},g"       \
yann@2621
   604
            -e "s,@@PROG_PFX@@,${PROG_PFX},g"   \
yann@2622
   605
            -e "s,@@PROG_SFX@@,${PROG_SFX},g"   \
yann@2623
   606
            -e "s,@@PROG_SED@@,${PROG_SED},g"   \
yann@2481
   607
            -e "s,@@VERSION@@,${VERSION},g"     \
yann@2481
   608
            -e "s,@@DATE@@,${DATE},g"           \
yann@2481
   609
            -e "s,@@LOCAL@@,${LOCAL_set},g"     \
yann@2481
   610
            -e "${var_sed}"                     \
yann@2481
   611
            -e "${kconfig_sed}"                 \
yann@2481
   612
         Makefile.in                            \
yann@2481
   613
         >Makefile
yann@673
   614
echo "done"
yann@185
   615
yann@185
   616
cat <<__EOF__
yann@673
   617
yann@197
   618
crosstool-NG configured as follows:
yann@554
   619
  PREFIX='${PREFIX}'
yann@554
   620
  BINDIR='${BINDIR}'
yann@554
   621
  LIBDIR='${LIBDIR}'
yann@554
   622
  DOCDIR='${DOCDIR}'
yann@554
   623
  MANDIR='${MANDIR}'
yann@2621
   624
  PROG_PFX='${PROG_PFX}'
yann@2622
   625
  PROG_SFX='${PROG_SFX}'
yann@2623
   626
  PROG_SED='${PROG_SED}'
yann@1106
   627
yann@1106
   628
Now run:
yann@1106
   629
  make
yann@185
   630
__EOF__
yann@1298
   631
if [ "${LOCAL_set}" != "y" ]; then
yann@1297
   632
    printf "  make install\n"
yann@1297
   633
fi