#!/bin/ksh # $Id: Build.sh,v 1.2 2004/12/17 22:20:09 elkner Exp $ # source: http://subversion.tigris.org/ # license: (C) CollabNet - Apache VERSION=1.1.1 APACIVERSION=2.0.52 SDIR=`dirname $0` if [ "$SDIR" == "." ]; then SDIR=`pwd` fi SCRIPTDIR=${SDIR}/../../../etc . ${SCRIPTDIR}/buildfunctions.sh SRC=$SOURCE/develop TMPBUILD=$BUILD/subversion-$VERSION # braindead stuff still uses the m*f*king *-config script instead of pkgconfig export PKG_CONFIG_PATH="${ROOT4BUILD}/usr/lib/pkgconfig" \ PATH=${ROOT4BUILD}/usr/bin:$PATH \ CFLAGS="-O3 -march=$PKG_ARCH -mtune=$PKG_CPU -I${ROOT4BUILD}/usr/include" \ LDFLAGS="-L${ROOT4BUILD}/usr/lib" \ LD_RUN_PATH='$ORIGIN:$ORIGIN/../lib' \ LD_LIBRARY_PATH=${ROOT4BUILD}/usr/lib:${PROTO}/usr/lib doPrepare() { REQUIRED="LNFzlib LNFopenssl LNFneon LNFapache-httpd2 LNFapr LNFdb4 LNFgdbm LNFexpat" for pkg in $REQUIRED ; do if [ ! -d ${PKGDIR}/$pkg ]; then echo "Sorry, $pkg is required - build it before running $0" exit 1 fi done _TMP=`egrep '^VERSION' ${PKGDIR}/LNFapache-httpd2/pkginfo | \ cut -f2 -d= | sed -e 's# ##g'` if [ "$_TMP" != "$APACIVERSION" ]; then echo "Apache Version $APACIVERSION is required, but" echo "found $_TMP only. Rebuild it." exit 2 fi clean_dst ${ROOT4BUILD} # imitate a running apache mkdir -p ${ROOT4BUILD}/opt/www/{bin,modules,conf} cp -a ${PKGDIR}/LNFapache-httpd2/reloc/www/include ${ROOT4BUILD}/opt/www/ cp -a ${PKGDIR}/LNFapache-httpd2/reloc/www/build ${ROOT4BUILD}/opt/www/ FILES="bin/apxs build/config_vars.mk" for f in $FILES; do sed -e "s#@CLIENT_BASEDIR@#${ROOT4BUILD}/opt#g" -e 's#--silent##' \ ${PKGDIR}/LNFapache-httpd2/reloc/www/$f \ >${ROOT4BUILD}/opt/www/$f done cp ${PKGDIR}/LNFapache-httpd2/reloc/www/bin/httpd ${ROOT4BUILD}/opt/www/bin/ touch ${ROOT4BUILD}/opt/www/bin/envvars chmod 755 ${ROOT4BUILD}/opt/www/{bin,build}/* echo " " >${ROOT4BUILD}/opt/www/conf/httpd.conf echo "LoadModule access_module modules/mod_access.so" \ >>${ROOT4BUILD}/opt/www/conf/httpd.conf echo " " >>${ROOT4BUILD}/opt/www/conf/httpd.conf # prepare other required libs mkdir -p ${ROOT4BUILD}/usr/{bin,lib,lib/pkgconfig,include} for p in $REQUIRED ; do if [ "$p" = "LNFapache-httpd2" ]; then continue fi case "$p" in LNFopenssl) base="/openssl" cp ${PKGDIR}/LNFopenssl/reloc$base/bin/openssl \ ${ROOT4BUILD}/usr/bin/ ;; *) base="" ;; esac cp -a ${PKGDIR}/$p/reloc$base/include/* \ ${ROOT4BUILD}/usr/include/ cp -a ${PKGDIR}/$p/reloc$base/lib/*.so* \ ${ROOT4BUILD}/usr/lib/ if [ -d ${PKGDIR}/$p/reloc$base/lib/pkgconfig ]; then cp ${PKGDIR}/$p/reloc$base/lib/pkgconfig/*.pc \ ${ROOT4BUILD}/usr/lib/pkgconfig/ 2>/dev/null fi if [ -d ${PKGDIR}/$p/reloc$base/bin ]; then cp ${PKGDIR}/$p/reloc$base/bin/*-config ${ROOT4BUILD}/usr/bin/ \ 2>/dev/null fi done for f in ${ROOT4BUILD}/usr/lib/pkgconfig/*.pc ; do sed -i -e "s#@CLIENT_BASEDIR@/openssl#${ROOT4BUILD}/usr#g" \ -e "s#@CLIENT_BASEDIR@#${ROOT4BUILD}/usr#g" $f done for f in ${ROOT4BUILD}/usr/bin/*-config ; do sed -i -e "s#@CLIENT_BASEDIR@/openssl#${ROOT4BUILD}/usr#g" \ -e "s#@CLIENT_BASEDIR@#${ROOT4BUILD}/usr#g" $f done chmod 755 ${ROOT4BUILD}/usr/bin/* ${SCRIPTDIR}/makelinks ${ROOT4BUILD}/usr/lib clean_dst $TMPBUILD cd $BUILD tar xzf ${SRC}/subversion-${VERSION}.tar.gz cd $TMPBUILD # hard linked rpathes will break binaries in an enterprise environment # or at least increase the maintainance burden tremendously ... for p in ${SDIR}/*.patch ; do patch -p1 -b -z .orig <$p done rm -rf neon apr apr-util cd doc/book/tools ln -s ${DOCBOOK_XSL_HOME} xsl cd ${TMPBUILD} cp -a ${SDIR}/*.png doc/book/book/images/ autogen.sh -s --disable-neon-version-check } doMake() { cd $TMPBUILD ./configure --prefix=/usr \ --disable-static \ --with-apr=${ROOT4BUILD}/usr \ --with-apr-util=${ROOT4BUILD}/usr \ --with-neon=${ROOT4BUILD}/usr \ --with-berkeley-db=${ROOT4BUILD}/usr \ --with-openssl=${ROOT4BUILD}/usr \ --with-zlib=${ROOT4BUILD}/usr \ --with-apxs=${ROOT4BUILD}/opt/www/bin/apxs \ --disable-mod-activation \ --without-swig echo "make log goes to $MAKELOG" make >$MAKELOG echo "making docs. log goes to $MAKELOG" make doc-all-html >>$MAKELOG cd doc/book make book-html-chunk >>$MAKELOG } doPackage() { clean_dst $PROTO cd $TMPBUILD make DESTDIR=${PROTO} install rm -f ${PROTO}/usr/lib/*.{a,la} strip ${PROTO}/usr/bin/* strip --strip-unneeded ${PROTO}/usr/lib/*.so.* strip --strip-unneeded ${PROTO}/${ROOT4BUILD}/opt/www/modules/*.so ${SCRIPTDIR}/gzipmans ${PROTO}/usr/man TOOLSDIR=${TMPBUILD}/tools sed -e '/^svnlook/ s#/usr/bin#@CLIENT_BASEDIR@#' \ -e '/^svnadmin/ s#/usr/bin#@CLIENT_BASEDIR@#' \ ${TOOLSDIR}/backup/hot-backup.py >${PROTO}/usr/bin/svn_db_hot-backup.py chmod 755 ${PROTO}/usr/bin/svn_db_hot-backup.py cp -a ${TOOLSDIR}/client-side/server-vsn.py \ ${PROTO}/usr/bin/svn_server_version.py chmod 755 ${PROTO}/usr/bin/svn_server_version.py ${SCRIPTDIR}/createPostInstall.lib ldirs=lib default=true \ >>${TMPBUILD}/postinstall.lnf ${SCRIPTDIR}/createPostRemove.lib ldirs=lib default=true \ >${TMPBUILD}/postremove.lnf # the main package cat<${TMPBUILD}/prototype.lnf i pkginfo=${SDIR}/pkginfo i depend=${SDIR}/depend i postinstall=${TMPBUILD}/postinstall.lnf i postremove=${TMPBUILD}/postremove.lnf i i.rename=${SCRIPTDIR}/i.rename EOF pkgproto ${PROTO}/usr/= | awk '{ if ( $3 ~ "share/doc" ) { next } else if ( $1 == "s") { print } else if ( $1 == "d") { if ( $3 !~ "/" || $3 ~ "/(aclocal|man|locale|share|pkgconfig)" ) { print $1, $2, $3, "? ? ?" } else { print $1, $2, $3, $4, "bin bin" } } else { if ( $3 ~ ".py=" ) { print $1, "rename", $3, $4, "bin bin" } else { print $1, $2, $3, $4, "bin bin" } } }' >>${TMPBUILD}/prototype.lnf # the apache httpd2 modules package cat<${TMPBUILD}/prototype.httpd2.lnf i pkginfo=${SDIR}/pkginfo.httpd2 i checkinstall=${SDIR}/checkinstall i postinstall=${SDIR}/postinstall i postremove=${SDIR}/postremove i depend=${SDIR}/depend.httpd2 d none www ? ? ? d none www/conf ? ? ? d none www/modules ? ? ? f none www/conf/subversion.conf.default=${SDIR}/subversion.conf.httpd2 0644 bin bin f none www/conf/readme.subversion=${SDIR}/readme.subversion 0644 bin bin EOF for f in ${PROTO}/${ROOT4BUILD}/opt/www/modules/*.so ; do echo "f none www/modules/`basename $f`=$f 0755 bin bin" >>${TMPBUILD}/prototype.httpd2.lnf done # the docs package cat<${TMPBUILD}/prototype.doc.lnf i pkginfo=${SDIR}/pkginfo.doc d none subversion 0755 bin bin d none subversion/tools 0755 bin bin s none subversion/styles.css=svnbook/styles.css EOF sed -i \ -e '/>Subversion Book<\/a>/ s#>Subversion Book#>Subversion Book (local copy)#' \ -e 's#http://svnbook.red-bean.com/##g' \ -e 's#http://svnbook.red-bean.com/en/1.0#svnbook#g' \ doc/user/cvs-crossover-guide.html FILES="BUGS CHANGES COMMITTERS HACKING INSTALL README STATUS doc/svn-doc.el doc/programmer/WritingChangeLogs.txt doc/book/misc-docs/misc-docs.html" for f in $FILES; do echo "f none subversion/`basename $f`=${TMPBUILD}/$f 0644 bin bin" \ >>${TMPBUILD}/prototype.doc.lnf done pkgproto ${TMPBUILD}/notes=subversion/notes \ ${TMPBUILD}/doc/user/=subversion/ \ ${TMPBUILD}/doc/book/book/html-chunk=subversion/svnbook \ ${TMPBUILD}/tools/examples=subversion/tools/examples \ ${TMPBUILD}/tools/hook-scripts=subversion/tools/hook-scripts \ ${TMPBUILD}/tools/test-scripts=subversion/tools/test-scripts \ | awk '{ if ( $3 ~ "/CVS/" ) { next; } else if ( $1 == "s") { print } else { print $1, $2, $3, $4, "bin bin" } }' >>${TMPBUILD}/prototype.doc.lnf echo "calling ${TMPBUILD}/prototype.lnf" call_pkgmk ${TMPBUILD}/prototype.lnf echo "calling ${TMPBUILD}/prototype.httpd2.lnf" call_pkgmk ${TMPBUILD}/prototype.httpd2.lnf echo "calling ${TMPBUILD}/prototype.doc.lnf" call_pkgmk ${TMPBUILD}/prototype.doc.lnf } doBuild "$1" # vim:ts=4 filetype=sh