summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorjoey <joey>1999-08-17 04:51:05 +0000
committerjoey <joey>1999-08-17 04:51:05 +0000
commitd24f48c801b705fe7b95f27250cfe52d8e3e7319 (patch)
tree201e2359785f0d4a37355e1f8b680d59218744ba /doc
parent26ee9ad04424bc35ba9c1bbc3b062d6d339bbebd (diff)
r84: Initial revision
Diffstat (limited to 'doc')
-rw-r--r--doc/PROGRAMMING187
-rw-r--r--doc/README100
-rw-r--r--doc/TODO26
-rw-r--r--doc/from-debstd63
4 files changed, 376 insertions, 0 deletions
diff --git a/doc/PROGRAMMING b/doc/PROGRAMMING
new file mode 100644
index 00000000..7dc0c638
--- /dev/null
+++ b/doc/PROGRAMMING
@@ -0,0 +1,187 @@
+This file documents things you should know to write a new debhelper program.
+
+Standardization:
+---------------
+
+There are lots of debhelper commands. To make the learning curve shallower,
+I want them all to behave in a standard manner:
+
+All debhelper programs have names beginning with "dh_". This is so we don't
+pollute the name space too much.
+
+Debhelper programs should never output anything to standard output except
+error messages, important warnings, and the actual commands they run that
+modify files under debian/ and debian/tmp, etc (this last only if they are
+passed -v, and if you output the commands, you should indent them with 1 tab).
+This is so we don't have a lot of noise output when all the debhelper commands
+in a debian/rules are run, so the important stuff is clearly visible.
+
+Debhelper programs should accept the options, -v, -i, -a, -p, --no-act, and
+-P, and any long forms of these options, like --verbose . If necessary, the
+options may be ignored.
+
+If debhelper commands need config files, they should use
+debian/package.filename as the name of the config file (replace filename
+with whatever your command wants), and debian/filename should also be
+checked for config information for the first binary package in
+debian/control. Also, debhelper commands should accept the same sort of
+information that appears in the config files, on their command lines, if
+possible, and apply that information to the first package they act on.
+
+Debhelper programs should never modify the debian/postinst, debian/prerm,
+etc scripts, instead, they can add lines to debian/postinst.debhelper, etc.
+The autoscript() function (see below) is one easy way to do this.
+dh_installdeb is an exception, it will run after the other commands and
+merge these modifications into the actual postinst scripts.
+
+There are always exceptions. Just ask me.
+
+Introducing dh_lib:
+------------------
+
+All debhelper programs use the dh_lib library (actually it's a shell script)
+to parse their arguments and set some useful variables. It's not mandatory
+that your program use dh_lib, but it will make it a lot easier to keep it in
+sync with the rest of debhelper if it does, so this is highly encouraged.
+
+Typically, you invoke dh_lib like this:
+
+PATH=debian:$PATH:/usr/lib/debhelper
+. dh_lib
+
+The path statement is there to make your program look first in debian/ for
+dh_lib (so users can install a modified version there if necessary), then the
+rest of the path, then the canonical location of dh_lib, /usr/lib/debhelper.
+
+Argument processing:
+-------------------
+
+All debhelper programs should respond to certain arguments, such as -v, -i,
+-a, and -p. To help you make this work right, dh_lib handles argument
+processing.
+
+As soon as dh_lib loads, it processes any arguments that have been passed to
+your program. The following variables may be set during this stage; your
+program can use them later:
+
+switch variable description
+-v DH_VERBOSE should the program verbosely output what it is
+ doing?
+--no-act DH_NO_ACT should the program not actually do anything?
+-i,-a,-p DH_DOPACKAGES a space delimited list of the binary packages
+ to act on
+-i,-p DH_DOINDEP a space delimited list of the binary independent
+ packages to act on
+-a,-p DH_DOARCH a space delimited list of the binary dependent
+ packages to act on
+-n DH_NOSCRIPTS if set, do not make any modifications to the
+ package's postinst, postrm, etc scripts.
+-X DH_EXCLUDE exclude a something from processing (you
+ decide what this means for your program)
+ DH_EXCLUDE_GREP same as DH_EXCLUDE, except all items are
+ separated by '|' characters, instead of spaces,
+ handy for egrep -v
+-x DH_INCLUDE_CONFFILES
+ include conffiles. It's -x for obscure
+ historical reasons.
+-d DH_D_FLAG you decide what this means to your program
+-r DH_R_FLAG you decide what this means to your program
+-k DH_K_FLAG you decide what this means to your program
+-P DH_TMPDIR package build directory (implies only one
+ package is being acted on)
+-u DH_U_PARAMS will be set to a string, that is typically
+ parameters your program passes on to some
+ other program.
+-m DH_M_PARAMS will be set to a string, you decide what it
+ means to your program
+-V DH_V_FLAG will be set to a string, you decide what it
+ means to your program
+-V DH_V_FLAG_SET will be 1 if -V was specified, even if no
+ parameters were passed along with the -V
+-A DH_PARAMS_ALL generally means that additional command line
+ parameters passed to the program (other than
+ those processed here), will apply to all
+ binary packages the program acts on, not just
+ the first
+--init-script DH_INIT_SCRIPT will be set to a string, which specifies an
+ init script name (probably only
+ dh_installinit will ever use this)
+
+Any additional command line parameters that do not start with "-" will be
+ignored, and you can access them later just as you normally would ($1, $2,
+etc).
+
+If you need a new command line option, just ask me, and I will add it.
+
+Global variables:
+----------------
+
+The following variables are also set, you can use any of them:
+
+MAINPACKAGE the name of the first binary package listed in
+ debian/control
+DH_FIRSTPACKAGE the first package we were instructed to act on. This package
+ typically gets special treatment, additional arguments
+ specified on the command line may effect it.
+
+Functions:
+---------
+
+Dh_lib also contains a number of functions you may find useful.
+
+doit()
+ Pass this function a string that is a shell command. It will run the
+ command (unless DH_NO_ACT is set), and if DH_VERBOSE is set, it will
+ also output the command to stdout. You should use this function for
+ almost all commands your program performs that manipulate files in
+ the package build directories.
+complex_doit()
+ This is the same as doit(), except you can pass more complicated
+ commands to it (ie, commands involving piping redirection)
+verbose_echo()
+ Pass this command a string, and it will echo it if DH_VERBOSE is set.
+error()
+ Pass this command a string, it will output it to standard error and
+ exit.
+warning()
+ Pass this command a string, and it will output it to standard error
+ as a warning message.
+tmpdir()
+ Pass this command the name of a binary package, it will return the
+ name of the tmp directory that will be used as this package's
+ package build directory. Typically, this will be "debian/tmp" or
+ "debian/package".
+pkgfile()
+ Pass this command the name of a binary package, and the base name of a
+ file, and it will return the actual filename to use. This is used
+ for allowing debhelper programs to have configuration files in the
+ debian/ directory, so there can be one config file per binary
+ package. The convention is that the files are named
+ debian/package.filename, and debian/filename is also allowable for
+ the MAINPACKAGE. If the file does not exist, nothing is returned.
+pkgext()
+ Pass this command the name of a binary package, and it will return
+ the name to prefix to files in debian/ for this package. For the
+ MAINPACKAGE, it returns nothing (there is no prefix), for the other
+ packages, it returns "package.".
+isnative()
+ Pass this command the name of a package, it returns 1 if the package
+ is a native debian package.
+ As a side effect, VERSION is set to the version number of the
+ package.
+autoscript()
+ Pass 3 parameters:
+ 1: script to add to
+ 2: filename of snippet
+ 3: sed commands to run on the snippet. Ie, s/#PACKAGE#/$PACKAGE/
+ (optional)
+ This command automatically adds shell script snippets to a debian
+ maintainer script (like the postinst or prerm).
+
+Notes:
+-----
+
+Dh_lib is still evolving.
+There will probably be a perl version too, in the future.
+
+-- Joey Hess <joeyh@master.debian.org>
diff --git a/doc/README b/doc/README
new file mode 100644
index 00000000..986eb02c
--- /dev/null
+++ b/doc/README
@@ -0,0 +1,100 @@
+Debhelper is a collection of programs that can be used in debian/rules files
+to automate common tasks. For further documentation, see the man pages for
+dh_* commands.
+
+To help you get started, I've included examples of debian/rules files
+that use debhelper commands extensively. See /usr/doc/debhelper/examples/ .
+These files are also useful as they give one good order you can run the
+various debhelper scripts in (though other variations are possible).
+
+Starting a new package:
+----------------------
+
+You can just use the example rules files and do the rest of the new package
+set up by hand, or you could try the new dh-make package, which contains a
+"dh_make" command that is similar to debmake, and tries to automate the
+process.
+
+Converting from debstd to debhelper:
+-----------------------------------
+
+See the file "from-debstd" for documentation on how to do this.
+
+Automatic generation of debian install scripts:
+----------------------------------------------
+
+Some debhelper commands will automatically generate parts of debian install
+scripts. If you want these automatically generated things included in your
+debian install scripts, then you need to add "#DEBHELPER#" to your scripts,
+in the place the code should be added. "#DEBHELPER#" will be replaced by any
+auto-generated code when you run dh_installdeb.
+
+All scripts that automatically generate code in this way let it be disabled
+by the -n parameter.
+
+Note that it will be shell code, so you cannot directly use it in a perl
+script. If you would like to embed it into a perl script, here is one way to
+do that:
+
+print << `EOF`
+#DEBHELPER#
+EOF
+
+
+Notes on multiple binary packages:
+---------------------------------
+
+If your source package generates more than one binary package, debhelper
+programs will default to acting on all binary packages when run. If your
+source package happens to generate one architecture dependent package, and
+another architecture independent package, this is not the correct behavior,
+because you need to generate the architecture dependent packages in the
+binary-arch debian/rules target, and the architecture independent packages
+in the binary-indep debian/rules target.
+
+To facilitate this, as well as give you more control over which packages
+are acted on by debhelper programs, all debhelper programs accept the
+following parameters:
+
+-a Act on architecture dependent packages
+-i Act on architecture independent packages
+-ppackage Act on the package named "package" (may be repeated multiple
+ times)
+
+These parameters are cumulative. If none are given, the tools default to
+affecting all packages.
+
+See examples/rules.multi for an example of how to use this.
+
+Package build directories -- debian/tmp, etc:
+--------------------------------------------
+
+By default, all debhelper programs assume that the temporary directory used
+for assembling the tree of files in a package is debian/tmp for the first
+package listed in debian/control, and debian/<packagename> for each
+additional package.
+
+Sometimes, you might want to use some other temporary directory. This is
+supported by the -P flag. The directory to use is specified after -P, for
+example, "dh_installdocs -Pdebian/tmp", will use debian/tmp as the temporary
+directory. Note that if you use -P, the debhelper programs can only be
+acting on a single package at a time. So if you have a package that builds
+many binary packages, you will need to use the -p flag to specify which
+binary package the debhelper program will act on. For example:
+
+ dh_installdocs -pfoolib1 -Pdebian/tmp-foolib1
+ dh_installdocs -pfoolib1-dev -Pdebian/tmp-foolib1-dev
+ dh_installdocs -pfoolib-bin -Pdebian/tmp-foolib-bin
+
+This uses debian/tmp-<package> as the package build directory.
+
+Other notes:
+-----------
+
+* In general, if any debhelper program needs a directory to exist under
+ debian/, it will create it. I haven't bothered to document this in all the
+ man pages, but for example, dh_installdeb knows to make debian/tmp/DEBIAN/
+ before trying to put files there, dh_installmenu knows you need a
+ debian/tmp/usr/lib/menu/ before installing the menu files, etc.
+
+-- Joey Hess <joeyh@master.debian.org>
diff --git a/doc/TODO b/doc/TODO
new file mode 100644
index 00000000..188e3c6c
--- /dev/null
+++ b/doc/TODO
@@ -0,0 +1,26 @@
+* add all other functionality of debstd (??)
+ - add a program to generate file similar to buildinfo.Debian generated by
+ debmake (wishlist bug #17043). I just never saw the point of that file..
+ - Make dh_movefiles remove emptied directories after it's moved all the
+ files out of them (wishlist bug #17111).
+* something should add ldconfig calls properly to the postinst of packages
+ that contain shared libraries. maybe dh_makeshlibs? But it wasn't designed
+ to do that originally, and even worse, it is often run after
+ dh_installdeb, so the fragements wouldn't go into the postinst. So maybe a
+ new script is called for.
+* info support for debhelper (currently implemented, but I hate how I did it,
+ so it's not in the package.) (wishlist bug #15717)
+* enhance dh_installmanpages so it associates binaries and man pages and
+ installs the man pages into the correct areas to suit the binaries they
+ document. I may need to make this only happen when a switch is given, to
+ preserve backward compatibility.
+* maybe make dh_installmanpages look at the .TH line of man pages whose
+ filenames end in .man, to figure out what section they go it. This would
+ require a switch to turn on, for backwards compatibility.
+* All debhelper programs should be checked that they output files with the
+ correct permissions no matter what the umask is set to. Currently, only
+ those programs that run after dh_fixperms have been so checked. (Checking
+ the rest is low priority, since dh_fixperms fixes any incorrect permissions
+ they might have; still it would be nice to check them too, just to make
+ debhelper more flexible.) One easy fix is to add umask 022 to dh_lib,
+ however, there may be unforeseen ramifications of such a change.
diff --git a/doc/from-debstd b/doc/from-debstd
new file mode 100644
index 00000000..31fd0cdd
--- /dev/null
+++ b/doc/from-debstd
@@ -0,0 +1,63 @@
+Converting from debstd to debhelper:
+-----------------------------------
+
+Debhelper is designed to be mostly backwards compatible to debstd. I say
+mostly because I haven't made debhelper handle everything that debstd does
+yet, and in a few cases, debhelper does things differently (and I hope,
+better).
+
+In general, you can switch over to using debhelper as follows. In your
+debian/rules, you currently will have some lines that read something like
+this:
+
+ debstd CHANGES TODO README
+ dpkg-gencontrol
+ dpkg --build debian/tmp ..
+
+Debhelper comes with a command called dh_debstd that mimics the behavior of
+debstd, by calling various debhelper commands. So in the root directory of
+your package you are converting, run:
+
+ dh_debstd CHANGES TODO README --verbose --no-act
+
+Notice the parallel to the debstd command above, I just added "--verbose --act"
+to the end. This will make dh_debstd output a list of commands that it thinks
+will emulate what debstd would have done, without actually doing anything to
+your package. The list will look similar to this:
+
+ dh_installdirs
+ dh_installdocs TODO README
+ dh_installexamples
+ dh_installchangelogs CHANGES
+ dh_installmenu
+ dh_installcron
+ dh_installmanpages
+ dh_movefiles
+ dh_strip
+ dh_compress
+ dh_fixperms
+ dh_suidregister
+ dh_shlibdeps
+ dh_gencontrol
+ dh_makeshlibs
+ dh_installdeb
+ dh_md5sums
+ dh_builddeb
+
+Now copy that output into debian/rules, replacing the debstd command, as
+well as any dpkg-gencontol and dpkg --build commands.
+
+Finally, debstd automatically modified postinst, postrm, etc scripts. Some
+of the debhelper apps do that too, but they do it differently. Debstd just
+appends its commands to the end of the script. Debhelper requires that you
+insert a tag into your scripts, that will tell debhelper where to insert
+commands. So if you have postinst, postrm, etc scripts, add a line reading
+"#DEBHELPER#" to the end of them.
+
+Once you think it's all set up properly, do a test build of your package. If
+it works ok, I recommend that you compare the new package and the old
+debstd-generated package very closely. Pay special attention to the
+postinst, postrm, etc scripts, and make sure that the new package contains
+all the same files as the old, with the same permissions.
+
+-- Joey Hess <joeyh@master.debian.org>