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