configure
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sat Apr 26 21:31:05 2008 +0000 (2008-04-26)
changeset 454 372b2f397baa
parent 435 ff598e5b4bb5
child 542 4cdd0e37b577
permissions -rwxr-xr-x
Configure tsocks with a simple heuristic.

Consider the proxy has to be in a 'local' network. It means it is directly
reachable by the local machine, even if the local machine has to hop through
one or more gates to reach the proxy (often the case in enterprise networks
where class A 10.0.0.0/8 is in fact sub-divided into smaller networks, each
one of them in a different location, eg. 10.1.0.0/16 in a place, while
10.2.0.0/16 would be on the other side of the world). Not being in the same
subnet does not mean the proxy is not available.

So we will build a mask with at most high bits set, which defines a network
that has both the local machine and the proxy. Because a machine may have
more than one interface, build a mask for each of them, removing 127.0.0.1
which is added automagically by tsocks, and removing duplicate masks.

If all of this does not work, then it means the local machine can NOT in fact
reach the proxy, which in turn means the user mis-configured something (most
probably a typo...).

/trunk/scripts/crosstool.sh | 61 52 9 0 +++++++++++++++++++++++++++++++++++++++++++--------
1 file changed, 52 insertions(+), 9 deletions(-)
     1 #!/bin/sh
     2 
     3 VERSION=$(cat .version)
     4 DATE=$(date +%Y%m%d)
     5 
     6 PREFIX_DEFAULT=/usr/local
     7 
     8 BINDIR_set=
     9 LIBDIR_set=
    10 DOCDIR_set=
    11 MANDIR_set=
    12 LOCAL_set=
    13 
    14 get_optval(){
    15     local ret
    16     case "$1" in
    17         --*=?*)
    18             echo "${1}" |cut -d '=' -f 2-
    19             ret=0
    20             ;;
    21         *)
    22             echo "${2}"
    23             ret=1
    24             ;;
    25     esac
    26     return ${ret}
    27 }
    28 
    29 set_prefix() {
    30     PREFIX=$(get_optval "$1" "$2")
    31     return $?
    32 }
    33 
    34 set_bindir() {
    35     BINDIR_set=1
    36     BINDIR=$(get_optval "$1" "$2")
    37     return $?
    38 }
    39 
    40 set_libdir() {
    41     LIBDIR_set=1
    42     LIBDIR=$(get_optval "$1" "$2")
    43     return $?
    44 }
    45 
    46 set_docdir() {
    47     DOCDIR_set=1
    48     DOCDIR=$(get_optval "$1" "$2")
    49     return $?
    50 }
    51 
    52 set_mandir() {
    53     MANDIR_set=1
    54     MANDIR=$(get_optval "$1" "$2")
    55     return $?
    56 }
    57 
    58 do_help() {
    59     cat <<__EOF__
    60 \`configure' configures crosstool-NG ${VERSION} to adapt to many kind of systems.
    61 
    62 USAGE: ./configure [OPTION]...
    63 
    64 Defaults for the options are specified in brackets.
    65 
    66 Configuration:
    67   -h, --help              display this help and exit                                                                                                                  
    68   --prefix=PREFIX         install files in PREFIX [${PREFIX_DEFAULT}]
    69   --local                 don't install, and use current directory
    70 
    71 By default, \`make install' will install all the files in
    72 \`${PREFIX_DEFAULT}/bin', \`${PREFIX_DEFAULT}/lib' etc.  You can specify
    73 an installation prefix other than \`${PREFIX_DEFAULT}' using \`--prefix',
    74 for instance \`--prefix=\${HOME}'.
    75 
    76 For better control, use the options below.
    77 
    78 Fine tuning of the installation directories:
    79   --bindir=DIR           user executables [PREFIX/bin]
    80   --libdir=DIR           object code libraries [PREFIX/lib]
    81   --docdir=DIR           info documentation [PREFIX/share/doc]
    82   --mandir=DIR           man documentation [PREFIX/share/man]
    83 __EOF__
    84 }
    85 
    86 do_error() {
    87     echo "[ERROR] ${@}"
    88     exit 1
    89 }
    90 
    91 #---------------------------------------------------------------------
    92 # Set user's options
    93 
    94 while [ $# -ne 0 ]; do
    95     case "$1" in
    96         --prefix*)  set_prefix "$1" "$2" && shift || shift 2;;
    97         --bindir*)  set_bindir "$1" "$2" && shift || shift 2;;
    98         --libdir*)  set_libdir "$1" "$2" && shift || shift 2;;
    99         --docdir*)  set_docdir "$1" "$2" && shift || shift 2;;
   100         --mandir*)  set_mandir "$1" "$2" && shift || shift 2;;
   101         --local)    LOCAL_set=1; shift;;
   102         --help|-h)  do_help; exit 0;;
   103         *)          do_help; exit 1;;
   104     esac
   105 done
   106 
   107 [ -z "${PREFIX}" ] && set_prefix "" "${PREFIX_DEFAULT}"
   108 if [ "${LOCAL_set}" = "1" ]; then
   109     set_prefix "" $(pwd)
   110     set_bindir "" $(pwd)
   111     set_libdir "" $(pwd)
   112     set_docdir "" $(pwd)/docs
   113     set_mandir "" $(pwd)/docs
   114 fi
   115 
   116 [ -z "${BINDIR_set}" ] && BINDIR="${PREFIX}/bin"
   117 [ -z "${LIBDIR_set}" ] && LIBDIR="${PREFIX}/lib/ct-ng-${VERSION}"
   118 [ -z "${DOCDIR_set}" ] && DOCDIR="${PREFIX}/share/doc/ct-ng-${VERSION}"
   119 [ -z "${MANDIR_set}" ] && MANDIR="${PREFIX}/share/man/man1"
   120 
   121 #---------------------------------------------------------------------
   122 # Some sanity checks, now
   123 
   124 # If this version is a svn snapshot, try to get the revision number
   125 # If we can't get the revision number, use date
   126 case "${VERSION}" in
   127   *+svn)
   128     REVISION=$(svnversion)
   129     case "${REVISION}" in
   130       exported)
   131         VERSION="${VERSION}:unknown@$(date +%Y%m%d.%H%M%S)";;
   132       *)
   133         URL=$(LANG=C svn info 2>/dev/null |egrep 'URL: ' |cut -d ' ' -f 2-)
   134         ROOT=$(LANG=C svn info 2>/dev/null |egrep 'Repository Root: ' |cut -d ' ' -f 3-)
   135         VERSION="${VERSION}:${URL#${ROOT}}@${REVISION}"
   136         ;;
   137     esac
   138     ;;
   139 esac
   140 
   141 # Check bash is present, and at least version 3.0
   142 [ -x /bin/bash ] || do_error "bash 3.0 or above was not found in /bin/bash"
   143 bash_version=$(/bin/bash -c 'echo ${BASH_VERSION}')
   144 bash_major=$(/bin/bash -c 'echo ${BASH_VERSINFO[0]}')
   145 [ ${bash_major} -ge 3 ] || do_error "bash 3.0 or above is needed (/bin/bash is ${bash_version})"
   146 
   147 sed -r -e "s,@@BINDIR@@,${BINDIR},g;"   \
   148        -e "s,@@LIBDIR@@,${LIBDIR},g;"   \
   149        -e "s,@@DOCDIR@@,${DOCDIR},g;"   \
   150        -e "s,@@MANDIR@@,${MANDIR},g;"   \
   151        -e "s,@@VERSION@@,${VERSION},g;" \
   152        -e "s,@@DATE@@,${DATE},g;"       \
   153        -e "s,@@LOCAL@@,${LOCAL_set},g;" \
   154        Makefile.in >Makefile
   155 
   156 cat <<__EOF__
   157 crosstool-NG configured as follows:
   158   PREFIX="${PREFIX}"
   159   BINDIR="${BINDIR}"
   160   LIBDIR="${LIBDIR}"
   161   DOCDIR="${DOCDIR}"
   162   MANDIR="${MANDIR}"
   163 __EOF__