#! /bin/bash
## @file
##
## $Id$
##
## $Date: 2004/08/31 15:57:19 $
## $Author: marc $
##
## @copy © Marc Wäckerlin
## @license LGPL, see file <a href="license.html">COPYING</a>
##
## $Log: bootstrap.sh,v $
## Revision 1.3 2004/08/31 15:57:19 marc
## added file header
##
configure = 0
while test $# -gt 0; do
case " $1 " in
( --configure| -c) configure = 1; ;
( *) break; ;
esac
shift;
done
MY_NAME = ${ 0 ##*/ }
PROJECT_PATH = $( pwd )
DEFAULT_PROJECT_NAME = ${ PROJECT_PATH ##*/ }
HEADER = ' ## @id $Id$
#
# This file has been added by '${MY_NAME}' on '$(date -R)'
# Feel free to change it or even remove and rebuild it, up to your needs
#
## 1 2 3 4 5 6 7 8
## 45678901234567890123456789012345678901234567890123456789012345678901234567890
'
run( ) {
check = 1
while test $# -gt 0; do
case " $1 " in
( --no-check) check = 0; ;
( *) break; ;
esac
shift;
done
echo -en " \e[1m-> running:\e[0m $* ... "
result = $( $* 2>& 1)
res = $?
if test $res -ne 0; then
if test $check -eq 1; then
echo -e " \e[31merror\e[0m"
echo -e " \e[1m*** Failed with return code: $res \e[0m "
if test -n " $result " ; then
echo " $result "
fi
exit 1
else
echo -e " \e[33mignored\e[0m"
fi
else
echo -e " \e[32msuccess\e[0m"
fi
}
testtag( ) {
egrep -q '^ *' " $1 " configure.ac
}
checkdir( ) {
if ! test -d " $1 " ; then # create path
run mkdir -p " $1 "
run svn add " $1 "
fi
}
to( ) {
while test $# -gt 0; do
case " $1 " in
( --condition) shift # test for a tag, abort if not set
if ! testtag " $1 " configure.ac; then
return
fi ; ;
( *) break; ;
esac
shift;
done
if test -f " $1 " ; then # file already exists
return
fi
checkdir " $( dirname ${ 1 } ) "
echo -en " \e[1m-> generating:\e[0m $1 ... "
result = $( cat > " $1 " 2>& 1)
res = $?
if test $res -ne 0; then
echo -e " \e[31merror\e[0m"
echo -e " \e[1m*** Failed with return code: $res \e[0m "
if test -n " $result " ; then
echo " $result "
fi
exit 1
else
echo -e " \e[32msuccess\e[0m"
fi
run svn add " $1 "
run svn propset svn:keywords "Id" " $1 "
}
copy( ) {
if ! test -f " $1 " ; then
run cp " ${ 0 %/* } / $1 " " $1 "
run svn add " $1 "
run svn propset svn:keywords "Id" " $1 "
fi
}
doxyreplace( ) {
echo -en " \e[1m-> doxyfile:\e[0m configure $1 ... "
if sed -i 's|\(^' " $1 " ' *=\) *|\1' " $2 " '|g' doc/doxyfile.in; then
echo -e " \e[32msuccess\e[0m"
else
echo -e " \e[31merror\e[0m"
echo -e "\e[1m**** command: sed -i 's|\(^'" $1 "' *=\) *|\1'" $2 "'|g' doc/doxyfile.in;\e[0m"
exit 1
fi
}
# Initialize the environment:
copy ${ MY_NAME }
copy ax_init_standard_project.m4
copy ax_cxx_compile_stdcxx_11.m4
copy ax_check_qt.m4
copy AUTHORS
if ! test -f configure.ac; then
to configure.ac <<EOF
${ HEADER } m4_define( x_package_name, ${ DEFAULT_PROJECT_NAME } ) # project's name
m4_define( x_major, 0) # project's major version
m4_define( x_minor, 0) # project's minor version
m4_include( ax_init_standard_project.m4)
AC_INIT( x_package_name, x_major.x_minor.x_least, x_bugreport, x_package_name)
AM_INIT_AUTOMAKE( [ 1.9 tar-pax] )
AX_INIT_STANDARD_PROJECT
# requirements, uncomment, what you need:
#AX_USE_CXX
#AX_USE_LIBTOOL
#AX_USE_DOXYGEN
#AX_USE_DEBIAN_PACKAGING
#AX_USE_RPM_PACKAGING
#AX_USE_CPPUNIT
#AX_BUILD_EXAMPLES
# create output
AC_OUTPUT
EOF
echo " please edit configure.ac, then rerun $0 "
exit 0
fi
PACKAGE_NAME = $( sed -n 's/.*m4_define *( *x_package_name *, *\([^ ]*\) *).*/\1/p' configure.ac)
echo " ${ HEADER } " | to --condition AX_USE_CXX src/makefile.am
echo " ${ HEADER } " | to --condition AX_USE_DOXYGEN doc/makefile.am
to --condition AX_USE_CPPUNIT test/makefile.am <<EOF
${ HEADER } AM_CPPFLAGS = -I${ top_srcdir } /src -I${ top_builddir } /src
AM_LDFLAGS = -L${ top_builddir } /src/.libs
LDADD = -l${ PACKAGE_NAME }
EOF
to --condition AX_BUILD_EXAMPLES examples/makefile.am <<EOF
${ HEADER } AM_CPPFLAGS = -I${ top_srcdir } /src -I${ top_builddir } /src
AM_LDFLAGS = -L${ top_builddir } /src/.libs
LDADD = -l${ PACKAGE_NAME }
EOF
if testtag AX_USE_DOXYGEN && ! test -f doc/doxyfile.in; then
run doxygen -g doc/doxyfile.in
run svn add doc/doxyfile.in
run svn propset svn:keywords "Id" doc/doxyfile.in
doxyreplace PROJECT_NAME "@PACKAGE_NAME@"
doxyreplace PROJECT_NUMBER "@PACKAGE_VERSION@"
doxyreplace PROJECT_BRIEF "@DESCRIPTION@"
doxyreplace PROJECT_LOGO "@PROJECT_LOGO@"
doxyreplace INLINE_INHERITED_MEMB YES
doxyreplace MULTILINE_CPP_IS_BRIEF YES
doxyreplace TAB_SIZE 2
doxyreplace ALIASES '"id=\par File-ID\n" "copy=\par Copyright\n" "license=\par License\n" "classmutex=\par Reentrant:\nAccess is locked with class static mutex @c " "instancemutex=\par Reentrant:\nAccess is locked with per instance mutex @c " "mutex=\par Reentrant:\nAccess is locked with mutex @c "'
doxyreplace BUILTIN_STL_SUPPORT YES
doxyreplace DISTRIBUTE_GROUP_DOC YES
doxyreplace EXTRACT_ALL YES
doxyreplace EXTRACT_PRIVATE YES
doxyreplace EXTRACT_STATIC YES
doxyreplace EXTRACT_LOCAL_CLASSES YES
doxyreplace EXTRACT_LOCAL_METHODS YES
doxyreplace EXTRACT_ANON_NSPACES YES
doxyreplace SORT_MEMBERS_CTORS_1ST YES
doxyreplace WARN_IF_UNDOCUMENTED NO
doxyreplace WARN_LOGFILE doxygen.errors
doxyreplace INPUT "@top_srcdir@/src"
doxyreplace RECURSIVE YES
doxyreplace EXCLUDE_PATTERNS "moc_* uic_* qrc_*"
if testtag AX_BUILD_EXAMPLES; then
doxyreplace EXAMPLE_PATH @top_srcdir@/examples
fi
doxyreplace EXAMPLE_RECURSIVE YES
doxyreplace SOURCE_BROWSER YES
doxyreplace INLINE_SOURCES YES
doxyreplace GENERATE_TREEVIEW NO
doxyreplace SEARCHENGINE YES
doxyreplace GENERATE_HTML YES
doxyreplace GENERATE_LATEX NO
doxyreplace LATEX_BATCHMODE YES
doxyreplace LATEX_HIDE_INDICES YES
doxyreplace COMPACT_RTF YES
doxyreplace RTF_HYPERLINKS YES
doxyreplace GENERATE_TAGFILE "@PACKAGE_NAME@.doxytag"
doxyreplace HIDE_UNDOC_RELATIONS NO
doxyreplace HAVE_DOT YES
doxyreplace CLASS_GRAPH YES
doxyreplace TEMPLATE_RELATIONS YES
doxyreplace DOT_IMAGE_FORMAT svg
doxyreplace INTERACTIVE_SVG YES
doxyreplace DOT_TRANSPARENT YES
fi
if testtag AX_USE_DEBIAN_PACKAGING; then
checkdir debian
to debian/changelog.in <<EOF
@PACKAGE@ ( @PACKAGE_VERSION@~@DISTRO@.@BUILD_NUMBER@) @DISTRO@; urgency = low
* Please see ChangeLog of @PACKAGE@
-- @AUTHOR@ @BUILD_DATE@
EOF
to debian/control.in <<EOF
Source: @PACKAGE_NAME@
Priority: extra
Maintainer: @AUTHOR@
Build-Depends: debhelper, pkg-config, autotools-dev, lsb-release $( if testtag AX_USE_DOXYGEN; then echo -n ", doxygen, graphviz" ; fi ; if testtag AX_USE_CPPUNIT; then echo -n ", libcppunit-dev" ; fi ; if testtag AX_CXX_QT || testtag AX_CXX_CHECK_QT; then echo -n ", qtbase5-dev | libqt4-dev, qtbase5-dev-tools | qt4-dev-tools" ; fi )
Package: @PACKAGE_NAME@
$( if testtag AX_USE_LIBTOOL; then echo "Section: libs" ; fi )
Architecture: any
Depends: \$ { shlibs:Depends} , \$ { misc:Depends}
Description: @DESCRIPTION@
@README_DEB@
$( if testtag AX_USE_LIBTOOL; then
cat <<EOF2
Package: @PACKAGE_NAME@-dev
Section: libdevel
Architecture: any
Depends: @PACKAGE_NAME@ ( = \$ { binary:Version} )
Description: @DESCRIPTION@ - Development Package
@README_DEB@
EOF2
fi )
EOF
to debian/docs <<EOF
NEWS
README
EOF
to debian/${ PACKAGE_NAME } .install <<EOF
usr/bin/*
usr/lib/lib*.so.*
$( if ! testtag AX_USE_LIBTOOL; then echo " usr/share/doc/ ${ PACKAGE_NAME } /html " ; fi )
EOF
to debian/${ PACKAGE_NAME } .dirs <<EOF
usr/lib
EOF
if testtag AX_USE_LIBTOOL; then
to debian/${ PACKAGE_NAME } -dev.install <<EOF
usr/include/*
usr/lib/lib*.a
usr/lib/lib*.so
usr/lib/pkgconfig/*
usr/lib/*.la
$( if testtag AX_USE_LIBTOOL; then echo " usr/share/doc/ ${ PACKAGE_NAME } /html " ; fi )
EOF
to debian/${ PACKAGE_NAME } -dev.dirs <<EOF
usr/lib
usr/include
EOF
fi
to debian/rules <<EOF
${ HEADER } %:
dh \$ @
EOF
echo 7 | to debian/compat
fi
if ! test -f makefile.am; then
SUBDIRS = ""
for d in src test doc examples; do
test -d $d && SUBDIRS = " ${ SUBDIRS } $d "
done
echo " ${ HEADER } SUBDIRS = ${ SUBDIRS } " | to makefile.am
fi
to --condition AX_USE_LIBTOOL src/${ PACKAGE_NAME } .pc.in <<EOF
${ HEADER } prefix = @prefix@
exec_prefix = @exec_prefix@
libdir = \$ { exec_prefix} /lib
includedir = \$ { prefix} /include
Name: @PACKAGE_NAME@
Description: @DESCRIPTION@
Version: @VERSION@
Libs: -L\$ { libdir} -l@PACKAGE_NAME@ @LDFLAGS@
Cflags: -I\$ { includedir} @CPPFLAGS@
EOF
#### Cleanup If Makefile Exists ####
if test -f makefile; then
run --no-check make distclean
fi
#### Bootstrap Before Configure ####
run aclocal
run libtoolize --force
run automake -a
run autoconf
#### Run Configure If User Requires ####
if test " $configure " -eq 1; then
./configure $*
fi