Home | History | Annotate | Download | only in src
      1 #
      2 #
      3 # CDDL HEADER START
      4 #
      5 # The contents of this file are subject to the terms of the
      6 # Common Development and Distribution License (the "License").
      7 # You may not use this file except in compliance with the License.
      8 #
      9 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
     10 # or http://www.opensolaris.org/os/licensing.
     11 # See the License for the specific language governing permissions
     12 # and limitations under the License.
     13 #
     14 # When distributing Covered Code, include this CDDL HEADER in each
     15 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     16 # If applicable, add the following below this CDDL HEADER, with the
     17 # fields enclosed by brackets "[]" replaced with your own identifying
     18 # information: Portions Copyright [yyyy] [name of copyright owner]
     19 #
     20 # CDDL HEADER END
     21 #
     22 # Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
     23 # Use is subject to license terms.
     24 #
     25 #ident	"@(#)Makefile.master	1.33	08/08/17 SMI"
     26 #
     27 # Makefile.master, global definitions for system source
     28 #
     29 ROOT=		/proto
     30 
     31 # RELEASE_BUILD should be cleared for final release builds. This is completely
     32 # independent of CH. NOT_RELEASE_BUILD is exactly what the name implies.
     33 #
     34 # INTERNAL_RELEASE_BUILD is a subset of RELEASE_BUILD. It mostly controls
     35 # identification strings. Enabling RELEASE_BUILD automatically enables
     36 # INTERNAL_RELEASE_BUILD.
     37 #
     38 # STRIP_COMMENTS toggles comment section striping. Generally the same setting
     39 # as INTERNAL_RELEASE_BUILD.
     40 #
     41 # STRIPFLAG is similar. It is set to a unique value depending upon the
     42 # value of CH. It is set here for use in lower level Makefiles to allow
     43 # a single point change to effect the entire build.
     44 #
     45 POUND_SIGN:sh=				echo \\043
     46 
     47 NOT_RELEASE_BUILD=
     48 INTERNAL_RELEASE_BUILD:sh=		echo \\043
     49 RELEASE_BUILD:sh=			echo \\043
     50 $(RELEASE_BUILD)NOT_RELEASE_BUILD:sh=	echo \\043
     51 $(RELEASE_BUILD)INTERNAL_RELEASE_BUILD=
     52 
     53 # SPARC_BLD is '#' for an Intel build.
     54 # INTEL_BLD is '#' for a Sparc build.
     55 SPARC_BLD_1=    $(MACH:i386=$(POUND_SIGN))
     56 SPARC_BLD=      $(SPARC_BLD_1:sparc=)
     57 INTEL_BLD_1=    $(MACH:sparc=$(POUND_SIGN))
     58 INTEL_BLD=      $(INTEL_BLD_1:i386=)
     59 
     60 MACH_TYPE_i386	= pc
     61 MACH_TYPE_sparc	= sun
     62 MACH_TYPE	= $(MACH_TYPE_$(MACH))
     63 
     64 STRIP_COMMENTS=	$(INTERNAL_RELEASE_BUILD)
     65 
     66 STRIPFLAG=	-s
     67 
     68 # BUILD_TOOLS is the root of all tools including compilers.
     69 # ONBLD_TOOLS is the root of all the tools that are part of SUNWonbld.
     70 
     71 BUILD_TOOLS=	/ws/onnv-tools
     72 ONBLD_TOOLS=	$(BUILD_TOOLS)/onbld
     73 
     74 JAVA_ROOT=	/usr/jdk/instances/jdk1.5.0
     75 MAKEFILE=	-f Makefile.sfw
     76 
     77 # this can help catch problems if sh is ksh93
     78 SHELL=/usr/bin/ksh93
     79 GPATCH=		/usr/bin/gpatch
     80 METAINFO=	$(PERL) $(SRC)/tools/metainfo.pl
     81 COMPONENT_NAME=		$(METAINFO) -key PROGRAM
     82 COMPONENT_VERSION=	$(METAINFO) -key VERSION
     83 COMPONENT_PACKAGES=	$(METAINFO) -key PACKAGE
     84 INSTALL_PROTO=	$(SRC)/tools/install-proto -c
     85 STRIPBINS=	$(SRC)/tools/stripbins
     86 UNPACKARCHIVE=	$(SRC)/tools/unpack-archive
     87 SFW_CHECK_DEPS=	$(PERL) $(SRC)/tools/check-deps.pl \
     88 	-e $(SRC)/tools/exception_list.check-deps \
     89 	-d $(PKGARCHIVE) -p $(SFW_PKGDB)
     90 SFW_RUN_CHECK_DEPS=	$(POUND_SIGN)
     91 RPCGEN=		/usr/bin/rpcgen
     92 AWK=		/usr/bin/awk
     93 ECHO=		echo
     94 INS=		install
     95 TRUE=		true
     96 SYMLINK=	/usr/bin/ln -s
     97 LN=		/usr/bin/ln
     98 SH=		/usr/bin/sh
     99 CHMOD=		/usr/bin/chmod
    100 CHOWN=		$(TRUE)
    101 CHGRP=		$(TRUE)
    102 MV=		/usr/bin/mv -f
    103 MKDIR=		/usr/bin/mkdir
    104 TOUCH=		/usr/bin/touch
    105 RM=		/usr/bin/rm -f
    106 GREP=		/usr/bin/grep
    107 SED=		/usr/bin/sed
    108 CP=		/usr/bin/cp
    109 LORDER=		/usr/ccs/bin/lorder
    110 MCS=		/usr/ccs/bin/mcs
    111 CAT=		/usr/bin/cat
    112 M4=		/usr/ccs/bin/m4
    113 STRIP=		/usr/ccs/bin/strip
    114 TSORT=		/usr/ccs/bin/tsort
    115 JAVAC=		$(JAVA_ROOT)/bin/javac
    116 JAVAH=		$(JAVA_ROOT)/bin/javah
    117 JAVADOC=	$(JAVA_ROOT)/bin/javadoc
    118 RMIC=		$(JAVA_ROOT)/bin/rmic
    119 JAR=		$(JAVA_ROOT)/bin/jar
    120 GMAKE=		/usr/sfw/bin/gmake
    121 CCSMAKE=	/usr/ccs/bin/make
    122 XREF=		$(ONBLD_TOOLS)/bin/xref
    123 PERL=		/usr/perl5/bin/perl
    124 FIND=		/usr/bin/find
    125 XARGS=		/usr/bin/xargs
    126 TAR=		/usr/bin/tar
    127 GTAR=		/usr/sfw/bin/gtar
    128 PYTHON=		/usr/bin/python
    129 PYTHON_64=	/usr/bin/$(MACH64)/python
    130 ELFEDIT=	/usr/bin/elfedit
    131 GINSTALL=	/usr/bin/ginstall
    132 
    133 
    134 
    135 FILEMODE=	644
    136 DIRMODE=	755
    137 OWNER=		root
    138 GROUP=		bin
    139 
    140 # Paths, relative to proto root.
    141 #
    142 # Suitable for passing to things like configure scripts which
    143 # use the path for compiled in default file location information
    144 CFGPREFIX=	/usr
    145 CFGBIN=		$(CFGPREFIX)/bin
    146 CFGLIB=		$(CFGPREFIX)/lib
    147 CFGSBIN=	/sbin
    148 CFGUSRSBIN=	$(CFGPREFIX)/sbin
    149 CFGLOCALE=	$(CFGPREFIX)/share/locale
    150 CFGINFO=	$(CFGPREFIX)/share/info
    151 CFGETC=		/etc
    152 CFGBIN32=	$(CFGBIN)/$(MACH32)
    153 CFGBIN64=	$(CFGBIN)/$(MACH64)
    154 CFGLIB64=	$(CFGLIB)/$(MACH64)
    155 CFGUSRSBIN32=	$(CFGUSRSBIN)/$(MACH32)
    156 CFGUSRSBIN64=	$(CFGUSRSBIN)/$(MACH64)
    157 CFGMAN=		$(CFGPREFIX)/share/man
    158 CFGMAN1=	$(CFGMAN)/man1
    159 CFGMAN3=	$(CFGMAN)/man3
    160 CFGMAN5=	$(CFGMAN)/man5
    161 CFGMAN6=	$(CFGMAN)/man6
    162 CFGDOC=		$(CFGPREFIX)/share/doc
    163 CFGUSRDEMO=	$(CFGPREFIX)/demo
    164 
    165 COMPONENT_TOP:sh =	pwd
    166 MANSCRIPT =	$(COMPONENT_TOP)/sunman-stability
    167 
    168 # Common configure options with common values
    169 CONFIGURE_OPTIONS =	--prefix=$(CFGPREFIX)
    170 CONFIGURE_OPTIONS +=	--mandir=$(CFGMAN)
    171 
    172 ROOTBIN=	$(ROOT)$(CFGBIN)
    173 ROOTLIB=	$(ROOT)$(CFGLIB)
    174 ROOTSBIN=	$(ROOT)$(CFGSBIN)
    175 ROOTUSRSBIN=	$(ROOT)$(CFGUSRSBIN)
    176 ROOTETC=	$(ROOT)$(CFGETC)
    177 ROOTBIN32=	$(ROOT)$(CFGBIN32)
    178 ROOTBIN64=	$(ROOT)$(CFGBIN32)
    179 ROOTLIB64=	$(ROOT)$(CFGLIB64)
    180 ROOTUSRSBIN32=	$(ROOT)$(CFGUSRSBIN32)
    181 ROOTUSRSBIN64=	$(ROOT)$(CFGUSRSBIN64)
    182 ROOTMAN1=	$(ROOT)$(CFGMAN1)
    183 ROOTMAN3=	$(ROOT)$(CFGMAN3)
    184 ROOTMAN5=	$(ROOT)$(CFGMAN5)
    185 ROOTMAN6=	$(ROOT)$(CFGMAN6)
    186 ROOTDOC=	$(ROOT)$(CFGDOC)
    187 ROOTUSRDEMO=	$(ROOT)$(CFGUSRDEMO)
    188 
    189 #
    190 # Begin /usr/sfw freeware rules for freeware that has "External"
    191 # taxonomy stability level.
    192 #
    193 CFGSFW=		/usr/sfw
    194 CFGSFWBIN=	/usr/sfw/bin
    195 CFGSFWSBIN=	/usr/sfw/sbin
    196 CFGSFWSHARE=	/usr/sfw/share
    197 CFGSFWINFO=	/usr/sfw/share/info
    198 CFGSFWINCLUDE=	/usr/sfw/include
    199 CFGSFWLIB=	/usr/sfw/lib
    200 CFGLIBEXEC=	/usr/sfw/libexec
    201 CFGSFWMAN=	/usr/sfw/share/man
    202 CFGSFWMANN=	/usr/sfw/share/mann
    203 CFGSFWMAN1=	/usr/sfw/share/man/man1
    204 CFGSFWMAN1M=	/usr/sfw/share/man/man1m
    205 CFGSFWMAN3=	/usr/sfw/share/man/man3
    206 CFGSFWMAN4=	/usr/sfw/share/man/man4
    207 CFGSFWMAN5=	/usr/sfw/share/man/man5
    208 CFGSFWMAN7=	/usr/sfw/share/man/man7
    209 
    210 ROOTSFW=	$(ROOT)$(CFGSFW)
    211 ROOTSFWBIN=	$(ROOT)$(CFGSFWBIN)
    212 ROOTSFWSBIN=	$(ROOT)$(CFGSFWSBIN)
    213 ROOTSFWSHARE=	$(ROOT)$(CFGSFWSHARE)
    214 ROOTSFWINFO=	$(ROOT)$(CFGSFWINFO)
    215 ROOTSFWINCLUDE=	$(ROOT)$(CFGSFWINCLUDE)
    216 ROOTSFWLIB=	$(ROOT)$(CFGSFWLIB)
    217 ROOTLIBEXEC=	$(ROOT)$(CFGLIBEXEC)
    218 ROOTSFWMAN=	$(ROOT)$(CFGSFWMAN)
    219 ROOTSFWMANN=	$(ROOT)$(CFGSFWMANN)
    220 ROOTSFWMAN1=	$(ROOT)$(CFGSFWMAN1)
    221 ROOTSFWMAN1M=	$(ROOT)$(CFGSFWMAN1M)
    222 ROOTSFWMAN3=	$(ROOT)$(CFGSFWMAN3)
    223 ROOTSFWMAN4=	$(ROOT)$(CFGSFWMAN4)
    224 ROOTSFWMAN5=	$(ROOT)$(CFGSFWMAN5)
    225 ROOTSFWMAN7=	$(ROOT)$(CFGSFWMAN7)
    226 
    227 #
    228 # End /usr/sfw freeware rules
    229 #
    230 
    231 # Declare that nothing should be built in parallel.
    232 # Individual Makefiles can use the .PARALLEL target to declare otherwise.
    233 .NO_PARALLEL:
    234 
    235 ROOTPROG=	$(PROG:%=$(ROOTBIN)/%)
    236 ROOTSHFILES=	$(SHFILES:%=$(ROOTBIN)/%)
    237 ROOTLIBPROG=	$(PROG:%=$(ROOTLIB)/%)
    238 ROOTLIBSHFILES= $(SHFILES:%=$(ROOTLIB)/%)
    239 ROOTSBINPROG=	$(PROG:%=$(ROOTSBIN)/%)
    240 ROOTUSRSBINPROG=$(PROG:%=$(ROOTUSRSBIN)/%)
    241 ROOTETCPROG=	$(PROG:%=$(ROOTETC)/%)
    242 ROOTPROG64=	$(PROG:%=$(ROOTBIN64)/%)
    243 ROOTPROG32=	$(PROG:%=$(ROOTBIN32)/%)
    244 ROOTUSRSBINPROG32=	$(PROG:%=$(ROOTUSRSBIN32)/%)
    245 ROOTUSRSBINPROG64=	$(PROG:%=$(ROOTUSRSBIN64)/%)
    246 
    247 ROOTMAN1FILES=$(MAN1FILES:%=$(ROOTMAN1)/%)
    248 $(ROOTMAN1FILES) := FILEMODE = 444
    249 $(ROOTMAN1FILES) := OWNER = root
    250 $(ROOTMAN1FILES) := GROUP = bin
    251 
    252 ROOTMAN3FILES=$(MAN3FILES:%=$(ROOTMAN3)/%)
    253 $(ROOTMAN3FILES) := FILEMODE = 444
    254 $(ROOTMAN3FILES) := OWNER = root
    255 $(ROOTMAN3FILES) := GROUP = bin
    256 
    257 ROOTMAN5FILES=$(MAN5FILES:%=$(ROOTMAN5)/%)
    258 $(ROOTMAN5FILES) := FILEMODE = 444
    259 $(ROOTMAN5FILES) := OWNER = root
    260 $(ROOTMAN5FILES) := GROUP = bin
    261 
    262 ROOTMAN6FILES=$(MAN6FILES:%=$(ROOTMAN6)/%)
    263 $(ROOTMAN6FILES) := FILEMODE = 444
    264 $(ROOTMAN6FILES) := OWNER = root
    265 $(ROOTMAN6FILES) := GROUP = bin
    266 
    267 #
    268 # Begin /usr/sfw freeware rules for freeware that has "External"
    269 # taxonomy stability level.
    270 #
    271 ROOTSFWINFOFILES=$(INFOFILES:%=$(ROOTSFWINFO)/%)
    272 $(ROOTSFWINFOFILES) := FILEMODE = 444
    273 $(ROOTSFWINFOFILES) := OWNER = root
    274 $(ROOTSFWINFOFILES) := GROUP = bin
    275 
    276 ROOTSFWMANNFILES=$(MANNFILES:%=$(ROOTSFWMANN)/%)
    277 $(ROOTSFWMANNFILES) := FILEMODE = 444
    278 $(ROOTSFWMANNFILES) := OWNER = root
    279 $(ROOTSFWMANNFILES) := GROUP = bin
    280 
    281 ROOTSFWMAN1FILES=$(MAN1FILES:%=$(ROOTSFWMAN1)/%)
    282 $(ROOTSFWMAN1FILES) := FILEMODE = 444
    283 $(ROOTSFWMAN1FILES) := OWNER = root
    284 $(ROOTSFWMAN1FILES) := GROUP = bin
    285 
    286 ROOTSFWMAN1MFILES=$(MAN1MFILES:%=$(ROOTSFWMAN1M)/%)
    287 $(ROOTSFWMAN1MFILES) := FILEMODE = 444
    288 $(ROOTSFWMAN1MFILES) := OWNER = root
    289 $(ROOTSFWMAN1MFILES) := GROUP = bin
    290 
    291 ROOTSFWMAN3FILES=$(MAN3FILES:%=$(ROOTSFWMAN3)/%)
    292 $(ROOTSFWMAN3FILES) := FILEMODE = 444
    293 $(ROOTSFWMAN3FILES) := OWNER = root
    294 $(ROOTSFWMAN3FILES) := GROUP = bin
    295 
    296 ROOTSFWMAN4FILES=$(MAN4FILES:%=$(ROOTSFWMAN4)/%)
    297 $(ROOTSFWMAN4FILES) := FILEMODE = 444
    298 $(ROOTSFWMAN4FILES) := OWNER = root
    299 $(ROOTSFWMAN4FILES) := GROUP = bin
    300 
    301 ROOTSFWMAN5FILES=$(MAN5FILES:%=$(ROOTSFWMAN5)/%)
    302 $(ROOTSFWMAN5FILES) := FILEMODE = 444
    303 $(ROOTSFWMAN5FILES) := OWNER = root
    304 $(ROOTSFWMAN5FILES) := GROUP = bin
    305 
    306 ROOTSFWMAN7FILES=$(MAN7FILES:%=$(ROOTSFWMAN7)/%)
    307 $(ROOTSFWMAN7FILES) := FILEMODE = 444
    308 $(ROOTSFWMAN7FILES) := OWNER = root
    309 $(ROOTSFWMAN7FILES) := GROUP = bin
    310 
    311 ROOTSFWBINPROG=	$(PROG:%=$(ROOTSFWBIN)/%)
    312 $(ROOTSFWBINPROG) := FILEMODE= 555
    313 $(ROOTSFWBINPROG) := OWNER= root
    314 $(ROOTSFWBINPROG) := GROUP= bin
    315 
    316 ROOTSFWSBINPROG= $(PROG:%=$(ROOTSFWSBIN)/%)
    317 $(ROOTSFWSBINPROG) := FILEMODE= 555
    318 $(ROOTSFWSBINPROG) := OWNER= root
    319 $(ROOTSFWSBINPROG) := GROUP= bin
    320 
    321 #
    322 # End /usr/sfw freeware rules
    323 #
    324 
    325 
    326 INS.file=	$(RM) $@; $(INS) -s -m $(FILEMODE) -f $(@D) $<
    327 INS.dir=	$(INS) -s -d -m $(DIRMODE) $@
    328 # installs and renames at once
    329 #
    330 INS.rename=	$(INS.file); $(MV) $(@D)/$(<F) $@
    331 
    332 # MACH must be set in the shell environment per uname -p on the build host
    333 # More specific architecture variables should be set in lower makefiles.
    334 #
    335 # MACH64 is derived from MACH
    336 #
    337 MACH64_1=	$(MACH:sparc=sparcv9)
    338 MACH64=		$(MACH64_1:i386=amd64)
    339 
    340 MACH32_1=	$(MACH:sparc=sparcv7)
    341 MACH32=		$(MACH32_1:i386=i86)
    342 
    343 #
    344 # C compiler mode. Future compilers may change the default on us,
    345 # so force transition mode globally. Lower level makefiles can
    346 # override this by setting CCMODE.
    347 #
    348 CCMODE=		-Xa
    349 CCMODE64=	-Xa
    350 
    351 #
    352 # C compiler verbose mode. This is so we can enable it globally,
    353 # but turn it off in the lower level makefiles of things we cannot
    354 # (or aren't going to) fix.
    355 #
    356 CCVERBOSE=
    357 
    358 #
    359 # compiler '-xarch' flag. This is here to centralize it and make it
    360 # overridable for testing.
    361 sparc_XARCH=	-xarch=v8
    362 sparcv9_XARCH=	-xarch=v9
    363 i386_XARCH=	-xarch=386 -xchip=pentium
    364 amd64_XARCH=	-xarch=generic64 -Ui386 -U__i386
    365 
    366 #
    367 # disable the incremental linker
    368 ILDOFF=		-xildoff
    369 
    370 # C99 mode
    371 C99_ENABLE=	-xc99=all
    372 C99_DISABLE=	-xc99=none
    373 C99MODE=	$(C99_ENABLE)
    374 C99LMODE=	$(C99MODE:-xc99%=-Xc99%)
    375 
    376 # XPG6 mode.  This option enables XPG6 conformance, plus extensions.
    377 # Amongst other things, this option will cause system calls like
    378 # popen (3C) and system (3C) to invoke the standards-conforming
    379 # shell, /usr/xpg4/bin/sh, instead of /usr/bin/sh.
    380 XPG6MODE=	$(C99MODE) -D_XOPEN_SOURCE=600 -D__EXTENSIONS__=1
    381 
    382 #
    383 # The Sun Studio 11 compiler has changed the behaviour of integer
    384 # wrap arounds and so a flag is needed to use the legacy behaviour
    385 # (without this flag panics/hangs could be exposed within the source).
    386 #
    387 sparc_IROPTFLAG         = -W2,-xwrap_int
    388 sparcv9_IROPTFLAG       = -W2,-xwrap_int
    389 i386_IROPTFLAG          =
    390 amd64_IROPTFLAG         =
    391  
    392 IROPTFLAG               = $($(MACH)_IROPTFLAG)
    393 IROPTFLAG64             = $($(MACH64)_IROPTFLAG)
    394 
    395 # In most places, assignments to these macros should be appended with +=
    396 # (CPPFLAGS.master allows values to be prepended to CPPFLAGS).
    397 sparc_CFLAGS=	$(sparc_XARCH)
    398 sparcv9_CFLAGS=	$(sparcv9_XARCH) -dalign $(CCVERBOSE)
    399 i386_CFLAGS=	$(i386_XARCH)
    400 amd64_CFLAGS=	$(amd64_XARCH)
    401 
    402 #
    403 sparc_COPTFLAG=		-xO3
    404 sparcv9_COPTFLAG=	-xO3
    405 i386_COPTFLAG=		-xO3
    406 amd64_COPTFLAG=		-xO3
    407 COPTFLAG= $($(MACH)_COPTFLAG)
    408 COPTFLAG64= $($(MACH64)_COPTFLAG)
    409 
    410 #
    411 # tradeoff time for space (smaller is better)
    412 #
    413 sparc_SPACEFLAG		= -xspace -W0,-Lt
    414 sparcv9_SPACEFLAG	= -xspace -W0,-Lt
    415 i386_SPACEFLAG		= -xspace
    416 amd64_SPACEFLAG		=
    417 SPACEFLAG		= $($(MACH)_SPACEFLAG)
    418 SPACEFLAG64		= $($(MACH64)_SPACEFLAG)
    419 
    420 sparc_XREGSFLAG         = -xregs=no%appl
    421 sparcv9_XREGSFLAG       = -xregs=no%appl
    422 i386_XREGSFLAG          =
    423 amd64_XREGSFLAG         =
    424 XREGSFLAG               = $($(MACH)_XREGSFLAG)
    425 XREGSFLAG64             = $($(MACH64)_XREGSFLAG)
    426 
    427 CFLAGS=         $(COPTFLAG) $($(MACH)_CFLAGS) $(SPACEFLAG) $(CCMODE) \
    428 		$(ILDOFF) $(C99MODE) $(IROPTFLAG)
    429 	
    430 CFLAGS64=       $(COPTFLAG64) $($(MACH64)_CFLAGS) $(SPACEFLAG64) $(CCMODE64) \
    431 		$(ILDOFF) $(C99MODE) $(IROPTFLAG64)
    432 
    433 DTEXTDOM=-DTEXT_DOMAIN=\"$(TEXT_DOMAIN)\"	# For messaging.
    434 CPPFLAGS.master=$(DTEXTDOM) \
    435 	-I$(ROOTSFWINCLUDE) \
    436 	$(ENVCPPFLAGS1) $(ENVCPPFLAGS2) $(ENVCPPFLAGS3) $(ENVCPPFLAGS4)
    437 CPPFLAGS=	$(CPPFLAGS.master)
    438 AS_CPPFLAGS=	$(CPPFLAGS.master)
    439 JAVAFLAGS=	-deprecation
    440 
    441 #
    442 # For source message catalogue
    443 #
    444 .SUFFIXES: $(SUFFIXES) .po
    445 MSGROOT= $(ROOT)/catalog
    446 MSGDOMAIN= $(MSGROOT)/$(TEXT_DOMAIN)
    447 COMPILE.cpp= $(CC) -E -C $(CFLAGS) $(CPPFLAGS)
    448 XGETTEXT= xgettext
    449 XGETFLAGS= -c TRANSLATION_NOTE
    450 BUILD.po= $(XGETTEXT) $(XGETFLAGS) $<.i ;\
    451 	$(RM)	$@ ;\
    452 	sed "/^domain/d" < messages.po  > $@ ;\
    453 	$(RM) messages.po $<.i
    454 #
    455 # This is overwritten by local Makefile when PROG is a list.
    456 #
    457 POFILE= $(PROG).po
    458 
    459 COMPAT_VERSION= 4
    460 
    461 sparc_CCFLAGS=		-compat=$(COMPAT_VERSION) \
    462 			-Qoption ccfe -messages=no%anachronism
    463 sparcv9_CCFLAGS=	$(sparcv9_XARCH) -dalign -compat=5 \
    464 			-Qoption ccfe -messages=no%anachronism \
    465 			-Qoption ccfe -features=no%conststrings
    466 i386_CCFLAGS=		-compat=$(COMPAT_VERSION) \
    467 			-Qoption ccfe -messages=no%anachronism \
    468 			-Qoption ccfe -features=no%conststrings
    469 amd64_CCFLAGS=		$(amd64_XARCH) -compat=5 \
    470 			-Qoption ccfe -messages=no%anachronism \
    471 			-Qoption ccfe -features=no%conststrings
    472 
    473 sparc_CCOPTFLAG=	-xO3
    474 sparcv9_CCOPTFLAG=	-xO3
    475 i386_CCOPTFLAG=		-xO3
    476 amd64_CCOPTFLAG=	-xO3
    477 
    478 CCOPTFLAG=	$($(MACH)_CCOPTFLAG)
    479 CCOPTFLAG64=	$($(MACH64)_CCOPTFLAG)
    480 CCFLAGS=	$(CCOPTFLAG) $($(MACH)_CCFLAGS)
    481 CCFLAGS64=	$(CCOPTFLAG64) $($(MACH64)_CCFLAGS)
    482 #
    483 # 
    484 LDLIBS.cmd = 	$(ENVLDLIBS1)  $(ENVLDLIBS2)  $(ENVLDLIBS3)
    485 LDFLAGS.cmd =	-L$(ROOTSFWLIB) -R/usr/sfw/lib
    486 LDFLAGS.cmd +=  $(STRIPFLAG) $(ENVLDFLAGS1) $(ENVLDFLAGS2) $(ENVLDFLAGS3)
    487 LDFLAGS.lib =	-L$(ROOTSFWLIB) -R/usr/sfw/lib
    488 LDLIBS.lib =	$(ENVLDLIBS1)  $(ENVLDLIBS2)  $(ENVLDLIBS3)
    489 #
    490 # Define compilation macros.
    491 #
    492 COMPILE.c=	$(CC) $(CFLAGS) $(CPPFLAGS) -c
    493 COMPILE64.c=	$(CC64) $(CFLAGS64) $(CPPFLAGS) -c
    494 COMPILE.cc=	$(CCC) $(CCFLAGS) $(CPPFLAGS) -c
    495 COMPILE64.cc=	$(CCC64) $(CCFLAGS64) $(CPPFLAGS) -c
    496 COMPILE.s=	$(AS) $(ASFLAGS) $(AS_CPPFLAGS)
    497 
    498 CLASSPATH=	.:$(WEBSTART_HOME)/classes
    499 COMPILE.java=	$(JAVAC) $(JAVAFLAGS) -classpath $(CLASSPATH)
    500 
    501 #
    502 # Link time macros
    503 #
    504 CCNEEDED	= -lC -lc
    505 COMPILE64.s=	$(AS) $(ASFLAGS) $($(MACH64)_XARCH) $(AS_CPPFLAGS)
    506 LINK.c=		$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS)
    507 LINK64.c=	$(CC64) $(CFLAGS64) $(CPPFLAGS) $(LDFLAGS)
    508 LINK.cc=	$(CCC) $(CCFLAGS) $(CPPFLAGS) -norunpath -nolib $(LDFLAGS) $(CCNEEDED)
    509 LINK64.cc=	$(CCC64) $(CCFLAGS64) $(CPPFLAGS) -norunpath -nolib $(LDFLAGS) $(CCNEEDED)
    510 LINT.c=		$(LINT) $(LINTFLAGS) $(CPPFLAGS)
    511 LINT64.c=	$(LINT) $(LINTFLAGS64) $(CPPFLAGS)
    512 
    513 # For some future builds, NATIVE_MACH and MACH might be different.
    514 # Therefore, NATIVE_MACH needs to be redefined in the
    515 # environment as `uname -p` to override this macro.
    516 #
    517 # For now at least, we cross-compile amd64 on i386 machines.
    518 NATIVE_MACH=    $(MACH:amd64=i386)
    519 
    520 # Define native compilation macros
    521 #
    522 
    523 # Base directory where compilers are loaded.
    524 # Defined here so it can be overridden by developer.
    525 #
    526 SPRO_ROOT=		$(BUILD_TOOLS)/SUNWspro
    527 SPRO_VROOT=		$(SPRO_ROOT)/SS11
    528 
    529 # All sub-Makefiles should pass a specific path when building
    530 # (such as with configure/make/perl) to ensure that the right
    531 # compiler above is found rather than one in the build path
    532 # (which might be older/newer depending on what the build machine
    533 # has in /opt/SUNWspro or /opt/teamware). This is the default
    534 # which can be overridden.
    535 #
    536 SFW_PATH="$(SPRO_VROOT)/bin:$(PATH)"
    537 
    538 # Specify platform compiler versions for languages
    539 # that we use (currently only c and c++).
    540 #
    541 sparc_CC=		$(SPRO_VROOT)/bin/cc
    542 sparc_CCC=		$(SPRO_VROOT)/bin/CC
    543 sparc_AS=		/usr/ccs/bin/as
    544 sparc_LD=		/usr/ccs/bin/ld
    545 
    546 sparcv9_CC=		$(SPRO_VROOT)/bin/cc
    547 sparcv9_CCC=		$(SPRO_VROOT)/bin/CC
    548 sparcv9_AS=		/usr/ccs/bin/as
    549 sparcv9_LD=		/usr/ccs/bin/ld
    550 
    551 i386_CC=		$(SPRO_VROOT)/bin/cc
    552 i386_CCC=		$(SPRO_VROOT)/bin/CC
    553 i386_AS=		/usr/ccs/bin/as
    554 i386_LD=		/usr/ccs/bin/ld
    555 
    556 amd64_CC=		$(SPRO_VROOT)/bin/cc
    557 amd64_CCC=		$(SPRO_VROOT)/bin/CC
    558 amd64_AS=		$(SPRO_VROOT)/bin/as
    559 amd64_LD=		/usr/ccs/bin/ld
    560 
    561 NATIVECC=		$($(NATIVE_MACH)_CC)
    562 NATIVECCC=		$($(NATIVE_MACH)_CCC)
    563 NATIVEAS=		$($(NATIVE_MACH)_AS)
    564 NATIVELD=		$($(NATIVE_MACH)_LD)
    565 
    566 CC=			$(NATIVECC)
    567 CCC=			$(NATIVECCC)
    568 AS=			$(NATIVEAS)
    569 LD=			$(NATIVELD)
    570 
    571 GCC=			/usr/sfw/bin/gcc
    572 GXX=			/usr/sfw/bin/g++
    573 
    574 CC64=			$($(MACH64)_CC)
    575 CCC64=			$($(MACH64)_CCC)
    576 AS64=			$($(MACH64)_AS)
    577 LD64=			$($(MACH64)_LD)
    578 
    579 #
    580 # Use the same lint as the cc compiler
    581 #
    582 sparc_LINT=		$(SPRO_VROOT)/bin/lint
    583 i386_LINT=		$(SPRO_VROOT)/bin/lint
    584 LINT=			$($(MACH)_LINT)
    585 
    586 # Rules (normally from make.rules) and macros which are used for post
    587 # processing files. Normally, these do stripping of the comment section
    588 # automatically.
    589 #    RELEASE_CM:	Should be editted to reflect the release.
    590 #    POST_PROCESS_O:	Post-processing for `.o' files.
    591 #    POST_PROCESS_A:	Post-processing for `.a' files (currently null).
    592 #    POST_PROCESS_SO:	Post-processing for `.so' files.
    593 #    POST_PROCESS:	Post-processing for executable files (no suffix).
    594 # Note that these macros are not completely generalized as they are to be
    595 # used with the file name to be processed following.
    596 #
    597 # It is left as an exercise to Release Engineering to embellish the generation
    598 # of the release comment string.
    599 #
    600 #	If this is a standard development build:
    601 #		compress the comment section (mcs -c)
    602 #		add the standard comment (mcs -a $(RELEASE_CM))
    603 #		add the development specific comment (mcs -a $(DEV_CM))
    604 #
    605 #	If this is an installation build:
    606 #		delete the comment section (mcs -d)
    607 #		add the standard comment (mcs -a $(RELEASE_CM))
    608 #		add the development specific comment (mcs -a $(DEV_CM))
    609 #
    610 #	If this is an release build:
    611 #		delete the comment section (mcs -d)
    612 #		add the standard comment (mcs -a $(RELEASE_CM))
    613 #
    614 #	Sigh,... The declaration POUND_SIGN is always '#'. This is just needed
    615 #	to get around the make **bug** that '#' is always a comment delimiter,
    616 #	even when escaped or quoted.
    617 #
    618 # The following list of macros are used in the definition of RELEASE_CM
    619 # which is used to label all binaries in the build:
    620 #
    621 # 	SFWRELEASE	Specific release of the build, eg: 5.2
    622 #	SFWVERSION	Version of the build (alpha, beta, Generic)
    623 #	PATCHID		If this is a patch this value should contain
    624 #			the patchid value (eg: "Generic 100832-01"), otherwise
    625 #			it will be set to $(SFWVERSION)
    626 #	RELEASE_DATE	Date of the Release Build
    627 #	PATCH_DATE	Date the patch was created, if this is blank it
    628 #			will default to the RELEASE_DATE
    629 #
    630 POUND_SIGN:sh=	echo \\043
    631 SFWVERS=	"11.11.0"
    632 SFWRELEASE=	5.11
    633 SFWVERSION=	SunOS Development
    634 PATCHID=	$(SFWVERSION)
    635 RELEASE_DATE=	October 2007
    636 PATCH_DATE=	$(RELEASE_DATE)
    637 RELEASE_CM=	"@($(POUND_SIGN))SunOS $(SFWRELEASE) $(PATCHID) $(PATCH_DATE)"
    638 DEV_CM=		"@($(POUND_SIGN))SunOS Internal Development: `$(ECHO) $$LOGNAME` `date +%D` `$(ECHO) [\`basename $$CODEMGR_WS\`]`"
    639 
    640 PROCESS_COMMENT=		   @?${MCS} -c -a $(RELEASE_CM) -a $(DEV_CM)
    641 $(STRIP_COMMENTS)PROCESS_COMMENT=  @?${MCS} -d -a $(RELEASE_CM) -a $(DEV_CM)
    642 $(RELEASE_BUILD)PROCESS_COMMENT=   @?${MCS} -d -a $(RELEASE_CM)
    643 
    644 POST_PROCESS_O=		$(PROCESS_COMMENT) $@
    645 POST_PROCESS_A=
    646 POST_PROCESS_SO=	$(PROCESS_COMMENT) $@
    647 POST_PROCESS=		$(PROCESS_COMMENT) $@
    648 
    649 #	Default build rules which perform comment section post-processing.
    650 #
    651 .c:
    652 	$(LINK.c) -o $@ $< $(LDLIBS)
    653 	$(POST_PROCESS)
    654 .c.o:
    655 	$(COMPILE.c) $(OUTPUT_OPTION) $<
    656 	$(POST_PROCESS_O)
    657 .c.a:
    658 	$(COMPILE.c) -o $% $<
    659 	$(PROCESS_COMMENT) $%
    660 	$(AR) $(ARFLAGS) $@ $%
    661 	$(RM) $%
    662 .s.o:
    663 	$(COMPILE.s) -o $@ $<
    664 	$(POST_PROCESS_O)
    665 .s.a:
    666 	$(COMPILE.s) -o $% $<
    667 	$(PROCESS_COMMENT) $%
    668 	$(AR) $(ARFLAGS) $@ $%
    669 	$(RM) $%
    670 .cc:
    671 	$(LINK.cc) -o $@ $< $(LDLIBS)
    672 	$(POST_PROCESS)
    673 .cc.o:
    674 	$(COMPILE.cc) $(OUTPUT_OPTION) $<
    675 	$(POST_PROCESS_O)
    676 .cc.a:
    677 	$(COMPILE.cc) -o $% $<
    678 	$(AR) $(ARFLAGS) $@ $%
    679 	$(PROCESS_COMMENT) $%
    680 	$(RM) $%
    681 .y:
    682 	$(YACC.y) $<
    683 	$(LINK.c) -o $@ y.tab.c $(LDLIBS)
    684 	$(POST_PROCESS)
    685 	$(RM) y.tab.c
    686 .y.o:
    687 	$(YACC.y) $<
    688 	$(COMPILE.c) -o $@ y.tab.c
    689 	$(POST_PROCESS_O)
    690 	$(RM) y.tab.c
    691 .l:
    692 	$(RM) $*.c
    693 	$(LEX.l) $< > $*.c
    694 	$(LINK.c) -o $@ $*.c -ll $(LDLIBS)
    695 	$(POST_PROCESS)
    696 	$(RM) $*.c
    697 .l.o:
    698 	$(RM) $*.c
    699 	$(LEX.l) $< > $*.c
    700 	$(COMPILE.c) -o $@ $*.c
    701 	$(POST_PROCESS_O)
    702 	$(RM) $*.c
    703 
    704 .java.class:
    705 	$(COMPILE.java) $<
    706 
    707 #
    708 # Rules to create message catalogue files from
    709 #	.c, .y and .l files
    710 #
    711 .c.po:
    712 	$(COMPILE.cpp) $<  > $<.i
    713 	$(BUILD.po)
    714 
    715 .y.po:
    716 	yacc -d $<
    717 	$(COMPILE.cpp) y.tab.c  > $<.i
    718 	$(BUILD.po)
    719 	$(RM) y.tab.c 
    720 
    721 .l.po:
    722 	lex $<
    723 	$(COMPILE.cpp) lex.yy.c  > $<.i
    724 	$(BUILD.po)
    725 	$(RM) lex.yy.c
    726 
    727 #
    728 # Rules to perform stylistic checks
    729 #
    730 .SUFFIXES: $(SUFFIXES) .x
    731 
    732 $(ROOTBIN)/%: %
    733 	$(INS.file)
    734 
    735 $(ROOTLIB)/%: %
    736 	$(INS.file)
    737 
    738 $(ROOTBIN64)/%: %
    739 	$(INS.file)
    740 
    741 $(ROOTLIB64)/%: %
    742 	$(INS.file)
    743 
    744 $(ROOTBIN32)/%: %
    745 	$(INS.file)
    746 
    747 $(ROOTSBIN)/%: %
    748 	$(INS.file)
    749 
    750 $(ROOTUSRSBIN)/%: %
    751 	$(INS.file)
    752 
    753 $(ROOTUSRSBIN32)/%: %
    754 	$(INS.file)
    755 
    756 $(ROOTUSRSBIN64)/%: %
    757 	$(INS.file)
    758 
    759 $(ROOTETC)/%: %
    760 	$(INS.file)
    761 
    762 $(ROOTSFWBIN)/%: %
    763 	$(INS.file)
    764 
    765 $(ROOTSFWSBIN)/%: %
    766 	$(INS.file)
    767 
    768 $(ROOTSFWINFO)/%: %
    769 	$(INS.file)
    770 
    771 $(ROOTSFWLIB)/%: %
    772 	$(INS.file)
    773 
    774 $(ROOTLIBEXEC)/%: %
    775 	$(INS.file)
    776 
    777 $(ROOTSFWMAN1)/%: %
    778 	$(INS.file)
    779 
    780 $(ROOTSFWMAN1M)/%: %
    781 	$(INS.file)
    782 
    783 $(ROOTSFWMANN)/%: %
    784 	$(INS.file)
    785 
    786 $(ROOTSFWMAN3)/%: %
    787 	$(INS.file)
    788 
    789 $(ROOTSFWMAN4)/%: %
    790 	$(INS.file)
    791 
    792 $(ROOTSFWMAN5)/%: %
    793 	$(INS.file)
    794 
    795 $(ROOTSFWMAN7)/%: %
    796 	$(INS.file)
    797 
    798 $(ROOTSFWSHARE)/%: %
    799 	$(INS.file)
    800 
    801 %:	%.ksh
    802 	$(RM) $@
    803 	cat $< >$@
    804 	chmod a+x $@
    805 
    806 %:	%.ksh93
    807 	$(RM) $@
    808 	cat $< >$@
    809 	chmod a+x $@
    810 
    811 %:	%.pl
    812 	$(RM) $@
    813 	cat $< >$@
    814 	chmod a+x $@
    815 
    816 %:	%.sh
    817 	$(RM) $@
    818 	cat $< >$@
    819 	chmod a+x $@
    820