Makefile.inc revision 935
486N/A# -*- Makefile -*- rules commonly shared among X consolidation open source dirs 486N/A# Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. 486N/A# Permission is hereby granted, free of charge, to any person obtaining a 486N/A# copy of this software and associated documentation files (the "Software"), 486N/A# to deal in the Software without restriction, including without limitation 486N/A# the rights to use, copy, modify, merge, publish, distribute, sublicense, 486N/A# and/or sell copies of the Software, and to permit persons to whom the 486N/A# Software is furnished to do so, subject to the following conditions: 486N/A# The above copyright notice and this permission notice (including the next 486N/A# paragraph) shall be included in all copies or substantial portions of the 486N/A# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 486N/A# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 486N/A# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 486N/A# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 486N/A# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 486N/A# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 486N/A# DEALINGS IN THE SOFTWARE. 486N/A# Which compiler to use to build module 486N/AMODTYPE_COMPILER_DEFAULT = $(MODTYPE_COMPILER_SET:yes=$(POUND_SIGN)) 486N/A$(MODTYPE_COMPILER_DEFAULT) MODTYPE_COMPILER = $(DEFAULT_COMPILER) 486N/AMODULE_COMPILER_DEFAULT = $(MODULE_COMPILER_SET:yes=$(POUND_SIGN)) 486N/A$(MODULE_COMPILER_DEFAULT) MODULE_COMPILER = $(MODTYPE_COMPILER) 486N/A# Which make to use to build module 486N/AMODTYPE_MAKE_DEFAULT = $(MODTYPE_MAKE_SET:yes=$(POUND_SIGN)) 493N/A$(MODTYPE_MAKE_DEFAULT) MODTYPE_MAKE = $(MAKE) 486N/AMODULE_MAKE_DEFAULT = $(MODULE_MAKE_SET:yes=$(POUND_SIGN)) 486N/A$(MODULE_MAKE_DEFAULT) MODULE_MAKE = $(MODTYPE_MAKE) 486N/A# Where to install files 486N/AMODTYPE_PREFIX_DEFAULT = $(MODTYPE_PREFIX_SET:yes=$(POUND_SIGN)) 486N/A$(MODTYPE_PREFIX_DEFAULT) MODTYPE_PREFIX=$(X11_DIR) 486N/AMODULE_PREFIX_DEFAULT = $(MODULE_PREFIX_SET:yes=$(POUND_SIGN)) 486N/A$(MODULE_PREFIX_DEFAULT) MODULE_PREFIX=$(MODTYPE_PREFIX) 493N/A# Where to install pkgconfig files 493N/AMODTYPE_PKGCONFIG_DIR_DEFAULT = $(MODTYPE_PKGCONFIG_DIR_SET:yes=$(POUND_SIGN)) 486N/A$(MODTYPE_PKGCONFIG_DIR_DEFAULT) MODTYPE_PKGCONFIG_DIR=$(PKGCONFIG_DIR) 486N/AMODULE_PKGCONFIG_DIR_DEFAULT = $(MODULE_PKGCONFIG_DIR_SET:yes=$(POUND_SIGN)) $(MODULE_PKGCONFIG_DIR_DEFAULT) MODULE_PKGCONFIG_DIR=$(MODTYPE_PKGCONFIG_DIR) # Directory created by unpacking source, if not set in module makefile SOURCE_DIRNAME_DEFAULT = $(SOURCE_DIRNAME_SET:yes=$(POUND_SIGN)) $(SOURCE_DIRNAME_DEFAULT) SOURCE_DIRNAME=$(MODULE_NAME)-$(MODULE_VERSION) BUILD_DIR_$(BUILD_TYPE) = build-$(BUILD_TYPE) # Special cases for 32-bit & 64-bit directory names to allow building # both architectures in the same tree (serially - building both in # parallel is likely to have race conditions) BUILD_DIR_32 = build-$(MACH32) BUILD_DIR_64 = build-$(MACH64) BUILD_DIR = $(BUILD_DIR_$(BUILD_TYPE)) SOURCE_DIR = $(BUILD_DIR)/$(SOURCE_DIRNAME) SOURCE_DIR_32 = $(BUILD_DIR_32)/$(SOURCE_DIRNAME) SOURCE_DIR_64 = $(BUILD_DIR_64)/$(SOURCE_DIRNAME) # Set default tarball if not set in module makefile SOURCE_TARBALL_NAME_DEFAULT = $(SOURCE_TARBALL_NAME_SET:yes=$(POUND_SIGN)) $(SOURCE_TARBALL_NAME_DEFAULT) SOURCE_TARBALL_NAME=$(SOURCE_DIRNAME).tar.bz2 # Tarballs for most modules built here are found in the X.Org archives/repos # in a directory with the same name as what we use in our tree SOURCE_TARBALL_DIR_DEFAULT = $(SOURCE_TARBALL_DIR_SET:yes=$(POUND_SIGN)) $(SOURCE_TARBALL_DIR_DEFAULT) SOURCE_TARBALL_DIR=$(MODTYPE) # Set default download location if not set in module makefile SOURCE_URL_DEFAULT = $(SOURCE_URL_SET:yes=$(POUND_SIGN)) $(SOURCE_URL_DEFAULT) SOURCE_URL=$(XORG_RELEASES_URL)/$(SOURCE_TARBALL_DIR)/$(SOURCE_TARBALL_NAME) # Set default git repo location if not set in module makefile GIT_URL_DEFAULT = $(GIT_URL_SET:yes=$(POUND_SIGN)) $(GIT_URL_DEFAULT) GIT_URL=$(XORG_GIT_URL)/$(SOURCE_TARBALL_DIR)/$(MODULE_NAME).git # Set default build type to 32-bit if not set in module makefile BUILD_TYPES_DEFAULT = $(BUILD_TYPES_SET:yes=$(POUND_SIGN)) $(BUILD_TYPES_DEFAULT) BUILD_TYPES=32 # Set default rules if not set in module/modtype Makefile SOURCE_TARGETS_DEFAULT = $(SOURCE_TARGETS_SET:yes=$(POUND_SIGN)) $(SOURCE_TARGETS_DEFAULT) SOURCE_TARGETS=$(UNPACK_TARGET) \ CONFIGURE_TARGETS_DEFAULT = $(CONFIGURE_TARGETS_SET:yes=$(POUND_SIGN)) $(CONFIGURE_TARGETS_DEFAULT) CONFIGURE_TARGETS=default_configure \ BUILD_TARGETS_DEFAULT = $(BUILD_TARGETS_SET:yes=$(POUND_SIGN)) $(BUILD_TARGETS_DEFAULT) BUILD_TARGETS=default_build \ INSTALL_TARGETS_DEFAULT = $(INSTALL_TARGETS_SET:yes=$(POUND_SIGN)) $(INSTALL_TARGETS_DEFAULT) INSTALL_TARGETS=default_install \ # Additional flags to pass to make in 32-bit & 64-bit builds BUILD_32_FLAGS= ARCH_FLAGS="$(ARCH32_FLAGS)" \ BUILD_64_FLAGS= ARCH_FLAGS="$(ARCH64_FLAGS)" \ all: $(BUILD_TYPES:%=build_%) CLEAN_RULES = $(BUILD_TYPES:%=clean_%) .PARALLEL: $(CLEAN_RULES) # Remove directories with both styles of naming # Tell dmake not to remove and create source in parallel .NOPARALLEL: clean source .NOPARALLEL: clean_$(BUILD_TYPE) source_$(BUILD_TYPE) SOURCE_RULES = $(BUILD_TYPES:%=source_%) .PARALLEL: $(SOURCE_RULES) source-gen: $(SOURCE_TARGETS) CONFIGURE_RULES = $(BUILD_TYPES:%=configure_%) configure: $(CONFIGURE_RULES) .PARALLEL: $(CONFIGURE_RULES) configure-gen: source-gen $(CONFIGURE_TARGETS) BUILD_RULES = $(BUILD_TYPES:%=build_%) .PARALLEL: $(BUILD_RULES) build-gen: configure-gen $(BUILD_TARGETS) INSTALL_RULES = $(BUILD_TYPES:%=install_%) install: $(INSTALL_RULES) install-gen: build-gen $(INSTALL_TARGETS) install_license install_pkgconfig_uninstalled DEBUG_BUILD_FLAGS = BUILD_DEBUG=yes # Allow adding "debug-" prefix to rules like build_32, install, etc. # Allow debug_XX to run "make all_XX" with debug flags (including without _XX) ### Source tarballs & downloading if necessary SOURCE_TARBALL=$(TARBALLDIR)/$(SOURCE_TARBALL_NAME) # Allow downloading from local archive/mirror TARBALL_ARCHIVE_sun.com = http://xserver.sfbay.sun.com/tarballs TARBALL_ARCHIVE_DEFAULT = $(TARBALL_ARCHIVE_SET:yes=$(POUND_SIGN)) $(TARBALL_ARCHIVE_DEFAULT) ARCHIVE_DOMAIN = domainname | awk -F. '{if (NF > 1) {printf "%s.%s", $$(NF-1), $$NF}}' $(TARBALL_ARCHIVE_DEFAULT) TARBALL_ARCHIVE = $(TARBALL_ARCHIVE_$(ARCHIVE_DOMAIN:sh)) ARCHIVE_URL=$(TARBALL_ARCHIVE)/$(SOURCE_TARBALL_DIR)/$(SOURCE_TARBALL_NAME) GIT_CLONE_DIR=$(MODULE_NAME)-$(MODULE_VERSION) # Download if SOURCE_TARBALL_NAME is not set to NONE and the file either # doesn't exist or is empty # If MODULE_VERSION is git, checkout source from git repo instead of download: $(SOURCE_TARBALL) $(SOURCE_TARBALL): $(TARBALLDIR) if [[
"$(MODULE_VERSION)" =
"git" ]] ;
then \
if [[
! -d $(GIT_CLONE_DIR) ]] ; then \ if [[
! -z "$(GIT_BRANCH)" ]] ; then \ if [[
"$(SOURCE_TARBALL_NAME)" != "NONE" ]] ; then \ if [[
! -z "$(TARBALL_ARCHIVE)" ]] ; then \ CHECKSUM_TARGET = .checksum_done.$(MODULE_VERSION) check-checksums: $(CHECKSUM_TARGET) $(CHECKSUM_TARGET): $(SOURCE_TARBALL) if [[
"$(MODULE_VERSION)" != "git" && \ "$(SOURCE_TARBALL_NAME)" != "NONE" ]] ; then \ ACTUAL_MD5=
"$$(digest -a md5 $(SOURCE_TARBALL))" ; \
if [[
"$${ACTUAL_MD5}" != "${TARBALL_MD5}" ]] ; then \ print -
u2 "ERROR: MD5 sum mismatch on ${SOURCE_TARBALL}\n" \
"$${ACTUAL_MD5} != ${TARBALL_MD5}" ; \
if [[
"$${ACTUAL_SHA1}" != "${TARBALL_SHA1}" ]] ; then \ print -
u2 "ERROR: SHA1 sum mismatch on ${SOURCE_TARBALL}\n" \
"$${ACTUAL_SHA1} != ${TARBALL_SHA1}" ; \
# Submit a tarball to the archive ARCHIVE_SUBMIT=/ws/x11/tarballs/bin/archive-tarballs if [[
"$(MODULE_VERSION)" != "git" && \ "$(SOURCE_TARBALL_NAME)" != "NONE" ]] ; then \ --
modtype=
'$(SOURCE_TARBALL_DIR)' \
--
tarball=
'$(SOURCE_TARBALL_NAME)' \
--
sha1=
'$(TARBALL_SHA1)' ; \
# Update a git cloned repo if [[
"$(MODULE_VERSION)" =
"git" ]] ;
then \
if [[
! -z "$(GIT_BRANCH)" ]] ; then \ ### Unpack source and apply patches # Step 1: Initialize source dir with upstream sources # - if there's a tarball, unpack it. # - if using a git master, copy it. SOURCE_INIT_TARGET_FILE=.source.init.done SOURCE_INIT_TARGET=$(SOURCE_DIR)/$(SOURCE_INIT_TARGET_FILE) init_source: $(SOURCE_INIT_TARGET) @
if [[
"$(SOURCE_TARBALL_NAME)" ==
"NONE" ]] ;
then \
if [[
"$(MODULE_VERSION)" =
"git" ]] ;
then \
SOURCE_CMD=
'gtar --exclude=.git* -cf - $(GIT_CLONE_DIR)' ; \
SOURCE_CMD=
"$${UNCOMP_CMD:-bzcat} $(SOURCE_TARBALL)" ; \
# Step 2: Add in any additional local sources from $(ADDITIONAL_SOURCE_DIR) # (done after init source to avoid races in directory/file creation) SOURCE_ADD_TARGET_FILE=.source.add.done SOURCE_ADD_TARGET=$(SOURCE_DIR)/$(SOURCE_ADD_TARGET_FILE) add_source: $(SOURCE_ADD_TARGET) $(SOURCE_ADD_TARGET): $(SOURCE_INIT_TARGET) @
if [[
"$(ADDITIONAL_SOURCE_DIR)" != "" ]] ; then \ if [[
! -x $(LNDIR) ]] ; then \ # Step 3: Apply any local patches (may be done in parallel to add_source, # but must come after init_source is finished) # SOURCE_PATCHES is a list in the format: filename[,flags] # $${p/*,} is ksh93 syntax to remove the comma and everything before it in $p # $${p%,*} is ksh93 syntax to remove the comma and everything after it in $p PATCHED_TARGET_FILE=.patches.done PATCHED_TARGET=$(SOURCE_DIR)/$(PATCHED_TARGET_FILE) patched_source: $(PATCHED_TARGET) $(PATCHED_TARGET): $(SOURCE_INIT_TARGET) @
if [[
"$(SOURCE_PATCHES)" != "" ]] ; then \ if [[
"$$p" != "x" ]] ; then \ if [[
"$$p" =~
"," ]] ;
then \
# Step 4: Apply common Solaris changes to man pages in $(SUNTOUCHED_MANPAGES) FIXED_MAN_TARGET_FILE=.mantouch.done FIXED_MAN_TARGET=$(SOURCE_DIR)/$(FIXED_MAN_TARGET_FILE) fixed_man: $(FIXED_MAN_TARGET) COMMON_SUNTOUCH_MAN_FLAGS = \ -a
'{Availability, $(SUN_PACKAGE)}' \
-a
'{Interface Stability, $(MODULE_STABILITY)}'$(FIXED_MAN_TARGET): $(PATCHED_TARGET) @
if [[
"$(SUNTOUCHED_MANPAGES)" != "" ]] ; then \# Step 5: Apply common Solaris changes to pkg-config *.pc files listed in SOURCE_PC_FILES = $(FIX_PC_FILES:%=$(SOURCE_DIR)/%) ORIG_PC_FILES = $(SOURCE_PC_FILES:%=%.orig) FIXED_PC_TARGET = $(ORIG_PC_FILES) fixed_pc: $(FIXED_PC_TARGET) -e
's|-L\$${libdir}|-L\$${libdir} -R\$${libdir}|;' \
-e
's|Requires.private: .*$$||;' \
$(ORIG_PC_FILES): $(PATCHED_TARGET) SOURCE_DEPS = $(SOURCE_TARBALL) $(MODTYPE_SOURCE_DEPS) $(MODULE_SOURCE_DEPS) UNPACK_TARGETS = $(SOURCE_INIT_TARGET) $(PATCHED_TARGET) \ default_source: $(UNPACK_TARGET) $(UNPACK_TARGET): $(SOURCE_DEPS) $(UNPACK_TARGETS) ### Run configure scripts # Include Xorg autoconf macros when rebuilding configure scripts # and use automake 1.10 instead of the older 1.9. # /opt/jdsbld/share/aclocal is needed to get the nls.m4 from CBEgettext # due to: 6785384 SUNWgnu-gettext does not include autoconf m4 files ACLOCAL_PATH=/usr/bin/aclocal-1.10 ACLOCAL_INCLUDES = -I $(PROTODIR)$(X11_ACLOCAL_DIR) \ AUTOMAKE_PATH=/usr/bin/automake-1.10 AUTORECONF_ENV= ACLOCAL="$(ACLOCAL_PATH) $(ACLOCAL_INCLUDES)" \ # Dependencies for running configure to make a Makefile CONFIGURE_DEPS = $(SOURCE_TARGETS) \ # Command line options to GNU autoconf configure script DEFAULT_CONFIG_OPTS = --prefix=$(MODULE_PREFIX) \ CONFIG_OPTS = $(DEFAULT_CONFIG_OPTS) \ # Environment variable options to GNU autoconf configure script $(USE_DEFAULT_CONFIG_CPPFLAGS:no=$(POUND_SIGN)) DEFAULT_CONFIG_CPPFLAGS= \ $(USE_DEFAULT_CONFIG_LDFLAGS:no=$(POUND_SIGN)) DEFAULT_CONFIG_LDFLAGS= \ DEFAULT_PKG_CONFIG_PATH=$(TOP)/common/pc-files/$(BUILD_DIR):$(PROTODIR)$(PKGCONFIG_DIR):$(PROTODIR)$(PKGCONFIG_DIR_SHARE):$(PKGCONFIG_DIR):$(PKGCONFIG_DIR_SHARE) # Set USE_DEFAULT_CONFIG_ENV=no in a Makefile to not use this default $(USE_DEFAULT_CONFIG_ENV:no=$(POUND_SIGN)) DEFAULT_CONFIG_ENV = \ CC=
"$(CC)" CXX=
"$(CXX)" \
CFLAGS=
"$(MODTYPE_CFLAGS) $(MODULE_CFLAGS)" \
CXXFLAGS=
"$(MODTYPE_CXXFLAGS) $(MODULE_CXXFLAGS)" \
CPPFLAGS=
"$(DEFAULT_CONFIG_CPPFLAGS) $(MODTYPE_CPPFLAGS) $(MODULE_CPPFLAGS)" \
LDFLAGS=
"$(DEFAULT_CONFIG_LDFLAGS) $(MODTYPE_CFLAGS) $(MODTYPE_LDFLAGS) $(MODULE_CFLAGS) $(MODULE_LDFLAGS)" \
CONFIG_ENV = $(DEFAULT_CONFIG_ENV) $(MODTYPE_CONFIG_ENV) $(MODULE_CONFIG_ENV) # File created by running configure - defaults to the top-level Makefile # in a source directory unless AUTOCONF_TARGET_SET=yes is set AUTOCONF_TARGET_DEFAULT = $(AUTOCONF_TARGET_SET:yes=$(POUND_SIGN)) $(AUTOCONF_TARGET_DEFAULT) AUTOCONF_TARGET=$(SOURCE_DIR)/Makefile $(AUTOCONF_TARGET): $(CONFIGURE_DEPS) if [[
"$(AUTORECONF)" =
"yes" ||
"$(MODULE_VERSION)" =
"git" ]] ;
then \
if [[
"$(DELIBTOOLIZE)" =
"yes" ]] ;
then \
default_configure: $(AUTOCONF_TARGET) ### Default rules for common build pattern LD_OPTIONS = -L$(PROTODIR)$(X11_DIR)/lib$(LIBSUBDIR) \ # MKDIRPROG - Workaround parallel build race condition # in older upstream packaged install-sh BUILD_ENV = LD_OPTIONS='$(LD_OPTIONS)' \ DEFAULT_BUILD_MAKEFLAGS=$(MODTYPE_MAKEFLAGS) $(MODULE_MAKEFLAGS) \ # Dependencies for make build step BUILD_DEPS = $(SOURCE_TARGETS) $(CONFIGURE_TARGETS) $(MODTYPE_BUILD_DEPS) $(MODULE_BUILD_DEPS) $(MODULE_MAKE) default_build: $(BUILD_DEPS) print_default_build_flags: @
print "BUILD_ENV='$(BUILD_ENV)'" ; \
print "MAKE='$(MODULE_MAKE)'" ; \
print "MAKEFLAGS='$(MAKEFLAGS) $(DEFAULT_BUILD_MAKEFLAGS)'" DEFAULT_INSTALL_MAKEFLAGS= -e DESTDIR=$(PROTODIR) \ # Dependencies for make install step INSTALL_DEPS = $(BUILD_TARGETS) $(MODTYPE_INSTALL_DEPS) $(MODULE_INSTALL_DEPS) default_install: $(INSTALL_DEPS) print_default_install_flags: @
print "BUILD_ENV='$(BUILD_ENV)'" ; \
print "MAKE='$(MODULE_MAKE)'" ; \
print "MAKE_FLAGS='$(MAKEFLAGS) $(DEFAULT_INSTALL_MAKEFLAGS)'" # Adjust paths in pkg-config files for -uninstalled variants used during build -e
'BEGIN {use Cwd; $$protodir=Cwd::realpath("$(PROTODIR)");}' \
-e
's|(-[LI]\s*)\$$|$$1$$protodir\$$|g;' \
-e
's|^sdkdir=|sdkdir=$$protodir|g;' \
-e
's|$$protodir\$${sdkdir}|\$${sdkdir}|g;' \
INSTALL_PCU_DEPS_DEFAULT = $(INSTALL_PCU_DEPS_SET:yes=$(POUND_SIGN)) $(INSTALL_PCU_DEPS_DEFAULT) INSTALL_PCU_DEPS = $(INSTALL_TARGETS) install_pkgconfig_uninstalled: $(INSTALL_PCU_DEPS) @
if [[
! -z "$(FIX_PC_FILES)" ]] ; then \# Set comments in ELF binaries to help identify versions/builds ELF_COMMENTS = $(MODULE_NAME) $(MODULE_VERSION) ELF_COMMENTS += $(MODTYPE_ELF_COMMENTS)$(MODULE_ELF_COMMENTS) $(BUILD_DEBUG:yes=) DEBUG_ELF_COMMENTS=(DEBUG) $(BUILD_DEBUG:yes=$(POUND_SIGN)) DEBUG_ELF_COMMENTS= ELF_COMMENTS += $(DEBUG_ELF_COMMENTS) set-elf-comments: $(BUILD_TARGETS:set-elf-comments=) ### Other tools/dependencies needed to build # Some modules (such as FreeType 2) require GNU make @
print -n
"Building with GNU make from $$(whence gmake): " @
print "Building with make from $$(whence $(MAKE))"# Some modules use lndir to merge in sources from Sun specific directories # Some modules use these tools to convert DocBook docs to text or html $(DOCBOOK2HTML) + $(DOCBOOK2TEXT): ### Useful rules for maintaining patch sets # regenerate patches against new baseline to reduce messages about hunks # having fuzz or offsets when applying patches - new patches will be in new/ print '=================' $$p ; \
{print}' $$p >
new/$$p ; \
|
sed -e
's% \./prev/$(SOURCE_DIRNAME)/% %' -e
's% \./tmp-regen/$(SOURCE_DIRNAME)/% %' \
|
grep -v
'^Common subdirectories:' \
# Derive directory name relative to open-src THIS_MODULE:sh=echo ${PWD} | sed 's|.*/open-src/||' # Allows running "make list-patches" to get a list of all patches we # currently apply in our builds @
if [[
"$(SOURCE_PATCHES)" != "" ]] ; then \ if [[
"$$p" != "x" ]] ; then \ print "$(THIS_MODULE)/$${p%,*}" ; \
# Default license file name is COPYING (X.Org & GNU autoconf default) # For other license file names, set LICENSE_FILE to the file name # and set LICENSE_FILE_SET=yes # A file in the same directory as the Makefile takes precedence # over one that is delivered in the package. LICENSE_FILE_DEFAULT = $(LICENSE_FILE_SET:yes=$(POUND_SIGN)) $(LICENSE_FILE_DEFAULT) LICENSE_FILE=COPYING MODULE_LICENSE_DESTDIR = $(LICENSE_DEST)/$(THIS_MODULE) install_license: $(MODULE_LICENSE_DESTDIR)/COPYING $(MODULE_LICENSE_DESTDIR): $(MODULE_LICENSE_DESTDIR)/COPYING: $(MODULE_LICENSE_DESTDIR) $(SOURCE_TARGETS) if [[
"$${LICENSE_TO_COPY}" != "" ]] ; then \ # For use in debugging or calling from scripts like the code review helper # Use such as: make print_make_vars VARS="MODTYPE MODULE_NAME" # or: make print_make_var BUILD_TYPE=32 VARS=SOURCE_DIR @
print -n
' $(@:print_make_var-%=%)="$($(@:print_make_var-%=%))"'print_make_vars: $(VARS:%=print_make_var-%)