maemo-ui/common/autogen-helper.sh
author renatofilho
Wed Dec 06 14:32:10 2006 +0000 (2006-12-06)
branchtrunk
changeset 206 f70332afb8d0
permissions -rw-r--r--
[svn r207] code cleanup
renatofilho@23
     1
# a silly hack that generates autoregen.sh but it's handy
renatofilho@23
     2
echo "#!/bin/sh" > autoregen.sh
renatofilho@23
     3
echo "./autogen.sh $@ \$@" >> autoregen.sh
renatofilho@23
     4
chmod +x autoregen.sh
renatofilho@23
     5
renatofilho@23
     6
# helper functions for autogen.sh
renatofilho@23
     7
renatofilho@23
     8
debug ()
renatofilho@23
     9
# print out a debug message if DEBUG is a defined variable
renatofilho@23
    10
{
renatofilho@23
    11
  if test ! -z "$DEBUG"
renatofilho@23
    12
  then
renatofilho@23
    13
    echo "DEBUG: $1"
renatofilho@23
    14
  fi
renatofilho@23
    15
}
renatofilho@23
    16
renatofilho@23
    17
version_check ()
renatofilho@23
    18
# check the version of a package
renatofilho@23
    19
# first argument : package name (executable)
renatofilho@23
    20
# second argument : optional path where to look for it instead
renatofilho@23
    21
# third argument : source download url
renatofilho@23
    22
# rest of arguments : major, minor, micro version
renatofilho@23
    23
# all consecutive ones : suggestions for binaries to use
renatofilho@23
    24
