1#! /bin/sh 2# Run this to generate all the initial makefiles, etc. 3# 4# Copyright (C) 2003 g10 Code GmbH 5# 6# This file is free software; as a special exception the author gives 7# unlimited permission to copy and/or distribute it, with or without 8# modifications, as long as this notice is preserved. 9# 10# This program is distributed in the hope that it will be useful, but 11# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the 12# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 13 14configure_ac="configure.ac" 15 16cvtver () { 17 awk 'NR==1 {split($NF,A,".");X=1000000*A[1]+1000*A[2]+A[3];print X;exit 0}' 18} 19 20check_version () { 21 if [ `("$1" --version || echo "0") | cvtver` -ge "$2" ]; then 22 return 0 23 fi 24 echo "**Error**: "\`$1\'" not installed or too old." >&2 25 echo ' Version '$3' or newer is required.' >&2 26 [ -n "$4" ] && echo ' Note that this is part of '\`$4\''.' >&2 27 DIE="yes" 28 return 1 29} 30 31 32DIE=no 33FORCE= 34if test x"$1" = x"--force"; then 35 FORCE=" --force" 36 shift 37fi 38 39# Begin list of optional variables sourced from ~/.gnupg-autogen.rc 40w32_toolprefixes= 41w32_extraoptions= 42w32ce_toolprefixes= 43w32ce_extraoptions= 44amd64_toolprefixes= 45# End list of optional variables sourced from ~/.gnupg-autogen.rc 46# What follows are variables which are sourced but default to 47# environment variables or lacking them hardcoded values. 48#w32root= 49#w32ce_root= 50#amd64root= 51 52if [ -f "$HOME/.gnupg-autogen.rc" ]; then 53 echo "sourcing extra definitions from $HOME/.gnupg-autogen.rc" 54 . "$HOME/.gnupg-autogen.rc" 55fi 56 57# Convenience option to use certain configure options for some hosts. 58myhost="" 59myhostsub="" 60case "$1" in 61 --build-w32) 62 myhost="w32" 63 ;; 64 --build-w32ce) 65 myhost="w32" 66 myhostsub="ce" 67 ;; 68 --build-w64) 69 myhost="w32" 70 myhostsub="64" 71 ;; 72 --build-amd64) 73 myhost="amd64" 74 ;; 75 --build*) 76 echo "**Error**: invalid build option $1" >&2 77 exit 1 78 ;; 79 *) 80 ;; 81esac 82 83 84# ***** W32 build script ******* 85# Used to cross-compile for Windows. 86if [ "$myhost" = "w32" ]; then 87 tmp=`dirname $0` 88 tsdir=`cd "$tmp"; pwd` 89 shift 90 if [ ! -f $tsdir/config.guess ]; then 91 echo "$tsdir/config.guess not found" >&2 92 exit 1 93 fi 94 build=`$tsdir/config.guess` 95 96 case $myhostsub in 97 ce) 98 w32root="$w32ce_root" 99 [ -z "$w32root" ] && w32root="$HOME/w32ce_root" 100 toolprefixes="arm-mingw32ce" 101 ;; 102 64) 103 w32root="$w64root" 104 [ -z "$w32root" ] && w32root="$HOME/w64root" 105 toolprefixes="$amd64_toolprefixes amd64-mingw32msvc" 106 ;; 107 *) 108 [ -z "$w32root" ] && w32root="$HOME/w32root" 109 toolprefixes="$w32_toolprefixes i686-w64-mingw32 i586-mingw32msvc" 110 toolprefixes="$toolprefixes i386-mingw32msvc mingw32" 111 ;; 112 esac 113 echo "Using $w32root as standard install directory" >&2 114 115 # Locate the cross compiler 116 crossbindir= 117 for host in $toolprefixes; do 118 if ${host}-gcc --version >/dev/null 2>&1 ; then 119 crossbindir=/usr/${host}/bin 120 conf_CC="CC=${host}-gcc" 121 break; 122 fi 123 done 124 if [ -z "$crossbindir" ]; then 125 echo "Cross compiler kit not installed" >&2 126 if [ -z "$sub" ]; then 127 echo "Under Debian GNU/Linux, you may install it using" >&2 128 echo " apt-get install mingw32 mingw32-runtime mingw32-binutils" >&2 129 fi 130 echo "Stop." >&2 131 exit 1 132 fi 133 134 if [ -f "$tsdir/config.log" ]; then 135 if ! head $tsdir/config.log | grep "$host" >/dev/null; then 136 echo "Pease run a 'make distclean' first" >&2 137 exit 1 138 fi 139 fi 140 141 $tsdir/configure --enable-maintainer-mode --prefix=${w32root} \ 142 --host=${host} --build=${build} \ 143 --with-gpg-error-prefix=${w32root} 144 exit $? 145fi 146# ***** end W32 build script ******* 147 148 149# ***** AMD64 cross build script ******* 150# Used to cross-compile for AMD64 (for testing) 151if [ "$myhost" = "amd64" ]; then 152 tmp=`dirname $0` 153 tsdir=`cd "$tmp"; pwd` 154 shift 155 if [ ! -f $tsdir/config.guess ]; then 156 echo "$tsdir/config.guess not found" >&2 157 exit 1 158 fi 159 build=`$tsdir/config.guess` 160 161 [ -z "$amd64root" ] && amd64root="$HOME/amd64root" 162 echo "Using $amd64root as standard install directory" >&2 163 164 # Locate the cross compiler 165 crossbindir= 166 for host in x86_64-linux-gnu amd64-linux-gnu; do 167 if ${host}-gcc --version >/dev/null 2>&1 ; then 168 crossbindir=/usr/${host}/bin 169 conf_CC="CC=${host}-gcc" 170 break; 171 fi 172 done 173 if [ -z "$crossbindir" ]; then 174 echo "Cross compiler kit not installed" >&2 175 echo "Stop." >&2 176 exit 1 177 fi 178 179 if [ -f "$tsdir/config.log" ]; then 180 if ! head $tsdir/config.log | grep "$host" >/dev/null; then 181 echo "Please run a 'make distclean' first" >&2 182 exit 1 183 fi 184 fi 185 186 $tsdir/configure --enable-maintainer-mode --prefix=${amd64root} \ 187 --host=${host} --build=${build} \ 188 --with-gpg-error-prefix=${amd64root} 189 190 rc=$? 191 exit $rc 192fi 193# ***** end AMD64 cross build script ******* 194 195# Grep the required versions from configure.ac 196autoconf_vers=`sed -n '/^AC_PREREQ(/ { 197s/^.*(\(.*\))/\1/p 198q 199}' ${configure_ac}` 200autoconf_vers_num=`echo "$autoconf_vers" | cvtver` 201 202automake_vers=`sed -n '/^min_automake_version=/ { 203s/^.*="\(.*\)"/\1/p 204q 205}' ${configure_ac}` 206automake_vers_num=`echo "$automake_vers" | cvtver` 207 208#gettext_vers=`sed -n '/^AM_GNU_GETTEXT_VERSION(/ { 209#s/^.*(\(.*\))/\1/p 210#q 211#}' ${configure_ac}` 212#gettext_vers_num=`echo "$gettext_vers" | cvtver` 213 214 215if [ -z "$autoconf_vers" -o -z "$automake_vers" ] 216then 217 echo "**Error**: version information not found in "\`${configure_ac}\'"." >&2 218 exit 1 219fi 220 221# Allow to override the default tool names 222AUTOCONF=${AUTOCONF_PREFIX}${AUTOCONF:-autoconf}${AUTOCONF_SUFFIX} 223AUTOHEADER=${AUTOCONF_PREFIX}${AUTOHEADER:-autoheader}${AUTOCONF_SUFFIX} 224 225AUTOMAKE=${AUTOMAKE_PREFIX}${AUTOMAKE:-automake}${AUTOMAKE_SUFFIX} 226ACLOCAL=${AUTOMAKE_PREFIX}${ACLOCAL:-aclocal}${AUTOMAKE_SUFFIX} 227 228#GETTEXT=${GETTEXT_PREFIX}${GETTEXT:-gettext}${GETTEXT_SUFFIX} 229#MSGMERGE=${GETTEXT_PREFIX}${MSGMERGE:-msgmerge}${GETTEXT_SUFFIX} 230 231 232if check_version $AUTOCONF $autoconf_vers_num $autoconf_vers ; then 233 check_version $AUTOHEADER $autoconf_vers_num $autoconf_vers autoconf 234fi 235if check_version $AUTOMAKE $automake_vers_num $automake_vers; then 236 check_version $ACLOCAL $automake_vers_num $autoconf_vers automake 237fi 238#if check_version $GETTEXT $gettext_vers_num $gettext_vers; then 239# check_version $MSGMERGE $gettext_vers_num $gettext_vers gettext 240#fi 241 242if test "$DIE" = "yes"; then 243 cat <<EOF 244 245Note that you may use alternative versions of the tools by setting 246the corresponding environment variables; see README.SVN for details. 247 248EOF 249 exit 1 250fi 251 252# Check the git setup. 253if [ -d .git ]; then 254 if [ -f .git/hooks/pre-commit.sample -a ! -f .git/hooks/pre-commit ] ; then 255 cat <<EOF >&2 256*** Activating trailing whitespace git pre-commit hook. *** 257 For more information see this thread: 258 http://mail.gnome.org/archives/desktop-devel-list/2009-May/msg00084html 259 To deactivate this pre-commit hook again move .git/hooks/pre-commit 260 and .git/hooks/pre-commit.sample out of the way. 261EOF 262 cp -av .git/hooks/pre-commit.sample .git/hooks/pre-commit 263 chmod +x .git/hooks/pre-commit 264 fi 265fi 266 267 268echo "Running aclocal -I m4 ${ACLOCAL_FLAGS:+$ACLOCAL_FLAGS }..." 269$ACLOCAL -I m4 $ACLOCAL_FLAGS 270echo "Running autoheader..." 271$AUTOHEADER 272echo "Running automake --gnu ..." 273$AUTOMAKE --gnu; 274echo "Running autoconf${FORCE} ..." 275$AUTOCONF${FORCE} 276 277echo "You may now run: 278 ./configure --enable-maintainer-mode && make 279" 280