====== Building a Debian package for ooRexx ======
This is intended to be a short manual for building a debian package of ooRexx. At the moment this consists of information that can not be found in the ooRexx source or any official ooRexx debian package - there is none...
Throughout the manual I assume that the C build environment is set up correctly to allow ooRexx to compile. If the normal compile works (the combination of bootstrapping, configuring and make) then only a few more tools are required to build the debian package.
As a first start I recomment reading [[http://www.debian.org/doc/maint-guide/|Debian New Maintainers' Guide]] which explains a lot of details about the package building process.
Here are the build dependencies:
debhelper, autotools-dev, libc6, libgcc1, xalan, libtool (>= 1.5), g++ (>= 4)
Note that the version requirements may not be strict, I guess ooRexx also compiles with gcc 3.x. After the required packages have been installed (xalan is not necessarily required) some debian specific files need to be added to the source.
Inside the main source directory (in the SVN tree located under /main/trunk) create a directory ''debian''.
Inside create
* changelog:
oorexx (4.0.0) stable; urgency=medium
* Initial debianization.
-- Your Name Fri, 03 Oct 2008 22:00:00 -0100
* compat
5
* control
Source: oorexx
Section: interpreters
Priority: optional
Maintainer: Moritz Hoffmann
Build-Depends: debhelper, autotools-dev, libc6, libgcc1, xalan, libtool (>=1.5), g++ (>=4)
Standards-Version: 3.7.2
Package: oorexx
Conflicts: regina-rexx
Architecture: i386
Depends: ${shlibs:Depends}
Description: Open Object Rexx (ooRexx)
ooRexx is an Open Source project managed by Rexx Language Association (RexxLA)
providing a free implementation of Object Rexx.
ooRexx is distributed under Common Public License (CPL) v1.0.
Object Rexx is an enhancement of classic Rexx; a powerful, full-featured
programming language which has a human-oriented syntax. The Open Object Rexx
interpreter allows you to write programs procedurally as well as in an
object-oriented fashion. Its main benefits include:
* Easy to use and easy to learn
* Upwardly compatible with classic Rexx
* The ability to issue commands to multiple environments
* Offers powerful functions
* Based on English-like commands
* Enhanced with full object orientation
* Designed for object-oriented programming, and also allows Rexx
conventional programming
* Provides a standard Rexx API to develop external function libraries
written in C (provided by librexx4-dev)
Package: librexx4-dev
Section: libdevel
Provides: librexx-dev
Conflicts: librexx-dev
Architecture: i386
Depends: libc6-dev
Description: Open Object Rexx, development files
ooRexx is an Open Source project managed by Rexx Language Association (RexxLA)
providing a free implementation of Object Rexx.
ooRexx is distributed under Common Public License (CPL) v1.0.
This package contains shared libraries required by ooRexx.
Package: librexx4
Section: libs
Architecture: i386
Depends: ${shlibs:Depends}
Description: Open Object Rexx, run-time library librexx
ooRexx is an Open Source project managed by Rexx Language Association (RexxLA)
providing a free implementation of Object Rexx.
ooRexx is distributed under Common Public License (CPL) v1.0.
This package contains the development headers for building applications
interfacing with ooRexx.
Package: oorexx-dbg
Section: devel
Architecture: i386
Depends: oorexx (= ${binary:Version})
Description: Open Object Rexx, run-time library debug symbols
ooRexx is an Open Source project managed by Rexx Language Association (RexxLA)
providing a free implementation of Object Rexx.
ooRexx is distributed under Common Public License (CPL) v1.0.
This package contains the debug symbols for librexx4.
* copyright -- This should be a copy of the CPL text, if building for your own leave it empty.
* docs
CONTRIBUTORS
* rules (chmod to executable). Here starts the interesting stuff. This script builds ooRexx binary, library and developement and debug package. Note that all but the debug and the development need to be installed.
#!/usr/bin/make -f
#/*----------------------------------------------------------------------------*/
#/* */
#/* Copyright (c) 2008 Rexx Language Association. All rights reserved. */
#/* */
#/* This program and the accompanying materials are made available under */
#/* the terms of the Common Public License v1.0 which accompanies this */
#/* distribution. A copy is also available at the following address: */
#/* http://www.oorexx.org/license.html */
#/* */
#/* Redistribution and use in source and binary forms, with or */
#/* without modification, are permitted provided that the following */
#/* conditions are met: */
#/* */
#/* Redistributions of source code must retain the above copyright */
#/* notice, this list of conditions and the following disclaimer. */
#/* Redistributions in binary form must reproduce the above copyright */
#/* notice, this list of conditions and the following disclaimer in */
#/* the documentation and/or other materials provided with the distribution. */
#/* */
#/* Neither the name of Rexx Language Association nor the names */
#/* of its contributors may be used to endorse or promote products */
#/* derived from this software without specific prior written permission. */
#/* */
#/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */
#/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */
#/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */
#/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */
#/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */
#/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */
#/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */
#/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */
#/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */
#/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */
#/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
#/* */
#/*----------------------------------------------------------------------------*/
# Uncomment this to turn on verbose mode.
export DH_VERBOSE=1
# This is the debhelper compatibility version to use.
CFLAGS = -g
ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
CFLAGS += -O0
else
CFLAGS += -O2
endif
deboorexx = $(CURDIR)/debian/oorexx
#deboorexxdbg = $(deboorexx)-dbg
deboorexxlib = $(CURDIR)/debian/librexx4
deboorexxlibdev = $(deboorexxlib)-dev
build: build-stamp
build-stamp:
dh_testdir
libtoolize --copy --force --automake
aclocal
autoheader -Wall
automake --add-missing --copy -Werror
#--foreign
autoconf -Wall
./configure --prefix=/usr --config-cache
# Add here commands to compile the package.
$(MAKE) -s
touch build-stamp
clean:
dh_testdir
dh_testroot
rm -f build-stamp
# Add here commands to clean up after the build process.
[ ! -f Makefile ] || $(MAKE) clean
dh_clean
install: build
dh_testdir
dh_testroot
dh_clean -k
dh_installdirs
# oorexx package
# install rexx, rexxc, rxqueue, rxsubcom, rxdelipc
$(MAKE) install-binPROGRAMS DESTDIR=$(deboorexx)
# install rexx.img, rexx.cat, oorexx-config, rx*.cls, samples, readme
$(MAKE) install-exec-local DESTDIR=$(deboorexx)
# This doesn't work: all files under /usr/bin are executable, no matter what we do here...
# rexx.img needs to be moved somewhere else, e.g /usr/lib/ooRexx
# find $(deboorexx)/usr/bin -perm /111 -exec chrpath -d '{}' \;
# install man pages
$(MAKE) install-man DESTDIR=$(deboorexx)
# install private libraries
$(MAKE) install-pkglibLTLIBRARIES DESTDIR=$(deboorexx)
rm -f $(deboorexx)/usr/lib/ooRexx/librexx.* $(deboorexx)/usr/lib/ooRexx/*.la
# move rexx.cat to correct location
install -d $(deboorexx)/usr/share/locale/C/
mv $(deboorexx)/usr/bin/rexx.cat $(deboorexx)/usr/share/locale/C/
# librexx package - this only includes librexx
$(MAKE) install-pkglibLTLIBRARIES DESTDIR=$(deboorexxlib)
# remove all a and so files, they're not needed
rm -f $(deboorexxlib)/usr/lib/ooRexx/*.a $(deboorexxlib)/usr/lib/ooRexx/*.so $(deboorexxlib)/usr/lib/*.la
# move librexx to shared directory
mv $(deboorexxlib)/usr/lib/ooRexx/librexx.* $(deboorexxlib)/usr/lib
# remove private lib directory
rm -r $(deboorexxlib)/usr/lib/ooRexx/
# librexx-dev package for librexx
# librexx-dev package for librexx
# install all libraries
$(MAKE) install-pkglibLTLIBRARIES DESTDIR=$(deboorexxlibdev)
# install header file
$(MAKE) install-includeHEADERS DESTDIR=$(deboorexxlibdev)
# move the wanted library to shared location
mv $(deboorexxlibdev)/usr/lib/ooRexx/librexx.* $(deboorexxlibdev)/usr/lib
# delete all other libraries
rm -rf $(deboorexxlibdev)/usr/lib/ooRexx/
# delete unused files - they are part of librexx
rm -f $$(find $(deboorexxlibdev)/usr/lib/ -regex '.*\.\(la\|so\..*\)$$')
# Build architecture-independent files here.
binary-indep: build install
# We have nothing to do by default.
# Build architecture-dependent files here.
binary-arch: build install
dh_testdir
dh_testroot
# dh_installdebconf
dh_installdocs
# dh_installexamples
# dh_installmenu
# dh_installlogrotate
# dh_installemacsen
# dh_installpam
# dh_installmime
# dh_installinit
# dh_installcron
dh_installman
# dh_installinfo
# dh_undocumented
dh_installchangelogs CHANGES
dh_link
dh_strip --dbg-package=oorexx-dbg
dh_compress
dh_fixperms
dh_makeshlibs
dh_installdeb
# dh_perl
dh_shlibdeps
dh_gencontrol
dh_md5sums
dh_builddeb
binary: binary-indep binary-arch
.PHONY: build clean binary-indep binary-arch binary install
Now all files should be in place.
From the top source directory issue the command dpkg-buildpackage -rfakeroot
or, if only the .deb packages are required: fakeroot debian/rules binary
to directly build the debs.
If the build succeeds the deb files should appear in the directory above the source:
moritz@TP42:debian % ls -al ../..
-rw-r--r-- 1 moritz moritz 528450 2008-10-03 22:14 librexx4_4.0.0_i386.deb
-rw-r--r-- 1 moritz moritz 759566 2008-10-03 22:14 librexx4-dev_4.0.0_i386.deb
-rw-r--r-- 1 moritz moritz 363346 2008-10-03 22:14 oorexx_4.0.0_i386.deb
-rw-r--r-- 1 moritz moritz 2041952 2008-10-03 22:14 oorexx-dbg_4.0.0_i386.deb
Now oorexx and librexx4 can be installed via dpkg:
moritz@TP42:debian % sudo dpkg -i ../../librexx4_4.0.0_i386.deb
[sudo] password for moritz:
(Reading database ... 201514 files and directories currently installed.)
Preparing to replace librexx4 4.0.0 (using ../../librexx4_4.0.0_i386.deb) ...
Unpacking replacement librexx4 ...
Setting up librexx4 (4.0.0) ...
moritz@TP42:debian % sudo dpkg -i ../../oorexx_4.0.0_i386.deb
(Reading database ... 201511 files and directories currently installed.)
Preparing to replace oorexx 4.0.0 (using ../../oorexx_4.0.0_i386.deb) ...
Unpacking replacement oorexx ...
Setting up oorexx (4.0.0) ...
Processing triggers for man-db ...
Now try to run it:
moritz@TP42:debian % rexx -e "parse version s;say s"
REXX-ooRexx_4.0.0(MT) 6.03 3 Oct 2008