# (if not specified in second argument)
renatofilho@23
    25
{
renatofilho@23
    26
  PACKAGE=$1
renatofilho@23
    27
  PKG_PATH=$2
renatofilho@23
    28
  URL=$3
renatofilho@23
    29
  MAJOR=$4
renatofilho@23
    30
  MINOR=$5
renatofilho@23
    31
  MICRO=$6
renatofilho@23
    32
renatofilho@23
    33
  # for backwards compatibility, we let PKG_PATH=PACKAGE when PKG_PATH null
renatofilho@23
    34
  if test -z "$PKG_PATH"; then PKG_PATH=$PACKAGE; fi
renatofilho@23
    35
  debug "major $MAJOR minor $MINOR micro $MICRO"
renatofilho@23
    36
  VERSION=$MAJOR
renatofilho@23
    37
  if test ! -z "$MINOR"; then VERSION=$VERSION.$MINOR; else MINOR=0; fi
renatofilho@23
    38
  if test ! -z "$MICRO"; then VERSION=$VERSION.$MICRO; else MICRO=0; fi
renatofilho@23
    39
renatofilho@23
    40
  debug "major $MAJOR minor $MINOR micro $MICRO"
renatofilho@23
    41
  
renatofilho@23
    42
  for SUGGESTION in $PKG_PATH; do 
renatofilho@23
    43
    COMMAND="$SUGGESTION"
renatofilho@23
    44
renatofilho@23
    45
    # don't check if asked not to
renatofilho@23
    46
    test -z "$NOCHECK" && {
renatofilho@23
    47
      echo -n "  checking for $COMMAND >= $VERSION ... "
renatofilho@23
    48
    } || {
renatofilho@23
    49
      # we set a var with the same name as the package, but stripped of
renatofilho@23
    50
      # unwanted chars
renatofilho@23
    51
      VAR=`echo $PACKAGE | sed 's/-//g'`
renatofilho@23
    52
      debug "setting $VAR"
renatofilho@23
    53
      eval $VAR="$COMMAND"
renatofilho@23
    54
      return 0
renatofilho@23
    55
    }
renatofilho@23
    56
renatofilho@23
    57
    debug "checking version with $COMMAND"
renatofilho@23
    58
    ($COMMAND --version) < /dev/null > /dev/null 2>&1 || 
renatofilho@23
    59
    {
renatofilho@23
    60
      echo "not found."
renatofilho@23
    61
      continue
renatofilho@23
    62
    }
renatofilho@23
    63
    # strip everything that's not a digit, then use cut to get the first field
renatofilho@23
    64
    pkg_version=`$COMMAND --version|head -n 1|sed 's/^[^0-9]*//'|cut -d' ' -f1`
renatofilho@23
    65
    debug "pkg_version $pkg_version"
renatofilho@23
    66
    # remove any non-digit characters from the version numbers to permit numeric
renatofilho@23
    67
    # comparison
renatofilho@23
    68
    pkg_major=`echo $pkg_version | cut -d. -f1 | sed s/[a-zA-Z\-].*//g`
renatofilho@23
    69
    pkg_minor=`echo $pkg_version | cut -d. -f2 | sed s/[a-zA-Z\-].*//g`
renatofilho@23
    70
    pkg_micro=`echo $pkg_version | cut -d. -f3 | sed s/[a-zA-Z\-].*//g`
renatofilho@23
    71
    test -z "$pkg_major" && pkg_major=0
renatofilho@23
    72
    test -z "$pkg_minor" && pkg_minor=0
renatofilho@23
    73
    test -z "$pkg_micro" && pkg_micro=0
renatofilho@23
    74
    debug "found major $pkg_major minor $pkg_minor micro $pkg_micro"
renatofilho@23
    75
renatofilho@23
    76
    #start checking the version
renatofilho@23
    77
    debug "version check"
renatofilho@23
    78
renatofilho@23
    79
    # reset check
renatofilho@23
    80
    WRONG=
renatofilho@23
    81
renatofilho@23
    82
    if [ ! "$pkg_major" -gt "$MAJOR" ]; then
renatofilho@23
    83
      debug "major: $pkg_major <= $MAJOR"
renatofilho@23
    84
      if [ "$pkg_major" -lt "$MAJOR" ]; then
renatofilho@23
    85
        debug "major: $pkg_major < $MAJOR"
renatofilho@23
    86
        WRONG=1
renatofilho@23
    87
      elif [ ! "$pkg_minor" -gt "$MINOR" ]; then
renatofilho@23
    88
        debug "minor: $pkg_minor <= $MINOR"
renatofilho@23
    89
        if [ "$pkg_minor" -lt "$MINOR" ]; then
renatofilho@23
    90
          debug "minor: $pkg_minor < $MINOR"
renatofilho@23
    91
          WRONG=1
renatofilho@23
    92
        elif [ "$pkg_micro" -lt "$MICRO" ]; then
renatofilho@23
    93
          debug "micro: $pkg_micro < $MICRO"
renatofilho@23
    94
	  WRONG=1
renatofilho@23
    95
        fi
renatofilho@23
    96
      fi
renatofilho@23
    97
    fi
renatofilho@23
    98
renatofilho@23
    99
    if test ! -z "$WRONG"; then
renatofilho@23
   100
      echo "found $pkg_version, not ok !"
renatofilho@23
   101
      continue
renatofilho@23
   102
    else
renatofilho@23
   103
      echo "found $pkg_version, ok."
renatofilho@23
   104
      # we set a var with the same name as the package, but stripped of
renatofilho@23
   105
      # unwanted chars
renatofilho@23
   106
      VAR=`echo $PACKAGE | sed 's/-//g'`
renatofilho@23
   107
      debug "setting $VAR"
renatofilho@23
   108
      eval $VAR="$COMMAND"
renatofilho@23
   109
      return 0
renatofilho@23
   110
    fi
renatofilho@23
   111
  done
renatofilho@23
   112
renatofilho@23
   113
  echo "not found !"
renatofilho@23
   114
  echo "You must have $PACKAGE installed to compile $package."
renatofilho@23
   115
  echo "Download the appropriate package for your distribution,"
renatofilho@23
   116
  echo "or get the source tarball at $URL"
renatofilho@23
   117
  return 1;
renatofilho@23
   118
}
renatofilho@23
   119
renatofilho@23
   120
aclocal_check ()
renatofilho@23
   121
{
renatofilho@23
   122
  # normally aclocal is part of automake
renatofilho@23
   123
  # so we expect it to be in the same place as automake
renatofilho@23
   124
  # so if a different automake is supplied, we need to adapt as well
renatofilho@23
   125
  # so how's about replacing automake with aclocal in the set var,
renatofilho@23
   126
  # and saving that in $aclocal ?
renatofilho@23
   127
  # note, this will fail if the actual automake isn't called automake*
renatofilho@23
   128
  # or if part of the path before it contains it
renatofilho@23
   129
  if [ -z "$automake" ]; then
renatofilho@23
   130
    echo "Error: no automake variable set !"
renatofilho@23
   131
    return 1
renatofilho@23
   132
  else
renatofilho@23
   133
    aclocal=`echo $automake | sed s/automake/aclocal/`
renatofilho@23
   134
    debug "aclocal: $aclocal"
renatofilho@23
   135
    if [ "$aclocal" != "aclocal" ];
renatofilho@23
   136
    then
renatofilho@23
   137
      CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-aclocal=$aclocal"
renatofilho@23
   138
    fi
renatofilho@23
   139
    if [ ! -x `which $aclocal` ]; then
renatofilho@23
   140
      echo "Error: cannot execute $aclocal !"
renatofilho@23
   141
      return 1
renatofilho@23
   142
    fi
renatofilho@23
   143
  fi
renatofilho@23
   144
}
renatofilho@23
   145
