| 1 | #---------------------------------------------------------------------- |
| 2 | # Name: wxPython.spec |
| 3 | # Purpose: RPM Build and packaging instructions |
| 4 | # |
| 5 | # Author: Robin Dunn |
| 6 | # |
| 7 | # RCS-ID: $Id$ |
| 8 | # Copyright: (c) 2004 by Total Control Software |
| 9 | # Licence: wxWindows license |
| 10 | #---------------------------------------------------------------------- |
| 11 | |
| 12 | |
| 13 | # The following values can be set on the rpmbuild command line with |
| 14 | # --define 'name VALUE' If no value is set on the command line then |
| 15 | # the default value set here will be used instead. |
| 16 | |
| 17 | |
| 18 | # Which version of Python to build with. Used to assemble python |
| 19 | # binary name so use '2.3', '2.4', etc. |
| 20 | %if %{?pyver:0}%{!?pyver:1} |
| 21 | %define pyver 2.4 |
| 22 | %endif |
| 23 | |
| 24 | |
| 25 | # Which wxWidgets port to build and use. Current acceptable values |
| 26 | # are 'gtk' and 'gtk2'. |
| 27 | %if %{?port:0}%{!?port:1} |
| 28 | %define port gtk2 |
| 29 | %endif |
| 30 | |
| 31 | |
| 32 | # Build in unicode mode? Can only be used if port is gtk2, acceptable |
| 33 | # values are '0' and '1' |
| 34 | %if %{?unicode:0}%{!?unicode:1} |
| 35 | %define unicode 1 |
| 36 | %endif |
| 37 | |
| 38 | |
| 39 | # Should the builtin image and etc. libs be used, or system libs? |
| 40 | # Distro specific RPMs should probably set this to 0, generic ones |
| 41 | # should use 1. |
| 42 | # NOTE: I'm trying 0 for this next release to see if I can get rid of |
| 43 | # this... |
| 44 | %if %{?builtin_libs:0}%{!?builtin_libs:1} |
| 45 | %define builtin_libs 0 |
| 46 | %endif |
| 47 | |
| 48 | |
| 49 | # Should --enable-debug_flag be used in release builds? Using it |
| 50 | # defines __WXDEBUG__ and gives us runtime diagnostics that are turned |
| 51 | # into Python exceptions. (So turning it on is a very helpful thing |
| 52 | # IMO and is recommended.) The code is still compiled with |
| 53 | # optimization flags and and without debug info and such when this |
| 54 | # option is used, it simply turns on some extra code. |
| 55 | %if %{?debug_flag:0}%{!?debug_flag:1} |
| 56 | %define debug_flag 1 |
| 57 | %endif |
| 58 | |
| 59 | |
| 60 | # Used to set the Release tag below. I normally use it to define what |
| 61 | # distro the RPM was built on and also include the version of Python |
| 62 | # it was built with. |
| 63 | %if %{?release:0}%{!?release:1} |
| 64 | %define release 1_py%{pyver} |
| 65 | %endif |
| 66 | |
| 67 | |
| 68 | # This one is used to control whether the full 4 components of the |
| 69 | # verseion number are used in the site-packages subdirectory name. By |
| 70 | # default only 2 or 3 components (depending on stable/unstable status) |
| 71 | # are used. |
| 72 | %if %{?fullver:0}%{!?fullver:1} |
| 73 | %define fullver 0 |
| 74 | %endif |
| 75 | |
| 76 | |
| 77 | # Whether to add --enable-mediactrl to the wxWidgets configure. For |
| 78 | # some older versions of gstreamer-0.8 it currently incorerctly allows |
| 79 | # its use eventhough there is a compatibility problem that causes a |
| 80 | # failed compile. |
| 81 | %if %{?mediactrl:0}%{!?mediactrl:1} |
| 82 | %define mediactrl 1 |
| 83 | %endif |
| 84 | |
| 85 | |
| 86 | #---------------------------------------------------------------------- |
| 87 | # Other variables used below |
| 88 | |
| 89 | %define pref %{_prefix} |
| 90 | %define python /usr/bin/python%{pyver} |
| 91 | %define tarname @TARNAME@ |
| 92 | %define version @VERSION@ |
| 93 | %define ver2 @VER2@ |
| 94 | |
| 95 | %define chartype %(if [ "%{unicode}" = "1" ]; then echo unicode; else echo ansi; fi) |
| 96 | %define gtktype %(if [ "%{port}" = "gtk2" ]; then echo 2; fi) |
| 97 | %define using_gtk1 %(if [ "%{port}" = "gtk" ]; then echo 1; else echo 0; fi) |
| 98 | |
| 99 | %define wxprefbase %{pref}/lib/wxPython |
| 100 | %define wxpref %{wxprefbase}-%{version}-%{port}-%{chartype} |
| 101 | %define pkgname wxPython |
| 102 | |
| 103 | # turn off the generation of debuginfo rpm (RH9) ?? |
| 104 | %define debug_package %{nil} |
| 105 | |
| 106 | |
| 107 | #---------------------------------------------------------------------- |
| 108 | # Package definition |
| 109 | #---------------------------------------------------------------------- |
| 110 | Name: %{pkgname}%{ver2} |
| 111 | Summary: Cross platform GUI toolkit for Python |
| 112 | Version: %{version} |
| 113 | Release: %{release} |
| 114 | Source0: %{tarname}-%{version}.tar.bz2 |
| 115 | License: wx Library Licence, Version 3 |
| 116 | URL: http://wxPython.org/ |
| 117 | Packager: Robin Dunn <robin@alldunn.com> |
| 118 | Group: Development/Python |
| 119 | BuildRoot: %{_tmppath}/%{pkgname}-buildroot |
| 120 | Prefix: %{pref} |
| 121 | |
| 122 | %description |
| 123 | Cross platform GUI toolkit for Python |
| 124 | |
| 125 | |
| 126 | |
| 127 | |
| 128 | %package -n %{pkgname}%{ver2}-%{port}-%{chartype} |
| 129 | Summary: Cross platform GUI toolkit for Python |
| 130 | Group: Development/Python |
| 131 | Requires: %{pkgname}-common |
| 132 | Obsoletes: wxPythonGTK%{gtktype}-py%{pyver}, wxPythonGTK%{gtktype} |
| 133 | Provides: wxPython |
| 134 | |
| 135 | |
| 136 | %description -n %{pkgname}%{ver2}-%{port}-%{chartype} |
| 137 | wxPython is a GUI toolkit for the Python programming language. It |
| 138 | allows Python programmers to create programs with a robust, highly |
| 139 | functional graphical user interface, simply and easily. It is |
| 140 | implemented as a Python extension module (native code) that wraps the |
| 141 | popular wxWidgets cross platform GUI library, which is written in C++. |
| 142 | |
| 143 | wxPython is a cross-platform toolkit. The same program will usually |
| 144 | run on multiple platforms without modification. Currently supported |
| 145 | platforms are 32-bit Microsoft Windows, most Unix or unix-like |
| 146 | systems, and Macintosh OS X. |
| 147 | |
| 148 | This package contains the wxPython runtime files built for the |
| 149 | wxWidgets %{port} port with %{chartype} character type. |
| 150 | |
| 151 | |
| 152 | |
| 153 | |
| 154 | |
| 155 | %package -n %{pkgname}-common-%{port}-%{chartype} |
| 156 | Summary: Common files for needed by all wxPython runtimes |
| 157 | Group: Development/Python |
| 158 | Provides: %{pkgname}-common |
| 159 | |
| 160 | # They obsolete each other so any of them can be installed over another |
| 161 | # without conflicts |
| 162 | Obsoletes: %{pkgname}-common-gtk-ansi |
| 163 | Obsoletes: %{pkgname}-common-gtk2-ansi |
| 164 | Obsoletes: %{pkgname}-common-gtk2-unicode |
| 165 | |
| 166 | %description -n %{pkgname}-common-%{port}-%{chartype} |
| 167 | This package contains the common files needed by any version of the |
| 168 | wxPython runtime. This pacakge also installs a wx.pth file which will |
| 169 | determine which of the installed runtimes is the default version of |
| 170 | wxPython that is imported automatically with a bare "import wx". |
| 171 | |
| 172 | |
| 173 | |
| 174 | |
| 175 | |
| 176 | %package -n %{pkgname}%{ver2}-devel-%{port}-%{chartype} |
| 177 | Summary: wxPython development files |
| 178 | Group: Development/Libraries |
| 179 | Requires: %{pkgname}%{ver2}-%{port}-%{chartype} = %{version} |
| 180 | |
| 181 | %description -n %{pkgname}%{ver2}-devel-%{port}-%{chartype} |
| 182 | This packages contains the headers and etc. for building apps or |
| 183 | Python extension modules that use the same wxWidgets shared libraries |
| 184 | that wxPython uses. |
| 185 | |
| 186 | |
| 187 | |
| 188 | #---------------------------------------------------------------------- |
| 189 | %prep |
| 190 | %setup -q -n %{tarname}-%{version} |
| 191 | |
| 192 | |
| 193 | #---------------------------------------------------------------------- |
| 194 | %build |
| 195 | |
| 196 | WXDIR=`pwd` |
| 197 | |
| 198 | # Configure and build wxWidgets |
| 199 | mkdir bld |
| 200 | cd bld |
| 201 | ../configure \ |
| 202 | %if %{using_gtk1} |
| 203 | --with-gtk=1 \ |
| 204 | %else |
| 205 | --with-gtk=2 \ |
| 206 | %endif |
| 207 | --prefix=%{wxpref} \ |
| 208 | --disable-monolithic \ |
| 209 | --disable-rpath \ |
| 210 | --with-opengl \ |
| 211 | --with-gnomeprint \ |
| 212 | --enable-geometry \ |
| 213 | --enable-graphics_ctx \ |
| 214 | --enable-optimise \ |
| 215 | --enable-sound --with-sdl \ |
| 216 | %if %{mediactrl} |
| 217 | --enable-mediactrl \ |
| 218 | %endif |
| 219 | --enable-display \ |
| 220 | %if %{unicode} |
| 221 | --enable-unicode \ |
| 222 | %else |
| 223 | --disable-unicode \ |
| 224 | %endif |
| 225 | %if %{debug_flag} |
| 226 | --enable-debug_flag \ |
| 227 | %endif |
| 228 | --disable-debugreport \ |
| 229 | %if %{builtin_libs} |
| 230 | --with-libjpeg=builtin \ |
| 231 | --with-libpng=builtin \ |
| 232 | --with-libtiff=builtin \ |
| 233 | --with-zlib=builtin \ |
| 234 | %endif |
| 235 | |
| 236 | |
| 237 | make |
| 238 | make -C contrib/src/gizmos |
| 239 | make -C contrib/src/stc |
| 240 | |
| 241 | |
| 242 | |
| 243 | # Build wxPython |
| 244 | cd $WXDIR/wxPython |
| 245 | %{python} setup.py \ |
| 246 | WXPORT=%{port} \ |
| 247 | UNICODE=%{unicode} \ |
| 248 | EP_ADD_OPTS=1 \ |
| 249 | EP_FULL_VER=%{fullver} \ |
| 250 | NO_SCRIPTS=1 \ |
| 251 | WX_CONFIG="$WXDIR/bld/wx-config --no_rpath" \ |
| 252 | build_ext --rpath=%{wxpref}/lib \ |
| 253 | build |
| 254 | |
| 255 | |
| 256 | |
| 257 | #---------------------------------------------------------------------- |
| 258 | %install |
| 259 | |
| 260 | WXDIR=`pwd` |
| 261 | |
| 262 | # Install wxGTK and contribs |
| 263 | cd bld |
| 264 | make prefix=$RPM_BUILD_ROOT%{wxpref} install |
| 265 | make -C contrib/src/gizmos prefix=$RPM_BUILD_ROOT%{wxpref} install |
| 266 | make -C contrib/src/stc prefix=$RPM_BUILD_ROOT%{wxpref} install |
| 267 | |
| 268 | |
| 269 | |
| 270 | # Install wxPython for wxGTK |
| 271 | cd $WXDIR/wxPython |
| 272 | %{python} setup.py \ |
| 273 | WXPORT=%{port} \ |
| 274 | UNICODE=%{unicode} \ |
| 275 | EP_ADD_OPTS=1 \ |
| 276 | EP_FULL_VER=%{fullver} \ |
| 277 | NO_SCRIPTS=1 \ |
| 278 | WX_CONFIG="$RPM_BUILD_ROOT%{wxpref}/bin/wx-config --prefix=$RPM_BUILD_ROOT%{wxpref} --no_rpath" \ |
| 279 | build_ext --rpath=%{wxpref}/lib \ |
| 280 | install \ |
| 281 | --root=$RPM_BUILD_ROOT |
| 282 | |
| 283 | |
| 284 | # remove the wx-config symlink, we'll redo it when installing the -devel package |
| 285 | rm $RPM_BUILD_ROOT%{wxpref}/bin/wx-config |
| 286 | |
| 287 | # make sure that debug info is stripped |
| 288 | strip $RPM_BUILD_ROOT%{pref}/lib*/python%{pyver}/site-packages/wx-%{ver2}*-%{port}-%{chartype}/wx/*.so |
| 289 | |
| 290 | |
| 291 | # Since I want this RPM to be as generic as possible I won't let |
| 292 | # distutils copy the scripts (NO_SCRIPTS=1 above) since it will mangle |
| 293 | # the #! line to use the real python pathname. Since some distros |
| 294 | # install python 2.2 as python2 and others as python I can't let |
| 295 | # distutils do that otherwise the dependencies will be fouled up. |
| 296 | # Copy them manually instead, leaving the #!/usr/bin/env line intact. |
| 297 | cd $WXDIR/wxPython |
| 298 | mkdir -p $RPM_BUILD_ROOT%{pref}/bin |
| 299 | for s in \ |
| 300 | helpviewer \ |
| 301 | img2png \ |
| 302 | img2py \ |
| 303 | img2xpm \ |
| 304 | pyalacarte \ |
| 305 | pyalamode \ |
| 306 | pycrust \ |
| 307 | pywrap \ |
| 308 | pyshell \ |
| 309 | pywxrc \ |
| 310 | xrced; do |
| 311 | cp scripts/$s $RPM_BUILD_ROOT%{pref}/bin |
| 312 | done |
| 313 | |
| 314 | |
| 315 | |
| 316 | # install KDE & GNOME menu items |
| 317 | mkdir -p $RPM_BUILD_ROOT%{_datadir}/applnk/Development |
| 318 | mkdir -p $RPM_BUILD_ROOT%{_datadir}/applications |
| 319 | for d in distrib/*.desktop; do |
| 320 | install -m 644 $d $RPM_BUILD_ROOT%{_datadir}/applnk/Development |
| 321 | install -m 644 $d $RPM_BUILD_ROOT%{_datadir}/applications |
| 322 | done |
| 323 | |
| 324 | # install KDE icons |
| 325 | mkdir -p $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/{16x16,32x32}/apps |
| 326 | mkdir -p $RPM_BUILD_ROOT%{_datadir}/pixmaps |
| 327 | install -m 644 wx/py/PyCrust_16.png $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/16x16/apps/PyCrust.png |
| 328 | install -m 644 wx/py/PyCrust_32.png $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/32x32/apps/PyCrust.png |
| 329 | install -m 644 wx/py/PyCrust_32.png $RPM_BUILD_ROOT%{_datadir}/pixmaps/PyCrust.png |
| 330 | install -m 644 wx/tools/XRCed/XRCed_16.png $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/16x16/apps/XRCed.png |
| 331 | install -m 644 wx/tools/XRCed/XRCed_32.png $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/32x32/apps/XRCed.png |
| 332 | install -m 644 wx/tools/XRCed/XRCed_32.png $RPM_BUILD_ROOT%{_datadir}/pixmaps/XRCed.png |
| 333 | |
| 334 | # install Mandrake menu items |
| 335 | mkdir -p $RPM_BUILD_ROOT%{_libdir}/menu |
| 336 | cat > $RPM_BUILD_ROOT%{_libdir}/menu/%{pkgname} <<EOF |
| 337 | ?package(%{pkgname}): \\ |
| 338 | command="%{_bindir}/pyshell" \\ |
| 339 | needs="X11" \\ |
| 340 | icon="PyCrust.png" \\ |
| 341 | section="Applications/Development/Tools" \\ |
| 342 | title="PyShell" \\ |
| 343 | longtitle="GUI Python Shell" |
| 344 | ?package(%{pkgname}): \\ |
| 345 | command="%{_bindir}/pycrust" \\ |
| 346 | needs="X11" \\ |
| 347 | icon="PyCrust.png" \\ |
| 348 | section="Applications/Development/Tools" \\ |
| 349 | title="PyCrust" \\ |
| 350 | longtitle="GUI Python Shell with Filling" |
| 351 | ?package(%{pkgname}): \\ |
| 352 | command="%{_bindir}/pyalamode" \\ |
| 353 | needs="X11" \\ |
| 354 | icon="PyCrust.png" \\ |
| 355 | section="Applications/Development/Tools" \\ |
| 356 | title="PyAlaMode" \\ |
| 357 | longtitle="GUI Python Shell with Filling and editor windows" |
| 358 | ?package(%{pkgname}): \\ |
| 359 | command="%{_bindir}/xrced" \\ |
| 360 | needs="X11" \\ |
| 361 | icon="XRCed.png" \\ |
| 362 | section="Applications/Development/Tools" \\ |
| 363 | title="XRCed" \\ |
| 364 | longtitle="wxPython XRC resource editor" |
| 365 | EOF |
| 366 | |
| 367 | |
| 368 | #---------------------------------------------------------------------- |
| 369 | |
| 370 | %post -n %{pkgname}%{ver2}-%{port}-%{chartype} |
| 371 | if [ ! -e %{wxprefbase} ]; then |
| 372 | ln -s %{pkgname}-%{version}-%{port}-%{chartype} %{wxprefbase} |
| 373 | fi |
| 374 | |
| 375 | %preun -n %{pkgname}%{ver2}-%{port}-%{chartype} |
| 376 | if [ -L %{wxprefbase} ]; then |
| 377 | if [ `readlink %{wxprefbase}` == %{pkgname}-%{version}-%{port}-%{chartype} ]; then |
| 378 | rm -f %{wxprefbase} |
| 379 | fi |
| 380 | fi |
| 381 | |
| 382 | |
| 383 | |
| 384 | |
| 385 | %post -n %{pkgname}-common-%{port}-%{chartype} |
| 386 | # This is done on Mandrake to update its menus: |
| 387 | if [ -x /usr/bin/update-menus ]; then /usr/bin/update-menus || true ; fi |
| 388 | |
| 389 | %postun -n %{pkgname}-common-%{port}-%{chartype} |
| 390 | # This is done on Mandrake to update its menus: |
| 391 | if [ "$1" = "0" -a -x /usr/bin/update-menus ]; then /usr/bin/update-menus || true ; fi |
| 392 | |
| 393 | |
| 394 | |
| 395 | %post -n %{pkgname}%{ver2}-devel-%{port}-%{chartype} |
| 396 | cd %{wxpref}/bin |
| 397 | ln -s ../lib/wx/config/%{port}-%{chartype}* wx-config |
| 398 | |
| 399 | %preun -n %{pkgname}%{ver2}-devel-%{port}-%{chartype} |
| 400 | rm %{wxpref}/bin/wx-config |
| 401 | |
| 402 | |
| 403 | #---------------------------------------------------------------------- |
| 404 | %clean |
| 405 | [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT |
| 406 | |
| 407 | |
| 408 | #---------------------------------------------------------------------- |
| 409 | |
| 410 | %files -n %{pkgname}%{ver2}-%{port}-%{chartype} |
| 411 | %defattr(-,root,root) |
| 412 | %doc docs/preamble.txt docs/licence.txt docs/lgpl.txt docs/readme.txt docs/changes.txt |
| 413 | %doc wxPython/docs/* |
| 414 | %dir %{pref}/lib*/python%{pyver}/site-packages/wx-%{ver2}*-%{port}-%{chartype} |
| 415 | %{pref}/lib*/python%{pyver}/site-packages/wx-%{ver2}*-%{port}-%{chartype}/* |
| 416 | %dir %{pref}/lib*/python%{pyver}/site-packages/wxaddons |
| 417 | %{pref}/lib*/python%{pyver}/site-packages/wxaddons/* |
| 418 | %dir %{wxpref} |
| 419 | %dir %{wxpref}/lib |
| 420 | %{wxpref}/lib/libwx_* |
| 421 | %dir %{wxpref}/bin |
| 422 | %{wxpref}/bin/wxrc* |
| 423 | %{wxpref}/share |
| 424 | |
| 425 | |
| 426 | |
| 427 | %files -n %{pkgname}-common-%{port}-%{chartype} |
| 428 | %defattr(-,root,root) |
| 429 | %{pref}/lib*/python%{pyver}/site-packages/wxversion.* |
| 430 | %{pref}/lib*/python%{pyver}/site-packages/wx.pth |
| 431 | %{_bindir}/* |
| 432 | %{_datadir}/applnk/Development/* |
| 433 | %{_datadir}/applications/* |
| 434 | %{_datadir}/icons/hicolor/*/apps/* |
| 435 | %{_datadir}/pixmaps/* |
| 436 | %{_libdir}/menu/* |
| 437 | |
| 438 | |
| 439 | |
| 440 | |
| 441 | |
| 442 | %files -n %{pkgname}%{ver2}-devel-%{port}-%{chartype} |
| 443 | %defattr(-,root,root) |
| 444 | %{wxpref}/include |
| 445 | %{wxpref}/lib/wx |
| 446 | %dir %{wxpref}/bin |
| 447 | |
| 448 | |
| 449 | #---------------------------------------------------------------------- |
| 450 | # end of file |