From: Robin Dunn Date: Thu, 1 Jun 2006 22:23:24 +0000 (+0000) Subject: Some explainations and directions for building the Debian wx packages X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/7d690809961a1b7e66429e570b314bf2382902f8?ds=inline Some explainations and directions for building the Debian wx packages git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@39521 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/debian/README.HowToBuild.txt b/debian/README.HowToBuild.txt new file mode 100644 index 0000000000..4d242b13cc --- /dev/null +++ b/debian/README.HowToBuild.txt @@ -0,0 +1,162 @@ +How to build the Debian wx packages +=================================== + +This file is currently just a brain dump of my experiences with +building the Debian wx packages, based on various experimentations, +and Googling around. Please don't take anything said here as +autoritative or written in stone. Although I've been able to get +things to work fairly reliably, I still feel pretty clueless about +some things. + + +Overview +-------- + +Contrary to how RPM and other pacakging systems work, building Debian +packages is done with an expanded source tree instead of using a +tarball. Inside the toplevel of the source tree you'll find a subdir +named debian, and within this dir are various files used by the build. +The most important of these are the control file and the rules file. +The control file specifies the metadata about each pacakge, such as +name, description, dependencies, etc. Interestingly, the version +number of the current build is not in the control file as might be +expected, but is instead taken from the changelog file. I guess this +is a way for debian to make sure that there is always an updated +changelog for every release, but it is very non-intuitive to say the +least. The rules file is a Makefile, and is executable with a #! that +runs make on itself. This lets you execute commands from the toplevel +source dir like: + + ./debian/rules build + +While theoretically you could build the wx packages directly from your +CVS workspace this won't work (currently) for a couple reasons. +First, the debian/rules file is currently looking at the name of the +toplevel source dir and extracting from it the flavour name (if +present) for use in passing to --with-flavor configure flag. (I'm +considering changing how it finds this value for 2.7 so, for example, +the debian packages could also be build from the wxPython source +tarball...) Second, since the build tools use the current source dir +for creating the source package, you'll probably want to start with a +clean source tree that has had uneccessary things removed from it. +There is a Makefile target that will create a minimized and clean +source tree for you, and will name it as debian/rules expects. To use +it go to a build dir where you've already run configure, and then run: + + make debian-dist + +This will result in a new source tree with a name like +wxwidgets2.7-2.7.0.0 that is located as a sibling to the toplevel of +the current source tree. + + +Environment +----------- + +The various dpkg helper tools will use some environtment settings to +provide default values. I have these set: + + DEBFULLNAME='Robin Dunn' + DEBEMAIL=robin@alldunn.com + DEBSIGN_KEYID='Robin Dunn ' + DEBUILD_DPKG_BUILDPACKAGE_OPTS='-i -ICVS -I.svn' + +Notice the DEBSIGN_KEYID value. If this is set (and you have a +matching gnupg key) then the packages will be digitally signed when +they are built. + +If you are building packages that you intend to be installable on +machines other than your own, then I recoomend that you either have a +separte machine with a minimal OS install, or set up a chroot +environment and do the builds there. The reason for this is to +minimize unexepcted extra dependencies that the built packages will +have because of extra things you have installed on your desktop +system, for example OpenGL libs installed by your video card drivers. +Using a chroot will also allow you to build packages for different +versions of Debian (or Ubuntu) if desired. There is a good +description of setting up a chroot environment here: + + https://wiki.ubuntu.com/DebootstrapChroot + +In addition to the base system pacakges, you'll need to install in +the chroot environment any pacakges needed for bulding wxWidgets +(compilers, make, autoconf, gtk and image libs, lib-dev's, python, +python-dev, etc.) as well as the packages listed in the next section. + + +Build Packages +-------------- + +There are a number of helper pacakges that are used when building +debian packages. Here are some that I have in my chroot, there may be +some others that I am not seeing at the moment: + + debhelper + devscripts + dh-make + dpkg-dev + fakeroot + lintian + diff + patch + + +Doing the Build +--------------- + +Ok, if you are not totally confused by this point you should have a +minimal source tree produced by "make debian-dist" that is accessible +by your chroot or other minimal install system. (Unless you are only +making packages for yourself, then doing the build on in your main +desktop environment would be okay.) The first step is to chdir to +the top level of this source tree. + +If you havn't already you'll want to edit debian/changelog to make an +entry for the current build. If the version number is changing since +the last build then you'll need a whole new section. If you are just +updating something in the same version then you can just get by with +editing the current changelog entry. The 'dch' tool can be used to +open the file in an editor with the cursor positioned for you. If you +use 'dch -i' then it will create a new changelog entry for you with +the proper syntax. Don't forget to copy this file back to your CVS +workspace if appropriate. + +Our debian/control file is generated from debian/control.in, so you +can force it to be created now by running the following. You may want +to do this to verify its contents before proceding with the build. + + ./debian/rules debian/control + +To run just the compile/link/etc. portions of the build you can do +this: + + ./debian/rules build + +To also make a set of test binaries you can do this: + + fakeroot ./debian/rules binaries + +To clean up from prior builds you can do this: + + fakeroot ./debian/rules clean + +And to automate the entire process (build, binaries, source pacakges, +digital signing, etc.) you can do this: + + dpkg-buildpackage -rfakeroot + +When finished the binary and source packages will be left in the +parent dir of the source tree. + + + +Other Sources of Information +---------------------------- + +http://liw.iki.fi/liw/talks/debian-packaging-tutorial.pdf +http://women.alioth.debian.org/wiki/index.php/English/BuildingTutorial +http://women.alioth.debian.org/wiki/index.php/English/AdvancedBuildingTips +http://www.wiggy.net/presentations/2001/DebianWalkThrough/handouts/handouts.html +http://www.debian.org/doc/manuals/maint-guide/index.en.html +http://www.isotton.com/debian/docs/repository-howto/repository-howto.html +