renatofilho@23
   146
autoheader_check ()
renatofilho@23
   147
{
renatofilho@23
   148
  # same here - autoheader is part of autoconf
renatofilho@23
   149
  # use the same voodoo
renatofilho@23
   150
  if [ -z "$autoconf" ]; then
renatofilho@23
   151
    echo "Error: no autoconf variable set !"
renatofilho@23
   152
    return 1
renatofilho@23
   153
  else
renatofilho@23
   154
    autoheader=`echo $autoconf | sed s/autoconf/autoheader/`
renatofilho@23
   155
    debug "autoheader: $autoheader"
renatofilho@23
   156
    if [ "$autoheader" != "autoheader" ];
renatofilho@23
   157
    then
renatofilho@23
   158
      CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-autoheader=$autoheader"
renatofilho@23
   159
    fi
renatofilho@23
   160
    if [ ! -x `which $autoheader` ]; then
renatofilho@23
   161
      echo "Error: cannot execute $autoheader !"
renatofilho@23
   162
      return 1
renatofilho@23
   163
    fi
renatofilho@23
   164
  fi
renatofilho@23
   165
renatofilho@23
   166
}
renatofilho@23
   167
renatofilho@23
   168
autoconf_2_52d_check ()
renatofilho@23
   169
{
renatofilho@23
   170
  # autoconf 2.52d has a weird issue involving a yes:no error
renatofilho@23
   171
  # so don't allow it's use
renatofilho@23
   172
  test -z "$NOCHECK" && {
renatofilho@23
   173
    ac_version=`$autoconf --version|head -n 1|sed 's/^[a-zA-Z\.\ ()]*//;s/ .*$//'`
renatofilho@23
   174
    if test "$ac_version" = "2.52d"; then
renatofilho@23
   175
      echo "autoconf 2.52d has an issue with our current build."
renatofilho@23
   176
      echo "We don't know who's to blame however.  So until we do, get a"
renatofilho@23
   177
      echo "regular version.  RPM's of a working version are on the gstreamer site."
renatofilho@23
   178
      exit 1
renatofilho@23
   179
    fi
renatofilho@23
   180
  }
renatofilho@23
   181
  return 0
renatofilho@23
   182
}
renatofilho@23
   183
renatofilho@23
   184
die_check ()
renatofilho@23
   185
{
renatofilho@23
   186
  # call with $DIE
renatofilho@23
   187
  # if set to 1, we need to print something helpful then die
renatofilho@23
   188
  DIE=$1
renatofilho@23
   189
  if test "x$DIE" = "x1";
renatofilho@23
   190
  then
renatofilho@23
   191
    echo
renatofilho@23
   192
    echo "- Please get the right tools before proceeding."
renatofilho@23
   193
    echo "- Alternatively, if you're sure we're wrong, run with --nocheck."
renatofilho@23
   194
    exit 1
renatofilho@23
   195
  fi
renatofilho@23
   196
}
renatofilho@23
   197
renatofilho@23
   198
autogen_options ()
renatofilho@23
   199
{
renatofilho@23
   200
  if test "x$1" = "x"; then
renatofilho@23
   201
    return 0
renatofilho@23
   202
  fi
renatofilho@23
   203
renatofilho@23
   204
  while test "x$1" != "x" ; do
renatofilho@23
   205
    optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
renatofilho@23
   206
    case "$1" in
renatofilho@23
   207
      --noconfigure)
renatofilho@23
   208
          NOCONFIGURE=defined
renatofilho@23
   209
	  AUTOGEN_EXT_OPT="$AUTOGEN_EXT_OPT --noconfigure"
renatofilho@23
   210
          echo "+ configure run disabled"
renatofilho@23
   211
          shift
renatofilho@23
   212
          ;;
renatofilho@23
   213
      --nocheck)
renatofilho@23
   214
	  AUTOGEN_EXT_OPT="$AUTOGEN_EXT_OPT --nocheck"
renatofilho@23
   215
          NOCHECK=defined
renatofilho@23
   216
          echo "+ autotools version check disabled"
renatofilho@23
   217
          shift
renatofilho@23
   218
          ;;
renatofilho@23
   219
      --debug)
renatofilho@23
   220
          DEBUG=defined
renatofilho@23
   221
	  AUTOGEN_EXT_OPT="$AUTOGEN_EXT_OPT --debug"
renatofilho@23
   222
          echo "+ debug output enabled"
