add debug to version_compare(); use it in libtool_2_check()
[platform/upstream/gst-common.git] / gst-autogen.sh
1 # a silly hack that generates autoregen.sh but it's handy
2 # Remove the old autoregen.sh first to create a new file,
3 # as the current one may be being read by the shell executing
4 # this script.
5 if [ -f "autoregen.sh" ]; then
6   rm autoregen.sh
7 fi
8 echo "#!/bin/sh" > autoregen.sh
9 echo "./autogen.sh $@ \$@" >> autoregen.sh
10 chmod +x autoregen.sh
11
12 # helper functions for autogen.sh
13
14 debug ()
15 # print out a debug message if DEBUG is a defined variable
16 {
17   if test ! -z "$DEBUG"
18   then
19     echo "DEBUG: $1"
20   fi
21 }
22
23 version_get ()
24 # based on the command's version output, set variables
25 # _MAJOR, _MINOR, _MICRO, _VERSION, using the given prefix as variable prefix
26 #
27 # arg 1: command binary name
28 # arg 2: (uppercased) variable name prefix
29 {
30   COMMAND=$1
31   VARPREFIX=$2
32
33   # strip everything that's not a digit, then use cut to get the first field
34   pkg_version=`$COMMAND --version|head -n 1|sed 's/^.*)[^0-9]*//'|cut -d' ' -f1`
35   debug "pkg_version $pkg_version"
36   # remove any non-digit characters from the version numbers to permit numeric
37   # comparison
38   pkg_major=`echo $pkg_version | cut -d. -f1 | sed s/[a-zA-Z\-].*//g`
39   pkg_minor=`echo $pkg_version | cut -d. -f2 | sed s/[a-zA-Z\-].*//g`
40   pkg_micro=`echo $pkg_version | cut -d. -f3 | sed s/[a-zA-Z\-].*//g`
41   test -z "$pkg_major" && pkg_major=0
42   test -z "$pkg_minor" && pkg_minor=0
43   test -z "$pkg_micro" && pkg_micro=0
44   debug "found major $pkg_major minor $pkg_minor micro $pkg_micro"
45   eval `echo ${VARPREFIX}`_MAJOR=$pkg_major
46   eval `echo ${VARPREFIX}`_MINOR=$pkg_minor
47   eval `echo ${VARPREFIX}`_MICRO=$pkg_micro
48   eval `echo ${VARPREFIX}`_VERSION=$pkg_version
49 }
50
51 version_compare ()
52 # Checks whether the version of VARPREFIX is equal to or
53 # newer than the requested version
54 # arg1: VARPREFIX
55 # arg2: MAJOR
56 # arg3: MINOR
57 # arg4: MICRO
58 {
59   VARPREFIX=$1
60   MAJOR=$2
61   MINOR=$3
62   MICRO=$4
63
64   pkg_major=$(eval echo $`echo ${VARPREFIX}`_MAJOR);
65   pkg_minor=$(eval echo $`echo ${VARPREFIX}`_MINOR);
66   pkg_micro=$(eval echo $`echo ${VARPREFIX}`_MICRO);
67
68   #start checking the version
69   debug "version_compare: $VARPREFIX against $MAJOR.$MINOR.$MICRO"
70
71     # reset check
72     WRONG=
73
74     if [ ! "$pkg_major" -gt "$MAJOR" ]; then
75       debug "major: $pkg_major <= $MAJOR"
76       if [ "$pkg_major" -lt "$MAJOR" ]; then
77         debug "major: $pkg_major < $MAJOR"
78         WRONG=1
79       elif [ ! "$pkg_minor" -gt "$MINOR" ]; then
80         debug "minor: $pkg_minor <= $MINOR"
81         if [ "$pkg_minor" -lt "$MINOR" ]; then
82           debug "minor: $pkg_minor < $MINOR"
83           WRONG=1
84         elif [ "$pkg_micro" -lt "$MICRO" ]; then
85           debug "micro: $pkg_micro < $MICRO"
86           WRONG=1
87         fi
88       fi
89     fi
90     if test ! -z "$WRONG"; then
91       debug "version_compare: $VARPREFIX older than $MAJOR.$MINOR.$MICRO"
92       return 1
93     fi
94     debug "version_compare: $VARPREFIX equal to/newer than $MAJOR.$MINOR.$MICRO"
95     return 0
96 }
97
98
99 version_check ()
100 # check the version of a package
101 # first argument : package name (executable)
102 # second argument : optional path where to look for it instead
103 # third argument : source download url
104 # rest of arguments : major, minor, micro version
105 # all consecutive ones : suggestions for binaries to use
106 # (if not specified in second argument)
107 {
108   PACKAGE=$1
109   PKG_PATH=$2
110   URL=$3
111   MAJOR=$4
112   MINOR=$5
113   MICRO=$6
114
115   # for backwards compatibility, we let PKG_PATH=PACKAGE when PKG_PATH null
116   if test -z "$PKG_PATH"; then PKG_PATH=$PACKAGE; fi
117   debug "major $MAJOR minor $MINOR micro $MICRO"
118   VERSION=$MAJOR
119   if test ! -z "$MINOR"; then VERSION=$VERSION.$MINOR; else MINOR=0; fi
120   if test ! -z "$MICRO"; then VERSION=$VERSION.$MICRO; else MICRO=0; fi
121
122   debug "major $MAJOR minor $MINOR micro $MICRO"
123
124   for SUGGESTION in $PKG_PATH; do
125     COMMAND="$SUGGESTION"
126
127     # don't check if asked not to
128     test -z "$NOCHECK" && {
129       echo -n "  checking for $COMMAND >= $VERSION ... "
130     } || {
131       # we set a var with the same name as the package, but stripped of
132       # unwanted chars
133       VAR=`echo $PACKAGE | sed 's/-//g'`
134       debug "setting $VAR"
135       eval $VAR="$COMMAND"
136       return 0
137     }
138
139     which $COMMAND > /dev/null 2>&1
140     if test $? -eq 1;
141     then 
142       debug "$COMMAND not found"
143       continue
144     fi
145
146     VARPREFIX=`echo $COMMAND | sed 's/-//g' | tr [:lower:] [:upper:]`
147     version_get $COMMAND $VARPREFIX
148
149     version_compare $VARPREFIX $MAJOR $MINOR $MICRO
150     if test $? -ne 0; then
151       echo "found $pkg_version, not ok !"
152       continue
153     else
154       echo "found $pkg_version, ok."
155       # we set a var with the same name as the package, but stripped of
156       # unwanted chars
157       VAR=`echo $PACKAGE | sed 's/-//g'`
158       debug "setting $VAR"
159       eval $VAR="$COMMAND"
160       return 0
161     fi
162   done
163
164   echo "$PACKAGE not found !"
165   echo "You must have $PACKAGE installed to compile $package."
166   echo "Download the appropriate package for your distribution,"
167   echo "or get the source tarball at $URL"
168   return 1;
169 }
170
171 aclocal_check ()
172 {
173   # normally aclocal is part of automake
174   # so we expect it to be in the same place as automake
175   # so if a different automake is supplied, we need to adapt as well
176   # so how's about replacing automake with aclocal in the set var,
177   # and saving that in $aclocal ?
178   # note, this will fail if the actual automake isn't called automake*
179   # or if part of the path before it contains it
180   if [ -z "$automake" ]; then
181     echo "Error: no automake variable set !"
182     return 1
183   else
184     aclocal=`echo $automake | sed s/automake/aclocal/`
185     debug "aclocal: $aclocal"
186     if [ "$aclocal" != "aclocal" ];
187     then
188       CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-aclocal=$aclocal"
189     fi
190     if [ ! -x `which $aclocal` ]; then
191       echo "Error: cannot execute $aclocal !"
192       return 1
193     fi
194   fi
195 }
196
197 autoheader_check ()
198 {
199   # same here - autoheader is part of autoconf
200   # use the same voodoo
201   if [ -z "$autoconf" ]; then
202     echo "Error: no autoconf variable set !"
203     return 1
204   else
205     autoheader=`echo $autoconf | sed s/autoconf/autoheader/`
206     debug "autoheader: $autoheader"
207     if [ "$autoheader" != "autoheader" ];
208     then
209       CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-autoheader=$autoheader"
210     fi
211     if [ ! -x `which $autoheader` ]; then
212       echo "Error: cannot execute $autoheader !"
213       return 1
214     fi
215   fi
216
217 }
218
219 autoconf_2_52d_check ()
220 {
221   # autoconf 2.52d has a weird issue involving a yes:no error
222   # so don't allow it's use
223   test -z "$NOCHECK" && {
224     ac_version=`$autoconf --version|head -n 1|sed 's/^[a-zA-Z\.\ ()]*//;s/ .*$//'`
225     if test "$ac_version" = "2.52d"; then
226       echo "autoconf 2.52d has an issue with our current build."
227       echo "We don't know who's to blame however.  So until we do, get a"
228       echo "regular version.  RPM's of a working version are on the gstreamer site."
229       exit 1
230     fi
231   }
232   return 0
233 }
234 libtool_2_2_gettext_check ()
235 {
236   # libtool 2.2 needs autopoint 0.17 or higher
237   version_compare LIBTOOLIZE 2 2 0
238   if test $? -eq 0
239   then
240     version_compare AUTOPOINT 0 17 0
241     if test $? -ne 0
242     then
243       echo "libtool 2.2 requires autopoint 0.17 or higher"
244       return 1
245     fi
246   fi
247   return 0
248 }
249
250
251 die_check ()
252 {
253   # call with $DIE
254   # if set to 1, we need to print something helpful then die
255   DIE=$1
256   if test "x$DIE" = "x1";
257   then
258     echo
259     echo "- Please get the right tools before proceeding."
260     echo "- Alternatively, if you're sure we're wrong, run with --nocheck."
261     exit 1
262   fi
263 }
264
265 autogen_options ()
266 {
267   if test "x$1" = "x"; then
268     return 0
269   fi
270
271   while test "x$1" != "x" ; do
272     optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
273     case "$1" in
274       --noconfigure)
275           NOCONFIGURE=defined
276           AUTOGEN_EXT_OPT="$AUTOGEN_EXT_OPT --noconfigure"
277           echo "+ configure run disabled"
278           shift
279           ;;
280       --nocheck)
281           AUTOGEN_EXT_OPT="$AUTOGEN_EXT_OPT --nocheck"
282           NOCHECK=defined
283           echo "+ autotools version check disabled"
284           shift
285           ;;
286       -d|--debug)
287           DEBUG=defined
288           AUTOGEN_EXT_OPT="$AUTOGEN_EXT_OPT --debug"
289           echo "+ debug output enabled"
290           shift
291           ;;
292       -h|--help)
293           echo "autogen.sh (autogen options) -- (configure options)"
294           echo "autogen.sh help options: "
295           echo " --noconfigure            don't run the configure script"
296           echo " --nocheck                don't do version checks"
297           echo " --debug                  debug the autogen process"
298           echo
299           echo " --with-autoconf PATH     use autoconf in PATH"
300           echo " --with-automake PATH     use automake in PATH"
301           echo
302           echo "Any argument either not in the above list or after a '--' will be "
303           echo "passed to ./configure."
304           exit 1
305           ;;
306       --with-automake=*)
307           AUTOMAKE=$optarg
308           echo "+ using alternate automake in $optarg"
309           CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-automake=$AUTOMAKE"
310           shift
311           ;;
312       --with-autoconf=*)
313           AUTOCONF=$optarg
314           echo "+ using alternate autoconf in $optarg"
315           CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-autoconf=$AUTOCONF"
316           shift
317           ;;
318       --) shift ; break ;;
319       *)
320           echo "+ passing argument $1 to configure"
321           CONFIGURE_EXT_OPT="$CONFIGURE_EXT_OPT $1"
322           shift
323           ;;
324     esac
325   done
326
327   for arg do CONFIGURE_EXT_OPT="$CONFIGURE_EXT_OPT $arg"; done
328   if test ! -z "$CONFIGURE_EXT_OPT"
329   then
330     echo "+ options passed to configure: $CONFIGURE_EXT_OPT"
331   fi
332 }
333
334 toplevel_check ()
335 {
336   srcfile=$1
337   test -f $srcfile || {
338         echo "You must run this script in the top-level $package directory"
339         exit 1
340   }
341 }
342
343 tool_run ()
344 {
345   tool=$1
346   options=$2
347   run_if_fail=$3
348   echo "+ running $tool $options..."
349   $tool $options || {
350     echo
351     echo $tool failed
352     eval $run_if_fail
353     exit 1
354   }
355 }
356
357 install_git_hooks ()
358 {
359   if test -d .git; then
360     # install pre-commit hook for doing clean commits
361     for hook in pre-commit; do
362       if test ! \( -x .git/hooks/$hook -a -L .git/hooks/$hook \); then
363         echo "+ Installing git $hook hook"
364         rm -f .git/hooks/$hook
365         ln -s ../../common/hooks/$hook.hook .git/hooks/$hook || {
366           # if we couldn't create a symbolic link, try doing a plain cp
367           if cp common/hooks/pre-commit.hook .git/hooks/pre-commit; then
368             chmod +x .git/hooks/pre-commit;
369           else
370             echo "********** Couldn't install git $hook hook **********";
371           fi
372         }
373       fi
374     done
375   fi
376 }