/*
* source and binary package support
*
* @(#)package.mk (AT&T Research) 2012-02-14
*
* usage:
*
* cd $INSTALLROOT/lib/package
* nmake -f name [closure] [cyg|exp|lcl|pkg|rpm|tgz] [base|delta] type
*
* where:
*
* name package description file or component
*
* type source build source archive, generates
* $(PACKAGEDIR)/name.version.release.suffix
* binary build binary archive, generates
* $(PACKAGEDIR)/name.version.hosttype.release.suffix
* runtime build binary archive, generates
* $(PACKAGEDIR)/name-run.version.hosttype.release.suffix
*
* NOTE: $(PACKAGEDIR) is in the lowest view and is shared among all views
*
* generated archive member files are $(PACKAGEROOT) relative
*
* main assertions:
*
* NAME [ name=value ] :PACKAGE: component ...
* :OMIT: component ...
* :LICENSE: license-class-pattern
* :CATEGORY: category-id ...
* :COVERS: package ...
* :REQURES: package ...
* :INDEX: index description line
* :DESCRIPTION:
* [ verbose description ]
* :DETAILS: style
* :README:
* readme lines
* :EXPORT:
* name=value
* target :INSTALL: [ source ]
*
* option variables, shown with default values
*
* format=tgz
* archive format
*
* version=YYYY-MM-DD
* package base version (overrides current date)
*
* release=YYYY-MM-DD
* package delta release (overrides current date)
*
* license=type.class
* :LICENSE: type.class pattern override
*
* notice=1
* include the conspicuous empty notice file
*
* copyright=0
* do not prepend source file copyright notice
*
* strip=0
* don't strip non-lcl binary package members
*
* variants=pattern
* include variants matching pattern in binary packages
*
* incremental=[source:1 binary:0]
* if a base archive is generated then also generate an
* incremental delta archive from the previous base
*
* NOTE: the Makerules.mk :PACKAGE: operator defers to :package: when
* a target is specified
*/
/* these are ast centric -- we'll parameterize another day */
/* generic defaults */
base =
closure =
delta =
index =
license =
opt =
name =
notice =
release =
type =
vendor =
.package.readme. :
$()
bin/package
$()
$()
$()
$()
$()
$()
$()
$()
$()
$()
L := $(%)
while L == "--*"
I := $(L:O=1)
if I == "--all"
elif I == "--save"
elif I == "--text"
L := $(L:O>1)
if "$(L)" == "*-*"
L += $(L:/[^-]*-//) $(L:/-.*//)
L += $(licenses)
for I $(L:U)
if I == "gpl"
I = gnu
all =
if F = "$(I:D=$(PACKAGESRC):B:S=.lic:T=F)"
R += $(F)
R += $(T:D=$(PACKAGESRC)/LICENSES:B)
if save
R += $(F:T=I:N=*.def:D=$(PACKAGESRC):B:S:T=F)
break
return $(R)
/*
* glob(3) doesn't handle / in alternation -- should it?
*/
local A D I P S
for I $(%)
if I == "*/*"
D := $(I:C,/.*,,)
if ! "$(A:N=$(D))"
local S.$(D)
A += $(D)
S.$(D) += $(I:C,[^/]*/,,)
else
P := $(P)$(S)$(I)
S = |
if P == "*\|*"
P := ($(P))
for I $(A)
P += $(I)/$(.package.glob. $(S.$(I)))
return $(P)
local V
V := $(VROOT:T=F:P=L*)
if ! PACKAGEROOT
if V == "$(PACKAGEROOT)"
V :=
V += $(INSTALLROOT) $(PACKAGEROOT)
if license
package.all = $(package.glob.all:P=G:W=O=$(?$(name):A=.VIRTUAL):N!=$(package.omit):T=F:$(PACKAGEVIEW:C,.*,C;^&/;;,:/ /:/G):U)
package.glob.pkg = $(.package.glob. $(~$(name):P=U):C%.*%$(INSTALLROOT)/src/*/&/($(MAKEFILES:/:/|/G))%) $(~$(name):P=U:N=$(name):?$$(INSTALLROOT)/src/$$(name)/($$(MAKEFILES:/:/|/G))??)
package.pkg = $(package.glob.pkg:P=G:D:N!=$(package.omit):T=F:$(PACKAGEVIEW:C,.*,C;^&/;;,:/ /:/G):U)
package.closure = $(closure:?$$(package.all)?$$(package.pkg)?)
package.init = $(.package.glob. $("$(init)$(name)":P=U):C%.*%$(INSTALLROOT)/src/*/&/($(MAKEFILES:/:/|/G))%:P=G:T=F:D::B)
package.mam = --never --force --mam=static --corrupt=accept --clobber --compare --link='lib*.a*' CC=$(CC.DIALECT:N=C++:?CC?cc?) package.license.class=$(license:Q) $(=) 'dontcare test' install test
package.requires = 0
local P I R V
P := $(<:O=1)
$(P) : $(>:V)
if ! package.requires
if ! name
name := $(P)
.PACKAGE. := $(P)
if name == "$(init)"
package.omit = -
else
$(P) : $(package.init)
for I $(<:O>1)
if I == "*=*"
$(I)
else
version := $(I)
if "$(>)"
for I $(>:V)
$(I) : .VIRTUAL
if I == "/*"
package.dir += $(I:V)
if "$(@)"
$(P).README := $(@)
else
":CATEGORY:" : .MAKE .OPERATOR
if ! package.requires
category := $(>)
end
.covers. : .FUNCTION
local I C D F K=0 L
for I $(%)
if ! "$(~covers:N=$(I:B))"
if F = "$(I:D:B:S=.pkg:T=F)"
if D = "$(F:T=I)"
covers : $(I:B)
for L $(D)
if L == ":COVERS:"
K = 1
elif L == ":*:"
if K
break
end
elif K
: $(.covers. $(L))
end
end
end
else
error $(--exec:?3?1?) $(I): unknown package $(I)
end
end
end
":COVERS:" : .MAKE .OPERATOR
if ! package.requires
: $(.covers. $(>))
end
":DESCRIPTION:" : .MAKE .OPERATOR
if ! package.requires
$(name).README := $(@:V)
end
":DETAILS:" : .MAKE .OPERATOR
if ! package.requires
details.$(>:O=1) := $(@:V)
end
":EXPORT:" : .MAKE .OPERATOR
if ! package.requires
export.$(style) := $(@:/$$("\n")/ /G)
end
":INDEX:" : .MAKE .OPERATOR
if ! package.requires
index := $(>)
end
":INSTALL:" : .MAKE .OPERATOR
if ! package.requires
local T S F X
S := $(>)
T := $(<)
if "$(exe.$(style))" && "$(T)" == "bin/*([!./])"
T := $(T).exe
end
if ! "$(S)"
S := $(T)
elif "$(exe.$(style))" && "$(S)" == "bin/*([!./])"
S := $(S).exe
end
install.$(style) := $(install.$(style):V)$("\n")install : $$(ROOT)/$(T)$("\n")$$(ROOT)/$(T) : $$(ARCH)/$(S)$("\n\t")cp $< $@
if strip && "$(T:N=*.exe)"
end
X := $(PACKAGEROOT)/arch/$(CC.HOSTTYPE)/$(S)
F := filter $(STRIP) $(STRIPFLAGS) $(X)
end
filter.$(style) := $(filter.$(style):V)$$("\n")
end
filter.$(style) := $(filter.$(style):V);;$(F);$(X);usr/$(T)
end
if ! package.requires && ! license
license := $(>)
end
if ! package.requires
package.omit := $(package.omit)|$(>:C,^,*/,:/ /|/G)
end
if ! package.requires
postinstall.$(style) := $(@:V)
end
if ! package.requires
readme.$(style) := $(@:V)
end
.requires. : .FUNCTION
local I C D F K=0 L V T M=0
for I $(%)
package.omit = -
else
requires : $(I:B)
end
req : $(I:B)
else
error 1 $(I): package should be written before $(P)
end
let package.requires = package.requires + 1
include "$(F)"
let package.requires = package.requires - 1
else
error 1 $(I): package not found
end
end
end
: $(.requires. $(>))
if ! package.requires
local T
T := $(>)
if "$(exe.$(style))"
T := $(T).exe
end
T := $$(PWD)/$$(ARCH)/$(T)
end
test.$(style) := $(test.$(style):V)$("\n")test : $(T:V)$("\n\t")$(@)
end
base delta : .MAKE .VIRTUAL .FORCE
op := $(<)
closure : .MAKE .VIRTUAL .FORCE
$(<) := 1
cyg exp lcl pkg rpm tgz : .MAKE .VIRTUAL .FORCE
style := $(<)
source : .source.init .source.gen .source.$$(style)
.source.init : .MAKE
local A B D P V I
type := source
if ! "$(incremental)"
incremental = 1
end
if "$(source.$(name))"
suffix = c
end
: $(.init.$(style))
: $(details.$(style):V:R) :
A := $(source.list)
B := $(A:N=*.$(stamp).$(suffix):N!=*.$(stamp).$(stamp).*:O=1:T=F)
P := $(A:N=*.$(stamp).$(suffix):N!=*.$(stamp).$(stamp).*:O=2:T=F)
D := $(A:N=*.$(stamp).$(stamp).$(suffix):O=1:T=F)
if op == "delta"
if ! B
error 3 delta requires a base archive
end
base := -z $(B)
deltaversion := $(B:B:/$(name).//)
let deltasince = $(deltaversion:/.*-//) + 1
deltasince := $(deltaversion:/[^-]*$/$(deltasince:F=%02d)/)
if "$(release)" != "$(stamp)"
release := $("":T=R%Y-%m-%d)
end
source := $(B:D:B:S=.$(release).$(suffix))
version := $(source:B:B:/$(name).//)
elif B || op == "base"
if op == "base"
for I $(B) $(P)
V := $(I:B:/$(name)\.\([^.]*\).*/\1/)
if V == "$(stamp)" && V != "$(version)"
if "$(old.version)" >= "$(version)"
break
else
source := $(B)
if B == "$(source)"
if "$(B:D:B:B)" == "$(D:D:B:B)" && "$(B:B::S)" != "$(D:B::S)"
.source.gen : $$(PACKAGEDIR) $$(PACKAGEGEN) $$(PACKAGEGEN)/SOURCE.html $$(PACKAGEGEN)/BINARY.html $$(PACKAGEGEN)/DETAILS.html
[[ -d $(<) ]] || mkdir $(<)
local N
N := $(%)
if N == "*-*"
if vendor == "$(vendor.cyg)"
vendor :=
N := $(N:/[^-]*-//)
N := $(N:/-//G)
return $(N)
local N O
init = .
if name != "$(name.original)"
O := $(~covers)
for N $(O)
if opt
else
if type == "source"
else
if [[ '$(~$(name))' ]]
{
integer m=0 o
echo "you didn't have to do that"
!
ROOT = ../..
all :
!
$(readme.$(style):@?$$(readme.$$(style))$$("\n\n")??)To build binaries from source into the ./arch/`bin/package` tree run:
$()
$()
$(test.$(style):@?To test the binaries after building/installing run:$$("\n\n\t")make test$$("\n\n")??)To build and/or install the binaries run:
$()
$()
$()
$()
$()
$(url) $("\\")
package make
$()
$()
package setup
package make
$()
!
echo ";;;$tmp/CYGWIN-README;CYGWIN-PATCHES/README"
sdesc: "$(index)"
ldesc: "$($(name.original).README)"
!
echo ";;;$(source:/-src.$(suffix)//).setup.hint;CYGWIN-PATCHES/setup.hint"
:MAKE:
!
if [[ '$(mamfile)' == 1 ]]
!
!
echo ";;;$(PACKAGEGEN)/$(name.original).req"
for i
do cd $(INSTALLROOT)/$i
then (( o=m ))
if [[ $s ]]
do if [[ -d $j ]]
then (( m++ ))
cd $(INSTALLROOT)/$i
if (( o != m ))
then (( m++ ))
!
else (( m++ ))
for i
do tw -d $i -e "action:printf(';;;%s;%s\n',path,path);"
} |
{
$(package.readme)
!
} |
--local \
$(PACKAGEVIEW:C%.*%-s",^&/,,"%) \
$(vendor:?-s",^[^/],$(opt)&,"??)
if [[ '$(~$(name))' ]]
{
integer m=0 o
for i
do cd $(INSTALLROOT)/$i
for i
do tw -d $i -e "action:printf(';;;%s;%s\n',path,path);"
} |
--local \
$(PACKAGEVIEW:C%.*%-s",^&/,,"%)
if [[ '$(~$(name))' ]]
{
integer m=0 o
if [[ '$(init)' == '$(name)' ]]
:MAKE:
!
$(CMP) $(CMPFLAGS) $tmp/Makefile $(PACKAGEROOT)/src/Makefile && touch -r $(PACKAGEROOT)/src/Makefile $tmp/Makefile
$(CMP) $(CMPFLAGS) $tmp/Makefile1 $(PACKAGEROOT)/src/cmd/Makefile && touch -r $(PACKAGEROOT)/src/cmd/Makefile $tmp/Makefile1
$(CMP) $(CMPFLAGS) $tmp/Makefile2 $(PACKAGEROOT)/src/lib/Makefile && touch -r $(PACKAGEROOT)/src/lib/Makefile $tmp/Makefile2
if [[ '$(mamfile)' == 1 ]]
!
$(CMP) $(CMPFLAGS) $tmp/Mamfile1 $(PACKAGEROOT)/src/Mamfile && touch -r $(PACKAGEROOT)/src/Mamfile $tmp/Mamfile1
!
$(CMP) $(CMPFLAGS) $tmp/Mamfile2 $(PACKAGEROOT)/src/cmd/Mamfile && touch -r $(PACKAGEROOT)/src/cmd/Mamfile $tmp/Mamfile2
$(CMP) $(CMPFLAGS) $tmp/Mamfile3 $(PACKAGEROOT)/src/lib/Mamfile && touch -r $(PACKAGEROOT)/src/lib/Mamfile $tmp/Mamfile3
if [[ '$(~covers)' ]]
do if [[ -f $(PACKAGESRC)/$i.$j ]]
do if [[ -f $(PACKAGEGEN)/$i.$j ]]
do echo ";;;$(PACKAGESRC)/$i;$(PACKAGELIB)/$i"
if [[ '$(PACKAGEDIR:B)' == '$(style)' ]]
echo ";;;$(PACKAGEGEN)/$(name).ver;$(PACKAGELIB)/$(name).ver"
echo ";;;$(PACKAGEGEN)/$(name).req;$(PACKAGELIB)/$(name).req"
{
echo "name='$(name)'"
echo "index='$(index)'"
echo "covers='$(~covers)'"
echo "requires='$(~req)'"
} > $tmp/t
{
{
echo '$($(name).README)'
if [[ '$(~covers)' ]]
then echo "This package is a superset of the following package$(~covers:O=2:?s??): $(~covers); you won't need $(~covers:O=2:?these?this?) if you download $(name)."
if [[ '$(~requires)' ]]
} | fmt
} > $tmp/t
echo ";;;$(PACKAGEGEN)/$(name).README;$(PACKAGELIB)/$(name).README"
{
echo '.xx title="$(name) package"'
echo '.xx meta.description="$(name) package"'
echo '.xx meta.keywords="software, package"'
echo '.MT 4'
echo '.TL'
echo '$(name) package'
echo '.H 1 "$(name) package"'
echo '$($(name).README)'
hot=
for i
do hot="$hot -e s/\\(\\<$i\\>\\)/\\\\h'0*1'\\1\\\\h'0'/"
if (( $# ))
echo '.P'
echo '.TS'
echo 'center expand;'
echo 'l l l l l l.'
if [[ $hot ]]
for i
do echo $i
done |
$hot
echo '.TE'
echo '.P'
if [[ '$(~covers)' ]]
then echo "This package is a superset of the following package$(~covers:O=2:?s??): $(~covers); you won't need $(~covers:O=2:?these?this?) if you download $(name)."
if [[ '$(~requires)' ]]
case $# in
0) ;;
*) case $# in
*) echo 'The software is covered by these licenses:' ;;
for j
echo ".xx link=\"$i\""
echo 'Individual components may be covered by separate licenses;'
echo .P
;;
echo 'A recent'
echo '.xx link="release change log"'
echo 'is also included.'
echo '.H 1 "release change log"'
echo '.xx index'
echo '.nf'
sed -e 's/:::::::: \(.*\) ::::::::/.fi\$("\n").H 1 "\1 changes"\$("\n").nf/'
echo '.fi'
} |
w
q
!
echo ";;;$(PACKAGEGEN)/$(name).html;$(PACKAGELIB)/$(name).html"
if [[ '$(deltasince)' ]]
then {
echo '.xx title="$(name) package"'
echo '.xx meta.description="$(name) package $(version) delta $(release)"'
echo '.xx meta.keywords="software, package, delta"'
echo '.MT 4'
echo '.TL'
echo '$(name) package $(deltaversion) delta $(release)'
echo '.H 1 "$(name) package $(deltaversion) delta $(release) changes"'
echo '.nf'
sed -e 's/:::::::: \(.*\) ::::::::/.H 2 \1/'
echo '.fi'
} |
$(CMP) $(CMPFLAGS) $tmp/t $(PACKAGEGEN)/$(name).$(release).html || cp $tmp/t $(PACKAGEGEN)/$(name).$(release).html
echo ";;;$(PACKAGEGEN)/$(name).$(release).html;$(PACKAGELIB)/$(name).$(release).html"
for i
do cd $(INSTALLROOT)/$i
then (( o=m ))
if [[ $s ]]
do if [[ -d $j ]]
then (( m++ ))
$(CMP) $(CMPFLAGS) $tmp/$m.mam $(PACKAGEROOT)/$i/$j/Mamfile && touch -r $(PACKAGEROOT)/$i/$j/Mamfile $tmp/$m.mam
cd $(INSTALLROOT)/$i
if (( o != m ))
then (( m++ ))
!
$(CMP) $(CMPFLAGS) $tmp/$m.mam $(PACKAGEROOT)/$i/Mamfile && touch -r $(PACKAGEROOT)/$i/Mamfile $tmp/$m.mam
else (( m++ ))
$(CMP) $(CMPFLAGS) $tmp/$m.mam $(PACKAGEROOT)/$i/Mamfile && touch -r $(PACKAGEROOT)/$i/Mamfile $tmp/$m.mam
$(MAKE) --noexec $(-) $(=) recurse list.package.$(type) package.license.class=$(license:Q) $(copyright:N=1:??LICENSE=?)
for i
do tw -d $i -e "action:printf(';;;%s;%s\n',path,path);"
} |
{
$(package.readme)
!
} |
--local \
$(PACKAGEVIEW:C%.*%-s",^&/,,"%)
if [[ '$(incremental)' == 1 && '$(old.source)' ]]
{
echo "name='$(name)'"
echo "index='$(index)'"
echo "covers='$(~covers)'"
echo "requires='$(~req)'"
{
echo '.xx title="$(name) package"'
echo '.xx meta.description="$(name) package"'
echo '.xx meta.keywords="software, package"'
echo '.MT 4'
echo '.TL'
echo '$(name) package'
echo '.H 1'
echo '$($(name).README)'
} |
if [[ '$(source.$(name))' ]]
then {
echo '$($(name).README)'
local A B D I P V
if ! "$(incremental)"
if ! "$(~$(name))"
if name == "ratz"
else
if op == "delta"
if ! B
base := -z $(B)
if "$(release)" != "$(stamp)"
if op == "base"
for I $(B) $(P)
V := $(I:B:/$(name)\.\([^.]*\).*/\1/)
if V == "[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]" && V != "$(version)"
if "$(old.version)" >= "$(version)"
break
else
binary := $(B)
if B == "$(binary)"
if "$(B:D:B)" == "$(D:D:B)" && "$(B:S)" != "$(D:S)"
if [[ '$(~$(name))' ]]
{
integer m=0 o
{
cat <<'!'
!
{
cat <<'!'
$()
$()
$(package.readme)
!
sdesc: "$(index)"
ldesc: "$($(name.original).README)"
!
for i
cat <<'!'
!
if [[ '$(postinstall.$(style):V:O=1:?1??)' ]]
$(postinstall.$(style))
!
echo ";;;$tmp/postinstall;etc/postinstall/$(name).sh"
} |
{
} |
--local \
if [[ '$(~$(name))' ]]
{
for i
do cd $(INSTALLROOT)/$i
$(MAKE) --noexec $(-) --variants=$(variants:Q) $(=) recurse list.package.$(type) package.license.class=$(license:Q) cc-
} |
--local \
-s",^$tmp/,$(INSTALLOFFSET)/," \
$(PACKAGEROOT:C%.*%-s",^&/,,"%)
if [[ '$(~$(name))' ]]
{
if [[ '$(init)' == '$(name)' ]]
do if [[ -d $(INSTALLROOT)/$i ]]
if [[ '$(PACKAGEDIR:B)' == '$(style)' ]]
echo ";;;$(PACKAGEGEN)/$(name).ver;$(PACKAGELIB)/$(name).ver"
if [[ '$(~covers)' ]]
do if [[ -f $(PACKAGESRC)/$i.$j ]]
do if [[ -f $(PACKAGEGEN)/$i.$j ]]
do echo ";;;$(PACKAGESRC)/$i;$(PACKAGELIB)/$i"
echo ";;;$(PACKAGEGEN)/$(name).req;$(PACKAGELIB)/$(name).req"
{
echo "name='$(name)'"
echo "index='$(index)'"
echo "covers='$(~covers)'"
echo "requires='$(~req)'"
{
{
echo '$($(name).README)'
if [[ '$(~covers)' ]]
then echo "This package is a superset of the following package$(~covers:O=2:?s??): $(~covers); you won't need $(~covers:O=2:?these?this?) if you download $(name)."
if [[ '$(~requires)' ]]
} | fmt
echo ";;;$(PACKAGEGEN)/$(name).README;$(PACKAGELIB)/$(name).README"
for i
do cd $(INSTALLROOT)/$i
$(MAKE) --noexec $(-) --variants=$(variants:Q) $(=) package.strip=$(strip) recurse list.package.$(type) package.license.class=$(license:Q) cc-
} |
{
$(package.readme)
!
} |
--local \
-s",^$tmp/,$(INSTALLOFFSET)/," \
$(PACKAGEROOT:C%.*%-s",^&/,,"%)
if [[ '$(incremental)' == 1 && '$(old.binary)' ]]
else if [[ '$(binary.$(name))' ]]
{
echo "name='$(name)'"
echo "index='$(index)'"
echo "covers='$(~covers)'"
echo "requires='$(~req)'"
{
echo '$($(name).README)'
case "$(binary)" in
local A B D I P V
if ! "$(incremental)"
if ! "$(~$(name))"
if name == "ratz"
else
if op == "delta"
if ! B
base := -z $(B)
if "$(release)" != "$(stamp)"
if op == "base"
for I $(B) $(P)
if V == "[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]" && V != "$(version)"
if "$(old.version)" >= "$(version)"
break
else
runtime := $(B)
if B == "$(runtime)"
if "$(B:D:B)" == "$(D:D:B)" && "$(B:S)" != "$(D:S)"
if [[ '$(~$(name))' ]]
{
if [[ '$(init)' == '$(name)' ]]
do if [[ -d $(INSTALLROOT)/$i ]]
echo ";;;$(PACKAGEGEN)/$(name).ver;$(PACKAGELIB)/$(name).ver"
if [[ '$(~covers)' ]]
do if [[ -f $(PACKAGESRC)/$i.$j ]]
do if [[ -f $(PACKAGEGEN)/$i.$j ]]
do echo ";;;$(PACKAGESRC)/$i;$(PACKAGELIB)/$i"
echo ";;;$(PACKAGEGEN)/$(name).req;$(PACKAGELIB)/$(name).req"
{
echo "name='$(name)'"
echo "index='$(index)'"
echo "covers='$(~covers)'"
echo "requires='$(~req)'"
{
{
echo '$($(name).README)'
if [[ '$(~covers)' ]]
echo "This package is a superset of the following package$(~covers:O=2:?s??): $(~covers); you won't need $(~covers:O=2:?these?this?) if you download $(name)."
if [[ '$(~requires)' ]]
echo 'It requires the following package$(~requires:O=2:?s??): $(~requires).'
echo "To install this $(type) package read the tarball into a directory"
echo "suitable for containing bin and lib subdirectories, and run the"
echo "$(PACKAGELIB)/gen/$(name)-run.ins script to fix up permissions."
echo "To use the package export the bin directory in PATH. The commands and"
echo "libraries use \$PATH to locate dynamic libraries and related data files."
} | fmt
echo ";;;$(PACKAGEGEN)/$(name)-run.README;$(PACKAGELIB)/$(name)-run.README"
for i
do cd $(INSTALLROOT)/$i
$(MAKE) --noexec $(-) --variants=$(variants:Q) $(=) package.strip=$(strip) recurse list.package.$(type) package.license.class=$(license:Q) cc-
} |
{
$(package.readme)
!
} |
--local \
-s",^$tmp/,$(INSTALLOFFSET)/," \
$(PACKAGEROOT:C%.*%-s",^&/,,"%)
if [[ '$(incremental)' == 1 && '$(old.runtime)' ]]
for i
do cd $(INSTALLROOT)/$i