From 7093495299832111b5841485c94307ffedbaec90 Mon Sep 17 00:00:00 2001 From: Robin Dunn Date: Fri, 15 Oct 2004 01:02:22 +0000 Subject: [PATCH] Restructured for new style RPMs, etc. Can build all the RPMs from a single .spec file, by using --define parameters. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@29863 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- wxPython/distrib/makerpm | 83 ++++--- wxPython/distrib/wxPythonFull.spec.in | 341 ++++++++++++++++---------- 2 files changed, 272 insertions(+), 152 deletions(-) diff --git a/wxPython/distrib/makerpm b/wxPython/distrib/makerpm index 63e8979071..023dd33cee 100755 --- a/wxPython/distrib/makerpm +++ b/wxPython/distrib/makerpm @@ -26,27 +26,23 @@ pythonbin=/usr/bin/python port=GTK lcport=gtk unicode=0 -tarname=wxPythonSrc -rpmflag=-ba +tarname=wxPython-src +srpmonly=0 #---------------------------------------------------------------------- # 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 " 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 " 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 @@ -68,17 +64,14 @@ fi function makespec { - echo "*** Writing ${distdir}/wxPython${port}.spec" + echo "*** Writing ${distdir}/wxPython.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 + > ${distdir}/wxPython.spec } @@ -89,11 +82,8 @@ for flag in $*; do skipclean) skipclean=1 ;; skiptar) skiptar=1; skipcopy=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; ;; + srpm) srpmonly=1; ;; *) echo "Unknown flag \"${flag}\"" usage @@ -144,7 +134,7 @@ if [ -z "${skipcopy}" ]; then # 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 + # copy all top dirs except CVS, build, demos, samples, utils, 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 @@ -177,13 +167,16 @@ if [ -z "${skipcopy}" ]; then 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" @@ -191,6 +184,13 @@ if [ -z "${skipcopy}" ]; then cleanup core cleanup "core.[0-9]*" + # ports that are not supported yet + cleanup cocoa + cleanup mgl + cleanup motif + cleanup os2 + cleanup x11 + rm -f wxPython/wx/* > /dev/null 2>&1 popd > /dev/null @@ -205,7 +205,7 @@ fi # TODO? Output all combinations of spec files to put in the tar file?? makespec -cp ${distdir}/wxPython${port}.spec ${builddir}/${tarver}/wxPython${port}.spec +cp ${distdir}/wxPython.spec ${builddir}/${tarver}/wxPython.spec #---------------------------------------------------------------------- @@ -237,17 +237,44 @@ fi 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} + + if [ "${srpmonly}" = "1" ]; then + rpmbuild -bs \ + --define "_topdir ${rpmtop}" \ + --define "_tmppath ${builddir}" \ + --define "pyver ${pyver}" \ + ${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 #---------------------------------------------------------------------- diff --git a/wxPython/distrib/wxPythonFull.spec.in b/wxPython/distrib/wxPythonFull.spec.in index 2a56d542ef..e81db5091c 100644 --- a/wxPython/distrib/wxPythonFull.spec.in +++ b/wxPython/distrib/wxPythonFull.spec.in @@ -1,53 +1,97 @@ -%define pref %{_prefix} -%define python @PYTHON@ -%define pyver @PYVER@ -%define port @PORT@ -%define lcport @LCPORT@ -%define unicode @UNICODE@ -%define tarname @TARNAME@ -%define version @VERSION@ -%define ver2 @VER2@ -%define wxprefbase %{pref}/lib/wxPython -%define wxpref %{wxprefbase}-%{version} -%define name wxPython%{port}-py%{pyver} +#---------------------------------------------------------------------- +# Name: wxPython.spec +# Purpose: RPM Build and packaging instructions +# +# Author: Robin Dunn +# +# RCS-ID: $Id$ +# Copyright: (c) 2004 by Total Control Software +# Licence: wxWindows license +#---------------------------------------------------------------------- + + +# The following values can be set on the rpmbuild command line with +# --define 'name VALUE' If no value is set on the command line then +# the default value set here will be used instead. + + +# Used to set the Release tag below. I normally use it to define what +# distro the RPM was build on and also include the version of Python +# it was built with. +%if %{?release:0}%{!?release:1} +%define release 1_py%{pyver} +%endif -# Allow the release tag to be specified on the rpmbuild command -# line with --define 'release SOMETHING' If no such definition is -# used then the release number is 1. -%if %{?release:0}%{!?release:1} -%define release 1 +# Which wxWidgets port to build and use. Current acceptable valuse +# are 'gtk' and 'gtk2'. +%if %{?port:0}%{!?port:1} +%define port gtk2 %endif +# Build in unicode mode? Can only be used if port is gtk2, acceptable +# values are '0' and '1' +%if %{?unicode:0}%{!?unicode:1} +%define unicode 1 +%endif + +# Which version of Python to build with. Used to assemble python +# binary name so use '2.2', '2.3', etc. +%if %{?pyver:0}%{!?pyver:1} +%define pyver 2.3 +%endif + + + + # Should the builtin image and etc. libs be used, or system libs? # Distro specific RPMs should probably set this to 0, generic ones -# should use 1 -%define builtin_libs 1 +# should use 1. +# NOTE: I'm trying 0 for this next release to see if I can get rid of +# this... +%if %{?builtin_libs:0}%{!?builtin_libs:1} +%define builtin_libs 0 +%endif # Should --enable-debug_flag be used in release builds? Using it # defines __WXDEBUG__ and gives us runtime diagnostics that are turned -# into Python exceptions starting with 2.3.4. (So turning it on is a -# very helpful thing IMO and is recommended.) The code is still -# compiled with optimization flags and such when this option is used, -# it simply turns on some extra code. +# into Python exceptions. (So turning it on is a very helpful thing +# IMO and is recommended.) The code is still compiled with +# optimization flags and and without debug info and such when this +# option is used, it simply turns on some extra code. +%if %{?debug_flag:0}%{!?debug_flag:1} %define debug_flag 1 +%endif + + +#---------------------------------------------------------------------- +# Other variables used below + +%define pref %{_prefix} +%define python /usr/bin/python%{pyver} +%define tarname @TARNAME@ +%define version @VERSION@ +%define ver2 @VER2@ +%define chartype %(if [ "%{unicode}" = "1" ]; then echo unicode; else echo ansi; fi) +%define gtktype %(if [ "%{port}" = "gtk2" ]; then echo 2; fi) +%define using_gtk1 %(if [ "%{port}" = "gtk" ]; then echo 1; else echo 0; fi) -# build the name of the real wx-config from the port, flags, etc. -%define dbgflg %(if [ "%{debug_flag}" = "1" ]; then echo d; fi) -%define uniflg %(if [ "%{unicode}" = "1" ]; then echo u; fi) -%define DBGFLG %(if [ "%{debug_flag}" = "1" ]; then echo D; fi) -%define UNIFLG %(if [ "%{unicode}" = "1" ]; then echo U; fi) -%define wxconfigname %{wxpref}/bin/wx%{lcport}%{uniflg}%{dbgflg}-%{ver2}-config +%define wxprefbase %{pref}/lib/wxPython +%define wxpref %{wxprefbase}-%{version}-%{port}-%{chartype} +%define pkgname wxPython -# turn off the generation of debuginfo rpm (RH9) +# turn off the generation of debuginfo rpm (RH9) ?? %define debug_package %{nil} -#---------------------------------------------------------------- -Summary: Cross platform GUI toolkit for Python using wx%{port} -Name: %{name} + +#---------------------------------------------------------------------- +# Package definition +#---------------------------------------------------------------------- +Name: %{pkgname}%{ver2} +Summary: Cross platform GUI toolkit for Python Version: %{version} Release: %{release} Source0: %{tarname}-%{version}.tar.gz @@ -55,72 +99,105 @@ License: wx Library Licence, Version 3 URL: http://wxPython.org/ Packager: Robin Dunn Group: Development/Python -BuildRoot: %{_tmppath}/%{name}-buildroot +BuildRoot: %{_tmppath}/%{pkgname}-buildroot Prefix: %{pref} -Provides: wxPython = %{version} -Provides: wxPython%{port} = %{version} +%description +Cross platform GUI toolkit for Python -# Provides: libwx_%{lcport}%{uniflg}%{dbgflg}-%{ver2}.so -# Provides: libwx_%{lcport}%{uniflg}%{dbgflg}-%{ver2}.so(WX%{port}%{UNIFLG}%{DBGFLG}_%{ver2}) -# Provides: libwx_%{lcport}%{uniflg}%{dbgflg}_gl-%{ver2}.so -# Provides: libwx_%{lcport}%{uniflg}%{dbgflg}_gl-%{ver2}.so(WX%{port}%{UNIFLG}%{DBGFLG}_%{ver2}) -# old wxPython packages -Obsoletes: wxPython wxPython%{port} +%package -n %{pkgname}%{ver2}-%{port}-%{chartype} +Summary: Cross platform GUI toolkit for Python +Group: Development/Python +Requires: %{pkgname}-common +Obsoletes: wxPythonGTK%{gtktype}-py%{pyver} +Provides: wxPython -%description -wxPython is a GUI toolkit for Python that is a wrapper around the -wxWidgets C++ GUI library. wxPython provides a large variety of -window types and controls, all implemented with a native look and feel -(and native runtime speed) on the platforms it is supported on. -This package is implemented using the %{port} port of wxWidgets, and -includes the wx%{port} shared libs and etc. +%description -n %{pkgname}%{ver2}-%{port}-%{chartype} +wxPython is a GUI toolkit for the Python programming language. It + allows Python programmers to create programs with a robust, highly +functional graphical user interface, simply and easily. It is +implemented as a Python extension module (native code) that wraps the +popular wxWidgets cross platform GUI library, which is written in C++. +wxPython is a cross-platform toolkit. The same program will usually +run on multiple platforms without modification. Currently supported +platforms are 32-bit Microsoft Windows, most Unix or unix-like +systems, and Macintosh OS X. + +This package contains the wxPython runtime files built for the +wxWidgets %{port} port with %{chartype} character type. -%package -n wxPython%{port}-devel -Summary: wxPython%{port} development files -Group: Development/Libraries -Requires: wxPython%{port} = %{version} -%description -n wxPython%{port}-devel + + +%package -n %{pkgname}-common-%{port}-%{chartype} +Summary: Common files for needed by all wxPython runtimes +Group: Development/Python +Provides: %{pkgname}-common + +# They obsolete each other so any of them can be installed over another +# without conflicts +Obsoletes: %{pkgname}-common-gtk-ansi +Obsoletes: %{pkgname}-common-gtk2-ansi +Obsoletes: %{pkgname}-common-gtk2-unicode + +%description -n %{pkgname}-common-%{port}-%{chartype} +This package contains the common files needed by any version of the +wxPython runtime. This pacakge also installs a wx.pth file which will +determine which of the installed runtimes is the default version of +wxPython that is imported automatically with a bare "import wx". + + + + + +%package -n %{pkgname}%{ver2}-devel-%{port}-%{chartype} +Summary: wxPython development files +Group: Development/Libraries +Requires: %{pkgname}%{ver2}-%{port}-%{chartype} = %{version} + +%description -n %{pkgname}%{ver2}-devel-%{port}-%{chartype} This packages contains the headers and etc. for building apps or -Python extension modules that use the same wx%{port} shared libraries +Python extension modules that use the same wxWidgets shared libraries that wxPython uses. -#---------------------------------------------------------------- + + +#---------------------------------------------------------------------- %prep %setup -q -n %{tarname}-%{version} -#---------------------------------------------------------------- +#---------------------------------------------------------------------- %build WXDIR=`pwd` + +# Configure and build wxWidgets mkdir bld cd bld - -# Configure, trying to reduce external dependencies -../configure --with-%{lcport} \ +../configure --with-gtk \ --prefix=%{wxpref} \ - --disable-soname \ - --disable-monolithic \ + --enable-monolithic \ --enable-rpath=%{wxpref}/lib \ --with-opengl \ -%if %{unicode} - --enable-gtk2 \ - --enable-unicode \ -%else - --disable-gtk2 \ -%endif --enable-geometry \ --enable-optimise \ --enable-sound --with-sdl \ --enable-display \ +%if %{using_gtk1} + --disable-gtk2 \ +%else + --enable-gtk2 \ +%endif +%if %{unicode} + --enable-unicode \ +%endif %if %{debug_flag} --enable-debug_flag \ %endif @@ -132,56 +209,56 @@ cd bld %endif -# Build wxWidgets and some contrib libs make make -C contrib/src/gizmos make -C contrib/src/ogl CXXFLAGS="-DwxUSE_DEPRECATED=0" make -C contrib/src/stc -make -C contrib/src/xrc -# Now build wxPython + +# Build wxPython cd $WXDIR/wxPython %{python} setup.py \ - NO_SCRIPTS=1 \ - WXPORT=%{lcport} \ + WXPORT=%{port} \ UNICODE=%{unicode} \ + EP_ADD_OPTS=1 \ + NO_SCRIPTS=1 \ WX_CONFIG="$WXDIR/bld/wx-config --inplace" \ build -# Build wxrc (XRC resource tool) -cd $WXDIR/bld/contrib/utils/wxrc -make -strip wxrc - -#---------------------------------------------------------------- +#---------------------------------------------------------------------- %install WXDIR=`pwd` -cd bld -# Install wxWidgets and the contribs +# Install wxGTK and contribs +cd bld make prefix=$RPM_BUILD_ROOT%{wxpref} install make -C contrib/src/gizmos prefix=$RPM_BUILD_ROOT%{wxpref} install make -C contrib/src/ogl CXXFLAGS="-DwxUSE_DEPRECATED=0" prefix=$RPM_BUILD_ROOT%{wxpref} install make -C contrib/src/stc prefix=$RPM_BUILD_ROOT%{wxpref} install -make -C contrib/src/xrc prefix=$RPM_BUILD_ROOT%{wxpref} install -# install wxPython + +# Install wxPython for wxGTK cd $WXDIR/wxPython %{python} setup.py \ - NO_SCRIPTS=1 \ - WXPORT=%{lcport} \ + WXPORT=%{port} \ UNICODE=%{unicode} \ + EP_ADD_OPTS=1 \ + NO_SCRIPTS=1 \ WX_CONFIG="$RPM_BUILD_ROOT%{wxpref}/bin/wx-config --prefix=$RPM_BUILD_ROOT%{wxpref}" \ install \ --root=$RPM_BUILD_ROOT -cd $WXDIR/wxPython +# remove the wx-config symlink, we'll redo it when installing the -devel package +rm $RPM_BUILD_ROOT%{wxpref}/bin/wx-config + +# make sure that debug info is stripped +strip $RPM_BUILD_ROOT%{pref}/lib*/python%{pyver}/site-packages/wx-%{ver2}*-%{port}-%{chartype}/wx/*.so # Since I want this RPM to be as generic as possible I won't let @@ -189,10 +266,8 @@ cd $WXDIR/wxPython # the #! line to use the real python pathname. Since some distros # install python 2.2 as python2 and others as python I can't let # distutils do that otherwise the dependencies will be fouled up. -# Copy them manually instead, leaving the #!/bin/env line intact. -# TODO: Should this be dependent on %{builtin_libs} or something like -# it? - +# Copy them manually instead, leaving the #!/usr/bin/env line intact. +cd $WXDIR/wxPython mkdir -p $RPM_BUILD_ROOT%{pref}/bin for s in \ helpviewer \ @@ -204,16 +279,14 @@ for s in \ pycrust \ pywrap \ pyshell \ + pywxrc \ xrced; do cp scripts/$s $RPM_BUILD_ROOT%{pref}/bin done -# Install wxrc -cp $WXDIR/bld/contrib/utils/wxrc/wxrc $RPM_BUILD_ROOT%{pref}/bin - -# install KDE & GNOME menus +# install KDE & GNOME menu items mkdir -p $RPM_BUILD_ROOT%{_datadir}/applnk/Development mkdir -p $RPM_BUILD_ROOT%{_datadir}/applications for d in distrib/*.desktop; do @@ -231,31 +304,31 @@ install -m 644 wx/tools/XRCed/XRCed_16.png $RPM_BUILD_ROOT%{_datadir}/icons/hico install -m 644 wx/tools/XRCed/XRCed_32.png $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/32x32/apps/XRCed.png install -m 644 wx/tools/XRCed/XRCed_32.png $RPM_BUILD_ROOT%{_datadir}/pixmaps/XRCed.png -# install Mandrake menu +# install Mandrake menu items mkdir -p $RPM_BUILD_ROOT%{_libdir}/menu -cat > $RPM_BUILD_ROOT%{_libdir}/menu/%{name} < $RPM_BUILD_ROOT%{_libdir}/menu/%{pkgname} < $RPM_BUILD_ROOT%{_libdir}/menu/%{name} <