git-svn-id: https://svn.code.sf.net/p/gphoto/code/trunk/libgphoto2@7988 67ed7778-7388-44ab-90cf-0a291f65f57c
509 lines
13 KiB
Bash
Executable File
509 lines
13 KiB
Bash
Executable File
#!/bin/sh
|
|
# autogen.sh - initialize and clean automake&co based build trees
|
|
#
|
|
# For more detailed info, run "autogen.sh --help" or scroll down to the
|
|
# print_help() function.
|
|
|
|
|
|
if test "$(pwd)" != "`pwd`"
|
|
then
|
|
echo "Urgh. Dinosaur shell, eh?"
|
|
exit 1
|
|
fi
|
|
|
|
|
|
########################################################################
|
|
# Constant and initial values
|
|
|
|
debug="false"
|
|
recursive="false"
|
|
dryrun="false"
|
|
self="$(basename "$0")"
|
|
autogen_version="0.4.5"
|
|
|
|
|
|
########################################################################
|
|
# Print help message
|
|
|
|
print_help() {
|
|
cat<<__HELP_EOF__
|
|
${self} - initialize automake/autoconf/gettext/libtool based build system
|
|
|
|
Usage:
|
|
${self} [<command>|<flag>|...] [<directory>...]
|
|
|
|
Runs given command sequence on all given directories, in sequence.
|
|
If there is no command given, --init is assumed.
|
|
If there is no directory given, the location of ${self} is assumed.
|
|
|
|
Commands:
|
|
--help
|
|
Print this help text
|
|
--version
|
|
Print the tool versions
|
|
|
|
--clean
|
|
Clean all files and directories generated by "$self --init"
|
|
--init
|
|
Converts untouched CVS checkout into a build tree which
|
|
can be processed further by running the classic
|
|
./configure && make && make install
|
|
|
|
Flags:
|
|
--verbose
|
|
Verbose output
|
|
--dry-run
|
|
Only print the commands to be run, not actually execute
|
|
them.
|
|
--recursive
|
|
Used internally. Do everything which doesn't recurse on
|
|
its own.
|
|
|
|
${self} depends on automake, autoconf, libtool and gettext.
|
|
|
|
You may want to set AUTOCONF, AUTOHEADER, AUTOMAKE, AUTORECONF, ACLOCAL,
|
|
AUTOPOINT, LIBTOOLIZE to use specific version of these tools, and
|
|
AUTORECONF_OPTS to add options to the call to autoreconf.
|
|
|
|
If none of these variables are set, ${self} tries to find the most
|
|
adequate version in \$PATH.
|
|
__HELP_EOF__
|
|
}
|
|
|
|
|
|
########################################################################
|
|
# Print software versions
|
|
|
|
print_versions() {
|
|
echo "${self} (ndim's autogen) ${autogen_version}"
|
|
for tool in \
|
|
"${AUTOCONF-autoconf}" \
|
|
"${AUTOMAKE-automake}" \
|
|
"${AUTOPOINT-autopoint}" \
|
|
"${LIBTOOLIZE-libtoolize}"
|
|
do
|
|
"$tool" --version 2>&1 | sed '1q'
|
|
done
|
|
}
|
|
|
|
|
|
########################################################################
|
|
# Initialize variables for configure.{in,ac} in $1
|
|
|
|
init_vars() {
|
|
dir="$1"
|
|
echo -n "Looking for \`${dir}/configure.{ac,in}'..."
|
|
# There are shells which don't understand {,} wildcards
|
|
CONFIGURE_AC=""
|
|
for tmp in "${dir}/configure.ac" "${dir}/configure.in"; do
|
|
if test -f "$tmp"; then
|
|
CONFIGURE_AC="$tmp"
|
|
echo " $tmp"
|
|
break
|
|
fi
|
|
done
|
|
if test "x$CONFIGURE_AC" = "x"; then
|
|
echo " no."
|
|
exit 1
|
|
fi
|
|
|
|
if "$debug"; then
|
|
if test "$(uname -o)" = "Cygwin"; then
|
|
# Cygwin autoreconf doesn't understand -Wall
|
|
AUTORECONF_OPTS="$AUTORECONF_OPTS --verbose"
|
|
else
|
|
AUTORECONF_OPTS="$AUTORECONF_OPTS --verbose -Wall"
|
|
fi
|
|
fi
|
|
|
|
"$debug" && echo -n "Initializing variables for \`${dir}'..."
|
|
# FIXME: Just getting those directories and cleaning them isn't enough.
|
|
# OK, the "init" part is done recursively by autopoint, so that is easy.
|
|
# But the cleaning should also work recursively, but that is difficult
|
|
# with the current structure of the script.
|
|
AG_SUBDIRS="$(for k in $(sed -n 's/^[[:space:]]*GP_AUTOGEN_SUBDIR(\[\{0,1\}\([^])]*\).*/\1/p' "$CONFIGURE_AC"); do echo "${k}"; done)"
|
|
AG_LIBLTDL_DIR="$(sed -n 's/^[[:space:]]*AC_LIBLTDL_\(INSTALLABLE\|CONVENIENCE\)(\[\{0,1\}\([^])]*\).*/\2/p' < "$CONFIGURE_AC")"
|
|
if test "x$AG_LIBLTDL_DIR" = "x"; then
|
|
tmp="$(sed -n 's/^[[:space:]]*\(AC_LIBLTDL_\)\(INSTALLABLE\|CONVENIENCE\)(\[\{0,1\}\([^])]*\).*/\1/p' < "$CONFIGURE_AC")"
|
|
if test "x$tmp" = "xAC_LIBLTDL_"; then
|
|
AG_LIBLTDL_DIR="libltdl"
|
|
else
|
|
AG_LIBLTDL_DIR=""
|
|
fi
|
|
fi
|
|
AG_AUX="$(sed -n 's/^AC_CONFIG_AUX_DIR(\[\{0,1\}\([^])]*\).*/\1/p' < "$CONFIGURE_AC")"
|
|
if test "x$AG_AUX" = "x"; then
|
|
AG_AUX="."
|
|
fi
|
|
AG_CONFIG_H="$(sed -n 's/^\(A[CM]_CONFIG_HEADERS\?\)(\[\{0,1\}\([^]),]*\).*/\2/p' < "$CONFIGURE_AC")"
|
|
AG_CONFIG_K="$(sed -n 's/^\(A[CM]_CONFIG_HEADERS\?\)(\[\{0,1\}\([^]),]*\).*/\1/p' < "$CONFIGURE_AC")"
|
|
if echo "x$AG_CONFIG_H" | grep -q ':'; then
|
|
echo "$AG_CONFIG_K contains unsupported \`:' character: \`$AG_CONFIG_H'"
|
|
exit 13
|
|
fi
|
|
if test "x$AG_CONFIG_H" != "x"; then
|
|
AG_CONFIG_DIR="$(dirname "${AG_CONFIG_H}")"
|
|
AG_GEN_CONFIG_H="${AG_CONFIG_H} ${AG_CONFIG_H}.in ${AG_CONFIG_DIR}/stamp-h1 ${AG_CONFIG_DIR}/stamp-h2"
|
|
else
|
|
AG_CONFIG_DIR=""
|
|
AG_GEN_CONFIG_H=""
|
|
fi
|
|
for d in "$AG_AUX" "$AG_CONFIG_DIR"; do
|
|
if test -n "$d" && test ! -d "$d"; then
|
|
mkdir "$d"
|
|
fi
|
|
done
|
|
AG_GEN_ACAM="aclocal.m4 configure $AG_AUX/config.guess $AG_AUX/config.sub $AG_AUX/compile"
|
|
AG_GEN_RECONF="$AG_AUX/install-sh $AG_AUX/missing $AG_AUX/depcomp"
|
|
AG_GEN_LIBTOOL="$AG_AUX/ltmain.sh libtool"
|
|
while read file; do
|
|
AG_GEN_LIBTOOL="${AG_GEN_LIBTOOL} ${AG_LIBLTDL_DIR}/${file}"
|
|
done <<EOF
|
|
aclocal.m4
|
|
config.guess
|
|
config-h.in
|
|
config.sub
|
|
configure
|
|
configure.ac
|
|
COPYING.LIB
|
|
install-sh
|
|
ltdl.c
|
|
ltdl.h
|
|
ltmain.sh
|
|
Makefile.am
|
|
Makefile.in
|
|
missing
|
|
README
|
|
EOF
|
|
AG_GEN_GETTEXT="$AG_AUX/mkinstalldirs $AG_AUX/config.rpath ABOUT-NLS"
|
|
while read file; do
|
|
AG_GEN_GETTEXT="${AG_GEN_GETTEXT} m4/${file} m4m/${file}"
|
|
done <<EOF
|
|
codeset.m4
|
|
gettext.m4
|
|
glibc21.m4
|
|
iconv.m4
|
|
intdiv0.m4
|
|
intmax.m4
|
|
inttypes-pri.m4
|
|
inttypes.m4
|
|
inttypes_h.m4
|
|
isc-posix.m4
|
|
lcmessage.m4
|
|
lib-ld.m4
|
|
lib-link.m4
|
|
lib-prefix.m4
|
|
longdouble.m4
|
|
longlong.m4
|
|
nls.m4
|
|
po.m4
|
|
printf-posix.m4
|
|
progtest.m4
|
|
signed.m4
|
|
size_max.m4
|
|
stdint_h.m4
|
|
uintmax_t.m4
|
|
ulonglong.m4
|
|
wchar_t.m4
|
|
wint_t.m4
|
|
xsize.m4
|
|
EOF
|
|
while read file; do
|
|
AG_GEN_GETTEXT="${AG_GEN_GETTEXT} po/${file}"
|
|
done <<EOF
|
|
Makefile.in.in
|
|
Makevars.template
|
|
Rules-quot
|
|
boldquot.sed
|
|
en@boldquot.header
|
|
en@quot.header
|
|
insert-header.sin
|
|
quot.sed
|
|
remove-potcdate.sin
|
|
stamp-po
|
|
EOF
|
|
AG_GEN_CONF="config.status config.log"
|
|
AG_GEN_FILES="$AG_GEN_ACAM $AG_GEN_RECONF $AG_GEN_GETTEXT"
|
|
AG_GEN_FILES="$AG_GEN_FILES $AG_GEN_CONFIG_H $AG_GEN_CONF $AG_GEN_LIBTOOL"
|
|
AG_GEN_DIRS="autom4te.cache ${AG_LIBLTDL_DIR}/autom4te.cache ${AG_LIBLTDL_DIR}"
|
|
"$debug" && echo " done."
|
|
|
|
if "$debug"; then set | grep '^AG_'; fi
|
|
dryrun_param=""
|
|
if "$dryrun"; then dryrun_param="--dry-run"; fi
|
|
}
|
|
|
|
|
|
########################################################################
|
|
# Print command to be executed and, if not dryrun, actually execute it.
|
|
|
|
execute_command() {
|
|
if "$dryrun" || "$debug"; then
|
|
echo "Running <<" "$@" ">>"
|
|
fi
|
|
if "$dryrun"; then :; else
|
|
"$@"
|
|
fi
|
|
}
|
|
|
|
|
|
########################################################################
|
|
# Clean generated files from $* directories
|
|
|
|
command_clean() {
|
|
if test "x$AG_GEN_FILES" = "x"; then echo "Internal error"; exit 2; fi
|
|
dir="$1"
|
|
#while test "$dir"; do
|
|
echo "$self:clean: Entering directory \`${dir}'"
|
|
(
|
|
if cd "$dir"; then
|
|
echo -n "Cleaning autogen generated files..."
|
|
execute_command rm -rf ${AG_GEN_DIRS}
|
|
execute_command rm -f ${AG_GEN_FILES}
|
|
echo " done."
|
|
if test -h INSTALL; then execute_command rm -f INSTALL; fi
|
|
echo -n "Cleaning generated Makefile, Makefile.in files..."
|
|
if "$debug"; then echo; fi
|
|
find . -type f -name 'Makefile.am' -print | \
|
|
while read file; do
|
|
echo "$file" | grep -q '/{arch}' && continue
|
|
echo "$file" | grep -q '/\.svn' && continue
|
|
echo "$file" | grep -q '/CVS' && continue
|
|
base="$(dirname "$file")/$(basename "$file" .am)"
|
|
if "$debug"; then
|
|
echo -e " Removing files created from ${file}"
|
|
fi
|
|
execute_command rm -f "${base}" "${base}.in"
|
|
done
|
|
if "$debug"; then :; else echo " done."; fi
|
|
echo -n "Removing *~ backup files..."
|
|
find . -type f -name '*~' -print | while read fname; do
|
|
execute_command rm -f "$fname"
|
|
done
|
|
echo " done."
|
|
if test -n "${AG_SUBDIRS}"; then
|
|
"$0" --clean ${dryrun_param} --recursive ${AG_SUBDIRS}
|
|
fi
|
|
fi
|
|
)
|
|
echo "$self:clean: Left directory \`${dir}'"
|
|
#shift
|
|
#dir="$1"
|
|
#done
|
|
}
|
|
|
|
|
|
########################################################################
|
|
# Initialize build system in $1 directory
|
|
|
|
command_init() {
|
|
dir="$1"
|
|
if test "x$AG_GEN_FILES" = "x"; then echo "Internal error"; exit 2; fi
|
|
echo "$self:init: Entering directory \`${dir}'"
|
|
(
|
|
if cd "${dir}"; then
|
|
if test "x$AG_LIBLTDL_DIR" != "x"; then
|
|
# We have to run libtoolize --ltdl ourselves because
|
|
# - autoreconf doesn't run it at all
|
|
execute_command "${LIBTOOLIZE-"libtoolize"}" --ltdl
|
|
# And we have to clean up the generated files after libtoolize because
|
|
# - we still want symlinks for the files
|
|
# - but we want to (implicitly) AC_CONFIG_SUBDIR and that writes to
|
|
# these files.
|
|
if test ! -d "${AG_LIBLTDL_DIR}" || test ! -f "${AG_LIBLTDL_DIR}/Makefile.am"; then
|
|
echo "Could not create libltdl directory \`${AG_LIBLTDL_DIR}'."
|
|
echo "Leaving \`$(pwd)' and aborting."
|
|
exit 2
|
|
fi
|
|
(cd "${AG_LIBLTDL_DIR}" && execute_command rm -f aclocal.m4 config.guess config.sub configure install-sh ltmain.sh Makefile.in missing)
|
|
fi
|
|
if test -n "${AG_SUBDIRS}"; then
|
|
"$0" --init ${dryrun_param} --recursive ${AG_SUBDIRS}
|
|
status="$?"
|
|
if test "$status" -ne 0; then exit "$status"; fi
|
|
fi
|
|
if "$recursive"; then :; else
|
|
if execute_command ${AUTORECONF-"autoreconf"} --install --symlink ${AUTORECONF_OPTS}; then
|
|
:; else
|
|
status="$?"
|
|
echo "autoreconf quit with exit code $status, aborting."
|
|
exit "$status"
|
|
fi
|
|
echo "You may run ./configure now in \`${dir}'."
|
|
echo "Run as \"./configure --help\" to find out about config options."
|
|
fi
|
|
else
|
|
exit "$?"
|
|
fi
|
|
)
|
|
# Just error propagation
|
|
status="$?"
|
|
echo "$self:init: Left directory \`${dir}'"
|
|
if "$recursive"; then
|
|
:
|
|
elif test "$status" -ne "0"; then
|
|
exit "$status"
|
|
fi
|
|
}
|
|
|
|
|
|
########################################################################
|
|
# Parse command line.
|
|
# This still accepts more than the help text says it does, but that
|
|
# isn't supported.
|
|
|
|
commands="init" # default command in case none is given
|
|
pcommands=""
|
|
check_versions=false
|
|
dirs="$(dirname "$0")"
|
|
#dirs="$(cd "$dirs" && pwd)"
|
|
pdirs=""
|
|
# Yes, unquoted $@ isn't space safe, but it works with simple shells.
|
|
for param in $@; do
|
|
case "$param" in
|
|
--clean)
|
|
pcommands="$pcommands clean"
|
|
;;
|
|
--init)
|
|
pcommands="$pcommands init"
|
|
check_versions=:
|
|
;;
|
|
--verbose)
|
|
debug=:
|
|
;;
|
|
--dry-run)
|
|
dryrun=:
|
|
;;
|
|
--recursive)
|
|
recursive=:
|
|
;;
|
|
--version)
|
|
print_versions
|
|
exit 0
|
|
;;
|
|
-h|--help)
|
|
print_help
|
|
exit 0
|
|
;;
|
|
-*)
|
|
echo "Unhandled $self option: $param"
|
|
exit 1
|
|
;;
|
|
*)
|
|
pdirs="${pdirs} ${param}"
|
|
;;
|
|
esac
|
|
done
|
|
if test "x$pcommands" != "x"; then
|
|
# commands given on command line? use them!
|
|
commands="$pcommands"
|
|
else
|
|
check_versions=:
|
|
fi
|
|
if test "x$pdirs" != "x"; then
|
|
# dirs given on command line? use them!
|
|
dirs="$pdirs"
|
|
fi
|
|
|
|
|
|
########################################################################
|
|
# If not explicitly given, try to find most convenient tools in $PATH
|
|
#
|
|
# This method only works for tools made for parallel installation with
|
|
# a version suffix, i.e. autoconf and automake.
|
|
#
|
|
# libtool and gettext do not support that, so you'll still have to
|
|
# manually set the respective variables if the default does not work
|
|
# for you.
|
|
|
|
skip="false"
|
|
oldversion="oldversion"
|
|
while read flag variable binary version restofline; do
|
|
case "$flag" in
|
|
+)
|
|
if "$skip"; then skip=false; fi
|
|
if test -n "`eval echo \$\{$variable+"set"\}`"; then
|
|
skip=:
|
|
else
|
|
if test -x "`which ${binary}${version}`"; then
|
|
export "$variable"="${binary}${version}"
|
|
oldversion="${version}"
|
|
else
|
|
skip=:
|
|
fi
|
|
fi
|
|
;;
|
|
-)
|
|
if "$skip"; then :; else
|
|
export "$variable"="${binary}${oldversion}"
|
|
fi
|
|
;;
|
|
esac
|
|
done<<EOF
|
|
+ AUTOMAKE automake -1.9
|
|
- ACLOCAL aclocal
|
|
+ AUTOMAKE automake -1.8
|
|
- ACLOCAL aclocal
|
|
+ AUTOCONF autoconf 2.59
|
|
- AUTOHEADER autoheader
|
|
- AUTORECONF autoreconf
|
|
+ AUTOCONF autoconf 2.50
|
|
- AUTOHEADER autoheader
|
|
- AUTORECONF autoreconf
|
|
EOF
|
|
|
|
|
|
########################################################################
|
|
# Check that tool versions satisfy our needs
|
|
|
|
if "$check_versions"; then
|
|
# check tool versions
|
|
errors=false
|
|
lf="
|
|
"
|
|
while read tool minversion; do
|
|
version="$("$tool" --version | sed 's/^.*(.*) *\(.*\)$/\1/g;1q')"
|
|
# compare version and minversion
|
|
first="$(echo "$version$lf$minversion" | sort -n | sed '1q')"
|
|
if test "x$minversion" != "x$first" && test "x$version" = "x$first"; then
|
|
echo "Version \`$version' of \`$tool' not sufficient. At least \`$minversion' required."
|
|
errors=:
|
|
fi
|
|
done <<EOF
|
|
${ACLOCAL-"aclocal"} 1.8
|
|
${AUTOMAKE-"automake"} 1.8
|
|
${AUTOCONF-"autoconf"} 2.59
|
|
${AUTOHEADER-"autoheader"} 2.59
|
|
${AUTOPOINT-"autopoint"} 0.14.1
|
|
${LIBTOOLIZE-"libtoolize"} 1.4
|
|
EOF
|
|
if "$errors"; then
|
|
echo "Please update your toolset."
|
|
echo "If you want to continue regardless of your old toolset, press ENTER."
|
|
read
|
|
fi
|
|
fi
|
|
|
|
|
|
########################################################################
|
|
# Actually run the commands
|
|
|
|
for dir in ${dirs}; do
|
|
"$debug" && echo "Running commands on directory \`${dir}'"
|
|
if test ! -d "$dir"; then
|
|
echo "Could not find directory \`${dir}'"
|
|
else
|
|
init_vars "$dir"
|
|
for command in ${commands}; do
|
|
"command_$command" "$dir"
|
|
done
|
|
fi
|
|
done
|
|
|
|
exit 0
|
|
|
|
# Please do not remove this:
|
|
# filetype: 89b1e88e-4cf2-44f1-980d-730067367775
|
|
# I use this to find all the different instances of this file which
|
|
# are supposed to be synchronized.
|