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