michael@428: .\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.22) michael@428: .\" michael@428: .\" Standard preamble: michael@428: .\" ======================================================================== michael@428: .de Sp \" Vertical space (when we can't use .PP) michael@428: .if t .sp .5v michael@428: .if n .sp michael@428: .. michael@428: .de Vb \" Begin verbatim text michael@428: .ft CW michael@428: .nf michael@428: .ne \\$1 michael@428: .. michael@428: .de Ve \" End verbatim text michael@428: .ft R michael@428: .fi michael@428: .. michael@428: .\" Set up some character translations and predefined strings. \*(-- will michael@428: .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left michael@428: .\" double quote, and \*(R" will give a right double quote. \*(C+ will michael@428: .\" give a nicer C++. Capital omega is used to do unbreakable dashes and michael@428: .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, michael@428: .\" nothing in troff, for use with C<>. michael@428: .tr \(*W- michael@428: .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' michael@428: .ie n \{\ michael@428: . ds -- \(*W- michael@428: . ds PI pi michael@428: . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch michael@428: . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch michael@428: . ds L" "" michael@428: . ds R" "" michael@428: . ds C` michael@428: . ds C' michael@428: 'br\} michael@428: .el\{\ michael@428: . ds -- \|\(em\| michael@428: . ds PI \(*p michael@428: . ds L" `` michael@428: . ds R" '' michael@428: 'br\} michael@428: .\" michael@428: .\" Escape single quotes in literal strings from groff's Unicode transform. michael@428: .ie \n(.g .ds Aq \(aq michael@428: .el .ds Aq ' michael@428: .\" michael@428: .\" If the F register is turned on, we'll generate index entries on stderr for michael@428: .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index michael@428: .\" entries marked with X<> in POD. Of course, you'll have to process the michael@428: .\" output yourself in some meaningful fashion. michael@428: .ie \nF \{\ michael@428: . de IX michael@428: . tm Index:\\$1\t\\n%\t"\\$2" michael@428: .. michael@428: . nr % 0 michael@428: . rr F michael@428: .\} michael@428: .el \{\ michael@428: . de IX michael@428: .. michael@428: .\} michael@428: .\" michael@428: .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). michael@428: .\" Fear. Run. Save yourself. No user-serviceable parts. michael@428: . \" fudge factors for nroff and troff michael@428: .if n \{\ michael@428: . ds #H 0 michael@428: . ds #V .8m michael@428: . ds #F .3m michael@428: . ds #[ \f1 michael@428: . ds #] \fP michael@428: .\} michael@428: .if t \{\ michael@428: . ds #H ((1u-(\\\\n(.fu%2u))*.13m) michael@428: . ds #V .6m michael@428: . ds #F 0 michael@428: . ds #[ \& michael@428: . ds #] \& michael@428: .\} michael@428: . \" simple accents for nroff and troff michael@428: .if n \{\ michael@428: . ds ' \& michael@428: . ds ` \& michael@428: . ds ^ \& michael@428: . ds , \& michael@428: . ds ~ ~ michael@428: . ds / michael@428: .\} michael@428: .if t \{\ michael@428: . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" michael@428: . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' michael@428: . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' michael@428: . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' michael@428: . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' michael@428: . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' michael@428: .\} michael@428: . \" troff and (daisy-wheel) nroff accents michael@428: .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' michael@428: .ds 8 \h'\*(#H'\(*b\h'-\*(#H' michael@428: .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] michael@428: .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' michael@428: .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' michael@428: .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] michael@428: .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] michael@428: .ds ae a\h'-(\w'a'u*4/10)'e michael@428: .ds Ae A\h'-(\w'A'u*4/10)'E michael@428: . \" corrections for vroff michael@428: .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' michael@428: .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' michael@428: . \" for low resolution devices (crt and lpr) michael@428: .if \n(.H>23 .if \n(.V>19 \ michael@428: \{\ michael@428: . ds : e michael@428: . ds 8 ss michael@428: . ds o a michael@428: . ds d- d\h'-1'\(ga michael@428: . ds D- D\h'-1'\(hy michael@428: . ds th \o'bp' michael@428: . ds Th \o'LP' michael@428: . ds ae ae michael@428: . ds Ae AE michael@428: .\} michael@428: .rm #[ #] #H #V #F C michael@428: .\" ======================================================================== michael@428: .\" michael@428: .IX Title "DEV 8" michael@428: .TH DEV 8 "OpenPKG" "DEV(8)" "OpenPKG" michael@428: .\" For nroff, turn off justification. Always turn off hyphenation; it makes michael@428: .\" way too many mistakes in technical documents. michael@428: .if n .ad l michael@428: .nh michael@428: \&\fBopenpkg dev\fR \- OpenPKG Package Development Tool michael@428: .SH "DESCRIPTION" michael@428: .IX Header "DESCRIPTION" michael@428: \&\fBopenpkg dev\fR is a package development tool for \fBOpenPKG\fR. michael@428: .SS "\s-1SOURCE\s0 \s-1PACKAGE\s0 \s-1HANDLING\s0" michael@428: .IX Subsection "SOURCE PACKAGE HANDLING" michael@428: .ie n .IP "\fBopenpkg dev unpack\fR [\*(C`\-l\*(C' \fIlayout\fR] [\*(C`\-b\*(C' \fIbasedir\fR] [\*(C`\-s\*(C'] [\*(C`\-d\*(C'] \fIname\fR\*(C`\-\*(C'\fIversion\fR\*(C`\-\*(C'\fIrelease\fR\*(C`.src.rpm\*(C'" 4 michael@428: .el .IP "\fBopenpkg dev unpack\fR [\f(CW\*(C`\-l\*(C'\fR \fIlayout\fR] [\f(CW\*(C`\-b\*(C'\fR \fIbasedir\fR] [\f(CW\*(C`\-s\*(C'\fR] [\f(CW\*(C`\-d\*(C'\fR] \fIname\fR\f(CW\*(C`\-\*(C'\fR\fIversion\fR\f(CW\*(C`\-\*(C'\fR\fIrelease\fR\f(CW\*(C`.src.rpm\*(C'\fR" 4 michael@428: .IX Item "openpkg dev unpack [-l layout] [-b basedir] [-s] [-d] name-version-release.src.rpm" michael@428: Unpacks an OpenPKG source \s-1RPM\s0 package michael@428: \&\fIname\fR\f(CW\*(C`\-\*(C'\fR\fIversion\fR\f(CW\*(C`\-\*(C'\fR\fIrelease\fR\f(CW\*(C`.src.rpm\*(C'\fR into \fIbasedir\fR michael@428: (default is \fIname\fR\f(CW\*(C`\-\*(C'\fR\fIversion\fR\f(CW\*(C`\-\*(C'\fR\fIrelease\fR) michael@428: using \fIlayout\fR (default is \fIstructured\fR). michael@428: Additionally, michael@428: \&\fIfile-rpmmacros\fR michael@428: configuration file is generated where michael@428: \&\f(CW\*(C`\-s\*(C'\fR enables shared mode and michael@428: \&\f(CW\*(C`\-d\*(C'\fR enables debug mode, see \fIfile-rpmmacros\fR. michael@428: .SS "\s-1SOURCE\s0 \s-1PACKAGE\s0 \s-1DEVELOPMENT\s0" michael@428: .IX Subsection "SOURCE PACKAGE DEVELOPMENT" michael@428: .IP "\fBopenpkg dev shell\fR" 4 michael@428: .IX Item "openpkg dev shell" michael@428: This is a convenience command which enters an interactive \fB\s-1GNU\s0 Bash\fR michael@428: shell which provides the following work environment: michael@428: .RS 4 michael@428: .IP "\fBEnvironment Variables:\fR" 4 michael@428: .IX Item "Environment Variables:" michael@428: .Vb 5 michael@428: \& OPENPKG_PREFIX "" michael@428: \& PS1 "\e\e[\e\ee[31;1m\e\e]\e\eu\e\e[\e\ee[0m\e\e]@\e\eh:\e\ew [OPENPKG_PREFIX=$OPENPKG_PREFIX]\en\e\e\e$ " michael@428: \& T %{_tmppath} michael@428: \& S %{_specdir} michael@428: \& D %{_sourcedir} michael@428: .Ve michael@428: .IP "\fBCommand-Line Aliases:\fR" 4 michael@428: .IX Item "Command-Line Aliases:" michael@428: .Vb 2 michael@428: \& openpkg "${OPENPKG_PREFIX}/bin/openpkg" michael@428: \& opd "${OPENPKG_PREFIX}/bin/openpkg dev" michael@428: .Ve michael@428: .IP "\fBCommand-Line Keystrokes:\fR" 4 michael@428: .IX Item "Command-Line Keystrokes:" michael@428: .Vb 10 michael@428: \& ESC+x "opd unpack\en" michael@428: \& ESC+v "opd edit\en" michael@428: \& ESC+t "opd build \-s track\en" michael@428: \& ESC+f "opd build \-s fetch\en" michael@428: \& ESC+b "opd build\en" michael@428: \& ESC+1 "opd build \-s prep\en" michael@428: \& ESC+2 "opd build \-s compile\en" michael@428: \& ESC+3 "opd build \-s install\en" michael@428: \& ESC+4 "opd build \-s binary\en" michael@428: \& ESC+s "opd build \-s source\en" michael@428: \& ESC+p "opd peek\en" michael@428: \& ESC+d "opd diff\en" michael@428: \& ESC+i "opd install\en" michael@428: \& ESC+e "opd erase\en" michael@428: \& ESC+l "opd lint\en" michael@428: \& ESC+r "opd release\en" michael@428: .Ve michael@428: .RE michael@428: .RS 4 michael@428: .Sp michael@428: If option \f(CW\*(C`\-s\*(C'\fR is passed to \fBopenpkg dev shell\fR and \fIscreen\fR\|(1) is michael@428: available in \f(CW$PATH\fR, the interactive development shell is started up michael@428: in a convenient virtual screen environment. michael@428: .RE michael@428: .IP "\fBopenpkg dev edit\fR" 4 michael@428: .IX Item "openpkg dev edit" michael@428: Load spec file into editor. michael@428: .RS 4 michael@428: .IP "\fBEnvironment Variables:\fR" 4 michael@428: .IX Item "Environment Variables:" michael@428: .Vb 1 michael@428: \& EDITOR "vi" michael@428: .Ve michael@428: .RE michael@428: .RS 4 michael@428: .RE michael@428: .ie n .IP "\fBopenpkg dev build\fR [\*(C`\-s\*(C' \fIstep\fR] [\*(C`\-D\*(C' \fIdefine\fR[=\fIvalue\fR]] [\*(C`\-w\*(C' \fIvariant\fR]" 4 michael@428: .el .IP "\fBopenpkg dev build\fR [\f(CW\*(C`\-s\*(C'\fR \fIstep\fR] [\f(CW\*(C`\-D\*(C'\fR \fIdefine\fR[=\fIvalue\fR]] [\f(CW\*(C`\-w\*(C'\fR \fIvariant\fR]" 4 michael@428: .IX Item "openpkg dev build [-s step] [-D define[=value]] [-w variant]" michael@428: Builds package steps. Default \fIstep\fR is \f(CW\*(C`all\*(C'\fR. Option \f(CW\*(C`\-D\*(C'\fR translated michael@428: into "\f(CW\*(C`\-\-define \*(Aq\f(CIdefine\f(CW \f(CIvalue\f(CW\*(Aq\*(C'\fR" while option \f(CW\*(C`\-w\*(C'\fR translated michael@428: into "\f(CW\*(C`\-\-with\*(C'\fR \fIvariant\fR". The \fIstep\fR arguments translate into the michael@428: following \s-1RPM\s0 options: michael@428: .Sp michael@428: .Vb 8 michael@428: \& track: \-bt michael@428: \& fetch: \-bf michael@428: \& prep: \-bp michael@428: \& compile: \-bc \-\-short\-circuit michael@428: \& install: \-bi \-\-short\-circuit michael@428: \& binary: \-bb \-\-short\-circuit michael@428: \& source: \-bs michael@428: \& all: \-ba michael@428: .Ve michael@428: .IP "\fBopenpkg dev peek\fR" 4 michael@428: .IX Item "openpkg dev peek" michael@428: Peeks file list from package and tags configuration and documentation files. michael@428: .IP "\fBopenpkg dev diff\fR" 4 michael@428: .IX Item "openpkg dev diff" michael@428: Shows modifications with the help of a possibly underlying Version michael@428: Control System (\s-1VCS\s0) like \s-1CVS\s0, Subversion, Monotone, Git, Mercurial or michael@428: (as a fallback ) \s-1OSSP\s0 svs. michael@428: .ie n .IP "\fBopenpkg dev install\fR [\*(C`\-f\*(C'] [\*(C`\-o\*(C'] [\*(C`\-n\*(C'] [\*(C`\-s\*(C']" 4 michael@428: .el .IP "\fBopenpkg dev install\fR [\f(CW\*(C`\-f\*(C'\fR] [\f(CW\*(C`\-o\*(C'\fR] [\f(CW\*(C`\-n\*(C'\fR] [\f(CW\*(C`\-s\*(C'\fR]" 4 michael@428: .IX Item "openpkg dev install [-f] [-o] [-n] [-s]" michael@428: Installs package. michael@428: Option michael@428: \&\f(CW\*(C`\-f\*(C'\fR adds \f(CW\*(C`\-\-force\*(C'\fR, michael@428: \&\f(CW\*(C`\-n\*(C'\fR adds \f(CW\*(C`\-\-nodeps\*(C'\fR and michael@428: \&\f(CW\*(C`\-o\*(C'\fR adds \f(CW\*(C`\-\-oldpackage\*(C'\fR michael@428: to the underlying \f(CW\*(C`rpm\*(C'\fR call. michael@428: Option \f(CW\*(C`\-s\*(C'\fR prefixes the command with \fIsudo\fR\|(1). michael@428: .ie n .IP "\fBopenpkg dev erase\fR [\*(C`\-f\*(C'] [\*(C`\-o\*(C'] [\*(C`\-a\*(C'] [\*(C`\-s\*(C']" 4 michael@428: .el .IP "\fBopenpkg dev erase\fR [\f(CW\*(C`\-f\*(C'\fR] [\f(CW\*(C`\-o\*(C'\fR] [\f(CW\*(C`\-a\*(C'\fR] [\f(CW\*(C`\-s\*(C'\fR]" 4 michael@428: .IX Item "openpkg dev erase [-f] [-o] [-a] [-s]" michael@428: Erases package. michael@428: Option michael@428: \&\f(CW\*(C`\-f\*(C'\fR adds \f(CW\*(C`\-\-force\*(C'\fR, michael@428: \&\f(CW\*(C`\-n\*(C'\fR adds \f(CW\*(C`\-\-nodeps\*(C'\fR and michael@428: \&\f(CW\*(C`\-a\*(C'\fR adds \f(CW\*(C`\-\-allmatches\*(C'\fR michael@428: to the underlying \f(CW\*(C`rpm\*(C'\fR call. michael@428: Option \f(CW\*(C`\-s\*(C'\fR prefixes the command with \fIsudo\fR\|(1). michael@428: .ie n .IP "\fBopenpkg dev lint\fR [\*(C`\-v\*(C'] [\*(C`\-b\*(C']" 4 michael@428: .el .IP "\fBopenpkg dev lint\fR [\f(CW\*(C`\-v\*(C'\fR] [\f(CW\*(C`\-b\*(C'\fR]" 4 michael@428: .IX Item "openpkg dev lint [-v] [-b]" michael@428: Lints package sources \f(CW\*(C`*.spec\*(C'\fR, \f(CW\*(C`fsl.*\*(C'\fR, \f(CW\*(C`rc.*\*(C'\fR and binary package files. michael@428: Option \f(CW\*(C`\-v\*(C'\fR enables verboseness. michael@428: Option \f(CW\*(C`\-b\*(C'\fR disables the linting of an existing binary package file. michael@428: .ie n .IP "\fBopenpkg dev release\fR [\*(C`\-m\*(C' \fImessage\fR] [\*(C`\-n\*(C']" 4 michael@428: .el .IP "\fBopenpkg dev release\fR [\f(CW\*(C`\-m\*(C'\fR \fImessage\fR] [\f(CW\*(C`\-n\*(C'\fR]" 4 michael@428: .IX Item "openpkg dev release [-m message] [-n]" michael@428: Releases package specification to the repository. Unlike previous michael@428: incarnations of \*(L"openpkg dev\*(R" this one is not tied to any repository or michael@428: structure. The default message is created using the difference between michael@428: the previous and current version of the package specification. In order michael@428: to grab the previous version, the working directory and three levels michael@428: towards root are checked for signs of \s-1CVS\s0, Subversion, Monotone, Git, michael@428: Mercurial or \s-1SVS\s0 information, in that order. The appropriate command is michael@428: then executed to retrieve the data and the \s-1VCS\s0 found is passed to the michael@428: actual release command. michael@428: .Sp michael@428: Finally, the command specified by the environment variable michael@428: \&\f(CW\*(C`OPENPKG_DEV_RELEASE\*(C'\fR or, if omitted, specified by the rpm macro michael@428: \&\f(CW\*(C`%{openpkg_dev_release}\*(C'\fR is run and passed the following positional michael@428: arguments: michael@428: .RS 4 michael@428: .Sp michael@428: .Vb 12 michael@428: \& openpkg\-prefix michael@428: \& spec\-dir michael@428: \& source\-dir michael@428: \& binary\-rpm\-file michael@428: \& source\-rpm\-file michael@428: \& package\-name michael@428: \& package\-version michael@428: \& package\-release michael@428: \& package\-version\-old michael@428: \& package\-release\-old michael@428: \& commit\-message michael@428: \& vcs michael@428: .Ve michael@428: .RE michael@428: .RS 4 michael@428: .Sp michael@428: For a dry run, set \f(CW$OPENPKG_DEV_RELEASE\fR to \*(L"echo\*(R" or use option "\f(CW\*(C`\-n\*(C'\fR". michael@428: .RE michael@428: .SH "UNPACKED SOURCE RPM PACKAGE FILESYSTEM LAYOUT" michael@428: .IX Header "UNPACKED SOURCE RPM PACKAGE FILESYSTEM LAYOUT" michael@428: When an OpenPKG source \s-1RPM\s0 package michael@428: \&\fIname\fR\f(CW\*(C`\-\*(C'\fR\fIversion\fR\f(CW\*(C`\-\*(C'\fR\fIrelease\fR\f(CW\*(C`.src.rpm\*(C'\fR is unpacked to the michael@428: filesystem, the following distinct filesystem layouts are known: michael@428: .IP "\fBglobal\fR" 4 michael@428: .IX Item "global" michael@428: .RS 4 michael@428: .PD 0 michael@428: .ie n .IP "\fIprefix\fR\*(C`/RPM/SRC/\*(C'\fIname\fR\*(C`/.openpkg/rpmmacros\*(C'" 4 michael@428: .el .IP "\fIprefix\fR\f(CW\*(C`/RPM/SRC/\*(C'\fR\fIname\fR\f(CW\*(C`/.openpkg/rpmmacros\*(C'\fR" 4 michael@428: .IX Item "prefix/RPM/SRC/name/.openpkg/rpmmacros" michael@428: .ie n .IP "\fIprefix\fR\*(C`/RPM/SRC/\*(C'\fIname\fR\*(C`/\*(C'\fIname\fR\*(C`.spec\*(C'" 4 michael@428: .el .IP "\fIprefix\fR\f(CW\*(C`/RPM/SRC/\*(C'\fR\fIname\fR\f(CW\*(C`/\*(C'\fR\fIname\fR\f(CW\*(C`.spec\*(C'\fR" 4 michael@428: .IX Item "prefix/RPM/SRC/name/name.spec" michael@428: .ie n .IP "\fIprefix\fR\*(C`/RPM/SRC/\*(C'\fIname\fR\*(C`/\*(C'\fIpackaging-source-file\fR" 4 michael@428: .el .IP "\fIprefix\fR\f(CW\*(C`/RPM/SRC/\*(C'\fR\fIname\fR\f(CW\*(C`/\*(C'\fR\fIpackaging-source-file\fR" 4 michael@428: .IX Item "prefix/RPM/SRC/name/packaging-source-file" michael@428: .ie n .IP "\fIprefix\fR\*(C`/RPM/SRC/\*(C'\fIname\fR\*(C`/\*(C'\fIthirdparty-distribution-file\fR" 4 michael@428: .el .IP "\fIprefix\fR\f(CW\*(C`/RPM/SRC/\*(C'\fR\fIname\fR\f(CW\*(C`/\*(C'\fR\fIthirdparty-distribution-file\fR" 4 michael@428: .IX Item "prefix/RPM/SRC/name/thirdparty-distribution-file" michael@428: .ie n .IP "\fIprefix\fR\*(C`/RPM/PKG/\*(C'\fIbinary-rpm-package-file\fR" 4 michael@428: .el .IP "\fIprefix\fR\f(CW\*(C`/RPM/PKG/\*(C'\fR\fIbinary-rpm-package-file\fR" 4 michael@428: .IX Item "prefix/RPM/PKG/binary-rpm-package-file" michael@428: .ie n .IP "\fIprefix\fR\*(C`/RPM/PKG/\*(C'\fIsource-rpm-package-file\fR" 4 michael@428: .el .IP "\fIprefix\fR\f(CW\*(C`/RPM/PKG/\*(C'\fR\fIsource-rpm-package-file\fR" 4 michael@428: .IX Item "prefix/RPM/PKG/source-rpm-package-file" michael@428: .ie n .IP "\fIprefix\fR\*(C`/RPM/TMP/\*(C'\fItemporary-file\fR" 4 michael@428: .el .IP "\fIprefix\fR\f(CW\*(C`/RPM/TMP/\*(C'\fR\fItemporary-file\fR" 4 michael@428: .IX Item "prefix/RPM/TMP/temporary-file" michael@428: .RE michael@428: .RS 4 michael@428: .PD michael@428: .Sp michael@428: This is just the \*(L"simple\*(R" filesystem layout (see below) with the michael@428: \&\fIbase-dir\fR set to \fIprefix\fR\f(CW\*(C`/RPM/SRC/\*(C'\fR. michael@428: .Sp michael@428: This is the filesystem layout used by default for building OpenPKG michael@428: packages during \f(CW\*(C`openpkg build\*(C'\fR or the underlying \f(CW\*(C`openpkg rpm michael@428: \&\-\-rebuild\*(C'\fR commands. michael@428: .RE michael@428: .IP "\fBlocal\fR" 4 michael@428: .IX Item "local" michael@428: .RS 4 michael@428: .PD 0 michael@428: .ie n .IP "\fIbase-dir\fR\*(C`/.openpkg/rpmmacros\*(C'" 4 michael@428: .el .IP "\fIbase-dir\fR\f(CW\*(C`/.openpkg/rpmmacros\*(C'\fR" 4 michael@428: .IX Item "base-dir/.openpkg/rpmmacros" michael@428: .ie n .IP "\fIbase-dir\fR\*(C`/\*(C'\fIname\fR\*(C`.spec\*(C'" 4 michael@428: .el .IP "\fIbase-dir\fR\f(CW\*(C`/\*(C'\fR\fIname\fR\f(CW\*(C`.spec\*(C'\fR" 4 michael@428: .IX Item "base-dir/name.spec" michael@428: .ie n .IP "\fIbase-dir\fR\*(C`/\*(C'\fIpackaging-source-file\fR" 4 michael@428: .el .IP "\fIbase-dir\fR\f(CW\*(C`/\*(C'\fR\fIpackaging-source-file\fR" 4 michael@428: .IX Item "base-dir/packaging-source-file" michael@428: .ie n .IP "\fIbase-dir\fR\*(C`/\*(C'\fIthirdparty-distribution-file\fR" 4 michael@428: .el .IP "\fIbase-dir\fR\f(CW\*(C`/\*(C'\fR\fIthirdparty-distribution-file\fR" 4 michael@428: .IX Item "base-dir/thirdparty-distribution-file" michael@428: .ie n .IP "\fIbase-dir\fR\*(C`/\*(C'\fIbinary-rpm-package-file\fR" 4 michael@428: .el .IP "\fIbase-dir\fR\f(CW\*(C`/\*(C'\fR\fIbinary-rpm-package-file\fR" 4 michael@428: .IX Item "base-dir/binary-rpm-package-file" michael@428: .ie n .IP "\fIbase-dir\fR\*(C`/\*(C'\fIsource-rpm-package-file\fR" 4 michael@428: .el .IP "\fIbase-dir\fR\f(CW\*(C`/\*(C'\fR\fIsource-rpm-package-file\fR" 4 michael@428: .IX Item "base-dir/source-rpm-package-file" michael@428: .ie n .IP "\fIbase-dir\fR\*(C`/\*(C'\fItemporary-file\fR" 4 michael@428: .el .IP "\fIbase-dir\fR\f(CW\*(C`/\*(C'\fR\fItemporary-file\fR" 4 michael@428: .IX Item "base-dir/temporary-file" michael@428: .RE michael@428: .RS 4 michael@428: .PD michael@428: .Sp michael@428: This puts everything into one directory. michael@428: .RE michael@428: .IP "\fBsimple\fR" 4 michael@428: .IX Item "simple" michael@428: .RS 4 michael@428: .PD 0 michael@428: .ie n .IP "\fIbase-dir\fR\*(C`/\*(C'\fIname\fR\*(C`/.openpkg/rpmmacros\*(C'" 4 michael@428: .el .IP "\fIbase-dir\fR\f(CW\*(C`/\*(C'\fR\fIname\fR\f(CW\*(C`/.openpkg/rpmmacros\*(C'\fR" 4 michael@428: .IX Item "base-dir/name/.openpkg/rpmmacros" michael@428: .ie n .IP "\fIbase-dir\fR\*(C`/\*(C'\fIname\fR\*(C`/\*(C'\fIname\fR\*(C`.spec\*(C'" 4 michael@428: .el .IP "\fIbase-dir\fR\f(CW\*(C`/\*(C'\fR\fIname\fR\f(CW\*(C`/\*(C'\fR\fIname\fR\f(CW\*(C`.spec\*(C'\fR" 4 michael@428: .IX Item "base-dir/name/name.spec" michael@428: .ie n .IP "\fIbase-dir\fR\*(C`/\*(C'\fIname\fR\*(C`/\*(C'\fIpackaging-source-file\fR" 4 michael@428: .el .IP "\fIbase-dir\fR\f(CW\*(C`/\*(C'\fR\fIname\fR\f(CW\*(C`/\*(C'\fR\fIpackaging-source-file\fR" 4 michael@428: .IX Item "base-dir/name/packaging-source-file" michael@428: .ie n .IP "\fIbase-dir\fR\*(C`/\*(C'\fIname\fR\*(C`/\*(C'\fIthirdparty-distribution-file\fR" 4 michael@428: .el .IP "\fIbase-dir\fR\f(CW\*(C`/\*(C'\fR\fIname\fR\f(CW\*(C`/\*(C'\fR\fIthirdparty-distribution-file\fR" 4 michael@428: .IX Item "base-dir/name/thirdparty-distribution-file" michael@428: .ie n .IP "\fIbase-dir\fR\*(C`/\*(C'\fIbinary-rpm-package-file\fR" 4 michael@428: .el .IP "\fIbase-dir\fR\f(CW\*(C`/\*(C'\fR\fIbinary-rpm-package-file\fR" 4 michael@428: .IX Item "base-dir/binary-rpm-package-file" michael@428: .ie n .IP "\fIbase-dir\fR\*(C`/\*(C'\fIsource-rpm-package-file\fR" 4 michael@428: .el .IP "\fIbase-dir\fR\f(CW\*(C`/\*(C'\fR\fIsource-rpm-package-file\fR" 4 michael@428: .IX Item "base-dir/source-rpm-package-file" michael@428: .ie n .IP "\fI\fI$TMPDIR\fI\fR\*(C`/openpkg/\*(C'\fItemporary-file\fR" 4 michael@428: .el .IP "\fI\f(CI$TMPDIR\fI\fR\f(CW\*(C`/openpkg/\*(C'\fR\fItemporary-file\fR" 4 michael@428: .IX Item "$TMPDIR/openpkg/temporary-file" michael@428: .RE michael@428: .RS 4 michael@428: .PD michael@428: .Sp michael@428: This is the simple filesystem layout of an unpacked michael@428: OpenPKG package. All files are simply put into a sub-directory with the michael@428: \&\fIname\fR of the package. michael@428: .Sp michael@428: This is the filesystem layout used for the quick patching of a single michael@428: OpenPKG package in a stand-alone environment. michael@428: .RE michael@428: .IP "\fBstructured\fR" 4 michael@428: .IX Item "structured" michael@428: .RS 4 michael@428: .PD 0 michael@428: .ie n .IP "\fIbase-dir\fR\*(C`/\*(C'\fIname\fR\*(C`/.openpkg/rpmmacros\*(C'" 4 michael@428: .el .IP "\fIbase-dir\fR\f(CW\*(C`/\*(C'\fR\fIname\fR\f(CW\*(C`/.openpkg/rpmmacros\*(C'\fR" 4 michael@428: .IX Item "base-dir/name/.openpkg/rpmmacros" michael@428: .ie n .IP "\fIbase-dir\fR\*(C`/\*(C'\fIname\fR\*(C`/src/\*(C'\fIname\fR\*(C`.spec\*(C'" 4 michael@428: .el .IP "\fIbase-dir\fR\f(CW\*(C`/\*(C'\fR\fIname\fR\f(CW\*(C`/src/\*(C'\fR\fIname\fR\f(CW\*(C`.spec\*(C'\fR" 4 michael@428: .IX Item "base-dir/name/src/name.spec" michael@428: .ie n .IP "\fIbase-dir\fR\*(C`/\*(C'\fIname\fR\*(C`/src/\*(C'\fIpackaging-source-file\fR" 4 michael@428: .el .IP "\fIbase-dir\fR\f(CW\*(C`/\*(C'\fR\fIname\fR\f(CW\*(C`/src/\*(C'\fR\fIpackaging-source-file\fR" 4 michael@428: .IX Item "base-dir/name/src/packaging-source-file" michael@428: .ie n .IP "\fIbase-dir\fR\*(C`/\*(C'\fIname\fR\*(C`/dst/\*(C'\fIthirdparty-distribution-file\fR" 4 michael@428: .el .IP "\fIbase-dir\fR\f(CW\*(C`/\*(C'\fR\fIname\fR\f(CW\*(C`/dst/\*(C'\fR\fIthirdparty-distribution-file\fR" 4 michael@428: .IX Item "base-dir/name/dst/thirdparty-distribution-file" michael@428: .ie n .IP "\fIbase-dir\fR\*(C`/\*(C'\fIname\fR\*(C`/pkg/\*(C'[\*(C`bin/\*(C']\fIbinary-rpm-package-file\fR" 4 michael@428: .el .IP "\fIbase-dir\fR\f(CW\*(C`/\*(C'\fR\fIname\fR\f(CW\*(C`/pkg/\*(C'\fR[\f(CW\*(C`bin/\*(C'\fR]\fIbinary-rpm-package-file\fR" 4 michael@428: .IX Item "base-dir/name/pkg/[bin/]binary-rpm-package-file" michael@428: .ie n .IP "\fIbase-dir\fR\*(C`/\*(C'\fIname\fR\*(C`/pkg/\*(C'[\*(C`src/\*(C']\fIsource-rpm-package-file\fR" 4 michael@428: .el .IP "\fIbase-dir\fR\f(CW\*(C`/\*(C'\fR\fIname\fR\f(CW\*(C`/pkg/\*(C'\fR[\f(CW\*(C`src/\*(C'\fR]\fIsource-rpm-package-file\fR" 4 michael@428: .IX Item "base-dir/name/pkg/[src/]source-rpm-package-file" michael@428: .ie n .IP "\fIbase-dir\fR\*(C`/\*(C'\fIname\fR\*(C`/tmp/\*(C'\fItemporary-file\fR" 4 michael@428: .el .IP "\fIbase-dir\fR\f(CW\*(C`/\*(C'\fR\fIname\fR\f(CW\*(C`/tmp/\*(C'\fR\fItemporary-file\fR" 4 michael@428: .IX Item "base-dir/name/tmp/temporary-file" michael@428: .RE michael@428: .RS 4 michael@428: .PD michael@428: .Sp michael@428: This is the structured (and default) filesystem layout of an unpacked michael@428: OpenPKG package. A top-level sub-directory with the \fIname\fR of the michael@428: package is created. There the package specification and all packaging michael@428: source files are put into the sub-directory \fIsrc\fR and all the michael@428: third-party distribution files are put into the sub-directory \fIdst\fR. michael@428: .Sp michael@428: This is the filesystem layout used for the development of a single michael@428: OpenPKG package in a stand-alone environment. michael@428: .RE michael@428: .IP "\fBdistributed\fR" 4 michael@428: .IX Item "distributed" michael@428: .RS 4 michael@428: .PD 0 michael@428: .ie n .IP "\fIbase-dir\fR\*(C`/\*(C'\*(C`.openpkg/rpmmacros\*(C'" 4 michael@428: .el .IP "\fIbase-dir\fR\f(CW\*(C`/\*(C'\fR\f(CW\*(C`.openpkg/rpmmacros\*(C'\fR" 4 michael@428: .IX Item "base-dir/.openpkg/rpmmacros" michael@428: .ie n .IP "\fIbase-dir\fR\*(C`/\*(C'\*(C`src/\*(C'\fIname\fR\*(C`/\*(C'\fIname\fR\*(C`.spec\*(C'" 4 michael@428: .el .IP "\fIbase-dir\fR\f(CW\*(C`/\*(C'\fR\f(CW\*(C`src/\*(C'\fR\fIname\fR\f(CW\*(C`/\*(C'\fR\fIname\fR\f(CW\*(C`.spec\*(C'\fR" 4 michael@428: .IX Item "base-dir/src/name/name.spec" michael@428: .ie n .IP "\fIbase-dir\fR\*(C`/\*(C'\*(C`src/\*(C'\fIname\fR\*(C`/\*(C'\fIpackaging-source-file\fR" 4 michael@428: .el .IP "\fIbase-dir\fR\f(CW\*(C`/\*(C'\fR\f(CW\*(C`src/\*(C'\fR\fIname\fR\f(CW\*(C`/\*(C'\fR\fIpackaging-source-file\fR" 4 michael@428: .IX Item "base-dir/src/name/packaging-source-file" michael@428: .ie n .IP "\fIbase-dir\fR\*(C`/\*(C'\*(C`dst/\*(C'\fIname\fR\*(C`/\*(C'\fIthirdparty-distribution-file\fR" 4 michael@428: .el .IP "\fIbase-dir\fR\f(CW\*(C`/\*(C'\fR\f(CW\*(C`dst/\*(C'\fR\fIname\fR\f(CW\*(C`/\*(C'\fR\fIthirdparty-distribution-file\fR" 4 michael@428: .IX Item "base-dir/dst/name/thirdparty-distribution-file" michael@428: .ie n .IP "\fIbase-dir\fR\*(C`/\*(C'\*(C`pkg/\*(C'[\*(C`bin/\*(C']\fIbinary-rpm-package-file\fR" 4 michael@428: .el .IP "\fIbase-dir\fR\f(CW\*(C`/\*(C'\fR\f(CW\*(C`pkg/\*(C'\fR[\f(CW\*(C`bin/\*(C'\fR]\fIbinary-rpm-package-file\fR" 4 michael@428: .IX Item "base-dir/pkg/[bin/]binary-rpm-package-file" michael@428: .ie n .IP "\fIbase-dir\fR\*(C`/\*(C'\*(C`pkg/\*(C'[\*(C`src/\*(C']\fIsource-rpm-package-file\fR" 4 michael@428: .el .IP "\fIbase-dir\fR\f(CW\*(C`/\*(C'\fR\f(CW\*(C`pkg/\*(C'\fR[\f(CW\*(C`src/\*(C'\fR]\fIsource-rpm-package-file\fR" 4 michael@428: .IX Item "base-dir/pkg/[src/]source-rpm-package-file" michael@428: .ie n .IP "\fIbase-dir\fR\*(C`/\*(C'\*(C`tmp/\*(C'\fItemporary-file\fR" 4 michael@428: .el .IP "\fIbase-dir\fR\f(CW\*(C`/\*(C'\fR\f(CW\*(C`tmp/\*(C'\fR\fItemporary-file\fR" 4 michael@428: .IX Item "base-dir/tmp/temporary-file" michael@428: .RE michael@428: .RS 4 michael@428: .PD michael@428: .Sp michael@428: This is the distributed filesystem layout of an unpacked OpenPKG michael@428: package. It is similar to the structured filesystem layout but the michael@428: \&\f(CW\*(C`src\*(C'\fR and \f(CW\*(C`dst\*(C'\fR directories and the \fIname\fR directory are swapped, michael@428: mainly with the intention of bundling together all third-party michael@428: distribution files of a large number of packages. michael@428: .Sp michael@428: This is the filesystem layout used for regular OpenPKG package michael@428: development. michael@428: .RE michael@428: .SH "LOCAL RPM MACROS FILE (.openpkg/rpmmacros)" michael@428: .IX Header "LOCAL RPM MACROS FILE (.openpkg/rpmmacros)" michael@428: OpenPKG supports local \s-1RPM\s0 macros files \fI.openpkg/rpmmacros\fR which michael@428: can be used to configure \s-1RPM\s0 in a local scope. This is especially michael@428: interesting to configure a local (even per-package) build environment michael@428: with the help of the \f(CW%openpkg_layout\fR macro. michael@428: .PP michael@428: \&\f(CW%openpkg_layout\fR michael@428: [\f(CW\*(C`macrosfile=\*(C'\fR\fIfilename\fR] michael@428: [\f(CW\*(C`basedir=\*(C'\fR\fIdirectory\fR] michael@428: [\f(CW\*(C`specdir=\*(C'\fR\fIdirectory\fR] michael@428: [\f(CW\*(C`sourcedir=\*(C'\fR\fIdirectory\fR] michael@428: [\f(CW\*(C`builddir=\*(C'\fR\fIdirectory\fR] michael@428: [\f(CW\*(C`tmpdir=\*(C'\fR\fIdirectory\fR] michael@428: [\f(CW\*(C`binrpmdir=\*(C'\fR\fIdirectory\fR] michael@428: [\f(CW\*(C`srcrpmdir=\*(C'\fR\fIdirectory\fR] michael@428: [\f(CW\*(C`shared=\*(C'\fR\fIyes-or-no\fR] michael@428: [\f(CW\*(C`debug=\*(C'\fR\fIyes-or-no\fR] michael@428: .ie n .IP "\*(C`macrosfile=\*(C'\fIfilename\fR" 4 michael@428: .el .IP "\f(CW\*(C`macrosfile=\*(C'\fR\fIfilename\fR" 4 michael@428: .IX Item "macrosfile=filename" michael@428: Absolute file path of the \f(CW\*(C`.openpkg/rpmmacros\*(C'\fR file where this michael@428: \&\f(CW%openpkg_layout\fR macro is defined. Usually, the intended usage is to michael@428: leverage from OpenPKG \s-1RPM\s0's special \f(CW\*(C`%{macrosfile}\*(C'\fR macro by simply michael@428: using \f(CW\*(C`macrosfile=%{macrosfile}\*(C'\fR. This parameter is important as michael@428: the default \f(CW\*(C`basename\*(C'\fR is derived from it. michael@428: .ie n .IP "\*(C`basedir=\*(C'\fIdirectory\fR" 4 michael@428: .el .IP "\f(CW\*(C`basedir=\*(C'\fR\fIdirectory\fR" 4 michael@428: .IX Item "basedir=directory" michael@428: Absolute directory path where the \f(CW\*(C`.openpkg/rpmmacros\*(C'\fR file is michael@428: located under. Usually, the intended usage is to not explicitly michael@428: set this parameter but let it be determined indirectly via michael@428: \&\f(CW\*(C`macrosfile\*(C'\fR. The effective default value is equal to a value like michael@428: \&\f(CW\*(C`%{realpath:%{dirname:%{realpath:%{macrosfile}}}/..}\*(C'\fR This parameter is michael@428: important as all standard filesystem layouts (see parameter \f(CW\*(C`layout\*(C'\fR) michael@428: are always at least partially based on this base directory in order michael@428: to provide absolute-path-independent flexible filesystem layouts. michael@428: .ie n .IP "\*(C`layout=\*(C'\fIlayout\fR" 4 michael@428: .el .IP "\f(CW\*(C`layout=\*(C'\fR\fIlayout\fR" 4 michael@428: .IX Item "layout=layout" michael@428: The name of the filesystem layout type to use. The following standard michael@428: filesystem layout types are pre-defined: \f(CW\*(C`global\*(C'\fR, \f(CW\*(C`local\*(C'\fR, \f(CW\*(C`simple\*(C'\fR, michael@428: \&\f(CW\*(C`structured\*(C'\fR (default) and \f(CW\*(C`distributed\*(C'\fR. michael@428: .Sp michael@428: .Vb 8 michael@428: \& global macrosdir /etc/openpkg michael@428: \& global macrosfile /etc/openpkg/rpmmacros michael@428: \& global specdir /RPM/SRC/$name michael@428: \& global sourcedir /RPM/SRC/$name michael@428: \& global builddir /RPM/TMP michael@428: \& global tmpdir /RPM/TMP michael@428: \& global binrpmdir /RPM/PKG michael@428: \& global srcrpmdir /RPM/PKG michael@428: \& michael@428: \& local macrosdir /.openpkg michael@428: \& local macrosfile /.openpkg/rpmmacros michael@428: \& local specdir michael@428: \& local sourcedir michael@428: \& local builddir michael@428: \& local tmpdir michael@428: \& local binrpmdir michael@428: \& local srcrpmdir michael@428: \& michael@428: \& simple macrosdir /.openpkg michael@428: \& simple macrosfile /.openpkg/rpmmacros michael@428: \& simple specdir michael@428: \& simple sourcedir michael@428: \& simple builddir michael@428: \& simple tmpdir michael@428: \& simple binrpmdir /.. michael@428: \& simple srcrpmdir /.. michael@428: \& michael@428: \& structured macrosdir /.openpkg michael@428: \& structured macrosfile /.openpkg/rpmmacros michael@428: \& structured specdir /src michael@428: \& structured sourcedir /dst michael@428: \& structured builddir /tmp michael@428: \& structured tmpdir /tmp michael@428: \& structured binrpmdir /pkg/bin michael@428: \& structured srcrpmdir /pkg/src michael@428: \& michael@428: \& distributed macrosdir /.openpkg michael@428: \& distributed macrosfile /.openpkg/rpmmacros michael@428: \& distributed specdir /src/ michael@428: \& distributed sourcedir /dst/ michael@428: \& distributed builddir /tmp michael@428: \& distributed tmpdir /tmp michael@428: \& distributed binrpmdir /pkg/bin michael@428: \& distributed srcrpmdir /pkg/src michael@428: .Ve michael@428: .ie n .IP "\*(C`specdir=\*(C'\fIdirectory-list\fR" 4 michael@428: .el .IP "\f(CW\*(C`specdir=\*(C'\fR\fIdirectory-list\fR" 4 michael@428: .IX Item "specdir=directory-list" michael@428: .PD 0 michael@428: .ie n .IP "\*(C`sourcedir=\*(C'\fIdirectory-list\fR" 4 michael@428: .el .IP "\f(CW\*(C`sourcedir=\*(C'\fR\fIdirectory-list\fR" 4 michael@428: .IX Item "sourcedir=directory-list" michael@428: .ie n .IP "\*(C`builddir=\*(C'\fIdirectory-list\fR" 4 michael@428: .el .IP "\f(CW\*(C`builddir=\*(C'\fR\fIdirectory-list\fR" 4 michael@428: .IX Item "builddir=directory-list" michael@428: .ie n .IP "\*(C`tmpdir=\*(C'\fIdirectory-list\fR" 4 michael@428: .el .IP "\f(CW\*(C`tmpdir=\*(C'\fR\fIdirectory-list\fR" 4 michael@428: .IX Item "tmpdir=directory-list" michael@428: .ie n .IP "\*(C`binrpmdir=\*(C'\fIdirectory-list\fR" 4 michael@428: .el .IP "\f(CW\*(C`binrpmdir=\*(C'\fR\fIdirectory-list\fR" 4 michael@428: .IX Item "binrpmdir=directory-list" michael@428: .ie n .IP "\*(C`srcrpmdir=\*(C'\fIdirectory-list\fR" 4 michael@428: .el .IP "\f(CW\*(C`srcrpmdir=\*(C'\fR\fIdirectory-list\fR" 4 michael@428: .IX Item "srcrpmdir=directory-list" michael@428: .PD michael@428: These parameters correspond to the six individual directories provided michael@428: by a standard layout and allow you to selectively adjust parts of a michael@428: standard layout to local needs and without having to define a full michael@428: standard layout yourself. michael@428: .Sp michael@428: The \fIdirectory-list\fR is a whitespace-separated list of michael@428: \&\fIdirectory\fR[\f(CW\*(C`:\*(C'\fR[\f(CW\*(C`+\*(C'\fR]\fIdirectory\fR] specifications which are michael@428: \&\*(L"first-match\*(R" searched for existence. The last directory in the list michael@428: is always taken as the fallback and if it is not existing it is michael@428: even created on-the-fly. The \fIdirectory-check\fR\f(CW\*(C`:\*(C'\fR\fIdirectory-use\fR michael@428: syntax variant allows the existence test to use \fIdirectory-check\fR, michael@428: but expands to \fIdirectory-use\fR (replace mode). The michael@428: \&\fIdirectory-check\fR\f(CW\*(C`:+\*(C'\fR\fIdirectory-use\fR syntax variant allows michael@428: the existence test to use \fIdirectory-check\fR, but expands to michael@428: \&\fIdirectory-check\fR\fIdirectory-use\fR (append mode). For instance michael@428: \&\f(CW\*(C`tmpdir="%{getenv:HOME)/tmp:+/openpkg %{getenv:TMPDIR}:+/openpkg michael@428: /tmp/%(echo $LOGNAME)/openpkg"\*(C'\fR will first check for ~/tmp (and then use michael@428: ~/tmp/openpkg), then for \f(CW$TMPDIR\fR (and use \f(CW$TMPDIR\fR/openpkg) and finally michael@428: it will use /tmp/$LOGNAME/openpkg at last resort. michael@428: .Sp michael@428: Paths are usually assembled by using \s-1RPM\s0 macros like michael@428: \&\f(CW\*(C`%{l_prefix}\*(C'\fR (the instance prefix), \f(CW\*(C`%{_\|_openpkg_basename}\*(C'\fR (the michael@428: \&\fIbasename\fR parameter), \f(CW\*(C`%{realpath: