make-rules/shared-macros.mk
changeset 5125 34cc580c62c2
parent 5066 7e7b4d607ab6
child 5174 85d6cad6ebf8
--- a/make-rules/shared-macros.mk	Mon Nov 16 06:14:40 2015 -0800
+++ b/make-rules/shared-macros.mk	Mon Nov 23 15:33:43 2015 -0800
@@ -86,6 +86,12 @@
 PUBLISHER ?=	nightly
 PUBLISHER_LOCALIZABLE ?=	$(CONSOLIDATION)-localizable
 
+# Defines $(space) as a single blank space, so we can use it to convert
+# space-separated paths to colon-separated paths in variables with
+# $(subst $(space),:,$(strip $(SPATHS)))
+empty :=
+space := $(empty) $(empty)
+
 ROOT =			/
 
 # The changset and external source repo used in building the packages.
@@ -112,7 +118,13 @@
 include $(WS_MAKE_RULES)/ips-buildinfo.mk
 
 COMPILER ?=		studio
-BITS =			32
+BITS ?=			32
+
+# The values of BITS changes during the build process for components that
+# are built 32-bit and 64-bit.  This macro makes it possible to determine
+# which components are only built 64-bit and allow other make-rules files
+# to adjust accordingly.
+INITIAL_BITS=		$(BITS)
 
 # The default version should go last.
 PYTHON_VERSION =	2.7
@@ -140,6 +152,7 @@
 BINDIR =	/bin
 SBINDIR =	/sbin
 LIBDIR =	/lib
+VARDIR =	/var
 USRBINDIR =	$(USRDIR)/bin
 USRBINDIR64 =	$(USRDIR)/bin/$(MACH64)
 USRSBINDIR =	$(USRDIR)/sbin
@@ -149,6 +162,8 @@
 USRSHARELOCALEDIR =	$(USRSHAREDIR)/locale
 USRSHAREMANDIR =	$(USRSHAREDIR)/man
 USRSHAREDOCDIR =	$(USRSHAREDIR)/doc
+USRSHAREFONTSDIR =	$(USRSHAREDIR)/fonts
+USRSHARETTFONTSDIR =	$(USRSHAREFONTSDIR)/TrueType
 USRSHARELIBDIR =	$(USRSHAREDIR)/lib
 USRSHAREMAN1DIR =	$(USRSHAREMANDIR)/man1
 USRSHAREMAN1MDIR =	$(USRSHAREMANDIR)/man1m
@@ -161,16 +176,21 @@
 PROTOETCSECDIR = $(PROTO_DIR)/$(ETCDIR)/security
 PROTOUSRDIR =	$(PROTO_DIR)/$(USRDIR)
 PROTOLIBDIR =	$(PROTO_DIR)/$(LIBDIR)
+PROTOSVCMANIFESTDIR =	$(PROTOLIBDIR)/svc/manifest
+PROTOSVCMETHODDIR =	$(PROTOLIBDIR)/svc/method
 PROTOUSRBINDIR =	$(PROTO_DIR)/$(USRBINDIR)
 PROTOUSRBINDIR64 =	$(PROTO_DIR)/$(USRBINDIR64)
 PROTOUSRSBINDIR =	$(PROTO_DIR)/$(USRSBINDIR)
 PROTOUSRLIBDIR =	$(PROTO_DIR)/$(USRLIBDIR)
 PROTOUSRLIBDIR64 =	$(PROTO_DIR)/$(USRLIBDIR64)
+PROTOPKGCONFIGDIR = 	$(PROTOUSRLIBDIR)/pkgconfig
+PROTOPKGCONFIGDIR64 =	$(PROTOUSRLIBDIR64)/pkgconfig
 PROTOUSRINCDIR =	$(PROTO_DIR)/$(USRINCDIR)
 PROTOUSRSHAREDIR =	$(PROTO_DIR)/$(USRSHAREDIR)
 PROTOUSRSHARELIBDIR =	$(PROTO_DIR)/$(USRSHARELIBDIR)
