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