open-src/common/Makefile.inc
changeset 606 068c11b419c9
parent 599 c195ef96916e
child 705 24ca414edbff
equal deleted inserted replaced
605:e5259db5befc 606:068c11b419c9
     1 # -*- Makefile -*- rules commonly shared among X consolidation open source dirs
     1 # -*- Makefile -*- rules commonly shared among X consolidation open source dirs
     2 #
     2 #
     3 # Copyright 2008 Sun Microsystems, Inc.  All Rights Reserved.
     3 # Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
     4 # Use subject to license terms.
     4 # Use subject to license terms.
     5 #
     5 #
     6 # Permission is hereby granted, free of charge, to any person obtaining a
     6 # Permission is hereby granted, free of charge, to any person obtaining a
     7 # copy of this software and associated documentation files (the
     7 # copy of this software and associated documentation files (the
     8 # "Software"), to deal in the Software without restriction, including
     8 # "Software"), to deal in the Software without restriction, including
    26 # Except as contained in this notice, the name of a copyright holder
    26 # Except as contained in this notice, the name of a copyright holder
    27 # shall not be used in advertising or otherwise to promote the sale, use
    27 # shall not be used in advertising or otherwise to promote the sale, use
    28 # or other dealings in this Software without prior written authorization
    28 # or other dealings in this Software without prior written authorization
    29 # of the copyright holder.
    29 # of the copyright holder.
    30 #
    30 #
    31 # @(#)Makefile.inc	1.97	08/12/19
    31 # @(#)Makefile.inc	1.98	09/01/14
    32 #
    32 #
    33 
    33 
    34 ### Default rules
    34 ### Default rules
    35 
    35 
    36 # Which compiler to use to build module
    36 # Which compiler to use to build module
    54 # Directory created by unpacking source, if not set in module makefile
    54 # Directory created by unpacking source, if not set in module makefile
    55 SOURCE_DIRNAME_DEFAULT		= $(SOURCE_DIRNAME_SET:yes=$(POUND_SIGN))
    55 SOURCE_DIRNAME_DEFAULT		= $(SOURCE_DIRNAME_SET:yes=$(POUND_SIGN))
    56 $(SOURCE_DIRNAME_DEFAULT)	SOURCE_DIRNAME=$(MODULE_NAME)-$(MODULE_VERSION)
    56 $(SOURCE_DIRNAME_DEFAULT)	SOURCE_DIRNAME=$(MODULE_NAME)-$(MODULE_VERSION)
    57 
    57 
    58 SOURCE_DIR = $(BUILD_DIR)/$(SOURCE_DIRNAME)
    58 SOURCE_DIR = $(BUILD_DIR)/$(SOURCE_DIRNAME)
       
    59 SOURCE_DIR_32 = $(BUILD_DIR_32)/$(SOURCE_DIRNAME)
       
    60 SOURCE_DIR_64 = $(BUILD_DIR_64)/$(SOURCE_DIRNAME)
    59 
    61 
    60 # Set default tarball if not set in module makefile
    62 # Set default tarball if not set in module makefile
    61 SOURCE_TARBALL_NAME_DEFAULT	= $(SOURCE_TARBALL_NAME_SET:yes=$(POUND_SIGN))
    63 SOURCE_TARBALL_NAME_DEFAULT	= $(SOURCE_TARBALL_NAME_SET:yes=$(POUND_SIGN))
    62 $(SOURCE_TARBALL_NAME_DEFAULT)	SOURCE_TARBALL_NAME=$(SOURCE_DIRNAME).tar.bz2
    64 $(SOURCE_TARBALL_NAME_DEFAULT)	SOURCE_TARBALL_NAME=$(SOURCE_DIRNAME).tar.bz2
    63 
    65 
   124 
   126 
   125 source: $(BUILD_TYPES:%=source_%)
   127 source: $(BUILD_TYPES:%=source_%)
   126 
   128 
   127 source_gen:: $(SOURCE_TARGETS)
   129 source_gen:: $(SOURCE_TARGETS)
   128 
   130 
   129 source_32: $(BUILD_DIR_32)/.unpack_done
   131 source_32: $(SOURCE_DIR_32)/$(UNPACK_FILE)
   130 $(BUILD_DIR_32)/.unpack_done:
   132 $(SOURCE_DIR_32)/$(UNPACK_FILE):
   131 	$(MAKE) $(MAKEFLAGS) BUILD_DIR=$(BUILD_DIR_32) source_gen
   133 	$(MAKE) $(MAKEFLAGS) BUILD_DIR=$(BUILD_DIR_32) source_gen
   132 
   134 
   133 source_64: $(BUILD_DIR_64)/.unpack_done
   135 source_64: $(SOURCE_DIR_64)/$(UNPACK_FILE)
   134 $(BUILD_DIR_64)/.unpack_done:
   136 $(SOURCE_DIR_64)/$(UNPACK_FILE):
   135 	$(MAKE) $(MAKEFLAGS) BUILD_DIR=$(BUILD_DIR_64) source_gen
   137 	$(MAKE) $(MAKEFLAGS) BUILD_DIR=$(BUILD_DIR_64) source_gen
   136 
   138 
   137 configure: $(BUILD_TYPES:%=configure_%)
   139 configure: $(BUILD_TYPES:%=configure_%)
   138 
   140 
   139 configure_gen: $(CONFIGURE_TARGETS)
   141 configure_gen: $(CONFIGURE_TARGETS)
   154 build_64::
   156 build_64::
   155 	$(MAKE) $(MAKEFLAGS) LIBSUBDIR=/$(SUBDIR64) ARCHLIBSUBDIR=/$(SUBDIR64) $(BUILD_64_FLAGS) build_gen
   157 	$(MAKE) $(MAKEFLAGS) LIBSUBDIR=/$(SUBDIR64) ARCHLIBSUBDIR=/$(SUBDIR64) $(BUILD_64_FLAGS) build_gen
   156 
   158 
   157 install: $(BUILD_TYPES:%=install_%)
   159 install: $(BUILD_TYPES:%=install_%)
   158 
   160 
   159 install_gen:: $(INSTALL_TARGETS) install_license
   161 install_gen:: $(INSTALL_TARGETS) install_license install_pkgconfig_uninstalled
   160 
   162 
   161 install_32:: build_32
   163 install_32:: build_32
   162 	$(MAKE) $(MAKEFLAGS) $(BUILD_32_FLAGS) install_gen
   164 	$(MAKE) $(MAKEFLAGS) $(BUILD_32_FLAGS) install_gen
   163 
   165 
   164 install_64:: build_64
   166 install_64:: build_64
   233 FIX_PC_OPS= \
   235 FIX_PC_OPS= \
   234 	-e 's|-L\$${libdir}|-L\$${libdir} -R\$${libdir}|;' \
   236 	-e 's|-L\$${libdir}|-L\$${libdir} -R\$${libdir}|;' \
   235 	-e 's|Requires.private: .*$$||;'
   237 	-e 's|Requires.private: .*$$||;'
   236 
   238 
   237 #	-e 's|(Requires: .*)\bx11\b|$$1|;' \
   239 #	-e 's|(Requires: .*)\bx11\b|$$1|;' \
   238 #	-e 's|^prefix=@prefix@|prefix=\$$\{top_builddir\}@prefix@|'
       
   239 
   240 
   240 SUNTOUCH_MAN_FLAGS = \
   241 SUNTOUCH_MAN_FLAGS = \
   241 	-a '{Availability, $(SUN_PACKAGE)}' \
   242 	-a '{Availability, $(SUN_PACKAGE)}' \
   242 	-a '{Interface Stability, $(MODULE_STABILITY)}' \
   243 	-a '{Interface Stability, $(MODULE_STABILITY)}' \
   243 	$(MODTYPE_SUNTOUCH_MAN_FLAGS) \
   244 	$(MODTYPE_SUNTOUCH_MAN_FLAGS) \
   260 	fi ; \
   261 	fi ; \
   261 	if [[ "$(ADDITIONAL_SOURCE_DIR)" != "" ]] ; then \
   262 	if [[ "$(ADDITIONAL_SOURCE_DIR)" != "" ]] ; then \
   262 	  if [[ ! -x $(LNDIR) ]] ; then \
   263 	  if [[ ! -x $(LNDIR) ]] ; then \
   263 	    (cd $(TOP)/util/lndir && $(MAKE) $(MAKEFLAGS) install) ; \
   264 	    (cd $(TOP)/util/lndir && $(MAKE) $(MAKEFLAGS) install) ; \
   264 	  fi ; \
   265 	  fi ; \
   265 	  print "cd $(SOURCE_DIR) && $(LNDIR) ../../$(ADDITIONAL_SOURCE_DIR)" ; \
   266 	  (PS4="" ; set -x ; \
   266 	  (cd $(SOURCE_DIR) && $(LNDIR) ../../$(ADDITIONAL_SOURCE_DIR) ) ; \
   267 	   cd $(SOURCE_DIR) && $(LNDIR) ../../$(ADDITIONAL_SOURCE_DIR) ) ; \
   267 	fi ; \
   268 	fi ; \
   268 	if [[ "$(SOURCE_PATCHES)" != "" ]] ; then \
   269 	if [[ "$(SOURCE_PATCHES)" != "" ]] ; then \
   269 	    for p in $(SOURCE_PATCHES) x ; do \
   270 	    for p in $(SOURCE_PATCHES) x ; do \
   270 	        if [[ "$$p" != "x" ]] ; then \
   271 	        if [[ "$$p" != "x" ]] ; then \
   271 		    PATCH_CMD="$$(print $$p | awk -F, '{if (NF > 1) FLAGS = $$2; else FLAGS="-p0" ; printf "gpatch -d $(SOURCE_DIR) %s < %s\n", FLAGS, $$1}')" ; \
   272 		    PATCH_CMD="$$(print $$p | awk -F, '{if (NF > 1) FLAGS = $$2; else FLAGS="-p0" ; printf "gpatch -d $(SOURCE_DIR) %s < %s\n", FLAGS, $$1}')" ; \
   273 		    eval $${PATCH_CMD} ; \
   274 		    eval $${PATCH_CMD} ; \
   274 		fi ; \
   275 		fi ; \
   275 	    done ; \
   276 	    done ; \
   276 	fi ; \
   277 	fi ; \
   277 	if [[ "$(SUNTOUCHED_MANPAGES)" != "" ]] ; then \
   278 	if [[ "$(SUNTOUCHED_MANPAGES)" != "" ]] ; then \
   278 	    print "/usr/perl5/bin/perl $(TOP)/common/suntouch-manpages.pl \
   279 	    (PS4="" ; set -x ; \
   279 		$(SUNTOUCH_MAN_FLAGS) $(SUNTOUCHED_MANPAGES)" ; \
   280 		cd $(SOURCE_DIR) && \
   280 	    (cd $(SOURCE_DIR) && \
       
   281 		/usr/perl5/bin/perl $(TOP)/common/suntouch-manpages.pl \
   281 		/usr/perl5/bin/perl $(TOP)/common/suntouch-manpages.pl \
   282 		$(SUNTOUCH_MAN_FLAGS) $(SUNTOUCHED_MANPAGES) ) ; \
   282 		$(SUNTOUCH_MAN_FLAGS) $(SUNTOUCHED_MANPAGES) ) ; \
   283 	fi ; \
   283 	fi ; \
   284 	if [[ "$(FIX_PC_FILES)" != "" ]] ; then \
   284 	if [[ "$(FIX_PC_FILES)" != "" ]] ; then \
   285 	    print "/usr/perl5/bin/perl -i.orig -p \
   285 	    (PS4="" ; set -x ; \
   286 			$(FIX_PC_OPS) $(FIX_PC_FILES)" ; \
   286 		cd $(SOURCE_DIR) && \
   287 	    (cd $(SOURCE_DIR) && \
       
   288 		/usr/perl5/bin/perl -i.orig -p \
   287 		/usr/perl5/bin/perl -i.orig -p \
   289 			$(FIX_PC_OPS) $(FIX_PC_FILES) ); \
   288 			$(FIX_PC_OPS) $(FIX_PC_FILES) ); \
   290 	fi
   289 	fi
   291 	touch $(BUILD_DIR)/$(UNPACK_FILE)
   290 	touch $(UNPACK_TARGET)
   292 
   291 
   293 ### Run configure scripts
   292 ### Run configure scripts
   294 
   293 
   295 # Include Xorg autoconf macros when rebuilding configure scripts
   294 # Include Xorg autoconf macros when rebuilding configure scripts
   296 # and use automake 1.10 instead of the older 1.9.
   295 # and use automake 1.10 instead of the older 1.9.
   322 	-I$(PROTODIR)/usr/include -I$(PROTODIR)/usr/include/freetype2
   321 	-I$(PROTODIR)/usr/include -I$(PROTODIR)/usr/include/freetype2
   323 $(USE_DEFAULT_CONFIG_LDFLAGS:no=$(POUND_SIGN)) DEFAULT_CONFIG_LDFLAGS= \
   322 $(USE_DEFAULT_CONFIG_LDFLAGS:no=$(POUND_SIGN)) DEFAULT_CONFIG_LDFLAGS= \
   324 	-L$(PROTODIR)/usr/lib$(ARCHLIBSUBDIR) \
   323 	-L$(PROTODIR)/usr/lib$(ARCHLIBSUBDIR) \
   325 	-L$(PROTODIR)$(X11_DIR)/lib$(ARCHLIBSUBDIR)
   324 	-L$(PROTODIR)$(X11_DIR)/lib$(ARCHLIBSUBDIR)
   326 
   325 
   327 DEFAULT_PKG_CONFIG_PATH=$(TOP)/common/pc-files/$(BUILD_DIR):$(PROTODIR)/usr/lib/$(ARCHLIBSUBDIR)/pkgconfig:/usr/lib$(ARCHLIBSUBDIR)/pkgconfig
   326 DEFAULT_PKG_CONFIG_PATH=$(TOP)/common/pc-files/$(BUILD_DIR):$(PROTODIR)$(PKGCONFIG_DIR):$(PKGCONFIG_DIR)
   328 
   327 
   329 # Set USE_DEFAULT_CONFIG_ENV=no in a Makefile to not use this default
   328 # Set USE_DEFAULT_CONFIG_ENV=no in a Makefile to not use this default
   330 # autoconfig environment
   329 # autoconfig environment
   331 $(USE_DEFAULT_CONFIG_ENV:no=$(POUND_SIGN))	DEFAULT_CONFIG_ENV = \
   330 $(USE_DEFAULT_CONFIG_ENV:no=$(POUND_SIGN))	DEFAULT_CONFIG_ENV = \
   332     CC="$(CC)" CXX="$(CXX)" \
   331     CC="$(CC)" CXX="$(CXX)" \
   388 
   387 
   389 LD_OPTIONS = -L$(PROTODIR)$(X11_DIR)/lib$(LIBSUBDIR) \
   388 LD_OPTIONS = -L$(PROTODIR)$(X11_DIR)/lib$(LIBSUBDIR) \
   390 	$(MODTYPE_LD_OPTIONS) $(MODULE_LD_OPTIONS)
   389 	$(MODTYPE_LD_OPTIONS) $(MODULE_LD_OPTIONS)
   391 
   390 
   392 BUILD_ENV = LD_OPTIONS='$(LD_OPTIONS)' \
   391 BUILD_ENV = LD_OPTIONS='$(LD_OPTIONS)' \
       
   392 	PROTODIR='$(PROTODIR)' \
   393 	$(MODTYPE_BUILD_ENV) $(MODULE_BUILD_ENV)
   393 	$(MODTYPE_BUILD_ENV) $(MODULE_BUILD_ENV)
   394 
   394 
   395 DEFAULT_BUILD_MAKEFLAGS=$(MODTYPE_MAKEFLAGS) $(MODULE_MAKEFLAGS) \
   395 DEFAULT_BUILD_MAKEFLAGS=$(MODTYPE_MAKEFLAGS) $(MODULE_MAKEFLAGS) \
   396 	$(MODTYPE_BUILD_MAKEFLAGS) $(MODULE_BUILD_MAKEFLAGS)
   396 	$(MODTYPE_BUILD_MAKEFLAGS) $(MODULE_BUILD_MAKEFLAGS)
   397 
   397 
   408 	(cd $(subdir) ; \
   408 	(cd $(subdir) ; \
   409 	 $(BUILD_ENV) $(MODULE_MAKE) $(MAKEFLAGS) $(DEFAULT_BUILD_MAKEFLAGS) \
   409 	 $(BUILD_ENV) $(MODULE_MAKE) $(MAKEFLAGS) $(DEFAULT_BUILD_MAKEFLAGS) \
   410 	 $(subdir_cmd) )
   410 	 $(subdir_cmd) )
   411 
   411 
   412 DEFAULT_INSTALL_MAKEFLAGS= -e DESTDIR=$(PROTODIR) \
   412 DEFAULT_INSTALL_MAKEFLAGS= -e DESTDIR=$(PROTODIR) \
   413 	pkgconfigdir=/usr/lib$(ARCHLIBSUBDIR)/pkgconfig \
   413 	pkgconfigdir=$(PKGCONFIG_DIR) \
   414 	$(MODTYPE_MAKEFLAGS) $(MODULE_MAKEFLAGS) \
   414 	$(MODTYPE_MAKEFLAGS) $(MODULE_MAKEFLAGS) \
   415 	$(MODTYPE_INSTALL_MAKEFLAGS) $(MODULE_INSTALL_MAKEFLAGS) \
   415 	$(MODTYPE_INSTALL_MAKEFLAGS) $(MODULE_INSTALL_MAKEFLAGS) \
   416 
   416 
   417 # Dependencies for make install step
   417 # Dependencies for make install step
   418 INSTALL_DEPS = $(BUILD_TARGETS) $(MODTYPE_INSTALL_DEPS) $(MODULE_INSTALL_DEPS)
   418 INSTALL_DEPS = $(BUILD_TARGETS) $(MODTYPE_INSTALL_DEPS) $(MODULE_INSTALL_DEPS)
   429 
   429 
   430 install-in-subdir: 
   430 install-in-subdir: 
   431 	(cd $(subdir) ; \
   431 	(cd $(subdir) ; \
   432 	 $(BUILD_ENV) $(MODULE_MAKE) $(MAKEFLAGS) $(DEFAULT_INSTALL_MAKEFLAGS) \
   432 	 $(BUILD_ENV) $(MODULE_MAKE) $(MAKEFLAGS) $(DEFAULT_INSTALL_MAKEFLAGS) \
   433 	 $(subdir_cmd))
   433 	 $(subdir_cmd))
       
   434 
       
   435 # Adjust paths in pkg-config files for -uninstalled variants used during build
       
   436 UNINSTALLED_PC_OPS= \
       
   437 	-e 's|(-[LI]\s*)\$$|$$1$(PROTODIR)\$$|g;' \
       
   438 	-e 's|^sdkdir=|sdkdir=$(PROTODIR)|g;' \
       
   439 	-e 's|$(PROTODIR)\$${sdkdir}|\$${sdkdir}|g;'
       
   440 
       
   441 install_pkgconfig_uninstalled:
       
   442 	@ if [[ ! -z "$(FIX_PC_FILES)" ]] ; then \
       
   443 	    cd $(SOURCE_DIR) ; \
       
   444 	    for pcin in $(FIX_PC_FILES:.in=) ; do \
       
   445 		pc=$${pcin%%+(.pc|.in)} ; \
       
   446 		(PS4="" ; set -x ; \
       
   447 		 /usr/perl5/bin/perl -p $(UNINSTALLED_PC_OPS) $$pc.pc > \
       
   448 		    $(PROTODIR)$(PKGCONFIG_DIR)/$$(basename $${pc})-uninstalled.pc ) ; \
       
   449 	    done ; \
       
   450 	fi
   434 
   451 
   435 # Set comments in ELF binaries to help identify versions/builds
   452 # Set comments in ELF binaries to help identify versions/builds
   436 ELF_COMMENTS = $(MODULE_NAME) $(MODULE_VERSION)
   453 ELF_COMMENTS = $(MODULE_NAME) $(MODULE_VERSION)
   437 ELF_COMMENTS += $(MODTYPE_ELF_COMMENTS)$(MODULE_ELF_COMMENTS)
   454 ELF_COMMENTS += $(MODTYPE_ELF_COMMENTS)$(MODULE_ELF_COMMENTS)
   438 
   455 
   474 # having fuzz or offsets when applying patches - new patches will be in new/
   491 # having fuzz or offsets when applying patches - new patches will be in new/
   475 
   492 
   476 regen-patches: 
   493 regen-patches: 
   477 	CUR_LIST=""
   494 	CUR_LIST=""
   478 	rm -rf tmp-regen
   495 	rm -rf tmp-regen
   479 	make SOURCE_PATCHES="$(CUR_LIST)" BUILD_DIR=tmp-regen source_gen
   496 	make SOURCE_PATCHES="$(CUR_LIST)" BUILD_DIR=tmp-regen SUNTOUCHED_MANPAGES="" source_gen
   480 	mkdir -p new
   497 	mkdir -p new
   481 	for f in $(SOURCE_PATCHES) ; do \
   498 	for f in $(SOURCE_PATCHES) ; do \
   482 	    p=$$(print $$f | sed 's/,.*$$//') ; \
   499 	    p=$$(print $$f | sed 's/,.*$$//') ; \
   483 	    print '=================' $$p ; \
   500 	    print '=================' $$p ; \
   484 	    rm -rf prev ; \
   501 	    rm -rf prev ; \
   485 	    mv tmp-regen prev ; \
   502 	    mv tmp-regen prev ; \
   486 	    $(MAKE) SOURCE_PATCHES="$${CUR_LIST} $$f" BUILD_DIR=tmp-regen source_gen ; \
   503 	    $(MAKE) SOURCE_PATCHES="$${CUR_LIST} $$f" BUILD_DIR=tmp-regen SUNTOUCHED_MANPAGES="" source_gen ; \
   487 	    awk '/^--- /	{exit} \
   504 	    awk '/^--- /	{exit} \
   488 		 /^diff -u/	{exit} \
   505 		 /^diff -u/	{exit} \
   489 			 	{print}' $$p > new/$$p ; \
   506 			 	{print}' $$p > new/$$p ; \
   490 	    gdiff -urp -x '*~' -x '*.orig' ./prev ./tmp-regen \
   507 	    gdiff -urp -x '*~' -x '*.orig' ./prev ./tmp-regen \
   491 		| sed -e 's% \./prev$(SOURCE_DIR)/% %' -e 's% \./tmp-regen$(SOURCE_DIR)/% %' \
   508 		| sed -e 's% \./prev$(SOURCE_DIR)/% %' -e 's% \./tmp-regen$(SOURCE_DIR)/% %' \
   494 		>> new/$$p ; \
   511 		>> new/$$p ; \
   495 	    CUR_LIST="$${CUR_LIST} new/$$p" ; \
   512 	    CUR_LIST="$${CUR_LIST} new/$$p" ; \
   496 	done
   513 	done
   497 	rm -rf tmp-regen
   514 	rm -rf tmp-regen
   498 
   515 
       
   516 # Allows running "make list-patches" to get a list of all patches we 
       
   517 # currently apply in our builds
       
   518 list-patches:
       
   519 	@THIS_MODULE=$$(print $(PWD) | sed 's|.*/open-src/||') ; \
       
   520 	if [[ "$(SOURCE_PATCHES)" != "" ]] ; then \
       
   521 	    for p in $(SOURCE_PATCHES) x ; do \
       
   522 		if [[ "$$p" != "x" ]] ; then \
       
   523 	            print "$${THIS_MODULE}/$$p" | sed 's/,-p[0-9]$$//' ;  \
       
   524 		fi ; \
       
   525 	    done ; \
       
   526 	fi
       
   527 
   499 ### Licensing files
   528 ### Licensing files
   500 
   529 
   501 # Default license file name is COPYING (X.Org & GNU autoconf default)
   530 # Default license file name is COPYING (X.Org & GNU autoconf default)
   502 # For other license file names, set LICENSE_FILE to the file name
   531 # For other license file names, set LICENSE_FILE to the file name
   503 # and set LICENSE_FILE_SET=yes
   532 # and set LICENSE_FILE_SET=yes