renatofilho@23
   223
          shift
renatofilho@23
   224
          ;;
renatofilho@23
   225
      --prefix=*)
renatofilho@23
   226
	  CONFIGURE_EXT_OPT="$CONFIGURE_EXT_OPT --prefix=$optarg"
renatofilho@23
   227
	  echo "+ passing --prefix=$optarg to configure"
renatofilho@23
   228
          shift
renatofilho@23
   229
          ;;
renatofilho@23
   230
      --prefix)
renatofilho@23
   231
	  shift
renatofilho@23
   232
	  echo "DEBUG: $1"
renatofilho@23
   233
	  CONFIGURE_EXT_OPT="$CONFIGURE_EXT_OPT --prefix=$1"
renatofilho@23
   234
	  echo "+ passing --prefix=$1 to configure"
renatofilho@23
   235
          shift
renatofilho@23
   236
          ;;
renatofilho@23
   237
      -h|--help)
renatofilho@23
   238
          echo "autogen.sh (autogen options) -- (configure options)"
renatofilho@23
   239
          echo "autogen.sh help options: "
renatofilho@23
   240
          echo " --noconfigure            don't run the configure script"
renatofilho@23
   241
          echo " --nocheck                don't do version checks"
renatofilho@23
   242
          echo " --debug                  debug the autogen process"
renatofilho@23
   243
	  echo " --prefix		  will be passed on to configure"
renatofilho@23
   244
          echo
renatofilho@23
   245
          echo " --with-autoconf PATH     use autoconf in PATH"
renatofilho@23
   246
          echo " --with-automake PATH     use automake in PATH"
renatofilho@23
   247
          echo
renatofilho@23
   248
          echo "to pass options to configure, put them as arguments after -- "
renatofilho@23
   249
	  exit 1
renatofilho@23
   250
          ;;
renatofilho@23
   251
      --with-automake=*)
renatofilho@23
   252
          AUTOMAKE=$optarg
renatofilho@23
   253
          echo "+ using alternate automake in $optarg"
renatofilho@23
   254
	  CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-automake=$AUTOMAKE"
renatofilho@23
   255
          shift
renatofilho@23
   256
          ;;
renatofilho@23
   257
      --with-autoconf=*)
renatofilho@23
   258
          AUTOCONF=$optarg
renatofilho@23
   259
          echo "+ using alternate autoconf in $optarg"
renatofilho@23
   260
	  CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-autoconf=$AUTOCONF"
renatofilho@23
   261
          shift
renatofilho@23
   262
          ;;
renatofilho@23
   263
      --disable*|--enable*|--with*)
renatofilho@23
   264
          echo "+ passing option $1 to configure"
renatofilho@23
   265
	  CONFIGURE_EXT_OPT="$CONFIGURE_EXT_OPT $1"
renatofilho@23
   266
          shift
renatofilho@23
   267
          ;;
renatofilho@23
   268
       --) shift ; break ;;
renatofilho@23
   269
      *) echo "- ignoring unknown autogen.sh argument $1"; shift ;;
renatofilho@23
   270
    esac
renatofilho@23
   271
  done
renatofilho@23
   272
renatofilho@23
   273
  for arg do CONFIGURE_EXT_OPT="$CONFIGURE_EXT_OPT $arg"; done
renatofilho@23
   274
  if test ! -z "$CONFIGURE_EXT_OPT"
renatofilho@23
   275
  then
renatofilho@23
   276
    echo "+ options passed to configure: $CONFIGURE_EXT_OPT"
renatofilho@23
   277
  fi
renatofilho@23
   278
}
renatofilho@23
   279
renatofilho@23
   280
toplevel_check ()
renatofilho@23
   281
{
renatofilho@23
   282
  srcfile=$1
renatofilho@23
   283
  test -f $srcfile || {
renatofilho@23
   284
        echo "You must run this script in the top-level $package directory"
renatofilho@23
   285
        exit 1
renatofilho@23
   286
  }
renatofilho@23
   287
}
renatofilho@23
   288
renatofilho@23
   289
renatofilho@23
   290
tool_run ()
renatofilho@23
   291
{
renatofilho@23
   292
  tool=$1
renatofilho@23
   293
  options=$2
renatofilho@23
   294
  run_if_fail=$3
renatofilho@23
   295
  echo "+ running $tool $options..."
renatofilho@23
   296
  $tool $options || {
renatofilho@23
   297
    echo
renatofilho@23
   298
    echo $tool failed
renatofilho@23
   299
    eval $run_if_fail
renatofilho@23
   300
    exit 1
renatofilho@23
   301
  }
renatofilho@23
   302
}