#!/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=wxPython-src srpmonly=0 #---------------------------------------------------------------------- # Check parameters function usage { echo "Usage: $0 py_version [command flags...]" echo " py_version which python 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" echo " skipclean Don't do the cleanup at the end" echo " speconly Do nothing but write the RPM spec file" echo " srpm Only make the SRPM" } 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.spec" cat ${spectemplate} \ | sed s:@PYTHON@:${python}:g \ | sed s:@PYVER@:${pyver}:g \ | sed s:@TARNAME@:${tarname}:g \ | sed s:@VERSION@:${version}:g \ | sed s:@VER2@:${ver2}:g \ > ${distdir}/wxPython.spec } for flag in $*; do case ${flag} in skipcopy) skipcopy=1 ;; skipclean) skipclean=1 ;; skiptar) skiptar=1; skipcopy=1 ;; skiprpm) skiprpm=1 ;; speconly) makespec; exit 0 ;; srpm) srpmonly=1; ;; *) 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, demos, samples, and wxPython for d in art build contrib debian docs include lib locale patches samples src utils; 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, but use the DIRLIST to select dirs to copy 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 -f ChangeLog rm *.spec rm -rf distrib/msw/tmake rm -rf docs/html #rm -rf docs/latex #rm -rf contrib/docs #rm -rf contrib/samples rm locale/*.mo cleanup ".#*" cleanup "#*#" cleanup "*~" cleanup "*.orig" cleanup "*.rej" cleanup "*.pyc" cleanup core cleanup "core.[0-9]*" # ports that are not supported yet cleanup cocoa cleanup mgl cleanup motif cleanup os2 cleanup x11 cleanup univ cleanup wine 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.spec ${builddir}/${tarver}/wxPython.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.bz2 ]; then rm ${distdir}/${tarver}.tar.bz2 fi bzip2 --best ${distdir}/${tarver}.tar popd > /dev/null fi #---------------------------------------------------------------------- # build the RPM if [ -z "${skiprpm}" ]; then echo "*** Building RPMs..." cp ${distdir}/${tarver}.tar.bz2 ${rpmtop}/SOURCES if [ "${srpmonly}" = "1" ]; then rpmbuild -bs \ --define "_topdir ${rpmtop}" \ --define "_tmppath ${builddir}" \ --define "release 1" \ ${distdir}/wxPython.spec if [ "$?" != "0" ]; then echo "*** RPM failure, exiting." exit 1 fi else rpmbuild -ba \ --define "_topdir ${rpmtop}" \ --define "_tmppath ${builddir}" \ --define "port gtk" --define "unicode 0" \ --define "pyver ${pyver}" \ ${distdir}/wxPython.spec if [ "$?" != "0" ]; then echo "*** RPM failure, exiting." exit 1 fi rpmbuild -ba \ --define "_topdir ${rpmtop}" \ --define "_tmppath ${builddir}" \ --define "port gtk2" --define "unicode 1" \ --define "pyver ${pyver}" \ ${distdir}/wxPython.spec if [ "$?" != "0" ]; then echo "*** RPM failure, exiting." exit 1 fi fi echo "*** Moving RPMs to ${distdir}" mv -f `find ${rpmtop} -name "wxPython*.rpm"` ${distdir} fi #---------------------------------------------------------------------- # Cleanup if [ -z ${skipclean} ]; then echo "*** Cleaning up" rm -rf ${rpmtop} rm -rf ${builddir} fi