Fix off-by-one memory error
[warzone2100:mainline.git] / autogen.sh
1 #!/bin/sh
2 # Run this to generate all the initial makefiles, etc.
3
4 DIE=0
5 SRCDIR=`dirname $0`
6 BUILDDIR=`pwd`
7 srcfile=src/action.cpp
8 package=Warzone2100
9
10 debug ()
11 # print out a debug message if DEBUG is a defined variable
12 {
13   if [ ! -z "$DEBUG" ]; then
14     echo "DEBUG: $1"
15   fi
16 }
17
18 version_check ()
19 # check the version of a package
20 # first argument : complain ('1') or not ('0')
21 # second argument : package name (executable)
22 # third argument : source download url
23 # rest of arguments : major, minor, micro version
24 {
25   COMPLAIN=$1
26   PACKAGE=$2
27   URL=$3
28   MAJOR=$4
29   MINOR=$5
30   MICRO=$6
31
32   WRONG=
33
34   debug "major $MAJOR minor $MINOR micro $MICRO"
35   VERSION=$MAJOR
36   if [ ! -z "$MINOR" ]; then VERSION=$VERSION.$MINOR; else MINOR=0; fi
37   if [ ! -z "$MICRO" ]; then VERSION=$VERSION.$MICRO; else MICRO=0; fi
38
39   debug "version $VERSION"
40   echo "+ checking for $PACKAGE >= $VERSION ... " | tr -d '\n'
41
42   ($PACKAGE --version) < /dev/null > /dev/null 2>&1 ||
43   {
44     echo
45     echo "You must have $PACKAGE installed to compile $package."
46     echo "Download the appropriate package for your distribution,"
47     echo "or get the source tarball at $URL"
48     return 1
49   }
50   # the following line is carefully crafted sed magic
51   pkg_version=`$PACKAGE --version|head -n 1|sed 's/([^)]*)//g;s/^[a-zA-Z\.\ \-\/]*//;s/ .*$//'`
52   debug "pkg_version $pkg_version"
53   pkg_major=`echo $pkg_version | cut -d. -f1`
54   pkg_minor=`echo $pkg_version | sed s/[-,a-z,A-Z].*// | cut -d. -f2`
55   pkg_micro=`echo $pkg_version | sed s/[-,a-z,A-Z].*// | cut -d. -f3`
56   [ -z "$pkg_minor" ] && pkg_minor=0
57   [ -z "$pkg_micro" ] && pkg_micro=0
58
59   debug "found major $pkg_major minor $pkg_minor micro $pkg_micro"
60
61   #start checking the version
62   if [ "$pkg_major" -lt "$MAJOR" ]; then
63     WRONG=1
64   elif [ "$pkg_major" -eq "$MAJOR" ]; then
65     if [ "$pkg_minor" -lt "$MINOR" ]; then
66       WRONG=1
67     elif [ "$pkg_minor" -eq "$MINOR" -a "$pkg_micro" -lt "$MICRO" ]; then
68       WRONG=1
69     fi
70   fi
71
72   if [ ! -z "$WRONG" ]; then
73    echo "found $pkg_version, not ok !"
74    if [ "$COMPLAIN" -eq "1" ]; then
75      echo
76      echo "You must have $PACKAGE $VERSION or greater to compile $package."
77      echo "Get the latest version from <$URL>."
78      echo
79    fi
80    return 1
81   else
82     echo "found $pkg_version, ok."
83   fi
84 }
85
86 not_version ()
87 # check the version of a package
88 # first argument : package name (executable)
89 # second argument : source download url
90 # rest of arguments : major, minor, micro version
91 {
92   PACKAGE=$1
93   URL=$2
94   MAJOR=$3
95   MINOR=$4
96   MICRO=$5
97
98   WRONG=
99
100   debug "major $MAJOR minor $MINOR micro $MICRO"
101   VERSION=$MAJOR
102   if [ ! -z "$MINOR" ]; then VERSION=$VERSION.$MINOR; else MINOR=0; fi
103   if [ ! -z "$MICRO" ]; then VERSION=$VERSION.$MICRO; else MICRO=0; fi
104
105   debug "version $VERSION"
106   echo "+ checking for $PACKAGE != $VERSION ... " | tr -d '\n'
107
108   ($PACKAGE --version) < /dev/null > /dev/null 2>&1 ||
109   {
110     echo
111     echo "You must have $PACKAGE installed to compile $package."
112     echo "Download the appropriate package for your distribution,"
113     echo "or get the source tarball at $URL"
114     return 1
115   }
116   # the following line is carefully crafted sed magic
117   pkg_version=`$PACKAGE --version|head -n 1|sed 's/([^)]*)//g;s/^[a-zA-Z\.\ \-\/]*//;s/ .*$//'`
118   debug "pkg_version $pkg_version"
119   pkg_major=`echo $pkg_version | cut -d. -f1`
120   pkg_minor=`echo $pkg_version | sed s/[-,a-z,A-Z].*// | cut -d. -f2`
121   pkg_micro=`echo $pkg_version | sed s/[-,a-z,A-Z].*// | cut -d. -f3`
122   [ -z "$pkg_minor" ] && pkg_minor=0
123   [ -z "$pkg_micro" ] && pkg_micro=0
124
125   debug "found major $pkg_major minor $pkg_minor micro $pkg_micro"
126
127   #start checking the version
128   if [ "$pkg_major" -eq "$MAJOR" ]; then
129    if [ "$pkg_minor" -eq "$MINOR" ]; then
130     if [ "$pkg_micro" -eq "$MICRO" ]; then
131       WRONG=1
132     fi
133    fi
134   fi
135
136   if [ ! -z "$WRONG" ]; then
137    echo "found $pkg_version, not ok !"
138    echo
139    echo "Version $PACKAGE $VERSION is known not to work well with $package."
140    echo "Get another (preferably latest) version from <$URL>."
141    echo
142    return 1
143   else
144     echo "not found, good."
145   fi
146 }
147
148 # Chdir to the srcdir, then run auto* tools.
149 cd "$SRCDIR"
150
151 version_check 1 "autoconf" "ftp://ftp.gnu.org/pub/gnu/autoconf/" 2 56 || DIE=1
152 version_check 1 "automake" "ftp://ftp.gnu.org/pub/gnu/automake/" 1 11 || DIE=1
153 if [ "$DIE" -eq 1 ]; then
154   exit 1
155 fi
156
157 [ -f "$srcfile" ] || {
158   echo "Are you sure $SRCDIR is a valid source directory?"
159   exit 1
160 }
161
162 echo "+ running aclocal ..."
163 aclocal -I m4 || {
164   echo
165   echo "aclocal failed - check that all needed development files are present on system"
166   exit 1
167 }
168 echo "+ running autoheader ... "
169 autoheader || {
170   echo
171   echo "autoheader failed"
172   exit 1
173 }
174 echo "+ running autoconf ... "
175 autoconf || {
176   echo
177   echo "autoconf failed"
178   exit 1
179 }
180 echo "+ running automake ... "
181 automake -a -c --foreign || {
182   echo
183   echo "automake failed"
184   exit 1
185 }
186
187
188 # Chdir back to the builddir before the configure step.
189 cd "$BUILDDIR"
190
191 # now remove the cache, because it can be considered dangerous in this case
192 echo "+ removing config.cache ... "
193 rm -f config.cache
194
195 echo
196 echo "Now type '$SRCDIR/configure && make' to compile."
197
198 exit 0