autogen.sh 6.99 KB
Newer Older
1
#!/bin/sh
2 3 4 5
#
# JHBuild configuration script.
#
# For installation instructions please refer to the JHBuild manual:
6
#   yelp /jhbuild-source-dir/doc/C/index.docbook
7 8 9 10 11 12 13 14 15
#
# Or refer to the on-line JHBuild manual at:
#
#  http://library.gnome.org/devel/jhbuild/stable/getting-started.html.en
#
# Usage:
# ./autogen.sh [OPTION]
#    Available OPTION are:
#      --simple-install   Configure without using autotools. This setting is
16
#                         set automatically if gnome-common and yelp-tools
17 18 19
#                         are not installed.
#      --prefix=PREFIX    Install JHBuild to PREFIX. Defaults to ~/.local
#
20
# If gnome-common and yelp-tools are available, this configuration script
21 22
# will configure JHBuild to install via autotools.
#
23
# If gnome-common and yelp-tools are not available, this configuration
24 25 26 27 28 29 30 31 32 33
# script will configure JHBuild to install via a plain Makefile.
#
# autogen.sh is used to configure JHBuild because the most common way to obtain
# JHBuild is via git and a 'configure' should not be checked into git.
#
# autogen.sh supports i18n using the package gettext. If gettext is not
# available english is used. To enable i18n autogen.sh builds mo files from po
# files using po/Makefile.plain. The mo files are in $srcdir/mo.

PKG_NAME=jhbuild
34

35 36 37
FALSE=1
TRUE=0

38 39
srcdir=`dirname $0`
test -z "$srcdir" && srcdir=.
40
test -z "$MAKE" && MAKE=make
41

42 43 44 45 46 47 48 49 50 51 52
setup_i18n()
{
  # Check msgfmt (from gettext) is installed to provide i18n for this script
  hash msgfmt 2>&-
  msgfmtl_available=$?

  # Build mo from po files so i18n works for this script. mo files can't be
  # checked in to git so they must be built here.
  if [ $msgfmtl_available -eq 0 ]; then
    # -s is for silent
    # -C is for change directory
53
    $make_from_environment -s -C $srcdir/po -f Makefile.plain
54 55
  fi

56
  # Check gettext.sh is installed to provide i18n for this script
57 58 59 60 61 62
  hash gettext.sh 2>&-
  gettext_sh_available=$?

  if [ $gettext_sh_available -eq 0 ]; then
    export TEXTDOMAINDIR=$srcdir/mo
    export TEXTDOMAIN=jhbuild
63

64 65 66
    . gettext.sh
  fi

67
  # Check gettext is installed to provide i18n for this script
68 69 70 71 72 73 74 75 76 77 78 79 80 81
  hash gettext 2>&-
  gettext_available=$?
}

# parse_commandline parses the commandline and sets shell variables accordingly.
# - sets $enable_autotools if --simple-install specified.
# - sets shell variables from long form options. e.g if commandline contains
#   '--prefix=/opt' then shell variable prefix is set to '/opt'. Shell variable
#   names must start with a letter or underscore and not contain special
#   characters. Invalid variable names are ignored.
# parse_commandline is not using getopt as getopt doesn't support the long form
# on Solaris, BSD and MacOS.
parse_commandline()
{
82
  enable_autotools=$TRUE
83 84

  while [ -n "$1" ]; do
85 86
    case "$1" in
      --simple-install)
87
        enable_autotools=$FALSE
88 89 90 91 92 93
        ;;

      --prefix=*)
        prefix="$(echo "$1" | cut -d= -f2)"
        ;;
    esac
94 95
    shift
  done
96 97
}

