====== Magic Makefile for Debian Packages ====== Every now and then one would like to have a Debian package made of her very own software. This is where the Magic Makefile comes into play. ===== Source ===== Get it from http://repo.fischglas.de or http://www.fischglas.de/software/magicmakefile. ===== Usage ===== ====== Magic Makefile (Version 0.99.7, 0.99.9) ===== ==== Create a new Project ==== create a project directory and populate it: mkdir myproject cd myproject cp /usr/share/magicmakefile/Makefile . Inside Makefile, change: APPNAME=some-app VERSION=0.0 Create ''magic-makefile.inc'': UPLOADURL=http://example.com/cgi/repo-insert DEBIAN_FULL_NAME=John Doe DEBIAN_EMAIL=John.Doe@example.com DEBIAN_HOMEPAGE=http://example.com/debian-local/ VERSION_CONTROL_SYSTEM=git **Hint**: as of 0.99.7 you may choose between ''git'' and ''svn''. **Caveat**: Do not use quotes inside ''magic-makefile.inc''. If you're planning to use Magic Makefile for several projects or site wide you may have a ''~/.magic-makefile.inc'' and even a ''/etc/magic-makefile/magic-makefile.inc''. Create Debian special foo i.e. the ''debian/'' subdirectory. make debian-prepkg Add a description to ''debian/control''. See http://www.debian.org/doc/manuals/maint-guide/dreq.en.html for details. ==== Project components ==== see below ====== Magic Makefile (Version 0.99.5.1) ====== ==== Create a new Project ==== create a project directory and populate it: mkdir myproject cd myproject cp /usr/share/magicmakefile/Makefile . Inside Makefile, change: APPNAME=some-app VERSION=0.0 UPLOADURL=http://example.com/cgi/repo-insert DEBIAN_FULL_NAME=John Doe DEBIAN_EMAIL=John.Doe@example.com DEBIAN_HOMEPAGE=http://example.com/debian-local/ **Hint**: as of 0.99.5.1 **no quotation** is needed here. Create Debian special foo i.e. the ''debian/'' subdirectory. make debian-prepkg Add a description to ''debian/control''. See http://www.debian.org/doc/manuals/maint-guide/dreq.en.html for details. ==== Project components ==== The basic idea behind Magic Makefile is to provide a fixed set of (mostly) flat subdirectories whose contents are to go to corresponding system directories. E.g. the contents of ''ubin'' will go to ''/usr/bin''. The list of subdirectories: ^ project subdir ^ system directory | | bin | /bin | | ubin | /usr/bin | | sbin | /sbin | | usbin | /usr/sbin | | ushare | /usr/share/$(APPNAME) | | ulbin | /usr/local/bin | | ulsbin | /usr/local/sbin | | ulib | /usr/lib | | etc/$(APPNAME) | /etc/$(APPNAME) | | etc/$(APPNAME).d | /etc/$(APPNAME).d | | etc/init.d | /etc/init.d | | etc/cron.d | /etc/cron.d | | etc/cron.daily | /etc/cron.daily | | etc/cron.hourly | /etc/cron.hourly | | etc/cron.weekly | /etc/cron.weekly | | etc/cron.monthly | /etc/cron.monthly | The contents of ''docs/'' are directed to several documentation subdirectories: ^ file name ^ system directory ^ generated file type ^ | *.sgml | /usr/share/doc/$(APPNAME) | .html man (.1-.8) | | *.html | /usr/share/doc/$(APPNAME) | | | *.1 .. .8 | /usr/share/man1 .. man8 | | | copyright | /usr/share/doc/$(APPNAME) | | It is encouraged that documentation is provided as DocBook/SGML because all other document formats (like HTML, TXT and man) might be derived from SGML by Magic Makefile automatically. You might want to copy this sample ([[ :project:magic-makefile:manual-sgml-sample ]]) to docs/$(APPNAME).sgml . ==== Development Cycle & Updating ==== After you've changed things and want to release the new version of your software, follow these steps: * update the ''VERSION'' inside Makefile * update ''debian/changelog'' (see below) * run ''make debian-dpkg'' * if you have a Subversion repository - run ''make commit'' * if you have an APT repository set up the way I have - run ''make debian-upload'' ==== Hints ==== === debian/changelog === The format of ''debian/changelog'' looks like this (without leading line numbers): 1 magicmakefile (0.99.5) unstable; urgency=low 2 3 * added recommends dh-make, curl 4 5 -- chris Tue, 18 Dec 2012 08:53:14 +0100 6 7 magicmakefile (0.99.4) unstable; urgency=low 8 9 * generic support f. manpages 10 11 -- chris Mon, 29 Oct 2012 20:11:15 +0100 * 1 : package-name (version) (stable|unstable|testing); urgency=(low|high) * 2 : empty line * 3 : two spaces, '*', space, text * 4 : empty line * 5 : space, two '-', space, your name, space, '<', your email address, '>', TWO spaces, $( date -R ) * 6 : empty line There may be multiple subsequent lines like line 3.