1*b30d1939SAndy Fiddaman/*
2*b30d1939SAndy Fiddaman * source and binary package support
3*b30d1939SAndy Fiddaman *
4*b30d1939SAndy Fiddaman * @(#)package.mk (AT&T Research) 2012-02-14
5*b30d1939SAndy Fiddaman *
6*b30d1939SAndy Fiddaman * usage:
7*b30d1939SAndy Fiddaman *
8*b30d1939SAndy Fiddaman *	cd $INSTALLROOT/lib/package
9*b30d1939SAndy Fiddaman *	nmake -f name [closure] [cyg|exp|lcl|pkg|rpm|tgz] [base|delta] type
10*b30d1939SAndy Fiddaman *
11*b30d1939SAndy Fiddaman * where:
12*b30d1939SAndy Fiddaman *
13*b30d1939SAndy Fiddaman *	name	package description file or component
14*b30d1939SAndy Fiddaman *
15*b30d1939SAndy Fiddaman *	type	source	build source archive, generates
16*b30d1939SAndy Fiddaman *			$(PACKAGEDIR)/name.version.release.suffix
17*b30d1939SAndy Fiddaman *		binary	build binary archive, generates
18*b30d1939SAndy Fiddaman *			$(PACKAGEDIR)/name.version.hosttype.release.suffix
19*b30d1939SAndy Fiddaman *		runtime	build binary archive, generates
20*b30d1939SAndy Fiddaman *			$(PACKAGEDIR)/name-run.version.hosttype.release.suffix
21*b30d1939SAndy Fiddaman *
22*b30d1939SAndy Fiddaman * NOTE: $(PACKAGEDIR) is in the lowest view and is shared among all views
23*b30d1939SAndy Fiddaman *
24*b30d1939SAndy Fiddaman * generated archive member files are $(PACKAGEROOT) relative
25*b30d1939SAndy Fiddaman *
26*b30d1939SAndy Fiddaman * main assertions:
27*b30d1939SAndy Fiddaman *
28*b30d1939SAndy Fiddaman *	NAME [ name=value ] :PACKAGE: component ...
29*b30d1939SAndy Fiddaman *	:OMIT: component ...
30*b30d1939SAndy Fiddaman *	:LICENSE: license-class-pattern
31*b30d1939SAndy Fiddaman *	:CATEGORY: category-id ...
32*b30d1939SAndy Fiddaman *	:COVERS: package ...
33*b30d1939SAndy Fiddaman *	:REQURES: package ...
34*b30d1939SAndy Fiddaman *	:INDEX: index description line
35*b30d1939SAndy Fiddaman *	:DESCRIPTION:
36*b30d1939SAndy Fiddaman *		[ verbose description ]
37*b30d1939SAndy Fiddaman *	:DETAILS: style
38*b30d1939SAndy Fiddaman *		:README:
39*b30d1939SAndy Fiddaman *			readme lines
40*b30d1939SAndy Fiddaman *		:EXPORT:
41*b30d1939SAndy Fiddaman *			name=value
42*b30d1939SAndy Fiddaman *		target :INSTALL: [ source ]
43*b30d1939SAndy Fiddaman *
44*b30d1939SAndy Fiddaman * option variables, shown with default values
45*b30d1939SAndy Fiddaman *
46*b30d1939SAndy Fiddaman *	format=tgz
47*b30d1939SAndy Fiddaman *		archive format
48*b30d1939SAndy Fiddaman *
49*b30d1939SAndy Fiddaman *	version=YYYY-MM-DD
50*b30d1939SAndy Fiddaman *		package base version (overrides current date)
51*b30d1939SAndy Fiddaman *
52*b30d1939SAndy Fiddaman *	release=YYYY-MM-DD
53*b30d1939SAndy Fiddaman *		package delta release (overrides current date)
54*b30d1939SAndy Fiddaman *
55*b30d1939SAndy Fiddaman *	license=type.class
56*b30d1939SAndy Fiddaman *		:LICENSE: type.class pattern override
57*b30d1939SAndy Fiddaman *
58*b30d1939SAndy Fiddaman *	notice=1
59*b30d1939SAndy Fiddaman *		include the conspicuous empty notice file
60*b30d1939SAndy Fiddaman *
61*b30d1939SAndy Fiddaman *	copyright=0
62*b30d1939SAndy Fiddaman *		do not prepend source file copyright notice
63*b30d1939SAndy Fiddaman *
64*b30d1939SAndy Fiddaman *	strip=0
65*b30d1939SAndy Fiddaman *		don't strip non-lcl binary package members
66*b30d1939SAndy Fiddaman *
67*b30d1939SAndy Fiddaman *	variants=pattern
68*b30d1939SAndy Fiddaman *		include variants matching pattern in binary packages
69*b30d1939SAndy Fiddaman *
70*b30d1939SAndy Fiddaman *	incremental=[source:1 binary:0]
71*b30d1939SAndy Fiddaman *		if a base archive is generated then also generate an
72*b30d1939SAndy Fiddaman *		incremental delta archive from the previous base
73*b30d1939SAndy Fiddaman *
74*b30d1939SAndy Fiddaman * NOTE: the Makerules.mk :PACKAGE: operator defers to :package: when
75*b30d1939SAndy Fiddaman *	 a target is specified
76*b30d1939SAndy Fiddaman */
77*b30d1939SAndy Fiddaman
78*b30d1939SAndy Fiddaman/* these are ast centric -- we'll parameterize another day */
79*b30d1939SAndy Fiddaman
80*b30d1939SAndy Fiddamanorg = ast
81*b30d1939SAndy Fiddamanurl = http://www.research.att.com/sw/download
82*b30d1939SAndy Fiddaman
83*b30d1939SAndy Fiddaman/* generic defaults */
84*b30d1939SAndy Fiddaman
85*b30d1939SAndy Fiddamanbase =
86*b30d1939SAndy Fiddamancategory = utils
87*b30d1939SAndy Fiddamanchecksum = md5
88*b30d1939SAndy Fiddamanclosure =
89*b30d1939SAndy Fiddamancopyright = 1
90*b30d1939SAndy Fiddamandelta =
91*b30d1939SAndy Fiddamanformat = tgz
92*b30d1939SAndy Fiddamanincremental =
93*b30d1939SAndy Fiddamanindex =
94*b30d1939SAndy Fiddamaninit = INIT
95*b30d1939SAndy Fiddamanlicense =
96*b30d1939SAndy Fiddamanlicenses = $(org)
97*b30d1939SAndy Fiddamanmamfile = 1
98*b30d1939SAndy Fiddamanopt =
99*b30d1939SAndy Fiddamanname =
100*b30d1939SAndy Fiddamannotice =
101*b30d1939SAndy Fiddamanrelease =
102*b30d1939SAndy Fiddamanstrip = 0
103*b30d1939SAndy Fiddamanstyle = tgz
104*b30d1939SAndy Fiddamansuffix = tgz
105*b30d1939SAndy Fiddamantype =
106*b30d1939SAndy Fiddamanvariants = !(cc-g)
107*b30d1939SAndy Fiddamanvendor =
108*b30d1939SAndy Fiddamanversion = $("":T=R%Y-%m-%d)
109*b30d1939SAndy Fiddaman
110*b30d1939SAndy FiddamanSUM = sum
111*b30d1939SAndy Fiddaman
112*b30d1939SAndy Fiddamanpackage.notice = ------------ NOTICE -- LICENSED SOFTWARE -- SEE README FOR DETAILS ------------
113*b30d1939SAndy Fiddaman
114*b30d1939SAndy Fiddamanpackage.readme = $(@.package.readme.)
115*b30d1939SAndy Fiddaman
116*b30d1939SAndy Fiddaman.package.readme. :
117*b30d1939SAndy Fiddaman	This is a package root directory $PACKAGEROOT. Source and binary
118*b30d1939SAndy Fiddaman	packages in this directory tree are controlled by the command
119*b30d1939SAndy Fiddaman	$()
120*b30d1939SAndy Fiddaman		bin/package
121*b30d1939SAndy Fiddaman	$()
122*b30d1939SAndy Fiddaman	Binary files may be in this directory or in the install root directory
123*b30d1939SAndy Fiddaman	$()
124*b30d1939SAndy Fiddaman		INSTALLROOT=$PACKAGEROOT/arch/`bin/package`
125*b30d1939SAndy Fiddaman	$()
126*b30d1939SAndy Fiddaman	For more information run
127*b30d1939SAndy Fiddaman	$()
128*b30d1939SAndy Fiddaman		bin/package help
129*b30d1939SAndy Fiddaman	$()
130*b30d1939SAndy Fiddaman	Many of the packaged commands self-document via the --man and --html
131*b30d1939SAndy Fiddaman	options; those that do have no separate man page.
132*b30d1939SAndy Fiddaman	$()
133*b30d1939SAndy Fiddaman	Each package is covered by one of the license files
134*b30d1939SAndy Fiddaman	$()
135*b30d1939SAndy Fiddaman		$(PACKAGELIB)/LICENSES/<license>
136*b30d1939SAndy Fiddaman	$()
137*b30d1939SAndy Fiddaman	where <license> is the license type for the package.  At the top
138*b30d1939SAndy Fiddaman	of each license file is a URL; the license covers all software that
139*b30d1939SAndy Fiddaman	refers to this URL. For details run
140*b30d1939SAndy Fiddaman	$()
141*b30d1939SAndy Fiddaman		bin/package license [<package>]
142*b30d1939SAndy Fiddaman	$()
143*b30d1939SAndy Fiddaman	Any archives, distributions or packages made from source or
144*b30d1939SAndy Fiddaman	binaries covered by license(s) must contain the corresponding
145*b30d1939SAndy Fiddaman	license file(s)$(notice:?, this README file, and the empty file$$("\n")$$(package.notice)?.?)
146*b30d1939SAndy Fiddaman
147*b30d1939SAndy Fiddaman.package.licenses. : .FUNCTION
148*b30d1939SAndy Fiddaman	local I F L R T all save text
149*b30d1939SAndy Fiddaman	L := $(%)
150*b30d1939SAndy Fiddaman	while L == "--*"
151*b30d1939SAndy Fiddaman		I := $(L:O=1)
152*b30d1939SAndy Fiddaman		if I == "--all"
153*b30d1939SAndy Fiddaman			all = 1
154*b30d1939SAndy Fiddaman		elif I == "--save"
155*b30d1939SAndy Fiddaman			save = 1
156*b30d1939SAndy Fiddaman		elif I == "--text"
157*b30d1939SAndy Fiddaman			text = 1
158*b30d1939SAndy Fiddaman		end
159*b30d1939SAndy Fiddaman		L := $(L:O>1)
160*b30d1939SAndy Fiddaman	end
161*b30d1939SAndy Fiddaman	if "$(L)" == "*-*"
162*b30d1939SAndy Fiddaman		L += $(L:/[^-]*-//) $(L:/-.*//)
163*b30d1939SAndy Fiddaman	end
164*b30d1939SAndy Fiddaman	L += $(licenses)
165*b30d1939SAndy Fiddaman	for I $(L:U)
166*b30d1939SAndy Fiddaman		if I == "gpl"
167*b30d1939SAndy Fiddaman			I = gnu
168*b30d1939SAndy Fiddaman			all =
169*b30d1939SAndy Fiddaman		end
170*b30d1939SAndy Fiddaman		if F = "$(I:D=$(PACKAGESRC):B:S=.lic:T=F)"
171*b30d1939SAndy Fiddaman			R += $(F)
172*b30d1939SAndy Fiddaman			if save || text
173*b30d1939SAndy Fiddaman				T := $(.FIND. lib/package .lic $(F):P=W,query=type)
174*b30d1939SAndy Fiddaman				R += $(T:D=$(PACKAGESRC)/LICENSES:B)
175*b30d1939SAndy Fiddaman			end
176*b30d1939SAndy Fiddaman			if save
177*b30d1939SAndy Fiddaman				R += $(F:T=I:N=*.def:D=$(PACKAGESRC):B:S:T=F)
178*b30d1939SAndy Fiddaman			elif ! all
179*b30d1939SAndy Fiddaman				break
180*b30d1939SAndy Fiddaman			end
181*b30d1939SAndy Fiddaman		end
182*b30d1939SAndy Fiddaman	end
183*b30d1939SAndy Fiddaman	return $(R)
184*b30d1939SAndy Fiddaman
185*b30d1939SAndy Fiddaman/*
186*b30d1939SAndy Fiddaman * glob(3) doesn't handle / in alternation -- should it?
187*b30d1939SAndy Fiddaman */
188*b30d1939SAndy Fiddaman
189*b30d1939SAndy Fiddaman.package.glob. : .FUNCTION
190*b30d1939SAndy Fiddaman	local A D I P S
191*b30d1939SAndy Fiddaman	for I $(%)
192*b30d1939SAndy Fiddaman		if I == "*/*"
193*b30d1939SAndy Fiddaman			D := $(I:C,/.*,,)
194*b30d1939SAndy Fiddaman			if ! "$(A:N=$(D))"
195*b30d1939SAndy Fiddaman				local S.$(D)
196*b30d1939SAndy Fiddaman				A += $(D)
197*b30d1939SAndy Fiddaman			end
198*b30d1939SAndy Fiddaman			S.$(D) += $(I:C,[^/]*/,,)
199*b30d1939SAndy Fiddaman		else
200*b30d1939SAndy Fiddaman			P := $(P)$(S)$(I)
201*b30d1939SAndy Fiddaman		end
202*b30d1939SAndy Fiddaman		S = |
203*b30d1939SAndy Fiddaman	end
204*b30d1939SAndy Fiddaman	if P == "*\|*"
205*b30d1939SAndy Fiddaman		P := ($(P))
206*b30d1939SAndy Fiddaman	end
207*b30d1939SAndy Fiddaman	for I $(A)
208*b30d1939SAndy Fiddaman		P += $(I)/$(.package.glob. $(S.$(I)))
209*b30d1939SAndy Fiddaman	end
210*b30d1939SAndy Fiddaman	return $(P)
211*b30d1939SAndy Fiddaman
212*b30d1939SAndy Fiddaman
213*b30d1939SAndy Fiddaman.MAKEINIT : .package.init
214*b30d1939SAndy Fiddaman
215*b30d1939SAndy Fiddaman.package.init : .MAKE .VIRTUAL .FORCE
216*b30d1939SAndy Fiddaman	local V
217*b30d1939SAndy Fiddaman	V := $(VROOT:T=F:P=L*)
218*b30d1939SAndy Fiddaman	if ! PACKAGEROOT
219*b30d1939SAndy Fiddaman	PACKAGEROOT := $(V:N!=*/arch/+([!/]):O=1)
220*b30d1939SAndy Fiddaman	end
221*b30d1939SAndy Fiddaman	if V == "$(PACKAGEROOT)"
222*b30d1939SAndy Fiddaman		V :=
223*b30d1939SAndy Fiddaman	end
224*b30d1939SAndy Fiddaman	V += $(INSTALLROOT) $(PACKAGEROOT)
225*b30d1939SAndy Fiddaman	PACKAGEVIEW := $(V:H=RU)
226*b30d1939SAndy Fiddaman	INSTALLOFFSET := $(INSTALLROOT:C%$(PACKAGEROOT)/%%)
227*b30d1939SAndy Fiddaman	if license
228*b30d1939SAndy Fiddaman		license := $(license)|none.none
229*b30d1939SAndy Fiddaman	end
230*b30d1939SAndy Fiddaman
231*b30d1939SAndy FiddamanPACKAGELIB = lib/package
232*b30d1939SAndy FiddamanPACKAGESRC = $(PACKAGEROOT)/$(PACKAGELIB)
233*b30d1939SAndy FiddamanPACKAGEBIN = $(INSTALLROOT)/$(PACKAGELIB)
234*b30d1939SAndy FiddamanPACKAGEDIR = $(PACKAGESRC)/$(style)
235*b30d1939SAndy FiddamanINSTALLOFFSET = $(INSTALLROOT:C%$(PACKAGEROOT)/%%)
236*b30d1939SAndy Fiddaman
237*b30d1939SAndy Fiddamanpackage.omit = -|*/$(init)
238*b30d1939SAndy Fiddamanpackage.glob.all = $(INSTALLROOT)/src/*/*/($(MAKEFILES:/:/|/G))
239*b30d1939SAndy Fiddamanpackage.all = $(package.glob.all:P=G:W=O=$(?$(name):A=.VIRTUAL):N!=$(package.omit):T=F:$(PACKAGEVIEW:C,.*,C;^&/;;,:/ /:/G):U)
240*b30d1939SAndy Fiddamanpackage.glob.pkg = $(.package.glob. $(~$(name):P=U):C%.*%$(INSTALLROOT)/src/*/&/($(MAKEFILES:/:/|/G))%) $(~$(name):P=U:N=$(name):?$$(INSTALLROOT)/src/$$(name)/($$(MAKEFILES:/:/|/G))??)
241*b30d1939SAndy Fiddamanpackage.pkg = $(package.glob.pkg:P=G:D:N!=$(package.omit):T=F:$(PACKAGEVIEW:C,.*,C;^&/;;,:/ /:/G):U)
242*b30d1939SAndy Fiddamanpackage.closure = $(closure:?$$(package.all)?$$(package.pkg)?)
243*b30d1939SAndy Fiddaman
244*b30d1939SAndy Fiddamanpackage.init = $(.package.glob. $("$(init)$(name)":P=U):C%.*%$(INSTALLROOT)/src/*/&/($(MAKEFILES:/:/|/G))%:P=G:T=F:D::B)
245*b30d1939SAndy Fiddamanpackage.ini = ignore mamprobe manmake package silent
246*b30d1939SAndy Fiddamanpackage.src.pat = $(PACKAGESRC)/($(name).(ini|pkg))
247*b30d1939SAndy Fiddamanpackage.src = $(package.src.pat:P=G) $(.package.licenses. --save $(name))
248*b30d1939SAndy Fiddamanpackage.bin = $(PACKAGEBIN)/$(name).ini
249*b30d1939SAndy Fiddaman
250*b30d1939SAndy Fiddamanpackage.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
251*b30d1939SAndy Fiddaman
252*b30d1939SAndy Fiddamanop = current
253*b30d1939SAndy Fiddamanstamp = [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]
254*b30d1939SAndy Fiddamansource = $(PACKAGEDIR)/$(name).$(version)$(release:?.$(release)??).$(suffix)
255*b30d1939SAndy Fiddamanbinary = $(PACKAGEDIR)/$(name).$(version)$(release:?.$(release)??).$(CC.HOSTTYPE).$(suffix)
256*b30d1939SAndy Fiddamanruntime = $(PACKAGEDIR)/$(name)-run.$(version)$(release:?.$(release)??).$(CC.HOSTTYPE).$(suffix)
257*b30d1939SAndy Fiddamanold.new.source = $(PACKAGEDIR)/$(name).$(version).$(old.version).$(suffix)
258*b30d1939SAndy Fiddamanold.new.binary = $(PACKAGEDIR)/$(name).$(version).$(old.version).$(CC.HOSTTYPE).$(suffix)
259*b30d1939SAndy Fiddamanold.new.runtime = $(PACKAGEDIR)/$(name)-run.$(version).$(old.version).$(CC.HOSTTYPE).$(suffix)
260*b30d1939SAndy Fiddaman
261*b30d1939SAndy Fiddamansource.list = $("$(PACKAGEDIR)/$(name).*$(stamp).$(suffix)":P=G:H=R)
262*b30d1939SAndy Fiddamanbinary.list = $("$(PACKAGEDIR)/$(name).*$(stamp).$(CC.HOSTTYPE).$(suffix)":P=G:H=R)
263*b30d1939SAndy Fiddamanruntime.list = $("$(PACKAGEDIR)/$(name)-run.*$(stamp).$(CC.HOSTTYPE).$(suffix)":P=G:H>)
264*b30d1939SAndy Fiddaman
265*b30d1939SAndy Fiddamansource.ratz = $("$(INSTALLROOT)/src/cmd/$(init)/ratz.c":T=F)
266*b30d1939SAndy Fiddamanbinary.ratz = $("$(INSTALLROOT)/src/cmd/$(init)/ratz":T=F)
267*b30d1939SAndy Fiddaman
268*b30d1939SAndy Fiddaman$(init) : .VIRTUAL $(init)
269*b30d1939SAndy Fiddaman
270*b30d1939SAndy Fiddamanpackage.requires = 0
271*b30d1939SAndy Fiddaman
272*b30d1939SAndy Fiddaman":package:" : .MAKE .OPERATOR
273*b30d1939SAndy Fiddaman	local P I R V
274*b30d1939SAndy Fiddaman	P := $(<:O=1)
275*b30d1939SAndy Fiddaman	$(P) : $(>:V)
276*b30d1939SAndy Fiddaman	if ! package.requires
277*b30d1939SAndy Fiddaman		if ! name
278*b30d1939SAndy Fiddaman			name := $(P)
279*b30d1939SAndy Fiddaman			.PACKAGE. := $(P)
280*b30d1939SAndy Fiddaman			if name == "$(init)"
281*b30d1939SAndy Fiddaman				package.omit = -
282*b30d1939SAndy Fiddaman				package.src += $(package.ini:C,^,$(PACKAGEROOT)/bin/,) $(PACKAGESRC)/package.mk
283*b30d1939SAndy Fiddaman			else
284*b30d1939SAndy Fiddaman				$(P) : $(package.init)
285*b30d1939SAndy Fiddaman			end
286*b30d1939SAndy Fiddaman			for I $(<:O>1)
287*b30d1939SAndy Fiddaman				if I == "*=*"
288*b30d1939SAndy Fiddaman					eval
289*b30d1939SAndy Fiddaman					$(I)
290*b30d1939SAndy Fiddaman					end
291*b30d1939SAndy Fiddaman				else
292*b30d1939SAndy Fiddaman					version := $(I)
293*b30d1939SAndy Fiddaman				end
294*b30d1939SAndy Fiddaman			end
295*b30d1939SAndy Fiddaman			LICENSEFILEDEFAULT := $(.package.licenses. $(name):@/ /:/G)
296*b30d1939SAndy Fiddaman			export LICENSEFILEDEFAULT
297*b30d1939SAndy Fiddaman		end
298*b30d1939SAndy Fiddaman		if "$(>)"
299*b30d1939SAndy Fiddaman			for I $(>:V)
300*b30d1939SAndy Fiddaman				$(I) : .VIRTUAL
301*b30d1939SAndy Fiddaman				if I == "/*"
302*b30d1939SAndy Fiddaman					package.dir += $(I:V)
303*b30d1939SAndy Fiddaman				end
304*b30d1939SAndy Fiddaman			end
305*b30d1939SAndy Fiddaman		end
306*b30d1939SAndy Fiddaman		if "$(@)"
307*b30d1939SAndy Fiddaman			$(P).README := $(@)
308*b30d1939SAndy Fiddaman		else
309*b30d1939SAndy Fiddaman			$(P).README := This is the $(P) package.
310*b30d1939SAndy Fiddaman		end
311*b30d1939SAndy Fiddaman	end
312*b30d1939SAndy Fiddaman
313*b30d1939SAndy Fiddaman":AUXILIARY:" : .MAKE .OPERATOR
314*b30d1939SAndy Fiddaman	package.auxiliary.$(style) += $(>:N=/*:T=F) $(>:N!=/*:C%^%$(INSTALLROOT)/%:T=F)
315*b30d1939SAndy Fiddaman
316*b30d1939SAndy Fiddaman":CATEGORY:" : .MAKE .OPERATOR
317*b30d1939SAndy Fiddaman	if ! package.requires
318*b30d1939SAndy Fiddaman		category := $(>)
319*b30d1939SAndy Fiddaman	end
320*b30d1939SAndy Fiddaman
321*b30d1939SAndy Fiddaman.covers. : .FUNCTION
322*b30d1939SAndy Fiddaman	local I C D F K=0 L
323*b30d1939SAndy Fiddaman	for I $(%)
324*b30d1939SAndy Fiddaman		if ! "$(~covers:N=$(I:B))"
325*b30d1939SAndy Fiddaman			if F = "$(I:D:B:S=.pkg:T=F)"
326*b30d1939SAndy Fiddaman				if D = "$(F:T=I)"
327*b30d1939SAndy Fiddaman					covers : $(I:B)
328*b30d1939SAndy Fiddaman					for L $(D)
329*b30d1939SAndy Fiddaman						if L == ":COVERS:"
330*b30d1939SAndy Fiddaman							K = 1
331*b30d1939SAndy Fiddaman						elif L == ":*:"
332*b30d1939SAndy Fiddaman							if K
333*b30d1939SAndy Fiddaman								break
334*b30d1939SAndy Fiddaman							end
335*b30d1939SAndy Fiddaman						elif K
336*b30d1939SAndy Fiddaman							: $(.covers. $(L))
337*b30d1939SAndy Fiddaman						end
338*b30d1939SAndy Fiddaman					end
339*b30d1939SAndy Fiddaman				end
340*b30d1939SAndy Fiddaman			else
341*b30d1939SAndy Fiddaman				error $(--exec:?3?1?) $(I): unknown package $(I)
342*b30d1939SAndy Fiddaman			end
343*b30d1939SAndy Fiddaman		end
344*b30d1939SAndy Fiddaman	end
345*b30d1939SAndy Fiddaman
346*b30d1939SAndy Fiddaman":COVERS:" : .MAKE .OPERATOR
347*b30d1939SAndy Fiddaman	if ! package.requires
348*b30d1939SAndy Fiddaman		: $(.covers. $(>))
349*b30d1939SAndy Fiddaman	end
350*b30d1939SAndy Fiddaman
351*b30d1939SAndy Fiddaman":DESCRIPTION:" : .MAKE .OPERATOR
352*b30d1939SAndy Fiddaman	if ! package.requires
353*b30d1939SAndy Fiddaman		$(name).README := $(@:V)
354*b30d1939SAndy Fiddaman	end
355*b30d1939SAndy Fiddaman
356*b30d1939SAndy Fiddaman":DETAILS:" : .MAKE .OPERATOR
357*b30d1939SAndy Fiddaman	if ! package.requires
358*b30d1939SAndy Fiddaman		details.$(>:O=1) := $(@:V)
359*b30d1939SAndy Fiddaman	end
360*b30d1939SAndy Fiddaman
361*b30d1939SAndy Fiddaman":EXPORT:" : .MAKE .OPERATOR
362*b30d1939SAndy Fiddaman	if ! package.requires
363*b30d1939SAndy Fiddaman		export.$(style) := $(@:/$$("\n")/ /G)
364*b30d1939SAndy Fiddaman	end
365*b30d1939SAndy Fiddaman
366*b30d1939SAndy Fiddaman":INDEX:" : .MAKE .OPERATOR
367*b30d1939SAndy Fiddaman	if ! package.requires
368*b30d1939SAndy Fiddaman		index := $(>)
369*b30d1939SAndy Fiddaman	end
370*b30d1939SAndy Fiddaman
371*b30d1939SAndy Fiddaman":INSTALL:" : .MAKE .OPERATOR
372*b30d1939SAndy Fiddaman	if ! package.requires
373*b30d1939SAndy Fiddaman		local T S F X
374*b30d1939SAndy Fiddaman		S := $(>)
375*b30d1939SAndy Fiddaman		T := $(<)
376*b30d1939SAndy Fiddaman		if "$(exe.$(style))" && "$(T)" == "bin/*([!./])"
377*b30d1939SAndy Fiddaman			T := $(T).exe
378*b30d1939SAndy Fiddaman		end
379*b30d1939SAndy Fiddaman		if ! "$(S)"
380*b30d1939SAndy Fiddaman			S := $(T)
381*b30d1939SAndy Fiddaman		elif "$(exe.$(style))" && "$(S)" == "bin/*([!./])"
382*b30d1939SAndy Fiddaman			S := $(S).exe
383*b30d1939SAndy Fiddaman		end
384*b30d1939SAndy Fiddaman		install.$(style) := $(install.$(style):V)$("\n")install : $$(ROOT)/$(T)$("\n")$$(ROOT)/$(T) : $$(ARCH)/$(S)$("\n\t")cp $< $@
385*b30d1939SAndy Fiddaman		if strip && "$(T:N=*.exe)"
386*b30d1939SAndy Fiddaman			install.$(style) := $(install.$(style):V)$("\n\t")strip $@ 2>/dev/null
387*b30d1939SAndy Fiddaman		end
388*b30d1939SAndy Fiddaman		X := $(PACKAGEROOT)/arch/$(CC.HOSTTYPE)/$(S)
389*b30d1939SAndy Fiddaman		if strip && "$(X:T=Y)" == "*/?(x-)(dll|exe)"
390*b30d1939SAndy Fiddaman			F := filter $(STRIP) $(STRIPFLAGS) $(X)
391*b30d1939SAndy Fiddaman		end
392*b30d1939SAndy Fiddaman		if "$(filter.$(style):V)"
393*b30d1939SAndy Fiddaman			filter.$(style) := $(filter.$(style):V)$$("\n")
394*b30d1939SAndy Fiddaman		end
395*b30d1939SAndy Fiddaman		filter.$(style) := $(filter.$(style):V);;$(F);$(X);usr/$(T)
396*b30d1939SAndy Fiddaman	end
397*b30d1939SAndy Fiddaman
398*b30d1939SAndy Fiddaman":LICENSE:" : .MAKE .OPERATOR
399*b30d1939SAndy Fiddaman	if ! package.requires && ! license
400*b30d1939SAndy Fiddaman		license := $(>)
401*b30d1939SAndy Fiddaman	end
402*b30d1939SAndy Fiddaman
403*b30d1939SAndy Fiddaman":OMIT:" : .MAKE .OPERATOR
404*b30d1939SAndy Fiddaman	if ! package.requires
405*b30d1939SAndy Fiddaman		package.omit := $(package.omit)|$(>:C,^,*/,:/ /|/G)
406*b30d1939SAndy Fiddaman	end
407*b30d1939SAndy Fiddaman
408*b30d1939SAndy Fiddaman":POSTINSTALL:" : .MAKE .OPERATOR
409*b30d1939SAndy Fiddaman	if ! package.requires
410*b30d1939SAndy Fiddaman		postinstall.$(style) := $(@:V)
411*b30d1939SAndy Fiddaman	end
412*b30d1939SAndy Fiddaman
413*b30d1939SAndy Fiddaman":README:" : .MAKE .OPERATOR
414*b30d1939SAndy Fiddaman	if ! package.requires
415*b30d1939SAndy Fiddaman		readme.$(style) := $(@:V)
416*b30d1939SAndy Fiddaman	end
417*b30d1939SAndy Fiddaman
418*b30d1939SAndy Fiddaman.requires. : .FUNCTION
419*b30d1939SAndy Fiddaman	local I C D F K=0 L V T M=0
420*b30d1939SAndy Fiddaman	for I $(%)
421*b30d1939SAndy Fiddaman		if ! "$(~requires:N=$(I:B))"
422*b30d1939SAndy Fiddaman			if F = "$(I:D:B:S=.pkg:T=F)"
423*b30d1939SAndy Fiddaman				if I == "$(init)"
424*b30d1939SAndy Fiddaman					package.omit = -
425*b30d1939SAndy Fiddaman				else
426*b30d1939SAndy Fiddaman					requires : $(I:B)
427*b30d1939SAndy Fiddaman				end
428*b30d1939SAndy Fiddaman				if V = "$(I:D:B=gen/$(I:B):S=.ver:T=F)"
429*b30d1939SAndy Fiddaman					req : $(I:B)
430*b30d1939SAndy Fiddaman				else
431*b30d1939SAndy Fiddaman					error 1 $(I): package should be written before $(P)
432*b30d1939SAndy Fiddaman				end
433*b30d1939SAndy Fiddaman				let package.requires = package.requires + 1
434*b30d1939SAndy Fiddaman				include "$(F)"
435*b30d1939SAndy Fiddaman				let package.requires = package.requires - 1
436*b30d1939SAndy Fiddaman			else
437*b30d1939SAndy Fiddaman				error 1 $(I): package not found
438*b30d1939SAndy Fiddaman			end
439*b30d1939SAndy Fiddaman		end
440*b30d1939SAndy Fiddaman	end
441*b30d1939SAndy Fiddaman
442*b30d1939SAndy Fiddaman":REQUIRES:" : .MAKE .OPERATOR
443*b30d1939SAndy Fiddaman	: $(.requires. $(>))
444*b30d1939SAndy Fiddaman
445*b30d1939SAndy Fiddaman":TEST:" : .MAKE .OPERATOR
446*b30d1939SAndy Fiddaman	if ! package.requires
447*b30d1939SAndy Fiddaman		local T
448*b30d1939SAndy Fiddaman		T := $(>)
449*b30d1939SAndy Fiddaman		if "$(T)" == "bin/*([!./])"
450*b30d1939SAndy Fiddaman			if "$(exe.$(style))"
451*b30d1939SAndy Fiddaman				T := $(T).exe
452*b30d1939SAndy Fiddaman			end
453*b30d1939SAndy Fiddaman			T := $$(PWD)/$$(ARCH)/$(T)
454*b30d1939SAndy Fiddaman		end
455*b30d1939SAndy Fiddaman		test.$(style) := $(test.$(style):V)$("\n")test : $(T:V)$("\n\t")$(@)
456*b30d1939SAndy Fiddaman	end
457*b30d1939SAndy Fiddaman
458*b30d1939SAndy Fiddamanbase delta : .MAKE .VIRTUAL .FORCE
459*b30d1939SAndy Fiddaman	op := $(<)
460*b30d1939SAndy Fiddaman
461*b30d1939SAndy Fiddamanclosure : .MAKE .VIRTUAL .FORCE
462*b30d1939SAndy Fiddaman	$(<) := 1
463*b30d1939SAndy Fiddaman
464*b30d1939SAndy Fiddamancyg exp lcl pkg rpm tgz : .MAKE .VIRTUAL .FORCE
465*b30d1939SAndy Fiddaman	style := $(<)
466*b30d1939SAndy Fiddaman
467*b30d1939SAndy Fiddamansource : .source.init .source.gen .source.$$(style)
468*b30d1939SAndy Fiddaman
469*b30d1939SAndy Fiddaman.source.init : .MAKE
470*b30d1939SAndy Fiddaman	local A B D P V I
471*b30d1939SAndy Fiddaman	type := source
472*b30d1939SAndy Fiddaman	if ! "$(incremental)"
473*b30d1939SAndy Fiddaman		incremental = 1
474*b30d1939SAndy Fiddaman	end
475*b30d1939SAndy Fiddaman	if "$(source.$(name))"
476*b30d1939SAndy Fiddaman		suffix = c
477*b30d1939SAndy Fiddaman	end
478*b30d1939SAndy Fiddaman	: $(.init.$(style))
479*b30d1939SAndy Fiddaman	: $(details.$(style):V:R) :
480*b30d1939SAndy Fiddaman	A := $(source.list)
481*b30d1939SAndy Fiddaman	B := $(A:N=*.$(stamp).$(suffix):N!=*.$(stamp).$(stamp).*:O=1:T=F)
482*b30d1939SAndy Fiddaman	P := $(A:N=*.$(stamp).$(suffix):N!=*.$(stamp).$(stamp).*:O=2:T=F)
483*b30d1939SAndy Fiddaman	D := $(A:N=*.$(stamp).$(stamp).$(suffix):O=1:T=F)
484*b30d1939SAndy Fiddaman	if op == "delta"
485*b30d1939SAndy Fiddaman		if ! B
486*b30d1939SAndy Fiddaman			error 3 delta requires a base archive
487*b30d1939SAndy Fiddaman		end
488*b30d1939SAndy Fiddaman		base := -z $(B)
489*b30d1939SAndy Fiddaman		deltaversion := $(B:B:/$(name).//)
490*b30d1939SAndy Fiddaman		let deltasince = $(deltaversion:/.*-//) + 1
491*b30d1939SAndy Fiddaman		deltasince := $(deltaversion:/[^-]*$/$(deltasince:F=%02d)/)
492*b30d1939SAndy Fiddaman		if "$(release)" != "$(stamp)"
493*b30d1939SAndy Fiddaman			release := $("":T=R%Y-%m-%d)
494*b30d1939SAndy Fiddaman		end
495*b30d1939SAndy Fiddaman		source := $(B:D:B:S=.$(release).$(suffix))
496*b30d1939SAndy Fiddaman		version := $(source:B:B:/$(name).//)
497*b30d1939SAndy Fiddaman	elif B || op == "base"
498*b30d1939SAndy Fiddaman		if op == "base"
499*b30d1939SAndy Fiddaman			for I $(B) $(P)
500*b30d1939SAndy Fiddaman				V := $(I:B:/$(name)\.\([^.]*\).*/\1/)
501*b30d1939SAndy Fiddaman				if V == "$(stamp)" && V != "$(version)"
502*b30d1939SAndy Fiddaman					old.version := $(V)
503*b30d1939SAndy Fiddaman					old.source := $(I)
504*b30d1939SAndy Fiddaman					if "$(old.version)" >= "$(version)"
505*b30d1939SAndy Fiddaman						error 3 $(name): previous base $(old.version) is newer than $(version)
506*b30d1939SAndy Fiddaman					end
507*b30d1939SAndy Fiddaman					break
508*b30d1939SAndy Fiddaman				end
509*b30d1939SAndy Fiddaman			end
510*b30d1939SAndy Fiddaman		else
511*b30d1939SAndy Fiddaman			source := $(B)
512*b30d1939SAndy Fiddaman		end
513*b30d1939SAndy Fiddaman		if B == "$(source)"
514*b30d1939SAndy Fiddaman			if "$(B:D:B:B)" == "$(D:D:B:B)" && "$(B:B::S)" != "$(D:B::S)"
515*b30d1939SAndy Fiddaman				error 3 $(B:B:S): base overwrite would invalidate delta $(D:B:S)
516*b30d1939SAndy Fiddaman			end
517*b30d1939SAndy Fiddaman			error 1 $(B:B:S): replacing current base
518*b30d1939SAndy Fiddaman		end
519*b30d1939SAndy Fiddaman		version := $(source:B:S:/^$(name).\(.*\).$(suffix)$/\1/)
520*b30d1939SAndy Fiddaman	end
521*b30d1939SAndy Fiddaman	PACKAGEGEN := $(PACKAGESRC)/gen
522*b30d1939SAndy Fiddaman
523*b30d1939SAndy Fiddaman.source.gen : $$(PACKAGEDIR) $$(PACKAGEGEN) $$(PACKAGEGEN)/SOURCE.html $$(PACKAGEGEN)/BINARY.html $$(PACKAGEGEN)/DETAILS.html
524*b30d1939SAndy Fiddaman
525*b30d1939SAndy FiddamanBINPACKAGE := $(PATH:/:/ /G:X=package:T=F:O=1)
526*b30d1939SAndy Fiddaman
527*b30d1939SAndy Fiddaman$$(PACKAGEDIR) $$(PACKAGEGEN) : .IGNORE
528*b30d1939SAndy Fiddaman	[[ -d $(<) ]] || mkdir $(<)
529*b30d1939SAndy Fiddaman
530*b30d1939SAndy Fiddaman$$(PACKAGEGEN)/SOURCE.html : $(BINPACKAGE)
531*b30d1939SAndy Fiddaman	$(*) html source > $(<)
532*b30d1939SAndy Fiddaman
533*b30d1939SAndy Fiddaman$$(PACKAGEGEN)/BINARY.html : $(BINPACKAGE)
534*b30d1939SAndy Fiddaman	$(*) html binary > $(<)
535*b30d1939SAndy Fiddaman
536*b30d1939SAndy Fiddaman$$(PACKAGEGEN)/DETAILS.html : $(BINPACKAGE)
537*b30d1939SAndy Fiddaman	$(*) html intro > $(<)
538*b30d1939SAndy Fiddaman
539*b30d1939SAndy Fiddaman.source.exp .source.pkg .source.rpm : .MAKE
540*b30d1939SAndy Fiddaman	error 3 $(style): source package style not supported yet
541*b30d1939SAndy Fiddaman
542*b30d1939SAndy Fiddamanexe.cyg = .exe
543*b30d1939SAndy Fiddamanvendor.cyg = gnu
544*b30d1939SAndy Fiddaman
545*b30d1939SAndy Fiddaman.name.cyg : .FUNCTION
546*b30d1939SAndy Fiddaman	local N
547*b30d1939SAndy Fiddaman	N := $(%)
548*b30d1939SAndy Fiddaman	if N == "*-*"
549*b30d1939SAndy Fiddaman		vendor := $(N:/-.*//)
550*b30d1939SAndy Fiddaman		if vendor == "$(vendor.cyg)"
551*b30d1939SAndy Fiddaman			vendor :=
552*b30d1939SAndy Fiddaman			N := $(N:/[^-]*-//)
553*b30d1939SAndy Fiddaman		end
554*b30d1939SAndy Fiddaman		N := $(N:/-//G)
555*b30d1939SAndy Fiddaman	end
556*b30d1939SAndy Fiddaman	return $(N)
557*b30d1939SAndy Fiddaman
558*b30d1939SAndy Fiddaman.init.cyg : .FUNCTION
559*b30d1939SAndy Fiddaman	local N O
560*b30d1939SAndy Fiddaman	closure = 1
561*b30d1939SAndy Fiddaman	init = .
562*b30d1939SAndy Fiddaman	strip = 1
563*b30d1939SAndy Fiddaman	suffix = tar.bz2
564*b30d1939SAndy Fiddaman	format = tbz
565*b30d1939SAndy Fiddaman	vendor := $(licenses:N!=$(vendor.cyg):O=1)
566*b30d1939SAndy Fiddaman	package.ini := $(package.ini)
567*b30d1939SAndy Fiddaman	package.src.pat := $(package.src.pat)
568*b30d1939SAndy Fiddaman	package.src := $(package.src)
569*b30d1939SAndy Fiddaman	package.bin := $(package.bin)
570*b30d1939SAndy Fiddaman	.source.gen : .CLEAR $(*.source.gen:V:N!=*.html)
571*b30d1939SAndy Fiddaman	name.original := $(name)
572*b30d1939SAndy Fiddaman	name := $(.name.cyg $(name))
573*b30d1939SAndy Fiddaman	if name != "$(name.original)"
574*b30d1939SAndy Fiddaman		$(name) : $(~$(name.original))
575*b30d1939SAndy Fiddaman		O := $(~covers)
576*b30d1939SAndy Fiddaman		covers : .CLEAR
577*b30d1939SAndy Fiddaman		for N $(O)
578*b30d1939SAndy Fiddaman			covers : $(.name.cyg $(N))
579*b30d1939SAndy Fiddaman		end
580*b30d1939SAndy Fiddaman	end
581*b30d1939SAndy Fiddaman	stamp = [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9]
582*b30d1939SAndy Fiddaman	version.original := $(version)
583*b30d1939SAndy Fiddaman	version := $(version:/-//G)-1
584*b30d1939SAndy Fiddaman	if opt
585*b30d1939SAndy Fiddaman		opt := $(opt)/$(vendor)/
586*b30d1939SAndy Fiddaman	else
587*b30d1939SAndy Fiddaman		opt := $(name)-$(version)/
588*b30d1939SAndy Fiddaman	end
589*b30d1939SAndy Fiddaman	if type == "source"
590*b30d1939SAndy Fiddaman		version := $(version)-src
591*b30d1939SAndy Fiddaman		source = $(PACKAGEDIR)/$(name)-$(version)$(release:?.$(release)??).$(suffix)
592*b30d1939SAndy Fiddaman	else
593*b30d1939SAndy Fiddaman		binary = $(PACKAGEDIR)/$(name)-$(version)$(release:?.$(release)??).$(suffix)
594*b30d1939SAndy Fiddaman	end
595*b30d1939SAndy Fiddaman
596*b30d1939SAndy Fiddaman.source.cyg :
597*b30d1939SAndy Fiddaman	if	[[ '$(~$(name))' ]]
598*b30d1939SAndy Fiddaman	then	tmp=/tmp/pkg$(tmp)
599*b30d1939SAndy Fiddaman		mkdir $tmp
600*b30d1939SAndy Fiddaman		{
601*b30d1939SAndy Fiddaman			integer m=0 o
602*b30d1939SAndy Fiddaman			cat > $tmp/configure <<'!'
603*b30d1939SAndy Fiddaman	echo "you didn't have to do that"
604*b30d1939SAndy Fiddaman	!
605*b30d1939SAndy Fiddaman			chmod +x $tmp/configure
606*b30d1939SAndy Fiddaman			echo ";;;$tmp/configure;configure"
607*b30d1939SAndy Fiddaman			cat > $tmp/Makefile0 <<'!'
608*b30d1939SAndy Fiddaman	HOSTTYPE := $$(shell bin/package)
609*b30d1939SAndy Fiddaman	ROOT = ../..
610*b30d1939SAndy Fiddaman	ARCH = arch/$$(HOSTTYPE)
611*b30d1939SAndy Fiddaman	all :
612*b30d1939SAndy Fiddaman		PACKAGEROOT= CYGWIN="$$CYGWIN ntsec binmode" bin/package make $(export.$(style))
613*b30d1939SAndy Fiddaman	install : all
614*b30d1939SAndy Fiddaman	$(install.$(style):V)
615*b30d1939SAndy Fiddaman	$(test.$(style):V)
616*b30d1939SAndy Fiddaman	!
617*b30d1939SAndy Fiddaman			echo ";;;$tmp/Makefile0;Makefile"
618*b30d1939SAndy Fiddaman			cat > $tmp/CYGWIN-README <<'!'
619*b30d1939SAndy Fiddaman	$(readme.$(style):@?$$(readme.$$(style))$$("\n\n")??)To build binaries from source into the ./arch/`bin/package` tree run:
620*b30d1939SAndy Fiddaman	$()
621*b30d1939SAndy Fiddaman		make
622*b30d1939SAndy Fiddaman	$()
623*b30d1939SAndy Fiddaman	$(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:
624*b30d1939SAndy Fiddaman	$()
625*b30d1939SAndy Fiddaman		make install
626*b30d1939SAndy Fiddaman	$()
627*b30d1939SAndy Fiddaman	The bin/package command provides a command line interface for all package
628*b30d1939SAndy Fiddaman	operations. The $(opt:/.$//) source and binary packages were generated by:
629*b30d1939SAndy Fiddaman	$()
630*b30d1939SAndy Fiddaman		package write cyg base source version=$(version.original) $(name.original)
631*b30d1939SAndy Fiddaman		package write cyg base binary version=$(version.original) $(name.original)
632*b30d1939SAndy Fiddaman	$()
633*b30d1939SAndy Fiddaman	using the $(org)-base package. To download and install the latest
634*b30d1939SAndy Fiddaman	$(org)-base source package in /opt/$(org) run:
635*b30d1939SAndy Fiddaman	$()
636*b30d1939SAndy Fiddaman		PATH=/opt/$(org)/bin:$PATH
637*b30d1939SAndy Fiddaman		cd /opt/$(org)
638*b30d1939SAndy Fiddaman		package authorize "NAME" password "PASSWORD" setup flat source $("\\")
639*b30d1939SAndy Fiddaman			$(url) $("\\")
640*b30d1939SAndy Fiddaman			$(org)-base
641*b30d1939SAndy Fiddaman		package make
642*b30d1939SAndy Fiddaman	$()
643*b30d1939SAndy Fiddaman	and export /opt/$(org)/bin in PATH to use. The NAME and PASSWORD signify your
644*b30d1939SAndy Fiddaman	agreement to the software license(s). All users get the same NAME and PASSWORD.
645*b30d1939SAndy Fiddaman	See $(url) for details. If multiple architectures may be built under
646*b30d1939SAndy Fiddaman	/opt/$(org) then drop "flat" and export /opt/$(org)/arch/`package`/bin in PATH
647*b30d1939SAndy Fiddaman	to use. To update previously downloaded packages from the same url simply run:
648*b30d1939SAndy Fiddaman	$()
649*b30d1939SAndy Fiddaman		cd /opt/$(org)
650*b30d1939SAndy Fiddaman		package setup
651*b30d1939SAndy Fiddaman		package make
652*b30d1939SAndy Fiddaman	$()
653*b30d1939SAndy Fiddaman	To download and install the latest $(org)-base binary package in
654*b30d1939SAndy Fiddaman	/opt/$(org) change "source" to "binary" and omit "package make".
655*b30d1939SAndy Fiddaman	!
656*b30d1939SAndy Fiddaman			echo ";;;$tmp/CYGWIN-README;CYGWIN-PATCHES/README"
657*b30d1939SAndy Fiddaman			cat > $(source:/-src.$(suffix)//).setup.hint <<'!'
658*b30d1939SAndy Fiddaman	category: $(category:/\(.\).*/\1/U)$(category:/.\(.*\)/\1/L)
659*b30d1939SAndy Fiddaman	requires: cygwin
660*b30d1939SAndy Fiddaman	sdesc: "$(index)"
661*b30d1939SAndy Fiddaman	ldesc: "$($(name.original).README)"
662*b30d1939SAndy Fiddaman	!
663*b30d1939SAndy Fiddaman			echo ";;;$(source:/-src.$(suffix)//).setup.hint;CYGWIN-PATCHES/setup.hint"
664*b30d1939SAndy Fiddaman			echo ";;;$(BINPACKAGE);bin/package"
665*b30d1939SAndy Fiddaman			cat > $tmp/Makefile <<'!'
666*b30d1939SAndy Fiddaman	:MAKE:
667*b30d1939SAndy Fiddaman	!
668*b30d1939SAndy Fiddaman			echo ";;;$tmp/Makefile;src/Makefile"
669*b30d1939SAndy Fiddaman			echo ";;;$tmp/Makefile;src/cmd/Makefile"
670*b30d1939SAndy Fiddaman			echo ";;;$tmp/Makefile;src/lib/Makefile"
671*b30d1939SAndy Fiddaman			if	[[ '$(mamfile)' == 1 ]]
672*b30d1939SAndy Fiddaman			then	cat > $tmp/Mamfile1 <<'!'
673*b30d1939SAndy Fiddaman	info mam static
674*b30d1939SAndy Fiddaman	note source level :MAKE: equivalent
675*b30d1939SAndy Fiddaman	make install
676*b30d1939SAndy Fiddaman	make all
677*b30d1939SAndy Fiddaman	exec - ${MAMAKE} -r '*/*' ${MAMAKEARGS}
678*b30d1939SAndy Fiddaman	done all virtual
679*b30d1939SAndy Fiddaman	done install virtual
680*b30d1939SAndy Fiddaman	!
681*b30d1939SAndy Fiddaman				echo ";;;$tmp/Mamfile1;src/Mamfile"
682*b30d1939SAndy Fiddaman				cat > $tmp/Mamfile2 <<'!'
683*b30d1939SAndy Fiddaman	info mam static
684*b30d1939SAndy Fiddaman	note component level :MAKE: equivalent
685*b30d1939SAndy Fiddaman	make install
686*b30d1939SAndy Fiddaman	make all
687*b30d1939SAndy Fiddaman	exec - ${MAMAKE} -r '*' ${MAMAKEARGS}
688*b30d1939SAndy Fiddaman	done all virtual
689*b30d1939SAndy Fiddaman	done install virtual
690*b30d1939SAndy Fiddaman	!
691*b30d1939SAndy Fiddaman				echo ";;;$tmp/Mamfile2;src/cmd/Mamfile"
692*b30d1939SAndy Fiddaman				echo ";;;$tmp/Mamfile2;src/lib/Mamfile"
693*b30d1939SAndy Fiddaman			fi
694*b30d1939SAndy Fiddaman			$(package.src:U:T=F:/.*/echo ";;;&"$("\n")/)
695*b30d1939SAndy Fiddaman			echo ";;;$(PACKAGEGEN)/$(name.original).req"
696*b30d1939SAndy Fiddaman			set -- $(package.closure)
697*b30d1939SAndy Fiddaman			for i
698*b30d1939SAndy Fiddaman			do	cd $(INSTALLROOT)/$i
699*b30d1939SAndy Fiddaman				if	[[ ! '$(license)' ]] || $(MAKE) --noexec --silent 'exit $$(LICENSECLASS:N=$(license):?0?1?)' .
700*b30d1939SAndy Fiddaman				then	if	[[ '$(mamfile)' == 1 ]]
701*b30d1939SAndy Fiddaman					then	(( o=m ))
702*b30d1939SAndy Fiddaman						s=$( $(MAKE) --noexec --recurse=list recurse 2>/dev/null )
703*b30d1939SAndy Fiddaman						if	[[ $s ]]
704*b30d1939SAndy Fiddaman						then	for j in $s
705*b30d1939SAndy Fiddaman							do	if	[[ -d $j ]]
706*b30d1939SAndy Fiddaman								then	cd $j
707*b30d1939SAndy Fiddaman									if	[[ ! '$(license)' ]] || $(MAKE) --noexec --silent 'exit $$(LICENSECLASS:N=$(license):?0?1?)' .
708*b30d1939SAndy Fiddaman									then	(( m++ ))
709*b30d1939SAndy Fiddaman										$(MAKE) $(package.mam) $(export.$(style):Q) > $tmp/$m.mam
710*b30d1939SAndy Fiddaman										echo ";;;$tmp/$m.mam;$i/$j/Mamfile"
711*b30d1939SAndy Fiddaman									fi
712*b30d1939SAndy Fiddaman									cd $(INSTALLROOT)/$i
713*b30d1939SAndy Fiddaman								fi
714*b30d1939SAndy Fiddaman							done
715*b30d1939SAndy Fiddaman							if	(( o != m ))
716*b30d1939SAndy Fiddaman							then	(( m++ ))
717*b30d1939SAndy Fiddaman								cat > $tmp/$m.mam <<'!'
718*b30d1939SAndy Fiddaman	info mam static
719*b30d1939SAndy Fiddaman	note subcomponent level :MAKE: equivalent
720*b30d1939SAndy Fiddaman	make install
721*b30d1939SAndy Fiddaman	make all
722*b30d1939SAndy Fiddaman	exec - ${MAMAKE} -r '*' ${MAMAKEARGS}
723*b30d1939SAndy Fiddaman	done all virtual
724*b30d1939SAndy Fiddaman	done install virtual
725*b30d1939SAndy Fiddaman	!
726*b30d1939SAndy Fiddaman								echo ";;;$tmp/$m.mam;$i/Mamfile"
727*b30d1939SAndy Fiddaman							fi
728*b30d1939SAndy Fiddaman						else	(( m++ ))
729*b30d1939SAndy Fiddaman							$(MAKE) $(package.mam) $(export.$(style):Q) > $tmp/$m.mam
730*b30d1939SAndy Fiddaman							echo ";;;$tmp/$m.mam;$i/Mamfile"
731*b30d1939SAndy Fiddaman						fi
732*b30d1939SAndy Fiddaman					fi
733*b30d1939SAndy Fiddaman					$(MAKE) --noexec $(-) $(=) recurse list.package.$(type) package.license.class=$(license:Q)
734*b30d1939SAndy Fiddaman				fi
735*b30d1939SAndy Fiddaman			done
736*b30d1939SAndy Fiddaman			set -- $(package.dir:P=G)
737*b30d1939SAndy Fiddaman			for i
738*b30d1939SAndy Fiddaman			do	tw -d $i -e "action:printf(';;;%s;%s\n',path,path);"
739*b30d1939SAndy Fiddaman			done
740*b30d1939SAndy Fiddaman		} |
741*b30d1939SAndy Fiddaman		{
742*b30d1939SAndy Fiddaman			: > $tmp/HEAD
743*b30d1939SAndy Fiddaman			cat > $tmp/README <<'!'
744*b30d1939SAndy Fiddaman	$(package.readme)
745*b30d1939SAndy Fiddaman	!
746*b30d1939SAndy Fiddaman			echo ";;;$tmp/README;README"
747*b30d1939SAndy Fiddaman			sort -t';' -k5,5 -u
748*b30d1939SAndy Fiddaman			: > $tmp/TAIL
749*b30d1939SAndy Fiddaman			[[ '$(notice)' ]] && echo ";;;$tmp/TAIL;$(package.notice)"
750*b30d1939SAndy Fiddaman		} |
751*b30d1939SAndy Fiddaman		$(PAX)	--filter=- \
752*b30d1939SAndy Fiddaman			--to=ascii \
753*b30d1939SAndy Fiddaman			--format=$(format) \
754*b30d1939SAndy Fiddaman			--local \
755*b30d1939SAndy Fiddaman			-wvf $(source) $(base) \
756*b30d1939SAndy Fiddaman			$(PACKAGEVIEW:C%.*%-s",^&/,,"%) \
757*b30d1939SAndy Fiddaman			$(vendor:?-s",^[^/],$(opt)&,"??)
758*b30d1939SAndy Fiddaman		$(SUM) -x $(checksum) < $(source) > $(source:D:B:S=.$(checksum))
759*b30d1939SAndy Fiddaman		rm -rf $tmp
760*b30d1939SAndy Fiddaman	fi
761*b30d1939SAndy Fiddaman
762*b30d1939SAndy Fiddaman.source.lcl :
763*b30d1939SAndy Fiddaman	if	[[ '$(~$(name))' ]]
764*b30d1939SAndy Fiddaman	then	tmp=/tmp/pkg$(tmp)
765*b30d1939SAndy Fiddaman		mkdir $tmp
766*b30d1939SAndy Fiddaman		{
767*b30d1939SAndy Fiddaman			integer m=0 o
768*b30d1939SAndy Fiddaman			$(package.src:U:T=F:/.*/echo ";;;&"$("\n")/)
769*b30d1939SAndy Fiddaman			set -- $(package.closure)
770*b30d1939SAndy Fiddaman			for i
771*b30d1939SAndy Fiddaman			do	cd $(INSTALLROOT)/$i
772*b30d1939SAndy Fiddaman				$(MAKE) --noexec $(-) $(=) .FILES.+=Mamfile recurse list.package.local
773*b30d1939SAndy Fiddaman			done
774*b30d1939SAndy Fiddaman			set -- $(package.dir:P=G)
775*b30d1939SAndy Fiddaman			for i
776*b30d1939SAndy Fiddaman			do	tw -d $i -e "action:printf(';;;%s;%s\n',path,path);"
777*b30d1939SAndy Fiddaman			done
778*b30d1939SAndy Fiddaman		} |
779*b30d1939SAndy Fiddaman		sort -t';' -k5,5 -u |
780*b30d1939SAndy Fiddaman		$(PAX)	--filter=- \
781*b30d1939SAndy Fiddaman			--to=ascii \
782*b30d1939SAndy Fiddaman			$(op:N=delta:??--format=$(format)?) \
783*b30d1939SAndy Fiddaman			--local \
784*b30d1939SAndy Fiddaman			-wvf $(source) $(base) \
785*b30d1939SAndy Fiddaman			$(op:N=delta:?--format=gzip??) \
786*b30d1939SAndy Fiddaman			$(PACKAGEVIEW:C%.*%-s",^&/,,"%)
787*b30d1939SAndy Fiddaman		rm -rf $tmp
788*b30d1939SAndy Fiddaman	fi
789*b30d1939SAndy Fiddaman
790*b30d1939SAndy Fiddaman.source.tgz :
791*b30d1939SAndy Fiddaman	if	[[ '$(~$(name))' ]]
792*b30d1939SAndy Fiddaman	then	tmp=/tmp/pkg$(tmp)
793*b30d1939SAndy Fiddaman		mkdir $tmp
794*b30d1939SAndy Fiddaman		{
795*b30d1939SAndy Fiddaman			integer m=0 o
796*b30d1939SAndy Fiddaman			if	[[ '$(init)' == '$(name)' ]]
797*b30d1939SAndy Fiddaman			then	cat > $tmp/Makefile <<'!'
798*b30d1939SAndy Fiddaman	:MAKE:
799*b30d1939SAndy Fiddaman	!
800*b30d1939SAndy Fiddaman				$(CMP) $(CMPFLAGS) $tmp/Makefile $(PACKAGEROOT)/src/Makefile && touch -r $(PACKAGEROOT)/src/Makefile $tmp/Makefile
801*b30d1939SAndy Fiddaman				echo ";;;$tmp/Makefile;src/Makefile"
802*b30d1939SAndy Fiddaman				cp $tmp/Makefile $tmp/Makefile1
803*b30d1939SAndy Fiddaman				$(CMP) $(CMPFLAGS) $tmp/Makefile1 $(PACKAGEROOT)/src/cmd/Makefile && touch -r $(PACKAGEROOT)/src/cmd/Makefile $tmp/Makefile1
804*b30d1939SAndy Fiddaman				echo ";;;$tmp/Makefile1;src/cmd/Makefile"
805*b30d1939SAndy Fiddaman				cp $tmp/Makefile $tmp/Makefile2
806*b30d1939SAndy Fiddaman				$(CMP) $(CMPFLAGS) $tmp/Makefile2 $(PACKAGEROOT)/src/lib/Makefile && touch -r $(PACKAGEROOT)/src/lib/Makefile $tmp/Makefile2
807*b30d1939SAndy Fiddaman				echo ";;;$tmp/Makefile2;src/lib/Makefile"
808*b30d1939SAndy Fiddaman				if	[[ '$(mamfile)' == 1 ]]
809*b30d1939SAndy Fiddaman				then	cat > $tmp/Mamfile1 <<'!'
810*b30d1939SAndy Fiddaman	info mam static
811*b30d1939SAndy Fiddaman	note source level :MAKE: equivalent
812*b30d1939SAndy Fiddaman	make install
813*b30d1939SAndy Fiddaman	make all
814*b30d1939SAndy Fiddaman	exec - ${MAMAKE} -r '*/*' ${MAMAKEARGS}
815*b30d1939SAndy Fiddaman	done all virtual
816*b30d1939SAndy Fiddaman	done install virtual
817*b30d1939SAndy Fiddaman	!
818*b30d1939SAndy Fiddaman					$(CMP) $(CMPFLAGS) $tmp/Mamfile1 $(PACKAGEROOT)/src/Mamfile && touch -r $(PACKAGEROOT)/src/Mamfile $tmp/Mamfile1
819*b30d1939SAndy Fiddaman					echo ";;;$tmp/Mamfile1;src/Mamfile"
820*b30d1939SAndy Fiddaman					cat > $tmp/Mamfile2 <<'!'
821*b30d1939SAndy Fiddaman	info mam static
822*b30d1939SAndy Fiddaman	note component level :MAKE: equivalent
823*b30d1939SAndy Fiddaman	make install
824*b30d1939SAndy Fiddaman	make all
825*b30d1939SAndy Fiddaman	exec - ${MAMAKE} -r '*' ${MAMAKEARGS}
826*b30d1939SAndy Fiddaman	done all virtual
827*b30d1939SAndy Fiddaman	done install virtual
828*b30d1939SAndy Fiddaman	!
829*b30d1939SAndy Fiddaman					$(CMP) $(CMPFLAGS) $tmp/Mamfile2 $(PACKAGEROOT)/src/cmd/Mamfile && touch -r $(PACKAGEROOT)/src/cmd/Mamfile $tmp/Mamfile2
830*b30d1939SAndy Fiddaman					echo ";;;$tmp/Mamfile2;src/cmd/Mamfile"
831*b30d1939SAndy Fiddaman					cp $tmp/Mamfile2 $tmp/Mamfile3
832*b30d1939SAndy Fiddaman					$(CMP) $(CMPFLAGS) $tmp/Mamfile3 $(PACKAGEROOT)/src/lib/Mamfile && touch -r $(PACKAGEROOT)/src/lib/Mamfile $tmp/Mamfile3
833*b30d1939SAndy Fiddaman					echo ";;;$tmp/Mamfile3;src/lib/Mamfile"
834*b30d1939SAndy Fiddaman				fi
835*b30d1939SAndy Fiddaman			fi
836*b30d1939SAndy Fiddaman			$(package.src:U:T=F:C%^$(PACKAGEROOT)/%%:C%.*%echo ";;;$(PACKAGEROOT)/&;&"$("\n")%)
837*b30d1939SAndy Fiddaman			if	[[ '$(~covers)' ]]
838*b30d1939SAndy Fiddaman			then	for i in $(~covers)
839*b30d1939SAndy Fiddaman				do	for j in lib pkg
840*b30d1939SAndy Fiddaman					do	if	[[ -f $(PACKAGESRC)/$i.$j ]]
841*b30d1939SAndy Fiddaman						then	echo ";;;$(PACKAGESRC)/$i.$j;$(PACKAGELIB)/$i.$j"
842*b30d1939SAndy Fiddaman						fi
843*b30d1939SAndy Fiddaman					done
844*b30d1939SAndy Fiddaman					for j in ver req
845*b30d1939SAndy Fiddaman					do	if	[[ -f $(PACKAGEGEN)/$i.$j ]]
846*b30d1939SAndy Fiddaman						then	echo ";;;$(PACKAGEGEN)/$i.$j;$(PACKAGELIB)/$i.$j"
847*b30d1939SAndy Fiddaman						fi
848*b30d1939SAndy Fiddaman					done
849*b30d1939SAndy Fiddaman				done
850*b30d1939SAndy Fiddaman				for i in $(~covers:D=$(PACKAGESRC):B:S=.lic:T=F:T=I:N=*.def:D=$(PACKAGESRC):B:S:T=F:B:S)
851*b30d1939SAndy Fiddaman				do	echo ";;;$(PACKAGESRC)/$i;$(PACKAGELIB)/$i"
852*b30d1939SAndy Fiddaman				done
853*b30d1939SAndy Fiddaman			fi
854*b30d1939SAndy Fiddaman			if	[[ '$(PACKAGEDIR:B)' == '$(style)' ]]
855*b30d1939SAndy Fiddaman			then	echo $(name) $(version) $(release|version) 1 > $tmp/t
856*b30d1939SAndy Fiddaman				$(CMP) $(CMPFLAGS) $tmp/t $(PACKAGEGEN)/$(name).ver || cp $tmp/t $(PACKAGEGEN)/$(name).ver
857*b30d1939SAndy Fiddaman				echo ";;;$(PACKAGEGEN)/$(name).ver;$(PACKAGELIB)/$(name).ver"
858*b30d1939SAndy Fiddaman				sed 's,1$,0,' $(~req:D=$(PACKAGEGEN):B:S=.ver:T=F) < /dev/null > $tmp/t
859*b30d1939SAndy Fiddaman				$(CMP) $(CMPFLAGS) $tmp/t $(PACKAGEGEN)/$(name).req || cp $tmp/t $(PACKAGEGEN)/$(name).req
860*b30d1939SAndy Fiddaman				echo ";;;$(PACKAGEGEN)/$(name).req;$(PACKAGELIB)/$(name).req"
861*b30d1939SAndy Fiddaman				{
862*b30d1939SAndy Fiddaman					echo "name='$(name)'"
863*b30d1939SAndy Fiddaman					echo "index='$(index)'"
864*b30d1939SAndy Fiddaman					echo "covers='$(~covers)'"
865*b30d1939SAndy Fiddaman					echo "requires='$(~req)'"
866*b30d1939SAndy Fiddaman				} > $tmp/t
867*b30d1939SAndy Fiddaman				$(CMP) $(CMPFLAGS) $tmp/t $(PACKAGEGEN)/$(name).inx || cp $tmp/t $(PACKAGEGEN)/$(name).inx
868*b30d1939SAndy Fiddaman				{
869*b30d1939SAndy Fiddaman					{
870*b30d1939SAndy Fiddaman					echo '$($(name).README)'
871*b30d1939SAndy Fiddaman					if	[[ '$(~covers)' ]]
872*b30d1939SAndy Fiddaman					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)."
873*b30d1939SAndy Fiddaman					fi
874*b30d1939SAndy Fiddaman					if	[[ '$(~requires)' ]]
875*b30d1939SAndy Fiddaman					then	echo 'It requires the following package$(~requires:O=2:?s??): $(~requires).'
876*b30d1939SAndy Fiddaman					fi
877*b30d1939SAndy Fiddaman					} | fmt
878*b30d1939SAndy Fiddaman					package help source
879*b30d1939SAndy Fiddaman					package release $(name)
880*b30d1939SAndy Fiddaman				} > $tmp/t
881*b30d1939SAndy Fiddaman				$(CMP) $(CMPFLAGS) $tmp/t $(PACKAGEGEN)/$(name).README || cp $tmp/t $(PACKAGEGEN)/$(name).README
882*b30d1939SAndy Fiddaman				echo ";;;$(PACKAGEGEN)/$(name).README;$(PACKAGELIB)/$(name).README"
883*b30d1939SAndy Fiddaman				{
884*b30d1939SAndy Fiddaman					echo '.xx title="$(name) package"'
885*b30d1939SAndy Fiddaman					echo '.xx meta.description="$(name) package"'
886*b30d1939SAndy Fiddaman					echo '.xx meta.keywords="software, package"'
887*b30d1939SAndy Fiddaman					echo '.MT 4'
888*b30d1939SAndy Fiddaman					echo '.TL'
889*b30d1939SAndy Fiddaman					echo '$(name) package'
890*b30d1939SAndy Fiddaman					echo '.H 1 "$(name) package"'
891*b30d1939SAndy Fiddaman					echo '$($(name).README)'
892*b30d1939SAndy Fiddaman					set -- $(package.closure:C,.*,$(INSTALLROOT)/&/PROMO.mm,:T=F:D::B)
893*b30d1939SAndy Fiddaman					hot=
894*b30d1939SAndy Fiddaman					for i
895*b30d1939SAndy Fiddaman					do	hot="$hot -e s/\\(\\<$i\\>\\)/\\\\h'0*1'\\1\\\\h'0'/"
896*b30d1939SAndy Fiddaman					done
897*b30d1939SAndy Fiddaman					set -- $(package.closure:B)
898*b30d1939SAndy Fiddaman					if	(( $# ))
899*b30d1939SAndy Fiddaman					then	echo 'Components in this package:'
900*b30d1939SAndy Fiddaman						echo '.P'
901*b30d1939SAndy Fiddaman						echo '.TS'
902*b30d1939SAndy Fiddaman						echo 'center expand;'
903*b30d1939SAndy Fiddaman						echo 'l l l l l l.'
904*b30d1939SAndy Fiddaman						if	[[ $hot ]]
905*b30d1939SAndy Fiddaman						then	hot="sed $hot"
906*b30d1939SAndy Fiddaman						else	hot=cat
907*b30d1939SAndy Fiddaman						fi
908*b30d1939SAndy Fiddaman						for i
909*b30d1939SAndy Fiddaman						do	echo $i
910*b30d1939SAndy Fiddaman						done |
911*b30d1939SAndy Fiddaman						pr -6 -t -s'	' |
912*b30d1939SAndy Fiddaman						$hot
913*b30d1939SAndy Fiddaman						echo '.TE'
914*b30d1939SAndy Fiddaman					fi
915*b30d1939SAndy Fiddaman					echo '.P'
916*b30d1939SAndy Fiddaman					if	[[ '$(~covers)' ]]
917*b30d1939SAndy Fiddaman					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)."
918*b30d1939SAndy Fiddaman					fi
919*b30d1939SAndy Fiddaman					if	[[ '$(~requires)' ]]
920*b30d1939SAndy Fiddaman					then	echo 'It requires the following package$(~requires:O=2:?s??): $(~requires).'
921*b30d1939SAndy Fiddaman					fi
922*b30d1939SAndy Fiddaman					set -- $(.package.licenses. --all $(name))
923*b30d1939SAndy Fiddaman					case $# in
924*b30d1939SAndy Fiddaman					0)	;;
925*b30d1939SAndy Fiddaman					*)	case $# in
926*b30d1939SAndy Fiddaman						1)	echo 'The software is covered by this license:' ;;
927*b30d1939SAndy Fiddaman						*)	echo 'The software is covered by these licenses:' ;;
928*b30d1939SAndy Fiddaman						esac
929*b30d1939SAndy Fiddaman						echo .BL
930*b30d1939SAndy Fiddaman						for j
931*b30d1939SAndy Fiddaman						do	i=$( $(PROTO) -l $j -p -h -o type=usage /dev/null | sed -e 's,.*\[-license?\([^]]*\).*,\1,' )
932*b30d1939SAndy Fiddaman							echo .LI
933*b30d1939SAndy Fiddaman							echo ".xx link=\"$i\""
934*b30d1939SAndy Fiddaman						done
935*b30d1939SAndy Fiddaman						echo .LE
936*b30d1939SAndy Fiddaman						echo 'Individual components may be covered by separate licenses;'
937*b30d1939SAndy Fiddaman						echo 'refer to the component source and/or binaries for more information.'
938*b30d1939SAndy Fiddaman						echo .P
939*b30d1939SAndy Fiddaman						;;
940*b30d1939SAndy Fiddaman					esac
941*b30d1939SAndy Fiddaman					echo 'A recent'
942*b30d1939SAndy Fiddaman					echo '.xx link="release change log"'
943*b30d1939SAndy Fiddaman					echo 'is also included.'
944*b30d1939SAndy Fiddaman					cat $(package.closure:C,.*,$(INSTALLROOT)/&/PROMO.mm,:T=F) < /dev/null
945*b30d1939SAndy Fiddaman					echo '.H 1 "release change log"'
946*b30d1939SAndy Fiddaman					echo '.xx index'
947*b30d1939SAndy Fiddaman					echo '.nf'
948*b30d1939SAndy Fiddaman					package release $(name) |
949*b30d1939SAndy Fiddaman					sed -e 's/:::::::: \(.*\) ::::::::/.fi\$("\n").H 1 "\1 changes"\$("\n").nf/'
950*b30d1939SAndy Fiddaman					echo '.fi'
951*b30d1939SAndy Fiddaman				} |
952*b30d1939SAndy Fiddaman				$(MM2HTML) $(MM2HTMLFLAGS) -o nohtml.ident > $tmp/t
953*b30d1939SAndy Fiddaman				$(STDED) $(STDEDFLAGS) $tmp/t <<'!'
954*b30d1939SAndy Fiddaman	/^<!--LABELS-->$/,/^<!--\/LABELS-->$/s/ changes</</
955*b30d1939SAndy Fiddaman	/^<!--LABELS-->$/,/^<!--\/LABELS-->$/m/<A name="release change log">/
956*b30d1939SAndy Fiddaman	w
957*b30d1939SAndy Fiddaman	q
958*b30d1939SAndy Fiddaman	!
959*b30d1939SAndy Fiddaman				$(CMP) $(CMPFLAGS) $tmp/t $(PACKAGEGEN)/$(name).html || cp $tmp/t $(PACKAGEGEN)/$(name).html
960*b30d1939SAndy Fiddaman				echo ";;;$(PACKAGEGEN)/$(name).html;$(PACKAGELIB)/$(name).html"
961*b30d1939SAndy Fiddaman				if	[[ '$(deltasince)' ]]
962*b30d1939SAndy Fiddaman				then	{
963*b30d1939SAndy Fiddaman					echo '.xx title="$(name) package"'
964*b30d1939SAndy Fiddaman					echo '.xx meta.description="$(name) package $(version) delta $(release)"'
965*b30d1939SAndy Fiddaman					echo '.xx meta.keywords="software, package, delta"'
966*b30d1939SAndy Fiddaman					echo '.MT 4'
967*b30d1939SAndy Fiddaman					echo '.TL'
968*b30d1939SAndy Fiddaman					echo '$(name) package $(deltaversion) delta $(release)'
969*b30d1939SAndy Fiddaman					echo '.H 1 "$(name) package $(deltaversion) delta $(release) changes"'
970*b30d1939SAndy Fiddaman					echo '.nf'
971*b30d1939SAndy Fiddaman					package release $(deltasince) $(name) |
972*b30d1939SAndy Fiddaman					sed -e 's/:::::::: \(.*\) ::::::::/.H 2 \1/'
973*b30d1939SAndy Fiddaman					echo '.fi'
974*b30d1939SAndy Fiddaman					} |
975*b30d1939SAndy Fiddaman					$(MM2HTML) $(MM2HTMLFLAGS) -o nohtml.ident > $tmp/t
976*b30d1939SAndy Fiddaman					$(CMP) $(CMPFLAGS) $tmp/t $(PACKAGEGEN)/$(name).$(release).html || cp $tmp/t $(PACKAGEGEN)/$(name).$(release).html
977*b30d1939SAndy Fiddaman					echo ";;;$(PACKAGEGEN)/$(name).$(release).html;$(PACKAGELIB)/$(name).$(release).html"
978*b30d1939SAndy Fiddaman				fi
979*b30d1939SAndy Fiddaman			fi
980*b30d1939SAndy Fiddaman			set -- $(package.closure)
981*b30d1939SAndy Fiddaman			for i
982*b30d1939SAndy Fiddaman			do	cd $(INSTALLROOT)/$i
983*b30d1939SAndy Fiddaman				if	[[ ! '$(license)' ]] || $(MAKE) --noexec --silent 'exit $$(LICENSECLASS:N=$(license):?0?1?)' .
984*b30d1939SAndy Fiddaman				then	if	[[ '$(mamfile)' == 1 ]]
985*b30d1939SAndy Fiddaman					then	(( o=m ))
986*b30d1939SAndy Fiddaman						s=$( $(MAKE) --noexec --recurse=list recurse 2>/dev/null )
987*b30d1939SAndy Fiddaman						if	[[ $s ]]
988*b30d1939SAndy Fiddaman						then	for j in $s
989*b30d1939SAndy Fiddaman							do	if	[[ -d $j ]]
990*b30d1939SAndy Fiddaman								then	cd $j
991*b30d1939SAndy Fiddaman									if	[[ ! '$(license)' ]] || $(MAKE) --noexec --silent 'exit $$(LICENSECLASS:N=$(license):?0?1?)' .
992*b30d1939SAndy Fiddaman									then	(( m++ ))
993*b30d1939SAndy Fiddaman										$(MAKE) $(package.mam) > $tmp/$m.mam
994*b30d1939SAndy Fiddaman										$(CMP) $(CMPFLAGS) $tmp/$m.mam $(PACKAGEROOT)/$i/$j/Mamfile && touch -r $(PACKAGEROOT)/$i/$j/Mamfile $tmp/$m.mam
995*b30d1939SAndy Fiddaman										echo ";;;$tmp/$m.mam;$i/$j/Mamfile"
996*b30d1939SAndy Fiddaman									fi
997*b30d1939SAndy Fiddaman									cd $(INSTALLROOT)/$i
998*b30d1939SAndy Fiddaman								fi
999*b30d1939SAndy Fiddaman							done
1000*b30d1939SAndy Fiddaman							if	(( o != m ))
1001*b30d1939SAndy Fiddaman							then	(( m++ ))
1002*b30d1939SAndy Fiddaman								cat > $tmp/$m.mam <<'!'
1003*b30d1939SAndy Fiddaman	info mam static
1004*b30d1939SAndy Fiddaman	note subcomponent level :MAKE: equivalent
1005*b30d1939SAndy Fiddaman	make install
1006*b30d1939SAndy Fiddaman	make all
1007*b30d1939SAndy Fiddaman	exec - ${MAMAKE} -r '*' ${MAMAKEARGS}
1008*b30d1939SAndy Fiddaman	done all virtual
1009*b30d1939SAndy Fiddaman	done install virtual
1010*b30d1939SAndy Fiddaman	!
1011*b30d1939SAndy Fiddaman								$(CMP) $(CMPFLAGS) $tmp/$m.mam $(PACKAGEROOT)/$i/Mamfile && touch -r $(PACKAGEROOT)/$i/Mamfile $tmp/$m.mam
1012*b30d1939SAndy Fiddaman								echo ";;;$tmp/$m.mam;$i/Mamfile"
1013*b30d1939SAndy Fiddaman							fi
1014*b30d1939SAndy Fiddaman						else	(( m++ ))
1015*b30d1939SAndy Fiddaman							$(MAKE) $(package.mam) > $tmp/$m.mam
1016*b30d1939SAndy Fiddaman							$(CMP) $(CMPFLAGS) $tmp/$m.mam $(PACKAGEROOT)/$i/Mamfile && touch -r $(PACKAGEROOT)/$i/Mamfile $tmp/$m.mam
1017*b30d1939SAndy Fiddaman							echo ";;;$tmp/$m.mam;$i/Mamfile"
1018*b30d1939SAndy Fiddaman						fi
1019*b30d1939SAndy Fiddaman					fi
1020*b30d1939SAndy Fiddaman					$(MAKE) --noexec $(-) $(=) recurse list.package.$(type) package.license.class=$(license:Q) $(copyright:N=1:??LICENSE=?)
1021*b30d1939SAndy Fiddaman				fi
1022*b30d1939SAndy Fiddaman			done
1023*b30d1939SAndy Fiddaman			set -- $(package.dir:P=G)
1024*b30d1939SAndy Fiddaman			for i
1025*b30d1939SAndy Fiddaman			do	tw -d $i -e "action:printf(';;;%s;%s\n',path,path);"
1026*b30d1939SAndy Fiddaman			done
1027*b30d1939SAndy Fiddaman		} |
1028*b30d1939SAndy Fiddaman		{
1029*b30d1939SAndy Fiddaman			: > $tmp/HEAD
1030*b30d1939SAndy Fiddaman			[[ '$(notice)' ]] && echo ";;;$tmp/HEAD;$(package.notice)"
1031*b30d1939SAndy Fiddaman			cat > $tmp/README <<'!'
1032*b30d1939SAndy Fiddaman	$(package.readme)
1033*b30d1939SAndy Fiddaman	!
1034*b30d1939SAndy Fiddaman			echo ";;;$tmp/README;README"
1035*b30d1939SAndy Fiddaman			$(CMP) $(CMPFLAGS) $tmp/README $(PACKAGEROOT)/README && touch -r $(PACKAGEROOT)/README $tmp/README
1036*b30d1939SAndy Fiddaman			sort -t';' -k5,5 -u
1037*b30d1939SAndy Fiddaman			: > $tmp/TAIL
1038*b30d1939SAndy Fiddaman			[[ '$(notice)' ]] && echo ";;;$tmp/TAIL;$(package.notice)"
1039*b30d1939SAndy Fiddaman		} |
1040*b30d1939SAndy Fiddaman		$(PAX)	--filter=- \
1041*b30d1939SAndy Fiddaman			--to=ascii \
1042*b30d1939SAndy Fiddaman			$(op:N=delta:??--format=$(format)?) \
1043*b30d1939SAndy Fiddaman			--local \
1044*b30d1939SAndy Fiddaman			-wvf $(source) $(base) \
1045*b30d1939SAndy Fiddaman			$(op:N=delta:?--format=gzip??) \
1046*b30d1939SAndy Fiddaman			$(PACKAGEVIEW:C%.*%-s",^&/,,"%)
1047*b30d1939SAndy Fiddaman		$(SUM) -x $(checksum) < $(source) > $(source:D:B:S=.$(checksum))
1048*b30d1939SAndy Fiddaman		echo local > $(source:D:B=$(name):S=.tim)
1049*b30d1939SAndy Fiddaman		if	[[ '$(incremental)' == 1 && '$(old.source)' ]]
1050*b30d1939SAndy Fiddaman		then	$(PAX) -rf $(source) -wvf $(old.new.source) -z $(old.source)
1051*b30d1939SAndy Fiddaman			$(SUM) -x $(checksum) < $(old.new.source) > $(old.new.source:D:B:S=.$(checksum))
1052*b30d1939SAndy Fiddaman		fi
1053*b30d1939SAndy Fiddaman		rm -rf $tmp
1054*b30d1939SAndy Fiddaman	else	if	[[ '$(old.source)' ]] && $(CMP) $(CMPFLAGS) $(source.$(name)) $(source)
1055*b30d1939SAndy Fiddaman		then	: $(name) is up to date
1056*b30d1939SAndy Fiddaman		else	echo $(name) $(version) $(release|version) 1 > $(PACKAGEGEN)/$(name).ver
1057*b30d1939SAndy Fiddaman			: > $(PACKAGEGEN)/$(name).req
1058*b30d1939SAndy Fiddaman			{
1059*b30d1939SAndy Fiddaman				echo "name='$(name)'"
1060*b30d1939SAndy Fiddaman				echo "index='$(index)'"
1061*b30d1939SAndy Fiddaman				echo "covers='$(~covers)'"
1062*b30d1939SAndy Fiddaman				echo "requires='$(~req)'"
1063*b30d1939SAndy Fiddaman			} > $(PACKAGEGEN)/$(name).inx
1064*b30d1939SAndy Fiddaman			{
1065*b30d1939SAndy Fiddaman				echo '.xx title="$(name) package"'
1066*b30d1939SAndy Fiddaman				echo '.xx meta.description="$(name) package"'
1067*b30d1939SAndy Fiddaman				echo '.xx meta.keywords="software, package"'
1068*b30d1939SAndy Fiddaman				echo '.MT 4'
1069*b30d1939SAndy Fiddaman				echo '.TL'
1070*b30d1939SAndy Fiddaman				echo '$(name) package'
1071*b30d1939SAndy Fiddaman				echo '.H 1'
1072*b30d1939SAndy Fiddaman				echo '$($(name).README)'
1073*b30d1939SAndy Fiddaman			} |
1074*b30d1939SAndy Fiddaman			$(MM2HTML) $(MM2HTMLFLAGS) -o nohtml.ident > $(PACKAGEGEN)/$(name).html
1075*b30d1939SAndy Fiddaman			if	[[ '$(source.$(name))' ]]
1076*b30d1939SAndy Fiddaman			then	{
1077*b30d1939SAndy Fiddaman					echo '$($(name).README)'
1078*b30d1939SAndy Fiddaman					package help source
1079*b30d1939SAndy Fiddaman				} > $(PACKAGEGEN)/$(name).README
1080*b30d1939SAndy Fiddaman				cp $(source.$(name)) $(source)
1081*b30d1939SAndy Fiddaman				$(SUM) -x $(checksum) < $(source) > $(source:D:B:S=.$(checksum))
1082*b30d1939SAndy Fiddaman			fi
1083*b30d1939SAndy Fiddaman			echo local > $(source:D:B=$(name):S=.tim)
1084*b30d1939SAndy Fiddaman		fi
1085*b30d1939SAndy Fiddaman	fi
1086*b30d1939SAndy Fiddaman
1087*b30d1939SAndy Fiddamanbinary : .binary.init .binary.gen .binary.$$(style)
1088*b30d1939SAndy Fiddaman
1089*b30d1939SAndy Fiddaman.binary.init : .MAKE
1090*b30d1939SAndy Fiddaman	local A B D I P V
1091*b30d1939SAndy Fiddaman	type := binary
1092*b30d1939SAndy Fiddaman	if ! "$(incremental)"
1093*b30d1939SAndy Fiddaman		incremental = 0
1094*b30d1939SAndy Fiddaman	end
1095*b30d1939SAndy Fiddaman	if ! "$(~$(name))"
1096*b30d1939SAndy Fiddaman		if name == "ratz"
1097*b30d1939SAndy Fiddaman			suffix = exe
1098*b30d1939SAndy Fiddaman		else
1099*b30d1939SAndy Fiddaman			suffix = gz
1100*b30d1939SAndy Fiddaman		end
1101*b30d1939SAndy Fiddaman	end
1102*b30d1939SAndy Fiddaman	: $(.init.$(style)) :
1103*b30d1939SAndy Fiddaman	: $(details.$(style):V:R) :
1104*b30d1939SAndy Fiddaman	A := $(binary.list)
1105*b30d1939SAndy Fiddaman	B := $(A:N=*.$(stamp).$(CC.HOSTTYPE).$(suffix):N!=*.$(stamp).$(stamp).*:O=1:T=F)
1106*b30d1939SAndy Fiddaman	P := $(A:N=*.$(stamp).$(CC.HOSTTYPE).$(suffix):N!=*.$(stamp).$(stamp).*:O=2:T=F)
1107*b30d1939SAndy Fiddaman	D := $(A:N=*.$(stamp).$(stamp).$(CC.HOSTTYPE).$(suffix):O=1:T=F)
1108*b30d1939SAndy Fiddaman	if op == "delta"
1109*b30d1939SAndy Fiddaman		if ! B
1110*b30d1939SAndy Fiddaman			error 3 delta requires a base archive
1111*b30d1939SAndy Fiddaman		end
1112*b30d1939SAndy Fiddaman		base := -z $(B)
1113*b30d1939SAndy Fiddaman		if "$(release)" != "$(stamp)"
1114*b30d1939SAndy Fiddaman			release := $("":T=R%Y-%m-%d)
1115*b30d1939SAndy Fiddaman		end
1116*b30d1939SAndy Fiddaman		binary := $(B:/$(CC.HOSTTYPE).$(suffix)$/$(release).&/)
1117*b30d1939SAndy Fiddaman		version := $(binary:B:B:/$(name).//)
1118*b30d1939SAndy Fiddaman	elif B || op == "base"
1119*b30d1939SAndy Fiddaman		if op == "base"
1120*b30d1939SAndy Fiddaman			for I $(B) $(P)
1121*b30d1939SAndy Fiddaman				V := $(I:B:/$(name)\.\([^.]*\).*/\1/)
1122*b30d1939SAndy Fiddaman				if V == "[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]" && V != "$(version)"
1123*b30d1939SAndy Fiddaman					old.version := $(V)
1124*b30d1939SAndy Fiddaman					old.binary := $(I)
1125*b30d1939SAndy Fiddaman					if "$(old.version)" >= "$(version)"
1126*b30d1939SAndy Fiddaman						error 3 $(name): previous base $(old.version) is newer than $(version)
1127*b30d1939SAndy Fiddaman					end
1128*b30d1939SAndy Fiddaman					break
1129*b30d1939SAndy Fiddaman				end
1130*b30d1939SAndy Fiddaman			end
1131*b30d1939SAndy Fiddaman		else
1132*b30d1939SAndy Fiddaman			binary := $(B)
1133*b30d1939SAndy Fiddaman		end
1134*b30d1939SAndy Fiddaman		if B == "$(binary)"
1135*b30d1939SAndy Fiddaman			if "$(B:D:B)" == "$(D:D:B)" && "$(B:S)" != "$(D:S)"
1136*b30d1939SAndy Fiddaman				error 3 $(B:B:S): base overwrite would invalidate delta $(D:B:S)
1137*b30d1939SAndy Fiddaman			end
1138*b30d1939SAndy Fiddaman			error 1 $(B:B:S): replacing current base
1139*b30d1939SAndy Fiddaman		end
1140*b30d1939SAndy Fiddaman		version := $(binary:B:/$(name).//:/\..*//)
1141*b30d1939SAndy Fiddaman	end
1142*b30d1939SAndy Fiddaman	PACKAGEGEN := $(PACKAGEBIN)/gen
1143*b30d1939SAndy Fiddaman
1144*b30d1939SAndy Fiddaman.binary.gen : $$(PACKAGEDIR) $$(PACKAGEGEN)
1145*b30d1939SAndy Fiddaman
1146*b30d1939SAndy Fiddaman.binary.exp .binary.pkg .binary.rpm : .MAKE
1147*b30d1939SAndy Fiddaman	error 3 $(style): binary package style not supported yet
1148*b30d1939SAndy Fiddaman
1149*b30d1939SAndy Fiddaman.binary.cyg :
1150*b30d1939SAndy Fiddaman	if	[[ '$(~$(name))' ]]
1151*b30d1939SAndy Fiddaman	then	tmp=/tmp/pkg$(tmp)
1152*b30d1939SAndy Fiddaman		mkdir $tmp
1153*b30d1939SAndy Fiddaman		{
1154*b30d1939SAndy Fiddaman			integer m=0 o
1155*b30d1939SAndy Fiddaman			{
1156*b30d1939SAndy Fiddaman				echo '$($(name.original).README)' | fmt
1157*b30d1939SAndy Fiddaman				cat <<'!'
1158*b30d1939SAndy Fiddaman	$(readme.$(style):@?$$("\n")$$(readme.$$(style))??)
1159*b30d1939SAndy Fiddaman	!
1160*b30d1939SAndy Fiddaman			} > $tmp/README1
1161*b30d1939SAndy Fiddaman			echo ";;;$tmp/README1;usr/share/doc/Cygwin/$(opt:/.$//).README"
1162*b30d1939SAndy Fiddaman			{
1163*b30d1939SAndy Fiddaman				echo '$($(name.original).README)' | fmt
1164*b30d1939SAndy Fiddaman				cat <<'!'
1165*b30d1939SAndy Fiddaman	$()
1166*b30d1939SAndy Fiddaman	The remainder of this file is the README from the source package
1167*b30d1939SAndy Fiddaman	that was used to generate this binary package. It describes
1168*b30d1939SAndy Fiddaman	the source build hierarchy, not the current directory.
1169*b30d1939SAndy Fiddaman	$()
1170*b30d1939SAndy Fiddaman	$(package.readme)
1171*b30d1939SAndy Fiddaman	!
1172*b30d1939SAndy Fiddaman			} > $tmp/README2
1173*b30d1939SAndy Fiddaman			echo ";;;$tmp/README2;usr/share/doc/$(opt)README"
1174*b30d1939SAndy Fiddaman			package release $(name.original) > $tmp/RELEASE
1175*b30d1939SAndy Fiddaman			echo ";;;$tmp/RELEASE;usr/share/doc/$(opt)RELEASE"
1176*b30d1939SAndy Fiddaman			cat > $(binary:/.$(suffix)//).setup.hint <<'!'
1177*b30d1939SAndy Fiddaman	category: $(category:/\(.\).*/\1/U)$(category:/.\(.*\)/\1/L)
1178*b30d1939SAndy Fiddaman	requires: cygwin
1179*b30d1939SAndy Fiddaman	sdesc: "$(index)"
1180*b30d1939SAndy Fiddaman	ldesc: "$($(name.original).README)"
1181*b30d1939SAndy Fiddaman	!
1182*b30d1939SAndy Fiddaman			set -- $(.package.licenses. --text $(name.original):N!=*.lic)
1183*b30d1939SAndy Fiddaman			for i
1184*b30d1939SAndy Fiddaman			do	echo ";;;${i};usr/share/doc/$(opt)LICENSE-${i##*/}"
1185*b30d1939SAndy Fiddaman			done
1186*b30d1939SAndy Fiddaman			cat <<'!'
1187*b30d1939SAndy Fiddaman	$(filter.$(style))
1188*b30d1939SAndy Fiddaman	!
1189*b30d1939SAndy Fiddaman			if	[[ '$(postinstall.$(style):V:O=1:?1??)' ]]
1190*b30d1939SAndy Fiddaman			then	cat >$tmp/postinstall <<'!'
1191*b30d1939SAndy Fiddaman	$("#")!/bin/sh
1192*b30d1939SAndy Fiddaman	$(postinstall.$(style))
1193*b30d1939SAndy Fiddaman	!
1194*b30d1939SAndy Fiddaman				echo ";;;$tmp/postinstall;etc/postinstall/$(name).sh"
1195*b30d1939SAndy Fiddaman			fi
1196*b30d1939SAndy Fiddaman		} |
1197*b30d1939SAndy Fiddaman		{
1198*b30d1939SAndy Fiddaman			: > $tmp/HEAD
1199*b30d1939SAndy Fiddaman			[[ '$(notice)' ]] && echo ";;;$tmp/HEAD;$(package.notice)"
1200*b30d1939SAndy Fiddaman			sort -t';' -k5,5 -u
1201*b30d1939SAndy Fiddaman			: > $tmp/TAIL
1202*b30d1939SAndy Fiddaman			[[ '$(notice)' ]] && echo ";;;$tmp/TAIL;$(package.notice)"
1203*b30d1939SAndy Fiddaman		} |
1204*b30d1939SAndy Fiddaman		$(PAX)	--filter=- \
1205*b30d1939SAndy Fiddaman			--to=ascii \
1206*b30d1939SAndy Fiddaman			--format=$(format) \
1207*b30d1939SAndy Fiddaman			--local \
1208*b30d1939SAndy Fiddaman			-wvf $(binary)
1209*b30d1939SAndy Fiddaman		$(SUM) -x $(checksum) < $(binary) > $(binary:D:B:S=.$(checksum))
1210*b30d1939SAndy Fiddaman		rm -rf $tmp
1211*b30d1939SAndy Fiddaman	fi
1212*b30d1939SAndy Fiddaman
1213*b30d1939SAndy Fiddaman.binary.lcl :
1214*b30d1939SAndy Fiddaman	if	[[ '$(~$(name))' ]]
1215*b30d1939SAndy Fiddaman	then	tmp=/tmp/pkg$(tmp)
1216*b30d1939SAndy Fiddaman		mkdir $tmp
1217*b30d1939SAndy Fiddaman		{
1218*b30d1939SAndy Fiddaman			$(package.src:U:T=F:/.*/echo ";;;&"$("\n")/)
1219*b30d1939SAndy Fiddaman			$(package.bin:U:T=F:/.*/echo ";;;&"$("\n")/)
1220*b30d1939SAndy Fiddaman			set -- $(package.closure)
1221*b30d1939SAndy Fiddaman			for i
1222*b30d1939SAndy Fiddaman			do	cd $(INSTALLROOT)/$i
1223*b30d1939SAndy Fiddaman				$(MAKE) --noexec $(-) --variants=$(variants:Q) $(=) recurse list.package.$(type) package.license.class=$(license:Q) cc-
1224*b30d1939SAndy Fiddaman			done
1225*b30d1939SAndy Fiddaman		} |
1226*b30d1939SAndy Fiddaman		$(PAX)	--filter=- \
1227*b30d1939SAndy Fiddaman			--to=ascii \
1228*b30d1939SAndy Fiddaman			$(op:N=delta:??--format=$(format)?) \
1229*b30d1939SAndy Fiddaman			--local \
1230*b30d1939SAndy Fiddaman			--checksum=md5:$(PACKAGEGEN)/$(name).sum \
1231*b30d1939SAndy Fiddaman			--install=$(PACKAGEGEN)/$(name).ins \
1232*b30d1939SAndy Fiddaman			-wvf $(binary) $(base) \
1233*b30d1939SAndy Fiddaman			$(op:N=delta:?--format=gzip??) \
1234*b30d1939SAndy Fiddaman			-s",^$tmp/,$(INSTALLOFFSET)/," \
1235*b30d1939SAndy Fiddaman			$(PACKAGEROOT:C%.*%-s",^&/,,"%)
1236*b30d1939SAndy Fiddaman		$(SUM) -x $(checksum) < $(binary) > $(binary:D:B:S=.$(checksum))
1237*b30d1939SAndy Fiddaman		echo local > $(binary:D:B=$(name):S=.$(CC.HOSTTYPE).tim)
1238*b30d1939SAndy Fiddaman		rm -rf $tmp
1239*b30d1939SAndy Fiddaman	fi
1240*b30d1939SAndy Fiddaman
1241*b30d1939SAndy Fiddaman.binary.tgz :
1242*b30d1939SAndy Fiddaman	if	[[ '$(~$(name))' ]]
1243*b30d1939SAndy Fiddaman	then	tmp=/tmp/pkg$(tmp)
1244*b30d1939SAndy Fiddaman		mkdir $tmp
1245*b30d1939SAndy Fiddaman		{
1246*b30d1939SAndy Fiddaman			if	[[ '$(init)' == '$(name)' ]]
1247*b30d1939SAndy Fiddaman			then	for i in lib32 lib64
1248*b30d1939SAndy Fiddaman				do	if	[[ -d $(INSTALLROOT)/$i ]]
1249*b30d1939SAndy Fiddaman					then	echo ";physical;;$(INSTALLROOT)/$i"
1250*b30d1939SAndy Fiddaman					fi
1251*b30d1939SAndy Fiddaman				done
1252*b30d1939SAndy Fiddaman			fi
1253*b30d1939SAndy Fiddaman			$(package.src:U:T=F:C%^$(PACKAGEROOT)/%%:C%.*%echo ";;;$(PACKAGEROOT)/&;&"$("\n")%)
1254*b30d1939SAndy Fiddaman			$(package.bin:U:T=F:C%^$(INSTALLROOT)/%%:C%.*%echo ";;;$(INSTALLROOT)/&;&"$("\n")%)
1255*b30d1939SAndy Fiddaman			$(package.auxiliary.$(style):U:T=F:C%^$(INSTALLROOT)/%%:C%.*%echo ";;;$(INSTALLROOT)/&;&"$("\n")%)
1256*b30d1939SAndy Fiddaman			if	[[ '$(PACKAGEDIR:B)' == '$(style)' ]]
1257*b30d1939SAndy Fiddaman			then	echo $(name) $(version) $(release|version) 1 > $(PACKAGEGEN)/$(name).ver
1258*b30d1939SAndy Fiddaman				echo ";;;$(PACKAGEGEN)/$(name).ver;$(PACKAGELIB)/$(name).ver"
1259*b30d1939SAndy Fiddaman				if	[[ '$(~covers)' ]]
1260*b30d1939SAndy Fiddaman				then	for i in $(~covers)
1261*b30d1939SAndy Fiddaman					do	for j in lic pkg
1262*b30d1939SAndy Fiddaman						do	if	[[ -f $(PACKAGESRC)/$i.$j ]]
1263*b30d1939SAndy Fiddaman							then	echo ";;;$(PACKAGESRC)/$i.$j;$(PACKAGELIB)/$i.$j"
1264*b30d1939SAndy Fiddaman							fi
1265*b30d1939SAndy Fiddaman						done
1266*b30d1939SAndy Fiddaman						for j in ver req
1267*b30d1939SAndy Fiddaman						do	if	[[ -f $(PACKAGEGEN)/$i.$j ]]
1268*b30d1939SAndy Fiddaman							then	echo ";;;$(PACKAGEGEN)/$i.$j;$(PACKAGELIB)/$i.$j"
1269*b30d1939SAndy Fiddaman							fi
1270*b30d1939SAndy Fiddaman						done
1271*b30d1939SAndy Fiddaman					done
1272*b30d1939SAndy Fiddaman					for i in $(~covers:D=$(PACKAGESRC):B:S=.lic:T=F:T=I:N=*.def:D=$(PACKAGESRC):B:S:T=F:B:S)
1273*b30d1939SAndy Fiddaman					do	echo ";;;$(PACKAGESRC)/$i;$(PACKAGELIB)/$i"
1274*b30d1939SAndy Fiddaman					done
1275*b30d1939SAndy Fiddaman				fi
1276*b30d1939SAndy Fiddaman				sed 's,1$,0,' $(~req:D=$(PACKAGEGEN):B:S=.ver:T=F) < /dev/null > $(PACKAGEGEN)/$(name).req
1277*b30d1939SAndy Fiddaman				echo ";;;$(PACKAGEGEN)/$(name).req;$(PACKAGELIB)/$(name).req"
1278*b30d1939SAndy Fiddaman				{
1279*b30d1939SAndy Fiddaman					echo "name='$(name)'"
1280*b30d1939SAndy Fiddaman					echo "index='$(index)'"
1281*b30d1939SAndy Fiddaman					echo "covers='$(~covers)'"
1282*b30d1939SAndy Fiddaman					echo "requires='$(~req)'"
1283*b30d1939SAndy Fiddaman				} > $(PACKAGEGEN)/$(name).inx
1284*b30d1939SAndy Fiddaman				{
1285*b30d1939SAndy Fiddaman					{
1286*b30d1939SAndy Fiddaman					echo '$($(name).README)'
1287*b30d1939SAndy Fiddaman					if	[[ '$(~covers)' ]]
1288*b30d1939SAndy Fiddaman					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)."
1289*b30d1939SAndy Fiddaman					fi
1290*b30d1939SAndy Fiddaman					if	[[ '$(~requires)' ]]
1291*b30d1939SAndy Fiddaman					then	echo 'It requires the following package$(~requires:O=2:?s??): $(~requires).'
1292*b30d1939SAndy Fiddaman					fi
1293*b30d1939SAndy Fiddaman					} | fmt
1294*b30d1939SAndy Fiddaman					package help binary
1295*b30d1939SAndy Fiddaman					package release $(name)
1296*b30d1939SAndy Fiddaman				} > $(PACKAGEGEN)/$(name).README
1297*b30d1939SAndy Fiddaman				echo ";;;$(PACKAGEGEN)/$(name).README;$(PACKAGELIB)/$(name).README"
1298*b30d1939SAndy Fiddaman			fi
1299*b30d1939SAndy Fiddaman			set -- $(package.closure)
1300*b30d1939SAndy Fiddaman			for i
1301*b30d1939SAndy Fiddaman			do	cd $(INSTALLROOT)/$i
1302*b30d1939SAndy Fiddaman				$(MAKE) --noexec $(-) --variants=$(variants:Q) $(=) package.strip=$(strip) recurse list.package.$(type) package.license.class=$(license:Q) cc-
1303*b30d1939SAndy Fiddaman			done
1304*b30d1939SAndy Fiddaman		} |
1305*b30d1939SAndy Fiddaman		{
1306*b30d1939SAndy Fiddaman			: > $tmp/HEAD
1307*b30d1939SAndy Fiddaman			[[ '$(notice)' ]] && echo ";;;$tmp/HEAD;$(package.notice)"
1308*b30d1939SAndy Fiddaman			cat > $tmp/README <<'!'
1309*b30d1939SAndy Fiddaman	$(package.readme)
1310*b30d1939SAndy Fiddaman	!
1311*b30d1939SAndy Fiddaman			echo ";;;$tmp/README;README"
1312*b30d1939SAndy Fiddaman			sort -t';' -k5,5 -u
1313*b30d1939SAndy Fiddaman			: > $tmp/TAIL
1314*b30d1939SAndy Fiddaman			[[ '$(notice)' ]] && echo ";;;$tmp/TAIL;$(package.notice)"
1315*b30d1939SAndy Fiddaman		} |
1316*b30d1939SAndy Fiddaman		$(PAX)	--filter=- \
1317*b30d1939SAndy Fiddaman			--to=ascii \
1318*b30d1939SAndy Fiddaman			$(op:N=delta:??--format=$(format)?) \
1319*b30d1939SAndy Fiddaman			--local \
1320*b30d1939SAndy Fiddaman			--checksum=md5:$(PACKAGEGEN)/$(name).sum \
1321*b30d1939SAndy Fiddaman			--install=$(PACKAGEGEN)/$(name).ins \
1322*b30d1939SAndy Fiddaman			-wvf $(binary) $(base) \
1323*b30d1939SAndy Fiddaman			$(op:N=delta:?--format=gzip??) \
1324*b30d1939SAndy Fiddaman			-s",^$tmp/,$(INSTALLOFFSET)/," \
1325*b30d1939SAndy Fiddaman			$(PACKAGEROOT:C%.*%-s",^&/,,"%)
1326*b30d1939SAndy Fiddaman		echo $(binary) >> $(binary:D:B=PACKAGE:S=.$(CC.HOSTTYPE).lst)
1327*b30d1939SAndy Fiddaman		$(SUM) -x $(checksum) < $(binary) > $(binary:D:B:S=.$(checksum))
1328*b30d1939SAndy Fiddaman		echo $(binary:D:B:S=.$(checksum)) >> $(binary:D:B=PACKAGE:S=.$(CC.HOSTTYPE).lst)
1329*b30d1939SAndy Fiddaman		echo local > $(binary:D:B=$(name):S=.$(CC.HOSTTYPE).tim)
1330*b30d1939SAndy Fiddaman		if	[[ '$(incremental)' == 1 && '$(old.binary)' ]]
1331*b30d1939SAndy Fiddaman		then	$(PAX) -rf $(binary) -wvf $(old.new.binary) -z $(old.binary)
1332*b30d1939SAndy Fiddaman			echo $(old.new.binary) >> $(binary:D:B=PACKAGE:S=.$(CC.HOSTTYPE).lst)
1333*b30d1939SAndy Fiddaman			$(SUM) -x $(checksum) < $(old.new.binary) > $(old.new.binary:D:B:S=.$(checksum))
1334*b30d1939SAndy Fiddaman			echo $(old.new.binary:D:B:S=.$(checksum)) >> $(binary:D:B=PACKAGE:S=.$(CC.HOSTTYPE).lst)
1335*b30d1939SAndy Fiddaman		fi
1336*b30d1939SAndy Fiddaman		rm -rf $tmp
1337*b30d1939SAndy Fiddaman	else	if	[[ '$(binary.$(name))' ]]
1338*b30d1939SAndy Fiddaman		then	exe=$(binary.$(name))
1339*b30d1939SAndy Fiddaman		else	exe=$(INSTALLROOT)/bin/$(name)
1340*b30d1939SAndy Fiddaman		fi
1341*b30d1939SAndy Fiddaman		if	[[ '$(old.binary)' ]] && $(CMP) $(CMPFLAGS) $exe $(binary)
1342*b30d1939SAndy Fiddaman		then	: $(name) is up to date
1343*b30d1939SAndy Fiddaman		else	echo $(name) $(version) $(release|version) 1 > $(PACKAGEGEN)/$(name).ver
1344*b30d1939SAndy Fiddaman			: > $(PACKAGEGEN)/$(name).req
1345*b30d1939SAndy Fiddaman			{
1346*b30d1939SAndy Fiddaman				echo "name='$(name)'"
1347*b30d1939SAndy Fiddaman				echo "index='$(index)'"
1348*b30d1939SAndy Fiddaman				echo "covers='$(~covers)'"
1349*b30d1939SAndy Fiddaman				echo "requires='$(~req)'"
1350*b30d1939SAndy Fiddaman			} > $(PACKAGEGEN)/$(name).inx
1351*b30d1939SAndy Fiddaman			{
1352*b30d1939SAndy Fiddaman				echo '$($(name).README)'
1353*b30d1939SAndy Fiddaman				package help binary
1354*b30d1939SAndy Fiddaman			} > $(PACKAGEGEN)/$(name).README
1355*b30d1939SAndy Fiddaman			case "$(binary)" in
1356*b30d1939SAndy Fiddaman			*.gz)	gzip < $exe > $(binary) ;;
1357*b30d1939SAndy Fiddaman			*)	cp $exe $(binary) ;;
1358*b30d1939SAndy Fiddaman			esac
1359*b30d1939SAndy Fiddaman			$(SUM) -x $(checksum) < $(binary) > $(binary:D:B:S=.$(checksum))
1360*b30d1939SAndy Fiddaman			echo local > $(binary:D:B=$(name):S=.$(CC.HOSTTYPE).tim)
1361*b30d1939SAndy Fiddaman		fi
1362*b30d1939SAndy Fiddaman		echo $(binary) >> $(binary:D:B=PACKAGE:S=.$(CC.HOSTTYPE).lst)
1363*b30d1939SAndy Fiddaman		echo $(binary:D:B:S=.$(checksum)) >> $(binary:D:B=PACKAGE:S=.$(CC.HOSTTYPE).lst)
1364*b30d1939SAndy Fiddaman	fi
1365*b30d1939SAndy Fiddaman
1366*b30d1939SAndy Fiddamanruntime : .runtime.init .runtime.gen .runtime.$$(style)
1367*b30d1939SAndy Fiddaman
1368*b30d1939SAndy Fiddaman.runtime.init : .MAKE
1369*b30d1939SAndy Fiddaman	local A B D I P V
1370*b30d1939SAndy Fiddaman	type := runtime
1371*b30d1939SAndy Fiddaman	if ! "$(incremental)"
1372*b30d1939SAndy Fiddaman		incremental = 0
1373*b30d1939SAndy Fiddaman	end
1374*b30d1939SAndy Fiddaman	if ! "$(~$(name))"
1375*b30d1939SAndy Fiddaman		if name == "ratz"
1376*b30d1939SAndy Fiddaman			suffix = exe
1377*b30d1939SAndy Fiddaman		else
1378*b30d1939SAndy Fiddaman			suffix = gz
1379*b30d1939SAndy Fiddaman		end
1380*b30d1939SAndy Fiddaman	end
1381*b30d1939SAndy Fiddaman	: $(.init.$(style)) :
1382*b30d1939SAndy Fiddaman	: $(details.$(style):V:R) :
1383*b30d1939SAndy Fiddaman	A := $(runtime.list)
1384*b30d1939SAndy Fiddaman	B := $(A:N=*.$(stamp).$(CC.HOSTTYPE).$(suffix):N!=*.$(stamp).$(stamp).*:O=1:T=F)
1385*b30d1939SAndy Fiddaman	P := $(A:N=*.$(stamp).$(CC.HOSTTYPE).$(suffix):N!=*.$(stamp).$(stamp).*:O=2:T=F)
1386*b30d1939SAndy Fiddaman	D := $(A:N=*.$(stamp).$(stamp).$(CC.HOSTTYPE).$(suffix):O=1:T=F)
1387*b30d1939SAndy Fiddaman	if op == "delta"
1388*b30d1939SAndy Fiddaman		if ! B
1389*b30d1939SAndy Fiddaman			error 3 delta requires a base archive
1390*b30d1939SAndy Fiddaman		end
1391*b30d1939SAndy Fiddaman		base := -z $(B)
1392*b30d1939SAndy Fiddaman		if "$(release)" != "$(stamp)"
1393*b30d1939SAndy Fiddaman			release := $("":T=R%Y-%m-%d)
1394*b30d1939SAndy Fiddaman		end
1395*b30d1939SAndy Fiddaman		runtime := $(B:/$(CC.HOSTTYPE).$(suffix)$/$(release).&/)
1396*b30d1939SAndy Fiddaman		version := $(runtime:B:B:/$(name).//)
1397*b30d1939SAndy Fiddaman	elif B || op == "base"
1398*b30d1939SAndy Fiddaman		if op == "base"
1399*b30d1939SAndy Fiddaman			for I $(B) $(P)
1400*b30d1939SAndy Fiddaman				V := $(I:B:/$(name)-run\.\([^.]*\).*/\1/)
1401*b30d1939SAndy Fiddaman				if V == "[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]" && V != "$(version)"
1402*b30d1939SAndy Fiddaman					old.version := $(V)
1403*b30d1939SAndy Fiddaman					old.runtime := $(I)
1404*b30d1939SAndy Fiddaman					if "$(old.version)" >= "$(version)"
1405*b30d1939SAndy Fiddaman						error 3 $(name): previous base $(old.version) is newer than $(version)
1406*b30d1939SAndy Fiddaman					end
1407*b30d1939SAndy Fiddaman					break
1408*b30d1939SAndy Fiddaman				end
1409*b30d1939SAndy Fiddaman			end
1410*b30d1939SAndy Fiddaman		else
1411*b30d1939SAndy Fiddaman			runtime := $(B)
1412*b30d1939SAndy Fiddaman		end
1413*b30d1939SAndy Fiddaman		if B == "$(runtime)"
1414*b30d1939SAndy Fiddaman			if "$(B:D:B)" == "$(D:D:B)" && "$(B:S)" != "$(D:S)"
1415*b30d1939SAndy Fiddaman				error 3 $(B:B:S): base overwrite would invalidate delta $(D:B:S)
1416*b30d1939SAndy Fiddaman			end
1417*b30d1939SAndy Fiddaman			error 1 $(B:B:S): replacing current base
1418*b30d1939SAndy Fiddaman		end
1419*b30d1939SAndy Fiddaman		version := $(runtime:B:/$(name)-run.//:/\..*//)
1420*b30d1939SAndy Fiddaman	end
1421*b30d1939SAndy Fiddaman	PACKAGEGEN := $(PACKAGESRC)/gen
1422*b30d1939SAndy Fiddaman
1423*b30d1939SAndy Fiddaman.runtime.gen : $$(PACKAGEDIR) $$(PACKAGEGEN)
1424*b30d1939SAndy Fiddaman
1425*b30d1939SAndy Fiddaman.runtime.cyg .runtime.exp .runtime.lcl .runtime.pkg .runtime.rpm : .MAKE
1426*b30d1939SAndy Fiddaman	error 3 $(style): runtime package style not supported yet
1427*b30d1939SAndy Fiddaman
1428*b30d1939SAndy Fiddaman.runtime.tgz :
1429*b30d1939SAndy Fiddaman	if	[[ '$(~$(name))' ]]
1430*b30d1939SAndy Fiddaman	then	tmp=/tmp/pkg$(tmp)
1431*b30d1939SAndy Fiddaman		mkdir $tmp
1432*b30d1939SAndy Fiddaman		{
1433*b30d1939SAndy Fiddaman			if	[[ '$(init)' == '$(name)' ]]
1434*b30d1939SAndy Fiddaman			then	for i in lib32 lib64
1435*b30d1939SAndy Fiddaman				do	if	[[ -d $(INSTALLROOT)/$i ]]
1436*b30d1939SAndy Fiddaman					then	echo ";physical;;$(INSTALLROOT)/$i"
1437*b30d1939SAndy Fiddaman					fi
1438*b30d1939SAndy Fiddaman				done
1439*b30d1939SAndy Fiddaman			fi
1440*b30d1939SAndy Fiddaman			$(package.src:U:T=F:C%^$(PACKAGEROOT)/%%:C%.*%echo ";;;$(PACKAGEROOT)/&;&"$("\n")%)
1441*b30d1939SAndy Fiddaman			$(package.bin:U:T=F:C%^$(INSTALLROOT)/%%:C%.*%echo ";;;$(INSTALLROOT)/&;&"$("\n")%)
1442*b30d1939SAndy Fiddaman			$(package.auxiliary.$(style):U:T=F:C%^$(INSTALLROOT)/%%:C%.*%echo ";;;$(INSTALLROOT)/&;&"$("\n")%)
1443*b30d1939SAndy Fiddaman			echo $(name) $(version) $(release|version) 1 > $(PACKAGEGEN)/$(name).ver
1444*b30d1939SAndy Fiddaman			echo ";;;$(PACKAGEGEN)/$(name).ver;$(PACKAGELIB)/$(name).ver"
1445*b30d1939SAndy Fiddaman			if	[[ '$(~covers)' ]]
1446*b30d1939SAndy Fiddaman			then	for i in $(~covers)
1447*b30d1939SAndy Fiddaman				do	for j in lic pkg
1448*b30d1939SAndy Fiddaman					do	if	[[ -f $(PACKAGESRC)/$i.$j ]]
1449*b30d1939SAndy Fiddaman						then	echo ";;;$(PACKAGESRC)/$i.$j;$(PACKAGELIB)/$i.$j"
1450*b30d1939SAndy Fiddaman						fi
1451*b30d1939SAndy Fiddaman					done
1452*b30d1939SAndy Fiddaman					for j in ver req
1453*b30d1939SAndy Fiddaman					do	if	[[ -f $(PACKAGEGEN)/$i.$j ]]
1454*b30d1939SAndy Fiddaman						then	echo ";;;$(PACKAGEGEN)/$i.$j;$(PACKAGELIB)/$i.$j"
1455*b30d1939SAndy Fiddaman						fi
1456*b30d1939SAndy Fiddaman					done
1457*b30d1939SAndy Fiddaman				done
1458*b30d1939SAndy Fiddaman				for i in $(~covers:D=$(PACKAGESRC):B:S=.lic:T=F:T=I:N=*.def:D=$(PACKAGESRC):B:S:T=F:B:S)
1459*b30d1939SAndy Fiddaman				do	echo ";;;$(PACKAGESRC)/$i;$(PACKAGELIB)/$i"
1460*b30d1939SAndy Fiddaman				done
1461*b30d1939SAndy Fiddaman			fi
1462*b30d1939SAndy Fiddaman			sed 's,1$,0,' $(~req:D=$(PACKAGEGEN):B:S=.ver:T=F) < /dev/null > $(PACKAGEGEN)/$(name).req
1463*b30d1939SAndy Fiddaman			echo ";;;$(PACKAGEGEN)/$(name).req;$(PACKAGELIB)/$(name).req"
1464*b30d1939SAndy Fiddaman			{
1465*b30d1939SAndy Fiddaman				echo "name='$(name)'"
1466*b30d1939SAndy Fiddaman				echo "index='$(index)'"
1467*b30d1939SAndy Fiddaman				echo "covers='$(~covers)'"
1468*b30d1939SAndy Fiddaman				echo "requires='$(~req)'"
1469*b30d1939SAndy Fiddaman			} > $(PACKAGEGEN)/$(name).inx
1470*b30d1939SAndy Fiddaman			{
1471*b30d1939SAndy Fiddaman				{
1472*b30d1939SAndy Fiddaman				echo '$($(name).README)'
1473*b30d1939SAndy Fiddaman				if	[[ '$(~covers)' ]]
1474*b30d1939SAndy Fiddaman				then	echo
1475*b30d1939SAndy Fiddaman					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)."
1476*b30d1939SAndy Fiddaman				fi
1477*b30d1939SAndy Fiddaman				if	[[ '$(~requires)' ]]
1478*b30d1939SAndy Fiddaman				then	echo
1479*b30d1939SAndy Fiddaman					echo 'It requires the following package$(~requires:O=2:?s??): $(~requires).'
1480*b30d1939SAndy Fiddaman				fi
1481*b30d1939SAndy Fiddaman				echo
1482*b30d1939SAndy Fiddaman				echo "To install this $(type) package read the tarball into a directory"
1483*b30d1939SAndy Fiddaman				echo "suitable for containing bin and lib subdirectories, and run the"
1484*b30d1939SAndy Fiddaman				echo "$(PACKAGELIB)/gen/$(name)-run.ins script to fix up permissions."
1485*b30d1939SAndy Fiddaman				echo
1486*b30d1939SAndy Fiddaman				echo "To use the package export the bin directory in PATH. The commands and"
1487*b30d1939SAndy Fiddaman				echo "libraries use \$PATH to locate dynamic libraries and related data files."
1488*b30d1939SAndy Fiddaman				echo
1489*b30d1939SAndy Fiddaman				} | fmt
1490*b30d1939SAndy Fiddaman			} > $(PACKAGEGEN)/$(name)-run.README
1491*b30d1939SAndy Fiddaman			echo ";;;$(PACKAGEGEN)/$(name)-run.README;$(PACKAGELIB)/$(name)-run.README"
1492*b30d1939SAndy Fiddaman			set -- $(package.closure)
1493*b30d1939SAndy Fiddaman			for i
1494*b30d1939SAndy Fiddaman			do	cd $(INSTALLROOT)/$i
1495*b30d1939SAndy Fiddaman				$(MAKE) --noexec $(-) --variants=$(variants:Q) $(=) package.strip=$(strip) recurse list.package.$(type) package.license.class=$(license:Q) cc-
1496*b30d1939SAndy Fiddaman			done
1497*b30d1939SAndy Fiddaman		} |
1498*b30d1939SAndy Fiddaman		{
1499*b30d1939SAndy Fiddaman			: > $tmp/HEAD
1500*b30d1939SAndy Fiddaman			[[ '$(notice)' ]] && echo ";;;$tmp/HEAD;$(package.notice)"
1501*b30d1939SAndy Fiddaman			cat > $tmp/README <<'!'
1502*b30d1939SAndy Fiddaman	$(package.readme)
1503*b30d1939SAndy Fiddaman	!
1504*b30d1939SAndy Fiddaman			echo ";;;$tmp/README;README"
1505*b30d1939SAndy Fiddaman			sort -t';' -k5,5 -u
1506*b30d1939SAndy Fiddaman			: > $tmp/TAIL
1507*b30d1939SAndy Fiddaman			[[ '$(notice)' ]] && echo ";;;$tmp/TAIL;$(package.notice)"
1508*b30d1939SAndy Fiddaman		} |
1509*b30d1939SAndy Fiddaman		$(PAX)	--filter=- \
1510*b30d1939SAndy Fiddaman			--to=ascii \
1511*b30d1939SAndy Fiddaman			$(op:N=delta:??--format=$(format)?) \
1512*b30d1939SAndy Fiddaman			--local \
1513*b30d1939SAndy Fiddaman			--checksum=md5:$(PACKAGEGEN)/$(name)-run.sum \
1514*b30d1939SAndy Fiddaman			--install=$(PACKAGEGEN)/$(name)-run.ins \
1515*b30d1939SAndy Fiddaman			-wvf $(runtime) $(base) \
1516*b30d1939SAndy Fiddaman			$(op:N=delta:?--format=gzip??) \
1517*b30d1939SAndy Fiddaman			-s",^$tmp/,$(INSTALLOFFSET)/," \
1518*b30d1939SAndy Fiddaman			$(PACKAGEROOT:C%.*%-s",^&/,,"%)
1519*b30d1939SAndy Fiddaman		echo $(runtime) >> $(runtime:D:B=PACKAGE:S=.$(CC.HOSTTYPE).lst)
1520*b30d1939SAndy Fiddaman		$(SUM) -x $(checksum) < $(runtime) > $(runtime:D:B:S=.$(checksum))
1521*b30d1939SAndy Fiddaman		echo $(runtime:D:B:S=.$(checksum)) >> $(runtime:D:B=PACKAGE:S=.$(CC.HOSTTYPE).lst)
1522*b30d1939SAndy Fiddaman		echo local > $(runtime:D:B=$(name)-run:S=.$(CC.HOSTTYPE).tim)
1523*b30d1939SAndy Fiddaman		if	[[ '$(incremental)' == 1 && '$(old.runtime)' ]]
1524*b30d1939SAndy Fiddaman		then	$(PAX) -rf $(runtime) -wvf $(old.new.runtime) -z $(old.runtime)
1525*b30d1939SAndy Fiddaman			echo $(old.new.runtime) >> $(runtime:D:B=PACKAGE:S=.$(CC.HOSTTYPE).lst)
1526*b30d1939SAndy Fiddaman			$(SUM) -x $(checksum) < $(old.new.runtime) > $(old.new.runtime:D:B:S=.$(checksum))
1527*b30d1939SAndy Fiddaman			echo $(old.new.runtime:D:B:S=.$(checksum)) >> $(runtime:D:B=PACKAGE:S=.$(CC.HOSTTYPE).lst)
1528*b30d1939SAndy Fiddaman		fi
1529*b30d1939SAndy Fiddaman		rm -rf $tmp
1530*b30d1939SAndy Fiddaman	fi
1531*b30d1939SAndy Fiddaman
1532*b30d1939SAndy Fiddamanlist.installed list.manifest :
1533*b30d1939SAndy Fiddaman	set -- $(package.closure)
1534*b30d1939SAndy Fiddaman	for i
1535*b30d1939SAndy Fiddaman	do	cd $(INSTALLROOT)/$i
1536*b30d1939SAndy Fiddaman		ignore $(MAKE) --noexec $(-) $(=) $(<)
1537*b30d1939SAndy Fiddaman	done
1538