6922
Comment:
|
7002
|
Deletions are marked like this. | Additions are marked like this. |
Line 71: | Line 71: |
For example, 10_relocate_build , 20_relocate_install, 30_correct_env_variable. |
How to split a package into several smaller packages
You want to create multiple binaries packages from one source package.
This page will be worked soon. (TM)
While you wait, please examine the php-java-bridge /debian/* files, as this source package contains many tricks and hints leveraging debhelper scripts and avoiding pitfalls.
Ideas collected from other package sources, discussion lists, Debian Policy, maintainers guide, man pages.
Special attention to /debian/rules and subpackage_name.* files, like php-java-bridge-j2ee.install , php-java-bridge-j2ee.dirs and so on.
Also, see the README.Debian file, containing many hints and instructions.
Please, note that this source package is a dynamic work in progress, constantly evolving. All suggestions are welcome at the users mailing list.
Readings
Splitting a Debian source package into several smaller binary packages is not trivial.
Before you start, you must read the essential guides [1] to [7], [10] to [12] and feeling already comfortable creating single binary packages.
Variables in rules makefile
You must remember that /debian/rules is a makefile, not a shell batch script.
Read the following code:
BUILDDIR := debian/php-java-bridge DESTDIR := ${CURDIR}/${BUILDDIR}
- Variables MUST be set outside target rules
- Target rules MUST start at column 1, then followed by ":"
- Actions MUST start after a TAB, not blank spaces
The BUILDDIR was set to allow use of dh_install for .war files.
The Debian package makefile must be fully relocatable.
The build directory must be at a package tool discretion (usually at some source temporary subdirectory) and must not need root privileges.
For the installation, the destination directory MUST NOT be hard coded into the source.
If the upstream source has hardcoded directories, you must apply patches even before the configure target rule.
You must know the different types of makefile variables reading [20].
The effects of using a simply expanded variable ( := ) or a recursively expanded variable ( = ) are very different in a rules makefile.
At our example we want the simply expanded variable behaviour.
Shell command output into rules makefile
We want also collect some shell command output into some variables. [21]
There are some misconceptions that you should avoid [27].
PHP_EXT_DIR := $(shell /usr/bin/php-config --extension-dir) PHP_INCLUDE_DIR := $(shell /usr/bin/php-config --include-dir)
Leveraging dpatch
dpatch is a clever development tool.
If you must apply some modifications to the upstream code before packaging for Debian, then one of the easiest modes is to use dpatch.
When you execute dpatch in a shell prompt, it opens a session and from now on until you exit the session, all you do will be recorded and converted to a patch for your upstream code into /debian/patches directory.
A good practice is to create small patches with clear, self explanatory and different names. For example, 10_relocate_build , 20_relocate_install, 30_correct_env_variable.
You must read the dpatch man page.
The following code snippet will apply the patches to source, walking through all patches into /debian/patches directory in the ascendant patchnamefile order.
And then stamp the configure step.
configure: patchsource configure-stamp patchsource: patch-stamp patch-stamp: dpatch apply-all dpatch cat-all >patch-stamp configure-stamp: dh_testdir phpize ./configure --with-java=/usr/lib/jvm/java-1.5.0-sun --prefix=${DESTDIR} touch configure-stamp
Cleaning and deapplying patches
You must have a clean rule. Also, if you applied patches, you must deapply them in reverse order.
The dpatch helper will take care of this if you created the patches in a planned naming convention.
clean: clean-patched unpatch clean-patched: dh_testdir dh_testroot rm -f build-stamp configure-stamp -$(MAKE) clean dh_clean unpatch: dpatch deapply-all rm -rf patch-stamp debian/patched
(to be continued)
External useful links
[0] php-java-bridge source tree http://php-java-bridge.cvs.sourceforge.net/php-java-bridge/php-java-bridge/debian
[1] Debian policy http://www.debian.org/doc/devel-manuals#policy
[2] Debian develpers reference http://www.debian.org/doc/devel-manuals#devref
[3] Debian new maintainers guide http://www.debian.org/doc/devel-manuals#maint-guide
[4] Debian developers manuals http://www.debian.org/doc/devel-manuals
[5] Create Debian Linux packages http://www-128.ibm.com/developerworks/linux/library/l-debpkg.html
[6] Debian Binary Package Building HOWTO http://www.tldp.org/HOWTO/Debian-Binary-Package-Building-HOWTO/
[7] How to backports packages to your version http://selinux.alioth.debian.org/sesarge/HOWTO-Backport.txt
[8] Debian Mentors site http://mentors.debian.net
[9] debian-mentors mailing list http://lists.debian.org/debian-mentors/
[10] Debian packaging tutorial http://debian-news.net/modules/news/article.php?storyid=1075
[11] How to package for Debian http://wiki.debian.org/HowToPackageForDebian
[12] Debian Packaging http://www.linuks.mine.nu/irc/debian-packaging/
[13] Collaborative Maintenance http://wiki.debian.org/CollaborativeMaintenance
[14] Debian for Developers Tutorial http://www.wiggy.net/presentations/2001/DebianWalkThrough/handouts/handouts.html
[15] The Debconf Programmer's Tutorial http://www.fifi.org/doc/debconf-doc/tutorial.html
[16] DEBCONF man page http://www.fifi.org/cgi-bin/man2html/usr/share/man/man8/debconf.8.gz
[17] DEBCONF-DEVEL man page http://www.fifi.org/cgi-bin/man2html/usr/share/man/man8/debconf-devel.8.gz
[18] DEBCONF.CONF man page http://www.fifi.org/cgi-bin/man2html/usr/share/man/man5/debconf.conf.5.gz
[19] DEBHELPER man page http://www.fifi.org/cgi-bin/man2html/usr/share/man/man1/debhelper.1.gz
[20] Make manual - variables flavours http://www.gnu.org/software/make/manual/make.html#Flavors
[21] Make manual - shell function http://www.gnu.org/software/make/manual/make.html#Shell-Function
[22] substitution variables ${misc:Depends}, ${python:Depends}, ${perl:Depends} and package_name.substvars and control files http://help.lockergnome.com/linux/dpkg-gencontrol-warning-unknown-substitution-variable-Depend-ftopict417834.html
[23] thread: how pass variables from files for dh_install into rules? http://lists.debian.org/debian-mentors/2007/04/msg00019.html
http://lists.debian.org/debian-mentors/2007/04/msg00031.html
[24] thread: arguments of some dh_* into rules http://lists.debian.org/debian-mentors/2007/04/msg00028.html
- [25] some debhelper clever examples /usr/share/doc/debhelper/examples
[26] debhelper homepage http://kitenet.net/programs/debhelper
[27] thread: variables from shell output in rules makefile http://lists.debian.org/debian-mentors/2006/11/msg00485.html