#!/bin/bash #---------------------------------------------------------------------- # Build an RPM containing both wxGTK and wxPython ##set -o xtrace spectemplate=distrib/wxPythonFull.spec.in if [ ! -d wxPython -o ! -e ${spectemplate} ]; then echo "Please run this script from the root wxPython directory." exit 1 fi #---------------------------------------------------------------------- # Initialization version=`python -c "import setup;print setup.VERSION"` wxpdir=`pwd` wxdir=${wxpdir}/.. distdir=${wxpdir}/dist builddir=${wxpdir}/_build_rpm rpmtop=${builddir}/rpmtop cvsroot=:pserver:anoncvs@cvs.wxwindows.org:/pack/cvsroots/wxwindows pythonbin=/usr/bin/python port=GTK lcport=gtk unicode=0 tarname=wxPythonSrc rpmflag=-ba #---------------------------------------------------------------------- # Check parameters function usage { echo "Usage: $0 py_version [command flags...]" echo " py_version String to append to $pythonbin (which python" echo " version to use.)" echo "" echo "command flags:" echo " skipcopy Don't copy the files for the tarball from the workspace" echo " skiptar Don't build the tarball" echo " skiprpm Don't build the RPM (but why?)" echo " skipclean Don't do the cleanup at the end" echo " gtk2 Build using wxGTK2 and Unicode" echo " x11 Build using wxX11" echo " speconly Do nothing but write the RPM spec file" echo " srpm Only make the SRPM" # echo " smp Add SMP=2 to the envivonment to speed wxGTK build" } if [ $# -lt 1 ]; then usage exit 1 fi pyver=$1 shift ver2=`echo ${version} | cut -c 1,2,3` tarver=${tarname}-${version} python=${pythonbin}${pyver} if [ ! -e ${python} ]; then echo "${python} not found!" exit 1 fi function makespec { echo "*** Writing ${distdir}/wxPython${port}.spec" cat ${spectemplate} \ | sed s:@PYTHON@:${python}:g \ | sed s:@PYVER@:${pyver}:g \ | sed s:@PORT@:${port}:g \ | sed s:@LCPORT@:${lcport}:g \ | sed s:@TARNAME@:${tarname}:g \ | sed s:@VERSION@:${version}:g \ | sed s:@VER2@:${ver2}:g \ | sed s:@UNICODE@:${unicode}:g \ > ${distdir}/wxPython${port}.spec } for flag in $*; do case ${flag} in skipcopy) skipcopy=1 ;; skipclean) skipclean=1 ;; skiptar) skiptar=1 ;; skiprpm) skiprpm=1 ;; gtk2) unicode=1; port=GTK2; lcport=gtk2 ;; x11) port=X11; lcport=x11 ;; smp) export SMP=2 ;; speconly) makespec; exit 0 ;; srpm) rpmflag=-bs; ;; *) echo "Unknown flag \"${flag}\"" usage exit 1 esac done #---------------------------------------------------------------------- # Setup build dirs echo "*** Setting up" if [ ! -d ${builddir} ]; then mkdir -p ${builddir} fi if [ ! -d ${distdir} ]; then mkdir -p ${distdir} fi for dir in SOURCES SPECS BUILD RPMS SRPMS; do if [ ! -d ${rpmtop}/${dir} ]; then mkdir -p ${rpmtop}/${dir} fi done #---------------------------------------------------------------------- # Copy the sources from my CVS workspace function cleanup { RMFILES=`find . -name "$1"` if [ "$RMFILES" != "" ]; then rm -rf $RMFILES fi } if [ -z "${skipcopy}" ]; then echo "*** Copying CVS tree" pushd ${builddir} > /dev/null if [ -e ${tarver} ]; then rm -rf ${tarver} fi mkdir -p ${tarver} # copy root dir contents cp -pf --link ${wxdir}/* ${tarver} > /dev/null 2>&1 # copy all top dirs except CVS, build, demos, utils, samples, and wxPython for d in art build contrib debian distrib docs include lib locale misc patches src; do if [ -e ${wxdir}/$d ]; then cp -Rpf --link ${wxdir}/$d ${tarver} #> /dev/null 2>&1 fi done # now do the same thing for wxPython, skipping it's build dirs and such for dir in `grep -v '#' ${wxdir}/wxPython/distrib/DIRLIST`; do mkdir ${tarver}/${dir} ##echo "cp -pf --link ${wxdir}/${dir}/* ${tarver}/${dir}" cp -pf --link ${wxdir}/${dir}/* ${tarver}/${dir} > /dev/null 2>&1 done # using DIRLIST as above will normally skip any files starting # with a dot, but there are a few .files that we do want to # copy... for dir in wxPython/distrib/msw; do cp -pf --link ${wxdir}/${dir}/.[a-zA-Z]* ${tarver}/${dir} > /dev/null 2>&1 done echo "*** Removing uneeded stuff from copy of CVS tree" pushd ${tarver} > /dev/null cleanup .cvsignore cleanup CVS cleanup CVSROOT rm BuildCVS.txt rm *.spec rm -rf docs/html rm -rf docs/latex rm -rf contrib/docs rm -rf contrib/samples rm locale/*.mo cleanup ".#*" cleanup "*~" cleanup "*.orig" cleanup "*.rej" cleanup "*.pyc" cleanup core cleanup "core.[0-9]*" rm -f wxPython/wx/* > /dev/null 2>&1 popd > /dev/null popd > /dev/null fi #---------------------------------------------------------------------- # Make the spec file and copy to ${builddir}/${tarver} so it will be # in the tar file when it's built # TODO? Output all combinations of spec files to put in the tar file?? makespec cp ${distdir}/wxPython${port}.spec ${builddir}/${tarver}/wxPython${port}.spec #---------------------------------------------------------------------- # Build the tar file if [ -z "${skiptar}" ]; then echo "*** Creating language catalogs..." pushd ${builddir}/${tarver}/locale > /dev/null make allmo popd > /dev/null echo "*** Creating tarball..." cp distrib/README.1st.txt ${builddir}/${tarver} pushd ${builddir} > /dev/null tar cvf ${distdir}/${tarver}.tar ${tarver} > /dev/null echo "*** Compressing..." if [ -e ${distdir}/${tarver}.tar.gz ]; then rm ${distdir}/${tarver}.tar.gz fi gzip --best ${distdir}/${tarver}.tar popd > /dev/null fi #---------------------------------------------------------------------- # build the RPM if [ -z "${skiprpm}" ]; then echo "*** Building RPMs..." cp ${distdir}/${tarver}.tar.gz ${rpmtop}/SOURCES rpmbuild ${rpmflag} \ --define "_topdir ${rpmtop}" \ --define "_tmppath ${builddir}" \ ${distdir}/wxPython${port}.spec if [ "$?" != "0" ]; then echo "*** RPM failure, exiting." exit 1 else echo "*** Moving RPMs to ${distdir}" mv -f `find ${rpmtop} -name "wxPython*.rpm"` ${distdir} fi fi #---------------------------------------------------------------------- # Cleanup if [ -z ${skipclean} ]; then echo "*** Cleaning up" rm -rf ${rpmtop} rm -rf ${builddir} fi