export SHELL := /bin/sh ############################################################################## # Global Constants ############################################################################## export OS_VERSION := $(shell /usr/bin/sw_vers -buildVersion | sed -E 's/[A-Z][0-9]+[A-Za-z]*$$//g') export OS_VERSIONS_SUPPORTED := 13 14 export PERL := /usr/bin/perl export PERL_VERSIONS_FILE_PATH := /usr/local/versioner/perl/versions PERL_VERSIONS_FILE_PATH := $(or $(join $(SDKROOT),$(PERL_VERSIONS_FILE_PATH)),$(PERL_VERSIONS_FILE_PATH)) export PERL_VERSIONS_AVAILABLE := $(sort $(shell grep -v '^DEFAULT = ' $(PERL_VERSIONS_FILE_PATH))) # Complete list of projects PROJECTS = $(MAKEMAKER_PROJECTS) $(MODULE_BUILD_PROJECTS) ############################################################################## # Operating System Environment ############################################################################## # Allow CPANInternal to build on Mac OS X versions greater than 13. #ifeq ($(shell /bin/test $(OS_VERSION) -gt 13; echo $$?), 0) # OS_VERSION := 13 #endif # Verify the Makefile is being executed on a supported version of Mac OS X. ifeq ($(findstring $(OS_VERSION), $(OS_VERSIONS_SUPPORTED)),) $(error Makefile is being executed on an unsupported version of Mac OS X. Supported versions are $(OS_VERSIONS_SUPPORTED)) endif # Load Makefile containing definitions specific to the host OS include $(OS_VERSION)/Makefile # Assign ARCHFLAGS the value of DEFAULT_ARCHFLAGS defined in $(OS_VERSION)/Makefile ARCHFLAGS = $(DEFAULT_ARCHFLAGS) # If set RC_CFLAGS should override DEFAULT_ARCHFLAGS ifneq ($(RC_CFLAGS),) $(info RC_FLAGS is set, overriding DEFAULT_ARCHFLAGS) ARCHFLAGS = $(RC_CFLAGS) endif # Load Makefile containing definitions specific for the current version of Perl include_file_paths := $(OS_VERSION)/Perl/$(VERSIONER_PERL_VERSION)/Makefile include $(include_file_paths) ############################################################################## # Perl Environment ############################################################################## # Tests that require interaction with a user typically respect the variable # AUTOMATED_TESTING. When AUTOMATED_TESTING is set, interactive tests are skipped. This # helps with things like Term::ReadLine waiting for someone to type something in, when it # will never happen on a build machine. export AUTOMATED_TESTING := 1 export PERL_AUTOINSTALL := --skipdeps # ExtUtils::MakeMaker # The install target copies files found below each of the INST_* directories to their # INSTALL* counterparts. Setting INSTALLDIRS to "site" to chooses the INSTALLSITE* # counterparts. # # http://perldoc.perl.org/ExtUtils/MakeMaker.html#make-install PERL_INSTALLDIRS := site # Retrieve the SITEPREFIX INSTALLSITE* counterparts PERL_INSTALLSITEARCH := $(shell $(PERL) -MConfig -e 'print($$Config{installsitearch});') PERL_INSTALLSITEBIN := $(shell $(PERL) -MConfig -e 'print($$Config{installsitebin});') PERL_INSTALLSITELIB := $(shell $(PERL) -MConfig -e 'print($$Config{installsitelib});') PERL_INSTALLSITEMAN1DIR := $(shell $(PERL) -MConfig -e 'print($$Config{installsiteman1dir});') PERL_INSTALLSITEMAN3DIR := $(shell $(PERL) -MConfig -e 'print($$Config{installsiteman3dir});') PERL_INSTALLSITESCRIPT := $(shell $(PERL) -MConfig -e 'print($$Config{installsitescript});') PERL_PREPENDTOPATH := $(PERL_INSTALLSITELIB)PrependToPath INSTALLPATH_PREPENDTOPATH := $(DSTROOT)$(PERL_INSTALLSITELIB) # Modify PERL_INSTALLSITEARCH and PERL_INSTALLSITELIB so files are installed into # /AppleInternal/Library/Perl PERL_INSTALLSITEARCH := /AppleInternal$(PERL_INSTALLSITEARCH) PERL_INSTALLSITELIB := /AppleInternal$(PERL_INSTALLSITELIB) # Append install paths PERL += -I$(DSTROOT)$(PERL_INSTALLSITEARCH) PERL += -I$(DSTROOT)$(PERL_INSTALLSITELIB) ############################################################################## # Module::Build Environment Variables # # http://perldoc.perl.org/Module/Build.html#Environment-variables ############################################################################## # Command line options that are applied to Build.PL or any Build action. PERL_MB_OPT := \ --destdir=$(DSTROOT) \ --installdirs $(PERL_INSTALLDIRS) \ --install_path arch=$(PERL_INSTALLSITEARCH) \ --install_path bin=$(PERL_INSTALLSITEBIN) \ --install_path lib=$(PERL_INSTALLSITELIB) \ --install_path bindoc=$(PERL_INSTALLSITEMAN1DIR) \ --install_path libdoc=$(PERL_INSTALLSITEMAN3DIR) \ --install_path script=$(PERL_INSTALLSITESCRIPT) ############################################################################## # ExtUtils::MakeMaker Environment Variables # # http://perldoc.perl.org/ExtUtils/MakeMaker.html#ENVIRONMENT ############################################################################## PERL_MM_OPT := \ DESTDIR=$(DSTROOT) \ INSTALLDIRS=$(PERL_INSTALLDIRS) \ INSTALLSITEARCH=$(PERL_INSTALLSITEARCH) \ INSTALLSITEBIN=$(PERL_INSTALLSITEBIN) \ INSTALLSITELIB=$(PERL_INSTALLSITELIB) \ INSTALLSITEMAN1DIR=$(PERL_INSTALLSITEMAN1DIR) \ INSTALLSITEMAN3DIR=$(PERL_INSTALLSITEMAN3DIR) \ INSTALLSITESCRIPT=$(PERL_INSTALLSITESCRIPT) # Instruct the ExtUtils::MakeMaker prompt function to always return the default without # waiting for user input. export PERL_MM_USE_DEFAULT = 1 ############################################################################## # General Targets ############################################################################## .PHONY: all all: display-info $(MODULES) ConfigurationFiles remove-symbols @echo ""; .PHONY: clean clean: .PHONY: display-info display-info: @echo ""; \ echo "##############################################################################"; \ echo "# Variables"; \ echo "##############################################################################"; \ echo ""; \ echo "ARCHFLAGS: $(ARCHFLAGS)"; \ echo "OS_VERSION: $(OS_VERSION)"; \ echo "OS_VERSIONS_SUPPORTED: $(OS_VERSIONS_SUPPORTED)"; \ echo "PERL_VERSIONS_AVAILABLE: $(PERL_VERSIONS_AVAILABLE)"; \ echo "PERL_INSTALLSITEARCH: $(PERL_INSTALLSITEARCH)"; \ echo "PERL_INSTALLSITEBIN: $(PERL_INSTALLSITEBIN)"; \ echo "PERL_INSTALLSITELIB: $(PERL_INSTALLSITELIB)"; \ echo "PERL_INSTALLSITEMAN1DIR: $(PERL_INSTALLSITEMAN1DIR)"; \ echo "PERL_INSTALLSITEMAN3DIR: $(PERL_INSTALLSITEMAN3DIR)"; \ echo "PERL_INSTALLSITESCRIPT: $(PERL_INSTALLSITESCRIPT)"; \ echo ""; \ echo "Makefiles: $(include_file_paths)"; \ echo ""; \ echo "##############################################################################"; \ echo "# Module::Build Variables"; \ echo "##############################################################################"; \ echo ""; \ echo "PERL_MB_OPT: $(PERL_MB_OPT)"; \ echo ""; \ echo "##############################################################################"; \ echo "# ExtUtils::MakeMaker Variables"; \ echo "##############################################################################"; \ echo ""; \ echo "PERL_MM_OPT: $(PERL_MM_OPT)"; \ echo "PERL_MM_USE_DEFAULT: $$PERL_MM_USE_DEFAULT"; \ echo ""; \ echo "##############################################################################"; \ echo "# Shell Environment Variables"; \ echo "##############################################################################"; \ echo ""; \ echo "PERL5LIB: $$PERL5LIB"; \ echo "VERSIONER_PERL_VERSION: $$VERSIONER_PERL_VERSION"; \ echo ""; \ echo "##############################################################################"; \ echo "# XBS Variables"; \ echo "##############################################################################"; \ echo ""; \ echo "DSTROOT: $(DSTROOT)"; \ echo "OBJROOT: $(OBJROOT)"; \ echo "OBJROOT_PERL: $(OBJROOT_PERL)"; \ echo "SRCROOT: $(SRCROOT)"; \ echo "SYMROOT: $(SYMROOT)"; \ echo "TMPDIR: $(TMPDIR)"; \ echo ""; \ echo "##############################################################################"; \ echo "# Projects"; \ echo "##############################################################################"; \ echo ""; \ echo "$(PROJECTS)"; \ echo "" .PHONY: ConfigurationFiles ConfigurationFiles: @echo "=============== Making $@ =================="; @echo ""; $(MAKE) -C $(OBJROOT_PERL)/$@ install; .PHONY: prepend-to-path prepend-to-path: @mkdir -p $(INSTALLPATH_PREPENDTOPATH); \ echo $(PERL_INSTALLSITEARCH) > $(INSTALLPATH_PREPENDTOPATH)/PrependToPath; \ echo $(PERL_INSTALLSITELIB) >> $(INSTALLPATH_PREPENDTOPATH)/PrependToPath; .PHONY: remove-symbols remove-symbols: @if [ -e $(DSTROOT) ]; then \ echo "Removing debugging symbol table entries from bundles ... "; \ find $(DSTROOT) -xdev -name '*.bundle' -print -exec strip -S {} \; ; \ echo ""; \ echo "Removing packlists ..."; \ find $(DSTROOT) -xdev -name '.packlist' -print -exec rm -f {} \; ; \ echo ""; \ fi ############################################################################## # ExtUtils::MakeMaker Project Targets ############################################################################## .PHONY: $(MAKEMAKER_PROJECTS) $(MAKEMAKER_PROJECTS) : @echo "=============== Making $@ =================="; \ echo ""; \ cd $(OBJROOT_PERL)/$@ && \ mv Makefile.PL Makefile.PL.orig && \ cat Makefile.PL.orig ../add_rc_constants.pl > Makefile.PL && \ $(PERL) Makefile.PL PERL="$(PERL)" $(PERL_MM_OPT) && \ $(MAKE) all pure_install || exit 1; \ echo ""; ############################################################################## # Module::Build Project Targets ############################################################################## .PHONY: $(MODULE_BUILD_PROJECTS) $(MODULE_BUILD_PROJECTS) : @echo "=============== Making $@ =================="; \ echo ""; \ cd $(OBJROOT_PERL)/$@ && \ $(PERL) Build.PL $(PERL_MB_OPT) && \ $(PERL) Build build $(PERL_MB_OPT) && \ $(PERL) Build install $(PERL_MB_OPT) || exit 1; \ echo "";