xref: /illumos-gate/usr/src/cmd/Makefile.cmd (revision d4660949aa62dd6a963f4913b7120b383cf473c4)
1#
2# CDDL HEADER START
3#
4# The contents of this file are subject to the terms of the
5# Common Development and Distribution License (the "License").
6# You may not use this file except in compliance with the License.
7#
8# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9# or http://www.opensolaris.org/os/licensing.
10# See the License for the specific language governing permissions
11# and limitations under the License.
12#
13# When distributing Covered Code, include this CDDL HEADER in each
14# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15# If applicable, add the following below this CDDL HEADER, with the
16# fields enclosed by brackets "[]" replaced with your own identifying
17# information: Portions Copyright [yyyy] [name of copyright owner]
18#
19# CDDL HEADER END
20#
21#
22# Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
23# Use is subject to license terms.
24#
25# ident	"%Z%%M%	%I%	%E% SMI"
26#
27# Definitions common to command source.
28#
29# include global definitions; SRC should be defined in the shell.
30# SRC is needed until RFE 1026993 is implemented.
31
32include $(SRC)/Makefile.master
33
34LN=		ln
35CP=		cp
36SH=		sh
37ECHO=		echo
38MKDIR=		mkdir
39TOUCH=		touch
40
41FILEMODE=	0555
42LIBFILEMODE=	0444
43XPG4=		$(XPG4PROG:%=%.xpg4)
44XPG6=		$(XPG6PROG:%=%.xpg6)
45
46KRB5DIR=	$(ROOT)/usr
47KRB5BIN=	$(KRB5DIR)/bin
48KRB5SBIN=	$(KRB5DIR)/sbin
49KRB5LIB=	$(KRB5DIR)/lib/krb5
50KRB5RUNPATH=	/usr/lib/krb5
51GSSRUNPATH=	/usr/lib/gss
52
53
54ROOTBIN=		$(ROOT)/usr/bin
55ROOTLIB=		$(ROOT)/usr/lib
56ROOTLIBSVCBIN=		$(ROOT)/lib/svc/bin
57ROOTLIBSVCMETHOD=	$(ROOT)/lib/svc/method
58ROOTLIBZONES=		$(ROOT)/lib/zones
59
60ROOTSHLIB=	$(ROOT)/usr/share/lib
61ROOTSHLIBCCS=	$(ROOTSHLIB)/ccs
62ROOTSBIN=	$(ROOT)/sbin
63ROOTUSRSBIN=	$(ROOT)/usr/sbin
64ROOTETC=	$(ROOT)/etc
65
66ROOTETCSECURITY=	$(ROOTETC)/security
67ROOTETCTSOL=	$(ROOTETCSECURITY)/tsol
68ROOTETCSECLIB=	$(ROOTETCSECURITY)/lib
69ROOTETCZONES=	$(ROOTETC)/zones
70
71ROOTCCSBIN=	$(ROOT)/usr/ccs/bin
72ROOTCCSBIN64=	$(ROOTCCSBIN)/$(MACH64)
73ROOTCCSBINLINKDIR=	$(ROOT)/../../bin
74ROOTCCSBINLINKDIR64=	$(ROOT)../../../bin/$(MACH)
75ROOTUSRKVM=	$(ROOT)/usr/kvm
76ROOTXPG4=	$(ROOT)/usr/xpg4
77ROOTXPG4BIN=	$(ROOT)/usr/xpg4/bin
78ROOTXPG4BIN32=	$(ROOTXPG4BIN)/$(MACH32)
79ROOTXPG4BIN64=	$(ROOTXPG4BIN)/$(MACH64)
80ROOTXPG6=	$(ROOT)/usr/xpg6
81ROOTXPG6BIN=	$(ROOT)/usr/xpg6/bin
82ROOTLOCALEDEF=	$(ROOT)/usr/lib/localedef
83ROOTCHARMAP=	$(ROOTLOCALEDEF)/charmap
84ROOTI18NEXT=	$(ROOTLOCALEDEF)/extensions
85ROOTI18NEXT64=	$(ROOTLOCALEDEF)/extensions/$(MACH64)
86ROOTBIN32=	$(ROOTBIN)/$(MACH32)
87ROOTBIN64=	$(ROOTBIN)/$(MACH64)
88ROOTCMDDIR64=	$(ROOTCMDDIR)/$(MACH64)
89ROOTLIB64=	$(ROOTLIB)/$(MACH64)
90ROOTUSRSBIN32=	$(ROOTUSRSBIN)/$(MACH32)
91ROOTUSRSBIN64=	$(ROOTUSRSBIN)/$(MACH64)
92ROOTMAN1=	$(ROOT)/usr/share/man/man1
93ROOTMAN1M=	$(ROOT)/usr/share/man/man1m
94ROOTMAN3=	$(ROOT)/usr/share/man/man3
95ROOTVARSMB=	$(ROOT)/var/smb
96
97#
98
99# Like ROOTLIBDIR in $(SRC)/Makefile.lib, any lower-level Makefiles that
100# put their binaries in a non-standard location should reset this and use
101# $(ROOTCMD) in their `install' target. By default we set this to a bogus
102# value so that it will not conflict with any of the other values already
103# defined in this Makefile.
104#
105ROOTCMDDIR=	$(ROOT)/__nonexistent_directory__
106
107ROOTSHAUDIO=	$(ROOT)/usr/share/audio
108ROOTAUDIOSAMP=	$(ROOTSHAUDIO)/samples
109ROOTAUDIOSAMPAU=$(ROOTAUDIOSAMP)/au
110
111#
112# Begin /usr/sfw freeware rules for freeware that has "External"
113# taxonomy stability level.
114#
115ROOTSFW=	$(ROOT)/usr/sfw
116ROOTSFWBIN=	$(ROOT)/usr/sfw/bin
117ROOTSFWSHARE=	$(ROOT)/usr/sfw/share
118ROOTSFWSHSRC=	$(ROOT)/usr/sfw/share/src
119ROOTSFWINFO=	$(ROOT)/usr/sfw/share/info
120ROOTSFWINCLUDE=	$(ROOT)/usr/sfw/include
121ROOTSFWLIB=	$(ROOT)/usr/sfw/lib
122ROOTLIBEXEC=	$(ROOT)/usr/sfw/libexec
123ROOTSFWMAN=	$(ROOT)/usr/sfw/share/man
124ROOTSFWMANN=	$(ROOT)/usr/sfw/share/mann
125ROOTSFWMAN1=	$(ROOT)/usr/sfw/share/man/man1
126ROOTSFWMAN1M=	$(ROOT)/usr/sfw/share/man/man1m
127ROOTSFWMAN3=	$(ROOT)/usr/sfw/share/man/man3
128ROOTSFWMAN5=	$(ROOT)/usr/sfw/share/man/man5
129ROOTSFWMAN7=	$(ROOT)/usr/sfw/share/man/man7
130#
131# End /usr/sfw freeware rules
132#
133
134ISAEXEC=	$(ROOT)/usr/lib/isaexec
135PLATEXEC=	$(ROOT)/usr/lib/platexec
136
137LDLIBS =	$(LDLIBS.cmd)
138
139LDFLAGS.cmd = \
140	$(BDIRECT) $(ENVLDFLAGS1) $(ENVLDFLAGS2) $(ENVLDFLAGS3) \
141	$(MAPFILE.NES:%=-M%) $(MAPFILE.PGA:%=-M%) $(MAPFILE.NED:%=-M%)
142
143LDFLAGS =	$(LDFLAGS.cmd)
144
145LINTFLAGS=	-axsm
146LINTFLAGS64=	-axsm -Xarch=$(MACH64:sparcv9=v9)
147LINTOUT=	lint.out
148
149KRB5PROG=	$(PROG:%=$(KRB5BIN)/%)
150KRB5SBINPROG=	$(PROG:%=$(KRB5SBIN)/%)
151KRB5LIBPROG=	$(PROG:%=$(KRB5LIB)/%)
152
153ROOTPROG=	$(PROG:%=$(ROOTBIN)/%)
154ROOTCMD=	$(PROG:%=$(ROOTCMDDIR)/%)
155ROOTSHFILES=	$(SHFILES:%=$(ROOTBIN)/%)
156ROOTLIBPROG=	$(PROG:%=$(ROOTLIB)/%)
157ROOTLIBSHFILES= $(SHFILES:%=$(ROOTLIB)/%)
158ROOTSHLIBPROG=	$(PROG:%=$(ROOTSHLIB)/%)
159ROOTSBINPROG=	$(PROG:%=$(ROOTSBIN)/%)
160ROOTUSRSBINPROG=$(PROG:%=$(ROOTUSRSBIN)/%)
161ROOTUSRSBINSCRIPT=$(SCRIPT:%=$(ROOTUSRSBIN)/%)
162ROOTETCPROG=	$(PROG:%=$(ROOTETC)/%)
163ROOTCCSBINPROG=	$(PROG:%=$(ROOTCCSBIN)/%)
164ROOTCCSBINPROG64=	  $(PROG:%=$(ROOTCCSBIN64)/%)
165ROOTCCSBINLINK=$(PROG:%=  $(ROOTCCSBINLINKDIR)/%)
166ROOTCCSBINLINK64=$(PROG:%=$(ROOTCCSBINLINKDIR64)/%)
167ROOTUSRKVMPROG=	$(PROG:%=$(ROOTUSRKVM)/%)
168ROOTXPG4PROG=	$(XPG4PROG:%=$(ROOTXPG4BIN)/%)
169ROOTXPG4PROG32=	$(XPG4PROG:%=$(ROOTXPG4BIN32)/%)
170ROOTXPG4PROG64=	$(XPG4PROG:%=$(ROOTXPG4BIN64)/%)
171ROOTXPG6PROG=	$(XPG6PROG:%=$(ROOTXPG6BIN)/%)
172ROOTLOCALEPROG=	$(PROG:%=$(ROOTLOCALEDEF)/%)
173ROOTPROG64=	$(PROG:%=$(ROOTBIN64)/%)
174ROOTPROG32=	$(PROG:%=$(ROOTBIN32)/%)
175ROOTCMD64=	$(PROG:%=$(ROOTCMDDIR64)/%)
176ROOTUSRSBINPROG32=	$(PROG:%=$(ROOTUSRSBIN32)/%)
177ROOTUSRSBINPROG64=	$(PROG:%=$(ROOTUSRSBIN64)/%)
178ROOTMAN1FILES=	$(MAN1FILES:%=$(ROOTMAN1)/%)
179$(ROOTMAN1FILES) := FILEMODE= 444
180$(ROOTMAN1FILES) := OWNER= root
181$(ROOTMAN1FILES) := GROUP= bin
182ROOTMAN1MFILES=	$(MAN1MFILES:%=$(ROOTMAN1M)/%)
183$(ROOTMAN1MFILES) := FILEMODE= 444
184$(ROOTMAN1MFILES) := OWNER= root
185$(ROOTMAN1MFILES) := GROUP= bin
186ROOTMAN3FILES=	$(MAN3FILES:%=$(ROOTMAN3)/%)
187$(ROOTMAN3FILES) := FILEMODE= 444
188$(ROOTMAN3FILES) := OWNER= root
189$(ROOTMAN3FILES) := GROUP= bin
190
191# Symlink rules for /usr/ccs/bin commands. Note, those commands under
192# the rule of the linker area, are controlled by a different set of
193# rules defined in $(SRC)/cmd/sgs/Makefile.var.
194
195INS.ccsbinlink= \
196	$(RM) $(ROOTCCSBINPROG); \
197	$(SYMLINK) ../../bin/$(PROG) $(ROOTCCSBINPROG)
198
199INS.ccsbinlink64= \
200	$(RM) $(ROOTCCSBINPROG64); \
201	$(SYMLINK) ../../../bin/$(MACH64)/$(PROG) $(ROOTCCSBINPROG64)
202
203ROOTETCDEFAULT=	$(ROOTETC)/default
204ROOTETCDEFAULTFILES=	$(DEFAULTFILES:%.dfl=$(ROOTETCDEFAULT)/%)
205$(ROOTETCDEFAULTFILES) :=	OWNER = root
206$(ROOTETCDEFAULTFILES) :=	GROUP = sys
207$(ROOTETCDEFAULTFILES) :=	FILEMODE = 0644
208
209ROOTETCSECFILES=	$(ETCSECFILES:%=$(ROOTETCSECURITY)/%)
210$(ROOTETCSECFILES) :=	FILEMODE = 0644
211
212ROOTETCTSOLFILES=	$(ETCTSOLFILES:%=$(ROOTETCTSOL)/%)
213$(ROOTETCTSOLFILES) :=	FILEMODE = 0644
214
215ROOTETCSECLIBFILES=	$(ETCSECLIBFILES:%=$(ROOTETCSECLIB)/%)
216
217ROOTETCZONESFILES=	$(ETCZONESFILES:%=$(ROOTETCZONES)/%)
218$(ROOTETCZONESFILES) :=	FILEMODE = 0444
219
220ROOTLIBZONESFILES=	$(LIBZONESFILES:%=$(ROOTLIBZONES)/%)
221$(ROOTLIBZONESFILES) :=	FILEMODE = 0555
222
223
224#
225# Directories for smf(5) service manifests and profiles.
226#
227ROOTVARSVC=			$(ROOT)/var/svc
228
229ROOTVARSVCMANIFEST=		$(ROOTVARSVC)/manifest
230ROOTVARSVCPROFILE=		$(ROOTVARSVC)/profile
231
232ROOTSVCMILESTONE=		$(ROOTVARSVCMANIFEST)/milestone
233ROOTSVCDEVICE=			$(ROOTVARSVCMANIFEST)/device
234ROOTSVCSYSTEM=			$(ROOTVARSVCMANIFEST)/system
235ROOTSVCSYSTEMDEVICE=		$(ROOTSVCSYSTEM)/device
236ROOTSVCSYSTEMFILESYSTEM=	$(ROOTSVCSYSTEM)/filesystem
237ROOTSVCSYSTEMSECURITY=		$(ROOTSVCSYSTEM)/security
238ROOTSVCNETWORK=			$(ROOTVARSVCMANIFEST)/network
239ROOTSVCNETWORKDNS=		$(ROOTSVCNETWORK)/dns
240ROOTSVCNETWORKLDAP=		$(ROOTSVCNETWORK)/ldap
241ROOTSVCNETWORKNFS=		$(ROOTSVCNETWORK)/nfs
242ROOTSVCNETWORKNIS=		$(ROOTSVCNETWORK)/nis
243ROOTSVCNETWORKROUTING=		$(ROOTSVCNETWORK)/routing
244ROOTSVCNETWORKRPC=		$(ROOTSVCNETWORK)/rpc
245ROOTSVCNETWORKSMB=		$(ROOTSVCNETWORK)/smb
246ROOTSVCNETWORKSECURITY=		$(ROOTSVCNETWORK)/security
247ROOTSVCNETWORKSSL=		$(ROOTSVCNETWORK)/ssl
248ROOTSVCNETWORKIPSEC=		$(ROOTSVCNETWORK)/ipsec
249ROOTSVCNETWORKSHARES=		$(ROOTSVCNETWORK)/shares
250ROOTSVCSMB=			$(ROOTSVCNETWORK)/smb
251ROOTSVCPLATFORM=		$(ROOTVARSVCMANIFEST)/platform
252ROOTSVCPLATFORMSUN4U=		$(ROOTSVCPLATFORM)/sun4u
253ROOTSVCPLATFORMSUN4V=		$(ROOTSVCPLATFORM)/sun4v
254ROOTSVCAPPLICATION=		$(ROOTVARSVCMANIFEST)/application
255ROOTSVCAPPLICATIONMANAGEMENT=	$(ROOTSVCAPPLICATION)/management
256ROOTSVCAPPLICATIONSECURITY=	$(ROOTSVCAPPLICATION)/security
257ROOTSVCAPPLICATIONPRINT=	$(ROOTSVCAPPLICATION)/print
258
259#
260# Commands Makefiles delivering a manifest are expected to define MANIFEST.
261#
262# Like ROOTCMDDIR, any lower-level Makefiles that put their manifests in a
263# subdirectory of the manifest directories listed above should reset
264# ROOTMANIFESTDIR and use it in their `install' target. By default we set this
265# to a bogus value so that it will not conflict with any of the other values
266# already  defined in this Makefile.
267#
268# The manifest validation of the $SRC/cmd check target is also derived from a
269# valid MANIFEST setting.
270#
271ROOTMANIFESTDIR=	$(ROOTVARSVCMANIFEST)/__nonexistent_directory__
272ROOTMANIFEST=		$(MANIFEST:%=$(ROOTMANIFESTDIR)/%)
273CHKMANIFEST=		$(MANIFEST:%.xml=%.xmlchk)
274
275#
276# For installing "starter scripts" of services
277#
278
279ROOTSVCMETHOD=		$(SVCMETHOD:%=$(ROOTLIBSVCMETHOD)/%)
280
281ROOTSVCBINDIR=		$(ROOTLIBSVCBIN)/__nonexistent_directory__
282ROOTSVCBIN= 		$(SVCBIN:%=$(ROOTSVCBINDIR)/%)
283
284#
285
286# For programs that are installed in the root filesystem,
287# build $(ROOTFS_PROG) rather than $(PROG)
288$(ROOTFS_PROG) := LDFLAGS += -Wl,-I/lib/ld.so.1
289
290$(KRB5BIN)/%: %
291	$(INS.file)
292
293$(KRB5SBIN)/%: %
294	$(INS.file)
295
296$(KRB5LIB)/%: %
297	$(INS.file)
298
299$(ROOTBIN)/%: %
300	$(INS.file)
301
302$(ROOTLIB)/%: %
303	$(INS.file)
304
305$(ROOTBIN64)/%: %
306	$(INS.file)
307
308$(ROOTLIB64)/%: %
309	$(INS.file)
310
311$(ROOTBIN32)/%: %
312	$(INS.file)
313
314$(ROOTSHLIB)/%: %
315	$(INS.file)
316
317$(ROOTSBIN)/%: %
318	$(INS.file)
319
320$(ROOTUSRSBIN)/%: %
321	$(INS.file)
322
323$(ROOTUSRSBIN32)/%: %
324	$(INS.file)
325
326$(ROOTUSRSBIN64)/%: %
327	$(INS.file)
328
329$(ROOTETC)/%: %
330	$(INS.file)
331
332$(ROOTETCDEFAULT)/%:	%.dfl
333	$(INS.rename)
334
335$(ROOTETCTSOL)/%: %
336	$(INS.file)
337
338$(ROOTETCSECLIB)/%: %
339	$(INS.file)
340
341$(ROOTETCZONES)/%: %
342	$(INS.file)
343
344$(ROOTLIBZONES)/%: %
345	$(INS.file)
346
347$(ROOTUSRKVM)/%: %
348	$(INS.file)
349
350$(ROOTXPG4BIN)/%: %.xpg4
351	$(INS.rename)
352
353$(ROOTXPG4BIN32)/%: %.xpg4
354	$(INS.rename)
355
356$(ROOTXPG4BIN64)/%: %.xpg4
357	$(INS.rename)
358
359$(ROOTXPG6BIN)/%: %.xpg6
360	$(INS.rename)
361
362$(ROOTLOCALEDEF)/%: %
363	$(INS.file)
364
365$(ROOTCHARMAP)/%: %
366	$(INS.file)
367
368$(ROOTI18NEXT)/%: %
369	$(INS.file)
370
371$(ROOTI18NEXT64)/%: %
372	$(INS.file)
373
374$(ROOTLIBSVCMETHOD)/%: %
375	$(INS.file)
376
377$(ROOTLIBSVCBIN)/%: %
378	$(INS.file)
379
380$(ROOTSVCMILESTONE)/%: %
381	$(INS.file)
382
383$(ROOTSVCDEVICE)/%: %
384	$(INS.file)
385
386$(ROOTSVCSYSTEM)/%: %
387	$(INS.file)
388
389$(ROOTSVCSYSTEMDEVICE)/%: %
390	$(INS.file)
391
392$(ROOTSVCSYSTEMFILESYSTEM)/%: %
393	$(INS.file)
394
395$(ROOTSVCSYSTEMSECURITY)/%: %
396	$(INS.file)
397
398$(ROOTSVCNETWORK)/%: %
399	$(INS.file)
400
401$(ROOTSVCNETWORKLDAP)/%: %
402	$(INS.file)
403
404$(ROOTSVCNETWORKNFS)/%: %
405	$(INS.file)
406
407$(ROOTSVCNETWORKNIS)/%: %
408	$(INS.file)
409
410$(ROOTSVCNETWORKRPC)/%: %
411	$(INS.file)
412
413$(ROOTSVCNETWORKSECURITY)/%: %
414	$(INS.file)
415
416$(ROOTSVCNETWORKSSL)/%: %
417	$(INS.file)
418
419$(ROOTSVCNETWORKIPSEC)/%: %
420	$(INS.file)
421
422$(ROOTSVCNETWORKSHARES)/%: %
423	$(INS.file)
424
425$(ROOTSVCNETWORKSMB)/%: %
426	$(INS.file)
427
428$(ROOTSVCAPPLICATION)/%: %
429	$(INS.file)
430
431$(ROOTSVCAPPLICATIONMANAGEMENT)/%: %
432	$(INS.file)
433
434$(ROOTSVCAPPLICATIONSECURITY)/%: %
435	$(INS.file)
436
437$(ROOTSVCAPPLICATIONPRINT)/%: %
438	$(INS.file)
439
440$(ROOTSVCPLATFORM)/%: %
441	$(INS.file)
442
443$(ROOTSVCPLATFORMSUN4U)/%: %
444	$(INS.file)
445
446$(ROOTSVCPLATFORMSUN4V)/%: %
447	$(INS.file)
448
449# Install rule for gprof, yacc, and lex dependency files
450$(ROOTSHLIBCCS)/%: ../common/%
451	$(INS.file)
452
453$(ROOTCCSBINLINKDIR)/%: %
454	$(INS.ccsbinlink)
455
456$(ROOTCCSBINLINKDIR64)/%: %
457	$(INS.ccsbinlink64)
458
459$(ROOTMAN1)/%: %.sunman
460	$(INS.rename)
461
462$(ROOTMAN1M)/%: %.sunman
463	$(INS.rename)
464
465$(ROOTMAN3)/%: %.sunman
466	$(INS.rename)
467
468$(ROOTVARSMB)/%: %
469	$(INS.file)
470
471# build rule for statically linked programs with single source file.
472%.static: %.c
473	$(LINK.c) -o $@ $< $(LDLIBS)
474	$(POST_PROCESS)
475
476%.xpg4: %.c
477	$(LINK.c) -o $@ $< $(LDLIBS)
478	$(POST_PROCESS)
479
480%.xpg6: %.c
481	$(LINK.c) -o $@ $< $(LDLIBS)
482	$(POST_PROCESS)
483
484# Define the majority text domain in this directory.
485TEXT_DOMAIN= SUNW_OST_OSCMD
486
487CLOBBERFILES += $(XPG4) $(XPG6) $(DCFILE)
488
489# This flag is being added only for SCO (x86) compatibility
490i386_SPFLAG=    -D_iBCS2
491sparc_SPFLAG=
492
493iBCS2FLAG = $($(MACH)_SPFLAG)
494
495# This flag is for programs which should not build a 32-bit binary
496sparc_64ONLY= $(POUND_SIGN)
49764ONLY=	 $($(MACH)_64ONLY)
498