98
# configure JHBuild to build and install without autotools via a plain
99 100
# Makefile. Sets up a Makefile.inc and copies Makefile.plain or
# Makefile.windows to Makefile
101 102 103 104
configure_without_autotools()
{
  eval_gettext "Configuring \$PKG_NAME without autotools"; echo

105 106 107 108 109
  makefile="$srcdir/Makefile.plain"
  if [ "x$MSYSTEM" != "x" ]; then
    makefile="$srcdir/Makefile.windows"
  fi

110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
  # setup the defaults. The following can changed from the commandline.
  # e.g. ./autogen.sh --prefix=${HOME}/jhbuildhome
  [ -z $prefix ] && prefix=${HOME}/.local
  [ -z $bindir ] && bindir=${prefix}/bin
  [ -z $datarootdir ] && datarootdir=${prefix}/share
  [ -z $desktopdir ] && desktopdir=${datarootdir}/applications

  # Check to see if $srcdir/Makefile.inc is writable
  if [ -f $srcdir/Makefile.inc ]; then
    if [ ! -w $srcdir/Makefile.inc ]; then
      eval_gettext  "Unable to create file \$srcdir/Makefile.inc"; echo
      exit 1
    fi
  else
    if [ ! -w $srcdir ]; then
      eval_gettext  "Unable to create file \$srcdir/Makefile.inc"; echo
      exit 1
    fi
  fi
129

130 131 132 133 134 135 136 137 138
  echo "# This file is automatically generated by JHBuild's autogen.sh" \
    > $srcdir/Makefile.inc
  echo "# Do NOT edit. This file will be overwritten when autogen.sh is next" \
       "run." >> $srcdir/Makefile.inc
  echo "prefix=$prefix" >> $srcdir/Makefile.inc
  echo "bindir=$bindir" >> $srcdir/Makefile.inc
  echo "datarootdir=$datarootdir" >> $srcdir/Makefile.inc
  echo "desktopdir=$desktopdir" >> $srcdir/Makefile.inc

139 140
  if [ ! -f $makefile ]; then
    eval_gettext "Unable to read file \$makefile"; echo
141 142 143
    exit 1
  fi

144 145
  cp $makefile $srcdir/Makefile || {
    eval_gettext "Unable to copy \$makefile to \$srcdir/Makefile"
146
    echo
147
    exit 1
148 149 150 151 152 153 154 155
  }

  eval_gettext "Now type \`make' to compile \$PKG_NAME"; echo
}

# configure JHBuild to build and install via autotools.
configure_with_autotools()
{
156 157
  test -d m4 || mkdir m4
  test -d build-aux || mkdir build-aux
158 159 160 161 162
  export PKG_NAME
  REQUIRED_AUTOCONF_VERSION=2.57 \
  REQUIRED_AUTOMAKE_VERSION=1.8 \
  REQUIRED_INTLTOOL_VERSION=0.35.0 \
  REQUIRED_PKG_CONFIG_VERSION=0.16.0 \
163
  gnome-autogen.sh $@
164 165
}

166 167
# Check for make. make is required to provide i18n for this script and to
# build and install JHBuild
168 169
make_from_environment=`echo $MAKE | cut -d' ' -f1`
hash $make_from_environment 2>&-
170
if [ $? -ne 0 ]; then
171
  echo "\`$make_from_environment' is required to configure & build $PKG_NAME"
172 173 174
  exit 1
fi

175 176 177 178 179 180 181 182 183 184
setup_i18n
if [ $gettext_available -ne 0 ]; then
  # If gettext is not installed fallback to echo in english
  gettext() { echo -n $1; }
  # eval_gettext substitutes variables of the form: \$var
  eval_gettext()
  {
    escaped_string=${1/\'/\\\'}
    eval echo -n ${escaped_string/\`/\\\`}
  }
185
fi
186

187 188 189 190 191 192 193 194 195 196 197
if [ ! -f $srcdir/jhbuild/main.py ]; then
  eval_gettext "**Error**: Directory \`\$srcdir' does not look like the top-level \$PKG_NAME directory"
  echo
  exit 1
fi

# Check gnome-common package is installed. gnome-common depends on autoconf,
# automake and pkgconfig so no need to check them explicitly.
hash gnome-autogen.sh 2>&-
gnome_autogen_available=$?

198 199 200
# Check yelp-tools is installed.
hash yelp-build 2>&-
yelp_tools_available=$?
201

202 203
parse_commandline $*

204 205 206 207
autotools_dependencies_met=$FALSE
if [ $gnome_autogen_available -eq $TRUE -a \
     $yelp_tools_available -eq $TRUE ]; then
    autotools_dependencies_met=$TRUE
208
fi
209

210 211 212
# As a hack, force use of autotools if NOCONFIGURE is specified; this
# allows the gnome-ostree build system to work which doesn't have
# yelp, but also can't pass options to autogen.sh
213
force_autotools=$FALSE
214
if test -n "$NOCONFIGURE"; then
215 216 217 218 219 220 221
  force_autotools=$TRUE
fi

use_autotools=$FALSE
if [ $enable_autotools -eq $TRUE -a $autotools_dependencies_met -eq $TRUE ]; then
  use_autotools=$TRUE
fi
222
if [ $force_autotools -eq $TRUE ]; then
223
  use_autotools=$TRUE
224 225
fi

226
if [ $use_autotools -eq $TRUE ]; then
227
  configure_with_autotools $*
228
else
229 230
  if [ $gnome_autogen_available -ne $TRUE ]; then
    gettext "WARNING: gnome-autogen.sh not available (usually part of package 'gnome-common')"; echo
231
  fi
232 233
  if [ $yelp_tools_available -ne $TRUE ]; then
    gettext "WARNING: yelp-tools not available (usually part of package 'yelp-tools')"; echo
234 235 236
  fi
  configure_without_autotools
fi