From 31cbd4d9873af948d5432fa783409f02cad71624 Mon Sep 17 00:00:00 2001 From: Justin Davis Date: Thu, 31 May 2012 13:50:19 -0400 Subject: Start writing docs. First a manpage for genpkg. --- man/genpkg.1 | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 man/genpkg.1 (limited to 'man/genpkg.1') diff --git a/man/genpkg.1 b/man/genpkg.1 new file mode 100644 index 0000000..0c982c4 --- /dev/null +++ b/man/genpkg.1 @@ -0,0 +1,80 @@ +.TH GENPKG 1 2012-5-31 +.SH NAME +genpkg \- ArchLinux package meta generator +.SH SYNOPSIS +.B genpkg +[ +.B names of packages to generate +] +.SH DESCRIPTION +.PP +If PKGBUILDs are binary package generators, then \fBgenpkg\fR is a package +generator generator. \fBgenpkg\fR creates PKGBUILDs and supporting files that +can be used to create source packages or build binary packages. The purpose +of \fBgenpkg\fR is to more easily automate the creation of packages. The +primary goal is to map packages from other sources of software releases. +.PP +Software releases include perl's CPAN distributions, python's +PyPI eggs, or ruby's gems. In order to meet my current needs, +\fBgenpkg\fR currently supports perl CPAN distributions. The design +should make it easy to add support for any other such sources. \fBgenpkg\fR +is merely the front to several other scripts which are responsible for the +different stages of package generation. +.SH FILES +.PP +The following directories are used by genpkg, by default. Right now it +is only possible to change them by editing genpkg. They are at the top of +the script. +.IP \fB$HOME/pkg/dest/\fR +Generated packages are stored here +.IP \fB$HOME/pkg/mods/\fR +Modifications are searched for in this directory. +.IP \fB$HOME/.genpkg/preps/\fR +Preparation scripts are searched for here. Each script may have a +supporting directory as well. +.IP \fB$HOME/.genpkg/var/\fR +Data that needs to be saved between invocations by preparation +scripts is stored here. These are usually indices of releases. +.SH IMPLEMENTATION NOTES +.SS Preparation +.PP +The first stage is preparation performed by the \fIprepkg(1)\fR script. +Software releases (i.e. tarballs) must be fetched and general information +about the package is determined from these downloaded files. Scripts +called \fI"preps"\fR are each queried in turn to see if the specified package +is one they recognize. Each package source has its own prep script, though +currently only one exists for the CPAN. The prep creates a PKGDATA file, +a simple key/value text file, and initializes the PKGBUILD functions by using +\fIputpkgtree(1)\fR. \fBprepkg\fR's duty is then finished. +.SS Modification +.PP +While creating perl packages I found that automated techniques +could not always generate exactly what I wanted. Human intervention would +sometimes be inevitable. In case modification is necessary, a \fImod\fR script +can be created. Mods are written in tcl and usually stored in +\fI$HOME/pkg/mods/\fR. If a mod script with the same name as the package +is present, the modifications are performed on the PKGDATA and PKGBUILD. +These duties are handled by \fImodpkg(1)\fR. +.SS Finalization +.PP +Now the package data and functions are merged together into a PKGBUILD. +\fIinjectdigs(1)\fR is used to generate the MD5 and SHA digests for the +package files in the source array, as well as any patches or files added. +\fIvervar(1)\fR is used to replace version strings in PKGBUILD fields with +\fB$pkgver\fR. After the \fIPKGDATA(5)\fR stream is fed through these +filters, the \fIpbfields(1)\fR script converts the fields into a PKGBUILD header. +All of the sections of the PKGBUILD are then merged together and written +to a file with the help of the \fIgetpkgtree(1)\fR script. +.SH SEE ALSO +.PP +.BR prepkg(1) , +.BR modpkg(1) , +.BR pbfields(1) , +.BR injectdigs(1) , +.BR vervar(1) , +.BR putpkgtree(1) , +.BR getpkgtree(1) , +.BR PKGDATA(5) +.SH AUTHOR +.PP +Justin "juster" Davis -- cgit v1.2.3-24-g4f1b