+PROTOUSRSHAREDOCDIR =	$(PROTO_DIR)/$(USRSHAREDOCDIR)
+PROTOUSRSHAREINFODIR =	$(PROTOUSRSHAREDIR)/info
 PROTOUSRSHAREMANDIR =	$(PROTO_DIR)/$(USRSHAREMANDIR)
-PROTOUSRSHAREDOCDIR =	$(PROTO_DIR)/$(USRSHAREDOCDIR)
 PROTOUSRSHAREMAN1DIR =	$(PROTO_DIR)/$(USRSHAREMAN1DIR)
 PROTOUSRSHAREMAN1MDIR =	$(PROTO_DIR)/$(USRSHAREMAN1MDIR)
 PROTOUSRSHAREMAN3DIR =	$(PROTO_DIR)/$(USRSHAREMAN3DIR)
@@ -501,6 +521,10 @@
 USRBIN.64 =	/usr/bin/$(MACH64)
 USRBIN =	$(USRBIN.$(BITS))
 
+USRLIB.32 =	$(USRLIBDIR)
+USRLIB.64 =	$(USRLIBDIR64)
+USRLIB =	$(USRLIB.$(BITS))
+
 PYTHON.2.7.32 =	$(USRBIN.32)/python2.7
 PYTHON.2.7.64 =	$(USRBIN.64)/python2.7
 PYTHON.2.7 =	$(USRBIN)/python2.7
@@ -607,10 +631,15 @@
 INS.dir=        $(INSTALL) -d $@
 INS.file=       $(INSTALL) -m 444 $< $(@D)
 
+#
+# To simplify adding directories to PKG_CONFIG_PATH, since += adds spaces, not :
+# use PKG_CONFIG_PATHS += ... and the following will convert to the : form
+#
 PKG_CONFIG_PATH.32 = /usr/lib/pkgconfig
 PKG_CONFIG_PATH.64 = /usr/lib/$(MACH64)/pkgconfig
-PKG_CONFIG_PATH = $(PKG_CONFIG_PATH.$(BITS))
-
+PKG_CONFIG_DEFAULT = $(PKG_CONFIG_PATH.$(BITS))
+PKG_CONFIG_PATH    = $(subst $(space),:,$(strip \
+			$(PKG_CONFIG_PATHS) $(PKG_CONFIG_DEFAULT)))
 
 #
 # C preprocessor flag sets to ease feature selection.  Add the required
@@ -668,13 +697,13 @@
 
 # Turn on recognition of supported C99 language features and enable the 1999 C
 # standard library semantics of routines that appear in	both the 1990 and
-# 1999 C standard. To use set studio_C99MODE=$(studio_99_ENABLE) in your
+# 1999 C standard. To use set studio_C99MODE=$(studio_C99_ENABLE) in your
 # component Makefile.
 studio_C99_ENABLE =		-xc99=all
 
 # Turn off recognition of C99 language features, and do not enable the 1999 C
 # standard library semantics of routines that appeared in both the 1990	and
-# 1999 C standard.  To use set studio_C99MODE=$(studio_99_DISABLE) in your
+# 1999 C standard.  To use set studio_C99MODE=$(studio_C99_DISABLE) in your
 # component Makefile.
 studio_C99_DISABLE =	-xc99=none
 
@@ -696,11 +725,11 @@
 studio_FEATURES_EXTENSIONS =	-features=extensions
 
 # Control the Studio optimization level.
