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
This commit is contained in:
Robin Dunn
2004-10-15 01:02:22 +00:00
parent 6736ec0807
commit 7093495299
2 changed files with 274 additions and 154 deletions

View File

@@ -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
#----------------------------------------------------------------------

View File

@@ -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
#----------------------------------------------------------------------
# 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.
# 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
%define release 1_py%{pyver}
%endif
# 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
# 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
#----------------------------------------------------------------------
# Other variables used below
# turn off the generation of debuginfo rpm (RH9)
%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)
%define wxprefbase %{pref}/lib/wxPython
%define wxpref %{wxprefbase}-%{version}-%{port}-%{chartype}
%define pkgname wxPython
# 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 <robin@alldunn.com>
Group: Development/Python
BuildRoot: %{_tmppath}/%{name}-buildroot
BuildRoot: %{_tmppath}/%{pkgname}-buildroot
Prefix: %{pref}
Provides: wxPython = %{version}
Provides: wxPython%{port} = %{version}
# 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})
%description
Cross platform GUI toolkit for Python
# old wxPython packages
Obsoletes: wxPython wxPython%{port}
%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.
%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
%package -n wxPython%{port}-devel
Summary: wxPython%{port} development files
%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 %{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: wxPython%{port} = %{version}
Requires: %{pkgname}%{ver2}-%{port}-%{chartype} = %{version}
%description -n wxPython%{port}-devel
%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} <<EOF
?package(%{name}): \\
cat > $RPM_BUILD_ROOT%{_libdir}/menu/%{pkgname} <<EOF
?package(%{pkgname}): \\
command="%{_bindir}/pyshell" \\
needs="X11" \\
icon="PyCrust.png" \\
section="Applications/Development/Tools" \\
title="PyShell" \\
longtitle="GUI Python Shell"
?package(%{name}): \\
?package(%{pkgname}): \\
command="%{_bindir}/pycrust" \\
needs="X11" \\
icon="PyCrust.png" \\
section="Applications/Development/Tools" \\
title="PyCrust" \\
longtitle="GUI Python Shell with Filling"
?package(%{name}): \\
?package(%{pkgname}): \\
command="%{_bindir}/pyalamode" \\
needs="X11" \\
icon="PyCrust.png" \\
section="Applications/Development/Tools" \\
title="PyAlaMode" \\
longtitle="GUI Python Shell with Filling and editor windows"
?package(%{name}): \\
?package(%{pkgname}): \\
command="%{_bindir}/xrced" \\
needs="X11" \\
icon="XRCed.png" \\
@@ -265,62 +338,82 @@ cat > $RPM_BUILD_ROOT%{_libdir}/menu/%{name} <<EOF
EOF
#----------------------------------------------------------------
#----------------------------------------------------------------------
%pre
if [ -e %{wxprefbase} ]; then
# in case there are old dirs from an old install
rm -r %{wxprefbase}
fi
%post
%post -n %{pkgname}%{ver2}-%{port}-%{chartype}
if [ ! -e %{wxprefbase} ]; then
ln -s wxPython-%{version} %{wxprefbase}
ln -s %{pkgname}-%{version}-%{port}-%{chartype} %{wxprefbase}
fi
%preun -n %{pkgname}%{ver2}-%{port}-%{chartype}
if [ -L %{wxprefbase} ]; then
if [ `readlink %{wxprefbase}` == %{pkgname}-%{version}-%{port}-%{chartype} ]; then
rm -f %{wxprefbase}
fi
fi
%post -n %{pkgname}-common-%{port}-%{chartype}
# This is done on Mandrake to update its menus:
if [ -x /usr/bin/update-menus ]; then /usr/bin/update-menus || true ; fi
%postun
rm -f %{wxprefbase}
%postun -n %{pkgname}-common-%{port}-%{chartype}
# This is done on Mandrake to update its menus:
if [ "$1" = "0" -a -x /usr/bin/update-menus ]; then /usr/bin/update-menus || true ; fi
#----------------------------------------------------------------
%post -n %{pkgname}%{ver2}-devel-%{port}-%{chartype}
cd %{wxpref}/bin
ln -s ../lib/wx/config/%{port}-%{chartype}* wx-config
%preun -n %{pkgname}%{ver2}-devel-%{port}-%{chartype}
rm %{wxpref}/bin/wx-config
#----------------------------------------------------------------------
%clean
[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
#----------------------------------------------------------------
#----------------------------------------------------------------------
%files
%files -n %{pkgname}%{ver2}-%{port}-%{chartype}
%defattr(-,root,root)
%doc docs/preamble.txt docs/licence.txt docs/lgpl.txt docs/readme.txt docs/changes.txt
%doc wxPython/docs/*
%{_bindir}/*
%{pref}/lib*/python%{pyver}/site-packages/*
%dir %{pref}/lib*/python%{pyver}/site-packages/wx-%{ver2}*-%{port}-%{chartype}
%{pref}/lib*/python%{pyver}/site-packages/wx-%{ver2}*-%{port}-%{chartype}/*
%dir %{wxpref}
%dir %{wxpref}/lib
%{wxpref}/lib/libwx*
%{wxpref}/lib/libwx_gtk*
%{wxpref}/share
%files -n %{pkgname}-common-%{port}-%{chartype}
%defattr(-,root,root)
%{pref}/lib*/python%{pyver}/site-packages/wxversion.*
%{pref}/lib*/python%{pyver}/site-packages/wx.pth
%{_bindir}/*
%{_datadir}/applnk/Development/*
%{_datadir}/applications/*
%{_datadir}/icons/hicolor/*/apps/*
%{_datadir}/pixmaps/*
%{_libdir}/menu/*
##%{wxprefbase}
%files -n wxPython%{port}-devel
%files -n %{pkgname}%{ver2}-devel-%{port}-%{chartype}
%defattr(-,root,root)
%{wxpref}/include
%{wxpref}/lib/wx
%{wxconfigname}
%{wxpref}/bin/wx-config
%{wxpref}/bin/wx-config-%{ver2}
%dir %{wxpref}/bin
#----------------------------------------------------------------
#----------------------------------------------------------------------
# end of file