Makefile revision 3793
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter#
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# CDDL HEADER START
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter#
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# The contents of this file are subject to the terms of the
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# Common Development and Distribution License (the "License").
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# You may not use this file except in compliance with the License.
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter#
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# or http://www.opensolaris.org/os/licensing.
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# See the License for the specific language governing permissions
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# and limitations under the License.
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter#
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# When distributing Covered Code, include this CDDL HEADER in each
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# If applicable, add the following below this CDDL HEADER, with the
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# fields enclosed by brackets "[]" replaced with your own identifying
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# information: Portions Copyright [yyyy] [name of copyright owner]
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter#
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# CDDL HEADER END
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter#
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter#
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter#
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterinclude ../../../make-rules/shared-macros.mk
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCOMPONENT_NAME= Python
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCOMPONENT_VERSION= 3.4.2
7056ae8910decb0d96b430451ac58b99526eb0d9jvergaraCOMPONENT_PROJECT_URL= http://python.org/
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCOMPONENT_SRC= $(COMPONENT_NAME)-$(COMPONENT_VERSION)
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCOMPONENT_ARCHIVE= $(COMPONENT_SRC).tar.xz
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCOMPONENT_ARCHIVE_HASH= \
857225469c51bedb8c0566aa7757800cfaac4075kenneth_suter sha256:1c6d9682d145c056537e477bbfa060ce727f9edd38df1827e0f970dcf04b2def
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCOMPONENT_ARCHIVE_URL= $(COMPONENT_PROJECT_URL)ftp/python/$(COMPONENT_VERSION)/$(COMPONENT_ARCHIVE)
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCOMPONENT_BUGDB= utility/python
857225469c51bedb8c0566aa7757800cfaac4075kenneth_suter
7b6b125d52edabd5b1c9134feef7aeae0e69499ekenneth_suterTPNO= 19421
857225469c51bedb8c0566aa7757800cfaac4075kenneth_suter
857225469c51bedb8c0566aa7757800cfaac4075kenneth_suterinclude $(WS_TOP)/make-rules/prep.mk
857225469c51bedb8c0566aa7757800cfaac4075kenneth_suterinclude $(WS_TOP)/make-rules/configure.mk
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterinclude $(WS_TOP)/make-rules/ips.mk
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterinclude $(WS_TOP)/make-rules/lint-libraries.mk
857225469c51bedb8c0566aa7757800cfaac4075kenneth_suter
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# Need to preserve timestamp for Grammar files. If the pickle files are older,
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# Python will try to rebuild them.
857225469c51bedb8c0566aa7757800cfaac4075kenneth_suterPKGSEND_PUBLISH_OPTIONS += -T \*Grammar\*.txt
857225469c51bedb8c0566aa7757800cfaac4075kenneth_suterPKGSEND_PUBLISH_OPTIONS += -T \*Grammar\*.pickle
857225469c51bedb8c0566aa7757800cfaac4075kenneth_suter
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# We patch auto* files, so regenerate headers and configure
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCOMPONENT_PREP_ACTION = \
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter (cd $(@D) ; autoheader ; autoconf)
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# The DTrace patch needs this file to be mode 0755.
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCOMPONENT_PRE_BUILD_ACTION=($(CHMOD) +x \
5b3741e0620fd2baaa974cecc2c2d953bb7d4fbbkenneth_suter $(SOURCE_DIR)/Include/pydtrace_offsets.sh)
5b3741e0620fd2baaa974cecc2c2d953bb7d4fbbkenneth_suter
5b3741e0620fd2baaa974cecc2c2d953bb7d4fbbkenneth_suter# we don't want to leak $(CC_BITS) into BASECFLAGS as it causes problems with
857225469c51bedb8c0566aa7757800cfaac4075kenneth_suter# python-config
857225469c51bedb8c0566aa7757800cfaac4075kenneth_suterCC += $(CFLAGS)
857225469c51bedb8c0566aa7757800cfaac4075kenneth_suter
857225469c51bedb8c0566aa7757800cfaac4075kenneth_suterC99MODE=
857225469c51bedb8c0566aa7757800cfaac4075kenneth_suterCPPFLAGS += -IPython
857225469c51bedb8c0566aa7757800cfaac4075kenneth_suter
857225469c51bedb8c0566aa7757800cfaac4075kenneth_suter# to find the ncurses headers
857225469c51bedb8c0566aa7757800cfaac4075kenneth_suterCPPFLAGS += -I/usr/include/ncurses
857225469c51bedb8c0566aa7757800cfaac4075kenneth_suter# enable large files how they did in JDS
7056ae8910decb0d96b430451ac58b99526eb0d9jvergaraCPPFLAGS += -D_LARGEFILE64_SOURCE
7056ae8910decb0d96b430451ac58b99526eb0d9jvergara
857225469c51bedb8c0566aa7757800cfaac4075kenneth_suter# libffi for _ctypes
857225469c51bedb8c0566aa7757800cfaac4075kenneth_suterCPPFLAGS += $(shell pkg-config --cflags-only-I libffi)
857225469c51bedb8c0566aa7757800cfaac4075kenneth_suter
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# because python links with $(CC) ... $(LDFLAGS) ...
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterLDFLAGS = $(CC_BITS) $(CC_PIC)
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# build pic
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCFLAGS += $(CC_PIC)
a924639fba222bb9c8532add22b8a108dcb75f34kenneth_suter
857225469c51bedb8c0566aa7757800cfaac4075kenneth_suter# 16-byte memory alignment + interpretation of non-alignment prevents SIGBUS.
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterstudio_ALIGN.sparc.64 = -xmemalign=16i
857225469c51bedb8c0566aa7757800cfaac4075kenneth_suter
a924639fba222bb9c8532add22b8a108dcb75f34kenneth_suter# The python build is profile-guided for studio; to see the benefits of that,
857225469c51bedb8c0566aa7757800cfaac4075kenneth_suter# Python must be compiled with -xO5 and a different build target must be used.
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# Use of xprofile requires that the same options be used during compilation and
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# linking. The targets chosen are based on Solaris 11 minimum supported system
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# requirements.
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCOMPONENT_BUILD_TARGETS = profile-opt
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterXPROFILE_DIR = $(BUILD_DIR_$(BITS))/.profile
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterPYFLAGS.i386 = -xtarget=opteron -xarch=sse2 -xcache=generic
857225469c51bedb8c0566aa7757800cfaac4075kenneth_suterPYFLAGS.sparc =
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCFLAGS += -xO5 $(PYFLAGS.$(MACH))
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterLDFLAGS += -xO5 $(PYFLAGS.$(MACH))
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter
a924639fba222bb9c8532add22b8a108dcb75f34kenneth_suter# add /usr/gnu/lib to the library search/run path
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterLDFLAGS.64 = -R/usr/gnu/lib/$(MACH64) -L/usr/gnu/lib/$(MACH64)
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterLDFLAGS += $(LDFLAGS.$(BITS))
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter
a924639fba222bb9c8532add22b8a108dcb75f34kenneth_suter# Python puts its header files in a special place.
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterLINT_FLAGS += -I$(SOURCE_DIR)/Include
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# PYTHONPATH in the environment can be harmful, but setting it to empty via
a924639fba222bb9c8532add22b8a108dcb75f34kenneth_suter# _INSTALL_ENV causes problems too, so just ignore the entire environment.
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# Because of this, we need to specify PATH in multiple places below.
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterENV += -i
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCONFIGURE_ENV += PATH="$(PATH)"
a924639fba222bb9c8532add22b8a108dcb75f34kenneth_suter
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCONFIGURE_OPTIONS += --infodir=$(CONFIGURE_INFODIR)
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCONFIGURE_OPTIONS += --enable-shared
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCONFIGURE_OPTIONS += --with-dtrace
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCONFIGURE_OPTIONS += --with-system-expat
a924639fba222bb9c8532add22b8a108dcb75f34kenneth_suterCONFIGURE_OPTIONS += --with-system-ffi
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCONFIGURE_OPTIONS += --without-gcc
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCONFIGURE_OPTIONS += --without-ensurepip
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCONFIGURE_OPTIONS += --enable-ipv6
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCONFIGURE_OPTIONS += --bindir=/usr/bin
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCONFIGURE_OPTIONS += CPPFLAGS="$(CPPFLAGS)"
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCONFIGURE_OPTIONS += LDFLAGS="$(LDFLAGS)"
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCONFIGURE_OPTIONS += CFLAGS="$(CFLAGS)"
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCONFIGURE_OPTIONS += DFLAGS="-$(BITS)"
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCONFIGURE_OPTIONS += XPROFILE_DIR="$(XPROFILE_DIR)"
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCOMPONENT_BUILD_ENV += DFLAGS="-$(BITS)"
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCOMPONENT_BUILD_ENV += XPROFILE_DIR="$(XPROFILE_DIR)"
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCOMPONENT_BUILD_ENV += PATH="$(PATH)"
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# Some tests have non-ASCII characters encoded for international domain names;
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# the publish step will fail in 'pkgdepend generate' without this:
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCOMPONENT_PUBLISH_ENV += LC_ALL=en_US.UTF-8
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# 64 bit shared objects need to go in a 64-bit directory
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCOMPONENT_INSTALL_ARGS.64 += DESTSHARED=$(CONFIGURE_PREFIX)/lib/python3.4/lib-dynload
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterASLR_MODE = $(ASLR_ENABLE)
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# Simplify the definitions of CC, CXX, CFLAGS and LDFLAGS so they hard-code
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# neither paths from our build systems nor Studio-specific options.
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCOMPONENT_PRE_INSTALL_ACTION= \
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter (cd $(@D) ; \
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter $(GSED) -i -e 's/^CC=.*/CC=\t\tcc/' -e 's/^CXX=.*/CXX=\t\tCC/' \
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter -e 's/^CFLAGS=.*/CFLAGS=\t\t\$$\(BASECFLAGS) \$$\(OPT) \$$\(EXTRA_CFLAGS)/' \
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter -e 's|^LDFLAGS=.*|LDFLAGS=|' Makefile)
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# Because we stripped the Makefile above, we need to pass several things in the
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# environment, and use -e to tell gmake to pay attention to the environment.
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCOMPONENT_INSTALL_ENV += CC="$(CC)"
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCOMPONENT_INSTALL_ENV += CXX="$(CXX)"
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCOMPONENT_INSTALL_ENV += CFLAGS="$(CFLAGS)"
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCOMPONENT_INSTALL_ENV += LDFLAGS="$(LDFLAGS)"
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCOMPONENT_INSTALL_ENV += PATH="$(PATH)"
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suterCOMPONENT_INSTALL_ARGS += -e
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter
e7b89fa07f734d79858edc56f1078a08f8b66d46kenneth_suter# Strip build machine paths from _sysconfigdata.py & config/Makefile.
e7b89fa07f734d79858edc56f1078a08f8b66d46kenneth_suterCOMPONENT_POST_INSTALL_ACTION= \
e7b89fa07f734d79858edc56f1078a08f8b66d46kenneth_suter (cd $(PROTOUSRLIBDIR)/python3.4 ; \
e7b89fa07f734d79858edc56f1078a08f8b66d46kenneth_suter $(GSED) -i -e 's|$(SOURCE_DIR)|.|g' -e 's|$(COMPONENT_DIR)|..|g' \
e7b89fa07f734d79858edc56f1078a08f8b66d46kenneth_suter -e 's|$(SPRO_VROOT)/bin/||g' lib-dynload/64/_sysconfigdata.py \
e7b89fa07f734d79858edc56f1078a08f8b66d46kenneth_suter config-3.4m/Makefile)
e7b89fa07f734d79858edc56f1078a08f8b66d46kenneth_suter
e7b89fa07f734d79858edc56f1078a08f8b66d46kenneth_suter# common targets
e7b89fa07f734d79858edc56f1078a08f8b66d46kenneth_suterbuild: $(BUILD_64)
e7b89fa07f734d79858edc56f1078a08f8b66d46kenneth_suterinstall: $(INSTALL_64)
e7b89fa07f734d79858edc56f1078a08f8b66d46kenneth_suter
e7b89fa07f734d79858edc56f1078a08f8b66d46kenneth_suter# Using "-uall,-network" ensures all tests are run except the network tests.
e7b89fa07f734d79858edc56f1078a08f8b66d46kenneth_suter# The network tests contain many expected failures when run behind a firewall.
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# The "-v" ensures verbose mode. You can set TESTOPTS_PYTHON_TEST to a
0877596da3b90efc5fd39171cef80a2fb8ec395ekenneth_suter# particular test if you want to run just one test. For example,
68cf73392dc3d92f9a423be5e1fc08cdd590bb90kenneth_suter# $ TESTOPTS_PYTHON_TEST=test_sys gmake -k test
68cf73392dc3d92f9a423be5e1fc08cdd590bb90kenneth_suter# Note that when a test succeeds, the builds/*/.tested file gets created. You
68cf73392dc3d92f9a423be5e1fc08cdd590bb90kenneth_suter# may need to remove these files, or run "gmake clobber" or "gmake clean"
68cf73392dc3d92f9a423be5e1fc08cdd590bb90kenneth_suter# between tests.
76d78217d6ca09688d73efe4da48c76e6abc1f23kenneth_suter#
68cf73392dc3d92f9a423be5e1fc08cdd590bb90kenneth_suterCOMPONENT_TEST_ENV = EXTRATESTOPTS="-v -uall,-network $(TESTOPTS_PYTHON_TEST)"
68cf73392dc3d92f9a423be5e1fc08cdd590bb90kenneth_suterCOMPONENT_TEST_ENV += PATH="$(PATH)"
68cf73392dc3d92f9a423be5e1fc08cdd590bb90kenneth_suter# Prevent the tests from getting stuck waiting for input.
68cf73392dc3d92f9a423be5e1fc08cdd590bb90kenneth_suterCOMPONENT_TEST_TARGETS = test < /dev/null
68cf73392dc3d92f9a423be5e1fc08cdd590bb90kenneth_suter
68cf73392dc3d92f9a423be5e1fc08cdd590bb90kenneth_sutertest: $(TEST_64)
68cf73392dc3d92f9a423be5e1fc08cdd590bb90kenneth_suter
68cf73392dc3d92f9a423be5e1fc08cdd590bb90kenneth_suterBUILD_PKG_DEPENDENCIES = $(BUILD_TOOLS)
68cf73392dc3d92f9a423be5e1fc08cdd590bb90kenneth_suter
68cf73392dc3d92f9a423be5e1fc08cdd590bb90kenneth_suterinclude $(WS_TOP)/make-rules/depend.mk
68cf73392dc3d92f9a423be5e1fc08cdd590bb90kenneth_suter