-studio_OPT.sparc.32 =	-xO4
-studio_OPT.sparc.64 =	-xO4
-studio_OPT.i386.32 =	-xO4
-studio_OPT.i386.64 =	-xO4
-studio_OPT =		$(studio_OPT.$(MACH).$(BITS))
+studio_OPT.sparc.32 ?=	-xO4
+studio_OPT.sparc.64 ?=	-xO4
+studio_OPT.i386.32 ?=	-xO4
+studio_OPT.i386.64 ?=	-xO4
+studio_OPT ?=		$(studio_OPT.$(MACH).$(BITS))
 
 # Studio PIC code generation.  Use CC_PIC instead to select PIC code generation.
 studio_PIC = 	-KPIC -DPIC
@@ -758,6 +787,14 @@
 			$(studio_IROPTS) $(studio_C99MODE) $(studio_ALIGN) \
 			$(studio_MT)
 
+# Default Studio C++ compiler flags.  Add the required feature to your Makefile
+# with CXXFLAGS += $(FEATURE_MACRO) and add to the component build with
+# CONFIGURE_OPTIONS += CXXFLAGS="$(CXXFLAGS)" or similiar.  In most cases, it
+# should not be necessary to add CXXFLAGS to any environment other than the
+# configure environment.
+CXXFLAGS.studio +=	$(studio_OPT) $(studio_XBITS) $(studio_XREGS) \
+			$(studio_IROPTS) $(studio_ALIGN)
+
 #
 # GNU C compiler flag sets to ease feature selection.  Add the required
 # feature to your Makefile with CFLAGS += $(FEATURE_MACRO) and add to the
@@ -765,13 +802,17 @@
 #
 
 # GCC Compiler optimization flag
-gcc_OPT =	-O3
+gcc_OPT.sparc.32 ?=	-O3
+gcc_OPT.sparc.64 ?=	-O3
+gcc_OPT.i386.32 ?=	-O3
+gcc_OPT.i386.64 ?=	-O3
+gcc_OPT ?=		$(gcc_OPT.$(MACH).$(BITS))
 
 # GCC PIC code generation.  Use CC_PIC instead to select PIC code generation.
 gcc_PIC =	-fPIC -DPIC
 
 # Generic macro for PIC code generation.  Use this macro instead of the
-# compiler specific variant.
+# compiler-specific variant.
 CC_PIC =	$($(COMPILER)_PIC)
 
 
@@ -785,13 +826,22 @@
 CFLAGS.gcc3 +=	$(gcc_OPT)
 CFLAGS.gcc3 +=	$(gcc_XREGS)
 
+# Default GNU C++ compiler flags.  Add the required feature to your Makefile
+# with CXXFLAGS += $(FEATURE_MACRO) and add to the component build with
+# CONFIGURE_OPTIONS += CXXFLAGS="$(CXXFLAGS)" or similiar.  In most cases, it
+# should not be necessary to add CXXFLAGS to any environment other than the
+# configure environment.
+CXXFLAGS.gcc +=		$(gcc_OPT)
+CXXFLAGS.gcc +=		$(gcc_XREGS)
+CXXFLAGS.gcc3 +=	$(gcc_OPT)
+CXXFLAGS.gcc3 +=	$(gcc_XREGS)
 
 # Build 32 or 64 bit objects.
 CFLAGS +=	$(CC_BITS)
 
-# Add compiler specific 'default' features
+# Add compiler-specific 'default' features
 CFLAGS +=	$(CFLAGS.$(COMPILER))
-
+CFLAGS +=	$(CFLAGS.$(COMPILER).$(BITS))
 
 # Studio C++ requires -norunpath to avoid adding its location into the RUNPATH
 # to C++ applications.
@@ -822,6 +872,10 @@
 # Build 32 or 64 bit objects in C++ as well.
 CXXFLAGS +=	$(CC_BITS)
 
+# Add compiler-specific 'default' features
+CXXFLAGS +=	$(CXXFLAGS.$(COMPILER))
+CXXFLAGS +=	$(CXXFLAGS.$(COMPILER).$(BITS))
+
 #
 # Solaris linker flag sets to ease feature selection.  Add the required
 # feature to your Makefile with LDFLAGS += $(FEATURE_MACRO) and add to the