summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoey <joey>1999-08-17 04:12:54 +0000
committerjoey <joey>1999-08-17 04:12:54 +0000
commit938b66ee19e113785e6655b1c3e73e9003e6464c (patch)
treed06bd22faa3da8940bec71ba2e34e2028b6e7764
r1: Initial revision
-rw-r--r--TODO6
-rw-r--r--debian/changelog6
-rw-r--r--debian/control13
-rw-r--r--debian/copyright5
-rwxr-xr-xdebian/rules42
-rwxr-xr-xdh_builddeb7
-rwxr-xr-xdh_clean16
-rwxr-xr-xdh_compress40
-rwxr-xr-xdh_fixperms29
-rwxr-xr-xdh_installchangelogs32
-rwxr-xr-xdh_installdebfiles35
-rwxr-xr-xdh_installdocs26
-rwxr-xr-xdh_installexamples21
-rwxr-xr-xdh_installmanpages31
-rwxr-xr-xdh_installmenu24
-rw-r--r--dh_lib50
-rwxr-xr-xdh_testdir14
-rwxr-xr-xdh_testroot10
-rwxr-xr-xexamples/rules41
19 files changed, 448 insertions, 0 deletions
diff --git a/TODO b/TODO
new file mode 100644
index 00000000..de0177fa
--- /dev/null
+++ b/TODO
@@ -0,0 +1,6 @@
+shared libaries
+.so files of compressed manpages change to symlinks
+multiple binary packages support
+edit package scripts (??)
+add all other functionality of debstd (??)
+documentation
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 00000000..87d52639
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,6 @@
+debhelper (0.1) experimental; urgency=low
+
+ * First release. This is a snapshot of my work so far, and it not yet
+ ready to replace debstd.
+
+ -- Joey Hess <joeyh@master.debian.org> Mon, 22 Sep 1997 15:01:25 -0400
diff --git a/debian/control b/debian/control
new file mode 100644
index 00000000..b934849f
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,13 @@
+Source: debhelper
+Section: devel
+Priority: optional
+Maintainer: Joey Hess <joeyh@master.debian.org>
+Standards-Version: 2.1.1.0
+
+Package: debhelper
+Architecture: all
+Description: helper programs for debian/rules
+ A collection of programs that can be used in a debian/rules file to
+ automate common tasks. Programs are included to install various files into
+ your package, compress files, fix file permissions, integrate your package
+ with the debian menu system, etc.
diff --git a/debian/copyright b/debian/copyright
new file mode 100644
index 00000000..0feed1b2
--- /dev/null
+++ b/debian/copyright
@@ -0,0 +1,5 @@
+Debhelper is written by Joey Hess <joeyh@master.debian.org>.
+Parts of the code came from debmake, by Christoph Lameter
+<clameter@debian.org>.
+
+The copyright of this package is GPL.
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 00000000..0806a4db
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,42 @@
+#!/usr/bin/make -f
+# Note that I have to refer to debhelper programs witrh ./, to make sure
+# I run the most current ones.
+
+test_files=dh_lib
+
+build:
+ ./dh_testdir $(test_files)
+
+clean:
+ ./dh_testdir $(test_files)
+ ./dh_testroot
+ ./dh_clean
+
+# Build architecture-dependent files here.
+binary-arch: build
+ # We have nothing to do by default.
+
+# Build architecture-independent files here.
+binary-indep: build
+ ./dh_testdir $(test_files)
+ ./dh_testroot
+ ./dh_clean
+
+ install -d debian/tmp/usr/bin
+ find . -perm +111 -maxdepth 1 -type f \
+ -exec install -p {} debian/tmp/usr/bin \;
+ install -d debian/tmp/usr/lib/debhelper
+ cp dh_lib debian/tmp/usr/lib/debhelper
+
+ ./dh_installdocs TODO
+ ./dh_installexamples examples/*
+# ./dh_installmenu
+ ./dh_installmanpages
+ ./dh_installchangelogs
+ ./dh_compress
+ ./dh_installdebfiles
+ ./dh_fixperms
+ ./dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary
diff --git a/dh_builddeb b/dh_builddeb
new file mode 100755
index 00000000..a62e81ce
--- /dev/null
+++ b/dh_builddeb
@@ -0,0 +1,7 @@
+#!/bin/sh -e
+#
+# Build the .deb package, assuming all the files are set up in debian/tmp.
+
+PATH=debian:$PATH:/usr/lib/debhelper
+source dh_lib
+doit "dpkg --build debian/tmp .."
diff --git a/dh_clean b/dh_clean
new file mode 100755
index 00000000..da2c4b22
--- /dev/null
+++ b/dh_clean
@@ -0,0 +1,16 @@
+#!/bin/sh -e
+#
+# Clean up debian/tmp and other teporary files generated by the
+# build process.
+
+PATH=debian:$PATH:/usr/lib/debhelper
+source dh_lib
+
+doit "rm -rf debian/tmp"
+doit "rm -f debian/substvars debian/*.substvars debian/files*"
+
+# Remove other temp files. I don't run this through doit becuase
+# I haven't figured out what I have to esacape to put it in quotes.
+# However, it doesn't modify debian/tmp, so I guess it's ok to not run it
+# through doit.
+find . \( -name "\#*\#" -o -name "*~" -o -name "DEADJOE" \) -exec rm -f {} \;
diff --git a/dh_compress b/dh_compress
new file mode 100755
index 00000000..e1f8ed64
--- /dev/null
+++ b/dh_compress
@@ -0,0 +1,40 @@
+#!/bin/sh -e
+#
+# Compresses files and makes sure that symlinks pointing to the
+# compressed files get fixed.
+
+PATH=debian:$PATH:/usr/lib/debhelper
+source dh_lib
+
+# The config file is a sh script that outputs the files to be compressed
+# (typically using find).
+if [ -f debian/compress ]; then
+ files=`sh debian/compress 2>/dev/null`
+else
+ # By default fall back on what the policy manual says to compress.
+ files=`
+ find debian/tmp/usr/info debian/tmp/usr/man \
+ debian/tmp/usr/X11*/man -type f 2>/dev/null ;
+ find debian/tmp/usr/doc -type f -size +4k \
+ ! -name "*.htm*" ! -name "*.gif" \
+ ! -name "debian/tmp/usr/doc/*/copyright" 2>/dev/null
+ `
+fi
+
+if [ "$files" ]; then
+ # This is just a cosmetic fix.
+ files=`echo $files | tr "\n" " "`
+
+ doit "gzip -9 $files" || true
+fi
+
+# Fix up symlinks that were pointing to the uncompressed files.
+for file in `find debian/tmp -type l`; do
+ DIRECTORY=`expr $file : "\(.*\)/[^/]*"`
+ NAME=`expr $file : ".*/\([^/]*\)"`
+ LINKVAL=`ls -l $DIRECTORY/$NAME | awk '{ print $11;}'`
+ if [ ! -e $DIRECTORY/$LINKVAL -a -f $DIRECTORY/$LINKVAL.gz ]; then
+ doit "rm $DIRECTORY/$NAME"
+ doit "ln -s $LINKVAL.gz $DIRECTORY/$NAME.gz"
+ fi
+done
diff --git a/dh_fixperms b/dh_fixperms
new file mode 100755
index 00000000..a2fd9442
--- /dev/null
+++ b/dh_fixperms
@@ -0,0 +1,29 @@
+#!/bin/sh -e
+#
+# Do some general file permission fixups.
+
+PATH=debian:$PATH:/usr/lib/debhelper
+source dh_lib
+
+# General things..
+if [ -d debian/tmp ]; then
+ doit "chown -R root.root debian/tmp"
+ doit "chmod -R go=rX debian/tmp"
+fi
+
+# Fix up premissions in /usr/doc, setting everything to not exectable
+# by default.
+files=`find debian/tmp/usr/doc -type f 2>/dev/null | tr "\n" " "` || true
+if [ "$files" ]; then
+ doit "chmod 644 $files"
+fi
+files=`find debian/tmp/usr/doc -type d 2>/dev/null | tr "\n" " "` || true
+if [ "$files" ]; then
+ doit "chmod 755 $files"
+fi
+
+# Executable man pages is just not done.
+files=`find debian/tmp/usr/man/ debian/tmp/usr/X11*/man/ -type f 2>/dev/null | tr "\n" " "` || true
+if [ "$files" ]; then
+ doit "chmod 644 $files"
+fi
diff --git a/dh_installchangelogs b/dh_installchangelogs
new file mode 100755
index 00000000..935a87a6
--- /dev/null
+++ b/dh_installchangelogs
@@ -0,0 +1,32 @@
+#!/bin/sh -e
+#
+# Installs debian/changelog. If another filename is passed to it, installs
+# that file as the upstream changelog.
+#
+# Looks at debian/control to determine if this is a native debian package,
+# if so, the debian changelog is just installed as "changelog", and it is an
+# error to specify an upstream changelog on the command line.
+
+PATH=debian:$PATH:/usr/lib/debhelper
+source dh_lib
+
+UPSTREAM=$1
+
+if [ "$NATIVE" -a "$UPSTREAM" ]; then
+ error "Cannot specify an upstream changelog for a native package."
+fi
+
+if [ "$NATIVE" ]; then
+ CHANGELOG_NAME=changelog
+else
+ CHANGELOG_NAME=changelog.Debian
+fi
+
+if [ ! -d debian/tmp/usr/doc/$PACKAGE ]; then
+ doit "install -d debian/tmp/usr/doc/$PACKAGE"
+fi
+doit "install -p -m644 debian/changelog debian/tmp/usr/doc/$PACKAGE/$CHANGELOG_NAME"
+
+if [ "$UPSTREAM" ]; then
+ doit "install -p -m644 $UPSTREAM debian/tmp/usr/doc/$PACKAGE/changelog"
+fi
diff --git a/dh_installdebfiles b/dh_installdebfiles
new file mode 100755
index 00000000..ada82155
--- /dev/null
+++ b/dh_installdebfiles
@@ -0,0 +1,35 @@
+#!/bin/sh -e
+#
+# Install files from debian/ into the package's DEBIAN directory.
+# Also generates the control file.
+
+PATH=debian:$PATH:/usr/lib/debhelper
+source dh_lib
+
+if [ ! -d debian/tmp/DEBIAN ]; then
+ doit "install -d debian/tmp/DEBIAN"
+fi
+
+# Install executable files.
+for file in postinst preinst prerm postrm; do
+ if [ -f debian/$file ]; then
+ doit "install -p debian/$file debian/tmp/DEBIAN"
+ fi
+done
+
+# Install non-executable files
+for file in shlibs conffiles; do
+ if [ -f debian/$file ]; then
+ doit "install -m 644 -p debian/$file debian/tmp/DEBIAN"
+ fi
+done
+
+# Run dpkg-shlibdeps to generate dependancies.
+# This ends up running dpkg-shlibdeps on scripts, but that is no big deal.
+files=`find debian/tmp -type f -perm +111 | tr "\n" " "`
+if [ "$files" ]; then
+ doit "dpkg-shlibdeps $files"
+fi
+
+# Generate and install control file.
+doit "dpkg-gencontrol -p$PACKAGE"
diff --git a/dh_installdocs b/dh_installdocs
new file mode 100755
index 00000000..9481ec4e
--- /dev/null
+++ b/dh_installdocs
@@ -0,0 +1,26 @@
+#!/bin/sh -e
+#
+# Reads debian/docs, and looks at files listed on command line, installs all
+# files listed there into /usr/doc/$PACKAGE
+# Also installs the debian/copyright and debian/README.debian and debian/TODO
+
+PATH=debian:$PATH:/usr/lib/debhelper
+source dh_lib
+
+if [ ! -d debian/tmp/usr/doc/$PACKAGE ]; then
+ doit "install -d debian/tmp/usr/doc/$PACKAGE"
+fi
+
+if [ -e debian/docs ]; then
+ docs=`cat debian/docs | tr "\n" " "`
+fi
+
+for file in $docs $@; do
+ doit "cp -a $file debian/tmp/usr/doc/$PACKAGE/"
+done
+
+for file in copyright README.debian TODO ; do
+ if [ -f debian/$file ]; then
+ doit "install -m 644 -p debian/$file debian/tmp/usr/doc/$PACKAGE/"
+ fi
+done
diff --git a/dh_installexamples b/dh_installexamples
new file mode 100755
index 00000000..7aec26eb
--- /dev/null
+++ b/dh_installexamples
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+#
+# Reads debian/examples, installs all files listed there into
+# /usr/doc/$PACKAGE/examples
+
+PATH=debian:$PATH:/usr/lib/debhelper
+source dh_lib
+
+if [ -e debian/examples ]; then
+ examples=`cat debian/examples | tr "\n" " "`
+fi
+
+if [ "$examples" -o $@ ]; then
+ if [ ! -d debian/tmp/usr/doc/$PACKAGE/examples ]; then
+ doit "install -d debian/tmp/usr/doc/$PACKAGE/examples"
+ fi
+
+ for file in $examples $@; do
+ doit "cp -a $file debian/tmp/usr/doc/$PACKAGE/examples/"
+ done
+fi
diff --git a/dh_installmanpages b/dh_installmanpages
new file mode 100755
index 00000000..9dbf1c93
--- /dev/null
+++ b/dh_installmanpages
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+#
+# Automatically find and install man pages.
+# This is a little bit DWIMish, but still very handy.
+
+PATH=debian:$PATH:/usr/lib/debhelper
+source dh_lib
+
+# Note: this was mostly copied from debstd, and not verified to work.
+# Find all filenames that look like man pages.
+for file in `find * -name "*.[1-9]*" ! -name "*.ex" ! -name "*.in"`; do
+ # Make sure they arn't alreadt in debian/tmp
+ if ! expr $file : 'debian/tmp/.*' >/dev/null; then
+ # Make sure file thinks they are man pages.
+ if file $file|grep -q roff; then
+ if echo $file|grep -q /; then
+ NAME=`expr $file : '.*/\(.*\)'`
+ else
+ NAME=$file
+ fi
+ SECTION=man`expr $NAME : '.*\.\([123456789]\)'`
+ if [ ! -e debian/tmp/usr/man/$SECTION/$NAME -a \
+ ! -e debian/tmp/usr/X11*/man/$SECTION/$NAME ]; then
+ if [ ! -d debian/tmp/usr/man/$SECTION ]; then
+ doit "install -d debian/tmp/usr/man/$SECTION"
+ fi
+ doit "install -p -m644 $file debian/tmp/usr/man/$SECTION/$NAME"
+ fi
+ fi
+ fi
+done
diff --git a/dh_installmenu b/dh_installmenu
new file mode 100755
index 00000000..26798c29
--- /dev/null
+++ b/dh_installmenu
@@ -0,0 +1,24 @@
+#!/bin/sh -e
+#
+# Integration with debian menu system:
+#
+# If debian/menu file exists, save it to debian/tmp/usr/lib/menu/$PACKAGE
+# If debian/menu-method file exists, save it to
+# debian/tmp/etc/menu-methods/$PACKAGE
+
+PATH=debian:$PATH:/usr/lib/debhelper
+source dh_lib
+
+if [ -e debian/menu ]; then
+ if [ ! -d debian/tmp/usr/lib/menu ]; then
+ doit "install -d debian/tmp/usr/lib/menu"
+ fi
+ doit "install -p -m644 debian/menu debian/tmp/usr/lib/menu/$PACKAGE"
+fi
+
+if [ -e debian/menu-method ]; then
+ if [ ! -d debian/tmp/etc/menu-methods ]; then
+ doit "install -d debian/tmp/etc/menu-methods"
+ fi
+ doit "install -p debian/menu-method debian/tmp/etc/menu-methods/$PACKAGE"
+fi
diff --git a/dh_lib b/dh_lib
new file mode 100644
index 00000000..d9266395
--- /dev/null
+++ b/dh_lib
@@ -0,0 +1,50 @@
+# Library functions for debhelper programs.
+
+# Run a command, and display the command to stdout if verbose mode is on.
+# All commands that edit debian/tmp should be ran via this function.
+function doit() {
+ verbose_echo "$1"
+ $1
+}
+
+# Echo something if the verbose flag is on.
+function verbose_echo() {
+ if [ "$DH_VERBOSE" ]; then
+ echo " $1"
+ fi
+}
+
+# Echo an error message and exit.
+function error() {
+ echo `basename $0`": $1" >&2
+ exit 1
+}
+
+# Argument processing and global variable initialization is below.
+
+# Get the package name and version from the changelog.
+LINE=`head -1 debian/changelog`
+PACKAGE=`expr "$LINE" : '\(.*\) (.*)'`
+VERSION=`expr "$LINE" : '.* (\(.*\))'`
+
+# Is this a native Debian package?
+if ! expr "$VERSION" : '.*-' >/dev/null; then
+ NATIVE=1
+fi
+
+# Parse command line.
+set -- `getopt v $*`
+
+for i; do
+ case "$i"
+ in
+ -v)
+ DH_VERBOSE=1
+ shift
+ ;;
+ --)
+ shift
+ break
+ ;;
+ esac
+done
diff --git a/dh_testdir b/dh_testdir
new file mode 100755
index 00000000..4d3c700b
--- /dev/null
+++ b/dh_testdir
@@ -0,0 +1,14 @@
+#!/bin/sh -e
+#
+# Checks to make sure we are building the package in the right directory.
+# Tests for the existance of debian/control, and for the existance
+# of any other files you specify on the command line.
+
+PATH=debian:$PATH:/usr/lib/debhelper
+source dh_lib
+
+for file in debian/control $@; do
+ if [ ! -e "$file" ] ; then
+ error "\"$file\" not found. Are you sure you are in the correct directory?"
+ fi
+done
diff --git a/dh_testroot b/dh_testroot
new file mode 100755
index 00000000..fcc9b474
--- /dev/null
+++ b/dh_testroot
@@ -0,0 +1,10 @@
+#!/bin/sh -e
+#
+# Checks to make sure you are root.
+
+PATH=debian:$PATH:/usr/lib/debhelper
+source dh_lib
+
+if [ "`whoami`" != root ]; then
+ error "You must run this as root."
+fi
diff --git a/examples/rules b/examples/rules
new file mode 100755
index 00000000..e6ebf0b0
--- /dev/null
+++ b/examples/rules
@@ -0,0 +1,41 @@
+#!/usr/bin/make -f
+# Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess.
+
+build: build-stamp
+build-stamp:
+ dh_testdir
+ # Add here commands to compile the pacckage.
+ #$(MAKE)
+ touch build-stamp
+
+clean:
+ dh_testdir
+ dh_testroot
+ dh_cleantmp
+ # Add here commands to clean up after the build process.
+ #-$(MAKE) distclean
+ rm -f build-stamp
+
+# Build architecture-independent files here.
+binary-indep: build
+ # We have nothing to do by default.
+
+# Build architecture-dependent files here.
+binary-arch: build
+ dh_testdir
+ dh_testroot
+ dh_cleantmp
+ # Add here commands to install the files into debian/tmp
+ #$(MAKE) PREFIX=debian/tmp install
+ dh_installdocs
+ dh_installexamples
+ dh_installmenu
+ dh_installmanpages
+ dh_installchangelogs
+ dh_compress
+ dh_installdebfiles
+ dh_fixperms
+ dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary