~ubuntu-branches/ubuntu/precise/wxwidgets2.8/precise-proposed

« back to all changes in this revision

Viewing changes to debian-upstream/README.HowToBuild.txt

  • Committer: Package Import Robot
  • Author(s): Stéphane Graber
  • Date: 2012-01-07 13:59:25 UTC
  • mfrom: (1.1.9) (5.1.10 sid)
  • Revision ID: package-import@ubuntu.com-20120107135925-2601miy9ullcon9j
Tags: 2.8.12.1-6ubuntu1
* Resync from Debian, changes that were kept:
  - debian/rules: re-enable mediactrl. This allows libwx_gtk2u_media-2.8 to be
    built, as this is required by some applications (LP: #632984)
  - debian/control: Build-dep on libxt-dev for mediactrl.
  - Patches
    + fix-bashism-in-example
* Add conflict on python-wxgtk2.8 (<< 2.8.12.1-6ubuntu1~) to python-wxversion
  to guarantee upgrade ordering when moving from pycentral to dh_python2.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
How to build the Debian wx packages
 
2
===================================
 
3
 
 
4
This file is currently just a brain dump of my experiences with
 
5
building the Debian wx packages, based on various experimentations,
 
6
and Googling around.  Please don't take anything said here as
 
7
authoritative or written in stone.  Although I've been able to get
 
8
things to work fairly reliably, I still feel pretty clueless about
 
9
some things.
 
10
 
 
11
 
 
12
Overview
 
13
--------
 
14
 
 
15
Contrary to how RPM and other packaging systems work, building Debian
 
16
packages is done with an expanded source tree instead of using a
 
17
tarball.  Inside the toplevel of the source tree you'll find a subdir
 
18
named debian, and within this dir are various files used by the build.
 
19
The most important of these are the control file and the rules file.
 
20
The control file specifies the metadata about each package, such as
 
21
name, description, dependencies, etc.  Interestingly, the version
 
22
number of the current build is not in the control file as might be
 
23
expected, but is instead taken from the changelog file.  I guess this
 
24
is a way for debian to make sure that there is always an updated
 
25
changelog for every release, but it is very non-intuitive to say the
 
26
least.  The rules file is a Makefile, and is executable with a #! that
 
27
runs make on itself.  This lets you execute commands from the toplevel
 
28
source dir like:
 
29
 
 
30
       ./debian/rules build
 
31
 
 
32
While theoretically you could build the wx packages directly from your
 
33
CVS workspace this won't work (currently) for a couple reasons.
 
34
First, the debian/rules file is currently looking at the name of the
 
35
toplevel source dir and extracting from it the flavour name (if
 
36
present) for use in passing to --with-flavor configure flag.  (I'm
 
37
considering changing how it finds this value for 2.7 so, for example,
 
38
the debian packages could also be built from the wxPython source
 
39
tarball...)  Second, since the build tools use the current source dir
 
40
for creating the source package, you'll probably want to start with a
 
41
clean source tree that has had unnecessary things removed from it.
 
42
There is a Makefile target that will create a minimized and clean
 
43
source tree for you, and will name it as debian/rules expects.  To use
 
44
it go to a build dir where you've already run configure, and then run:
 
45
 
 
46
       make debian-dist
 
47
 
 
48
This will result in a new source tree with a name like
 
49
wxwidgets2.7-2.7.0.0 that is located as a sibling to the toplevel of
 
50
the current source tree.
 
51
 
 
52
 
 
53
Environment
 
54
-----------
 
55
 
 
56
The various dpkg helper tools will use some environment settings to
 
57
provide default values.  I have these set:
 
58
 
 
59
       DEBFULLNAME='Robin Dunn'
 
60
       DEBEMAIL=robin@alldunn.com
 
61
       DEBSIGN_KEYID='Robin Dunn <robin@alldunn.com>'
 
62
       DEBUILD_DPKG_BUILDPACKAGE_OPTS='-i -ICVS -I.svn'
 
63
 
 
64
Notice the DEBSIGN_KEYID value.  If this is set (and you have a
 
65
matching gnupg key) then the packages will be digitally signed when
 
66
they are built.
 
67
 
 
68
If you are building packages that you intend to be installable on
 
69
machines other than your own, then I recommend that you either have a
 
70
separate machine with a minimal OS install, or set up a chroot
 
71
environment and do the builds there.  The reason for this is to
 
72
minimize unexpected extra dependencies that the built packages will
 
73
have because of extra things you have installed on your desktop
 
74
system, for example OpenGL libs installed by your video card drivers.
 
75
Using a chroot will also allow you to build packages for different
 
76
versions of Debian (or Ubuntu) if desired.  There is a good
 
77
description of setting up a chroot environment here:
 
78
 
 
79
       https://wiki.ubuntu.com/DebootstrapChroot
 
80
 
 
81
In addition to the base system packages, you'll need to install in
 
82
the chroot environment any packages needed for building wxWidgets
 
83
(compilers, make, autoconf, gtk and image libs, lib-dev's, python,
 
84
python-dev, etc.)  as well as the packages listed in the next section.
 
85
 
 
86
 
 
87
Build Packages
 
88
--------------
 
89
 
 
90
There are a number of helper packages that are used when building
 
91
debian packages.  Here are some that I have in my chroot, there may be
 
92
some others that I am not seeing at the moment:
 
93
 
 
94
       debhelper
 
95
       devscripts
 
96
       dh-make
 
97
       dpkg-dev
 
98
       fakeroot
 
99
       lintian
 
100
       diff
 
101
       patch
 
102
 
 
103
 
 
104
Doing the Build
 
105
---------------
 
106
 
 
107
Ok, if you are not totally confused by this point you should have a
 
108
minimal source tree produced by "make debian-dist" that is accessible
 
109
by your chroot or other minimal install system. (Unless you are only
 
110
making packages for yourself, then doing the build on in your main
 
111
desktop environment would  be okay.)  The first step is to chdir to
 
112
the top level of this source tree.
 
113
 
 
114
If you haven't already you'll want to edit debian/changelog to make an
 
115
entry for the current build.  If the version number is changing since
 
116
the last build then you'll need a whole new section.  If you are just
 
117
updating something in the same version then you can just get by with
 
118
editing the current changelog entry.  The 'dch' tool can be used to
 
119
open the file in an editor with the cursor positioned for you.  If you
 
120
use 'dch -i' then it will create a new changelog entry for you with
 
121
the proper syntax.  Don't forget to copy this file back to your CVS
 
122
workspace if appropriate.
 
123
 
 
124
Our debian/control file is generated from debian/control.in, so you
 
125
can force it to be created now by running the following.  You may want
 
126
to do this to verify its contents before proceeding with the build.
 
127
 
 
128
       ./debian/rules debian/control
 
129
 
 
130
To run just the compile/link/etc. portions of the build you can do
 
131
this:
 
132
 
 
133
       ./debian/rules build
 
134
 
 
135
To also make a set of test binaries you can do this:
 
136
 
 
137
       fakeroot ./debian/rules binary
 
138
 
 
139
To clean up from prior builds you can do this:
 
140
 
 
141
       fakeroot ./debian/rules clean
 
142
 
 
143
And to automate the entire process (build, binaries, source packages,
 
144
digital signing, etc.) you can do this:
 
145
 
 
146
       dpkg-buildpackage -rfakeroot
 
147
 
 
148
When finished the binary and source packages will be left in the
 
149
parent dir of the source tree.
 
150
 
 
151
 
 
152
Automating the process
 
153
----------------------
 
154
 
 
155
The script debian/build_all automates the above stepds and builds both
 
156
wxWidgets and wxPython packages in both ANSI and Unicode modes. You should do
 
157
the build manually at least the first time however to make sure you have all
 
158
the prerequisites and the build doesn't fail.
 
159
 
 
160
 
 
161
Other Sources of Information
 
162
----------------------------
 
163
 
 
164
http://liw.iki.fi/liw/talks/debian-packaging-tutorial.pdf
 
165
http://women.alioth.debian.org/wiki/index.php/English/BuildingTutorial
 
166
http://women.alioth.debian.org/wiki/index.php/English/AdvancedBuildingTips
 
167
http://www.wiggy.net/presentations/2001/DebianWalkThrough/handouts/handouts.html
 
168
http://www.debian.org/doc/manuals/maint-guide/index.en.html
 
169
http://www.isotton.com/debian/docs/repository-howto/repository-howto.html
 
170