Marcel Telka
2024-04-08 d6ccb6ab62f2f8726859d4d567e79af34435042f
make-rules/shared-macros.mk
@@ -26,8 +26,8 @@
# whenever PATH is to be defined there:
#     PATH = $(PATH.illumos)
#     PATH = $(PATH.gnu)
PATH.illumos=$(PATH.prepend):$(USRBINDIR$(BITS)):$(USRBINDIR):$(GNUBIN):$(USRSBINDIR$(BITS)):$(USRSBINDIR):$(PERL5BINDIR)
PATH.gnu=$(PATH.prepend):$(GNUBIN):$(USRBINDIR$(BITS)):$(USRBINDIR):$(USRSBINDIR$(BITS)):$(USRSBINDIR):$(PERL5BINDIR)
PATH.illumos =   $(subst $(space),:,$(strip $(PATH.prepend))):$(USRBINDIR$(BITS)):$(USRBINDIR):$(GNUBIN):$(USRSBINDIR$(BITS)):$(USRSBINDIR)
PATH.gnu =   $(subst $(space),:,$(strip $(PATH.prepend))):$(GNUBIN):$(USRBINDIR$(BITS)):$(USRBINDIR):$(USRSBINDIR$(BITS)):$(USRSBINDIR)
# Default PATH
PATH = $(PATH.illumos)
@@ -44,7 +44,7 @@
#EXTERNAL_ARCHIVE_MIRROR = \
#   http://static.opensolaris.org/action/browse/userland/tarball/userland
DLC_ARCHIVE_MIRROR = http://dlc.openindiana.org/oi-userland/source-archives
DLC_ARCHIVE_MIRROR = https://dlc.openindiana.org/oi-userland/source-archives
# Default to looking for source archives on the internal mirror and the external
# mirror before we hammer on the community source archive repositories.
@@ -98,6 +98,9 @@
empty :=
space := $(empty) $(empty)
# Define $(comma) as single comma so we can use it in text transforming functions
comma = ,
ROOT =         /
# Distribution name and version
@@ -107,7 +110,7 @@
# to determine the distribution version
# (it should look like OpenIndiana Hipster YYYY.MM).
DISTRIBUTION_NAME = OpenIndiana Hipster
DISTRIBUTION_VERSION = 2023.05
DISTRIBUTION_VERSION = 2023.10
# Native OS version
OS_VERSION :=      $(shell uname -r)
SOLARIS_VERSION =   $(OS_VERSION:5.%=2.%)
@@ -172,14 +175,6 @@
PYTHON_VERSION = 3.9
PYTHON_VERSIONS = 3.9
# These variables are for backward compatibility only.  Components should stop
# to use them.  Once they do so these vars should be removed.
PYTHON3_VERSION   = $(PYTHON_VERSION)
PYTHON3_VERSIONS = $(PYTHON_VERSIONS)
PYTHON3_RUNTIME_PKG = runtime/python-$(subst .,,$(PYTHON3_VERSION))
PYTHON_ALL_VERSIONS = $(PYTHON_VERSIONS)
PYTHON_VERSIONS_ALL= $(PYTHON_VERSIONS)
# Python up to 2.7 was built both 32-bit and 64-bit.  Starting with Python 3.x
# the python package is built 64-bit only.  So now all PYTHON_VERSIONS are
# 64-bit only.
@@ -193,7 +188,7 @@
#
# This list should be usually empty.  Intersection of
# PYTHON_VERSIONS_OBSOLETING and PYTHON_VERSIONS lists MUST be always empty.
PYTHON_VERSIONS_OBSOLETING = 2.7 3.5 3.7
PYTHON_VERSIONS_OBSOLETING = 2.7 3.7
# PYTHON3_SOABI variable defines the naming scheme
# of python3 extension libraries: cpython or abi3.
@@ -233,26 +228,30 @@
ARCHLIBSUBDIR64   = $(MACH64)
ARCHLIBSUBDIR   = $(ARCHLIBSUBDIR$(BITS))
ETCDIR =   /etc
USRDIR =   /usr
BINDIR =   /bin
SBINDIR =   /sbin
LIBDIR =   /lib
VARDIR =   /var
KERNELDRVDIR =   /kernel/drv
KERNELDRVDIR32 =/kernel/drv
KERNELDRVDIR64 =/kernel/drv/$(MACH64)
USRBINDIR =    $(USRDIR)/bin
USRBINDIR32 =   $(USRDIR)/bin/$(MACH32)
USRBINDIR64 =   $(USRDIR)/bin/$(MACH64)
USRSBINDIR =    $(USRDIR)/sbin
USRSBINDIR32 =   $(USRDIR)/sbin/$(MACH32)
USRSBINDIR64 =   $(USRDIR)/sbin/$(MACH64)
USRLIBDIR =    $(USRDIR)/lib
USRLIBDIR32 =   $(USRDIR)/lib
USRLIBDIR64 =   $(USRDIR)/lib/$(MACH64)
USRSHAREDIR =   $(USRDIR)/share
USRINCDIR =    $(USRDIR)/include
ETCDIR =      /etc
USRDIR =      /usr
BINDIR =      /bin
SBINDIR =      /sbin
LIBDIR =      /lib
LIBEXECDIR =      /libexec
VARDIR =      /var
KERNELDRVDIR =      /kernel/drv
KERNELDRVDIR32 =   /kernel/drv
KERNELDRVDIR64 =   /kernel/drv/$(MACH64)
USRBINDIR =       $(USRDIR)/bin
USRBINDIR32 =      $(USRDIR)/bin/$(MACH32)
USRBINDIR64 =      $(USRDIR)/bin/$(MACH64)
USRSBINDIR =       $(USRDIR)/sbin
USRSBINDIR32 =      $(USRDIR)/sbin/$(MACH32)
USRSBINDIR64 =      $(USRDIR)/sbin/$(MACH64)
USRLIBDIR =       $(USRDIR)/lib
USRLIBDIR32 =      $(USRDIR)/lib
USRLIBDIR64 =      $(USRDIR)/lib/$(MACH64)
USRLIBEXECDIR =      $(USRDIR)/libexec
USRLIBEXECDIR32 =   $(USRDIR)/libexec
USRLIBEXECDIR64 =   $(USRDIR)/libexec/$(MACH64)
USRSHAREDIR =      $(USRDIR)/share
USRINCDIR =       $(USRDIR)/include
USRSHARELOCALEDIR =   $(USRSHAREDIR)/locale
USRSHAREMANDIR =   $(USRSHAREDIR)/man
USRSHAREDOCDIR =   $(USRSHAREDIR)/doc
@@ -270,20 +269,22 @@
# The *.$(BITS) variables are different from those above (better suited for
# isaexec wrapper), and allow for default 32-bit vs. nondefault 64-bit setups
USRBINDIR.32 =    $(USRBINDIR)
USRBINDIR.64 =    $(USRBINDIR64)
USRSBINDIR.32 =   $(USRSBINDIR)
USRSBINDIR.64 =   $(USRSBINDIR64)
USRLIBDIR.32 =    $(USRLIBDIR)
USRLIBDIR.64 =    $(USRLIBDIR64)
PROTOETCDIR =   $(PROTO_DIR)/$(ETCDIR)
PROTOETCSECDIR = $(PROTO_DIR)/$(ETCDIR)/security
PROTOUSRDIR =   $(PROTO_DIR)/$(USRDIR)
PROTOBINDIR =   $(PROTO_DIR)/$(BINDIR)
PROTOSBINDIR =   $(PROTO_DIR)/$(SBINDIR)
PROTOLIBDIR =   $(PROTO_DIR)/$(LIBDIR)
PROTOVARDIR =   $(PROTO_DIR)/$(VARDIR)
USRBINDIR.32 =       $(USRBINDIR)
USRBINDIR.64 =       $(USRBINDIR64)
USRSBINDIR.32 =      $(USRSBINDIR)
USRSBINDIR.64 =      $(USRSBINDIR64)
USRLIBDIR.32 =       $(USRLIBDIR)
USRLIBDIR.64 =       $(USRLIBDIR64)
USRLIBEXECDIR.32 =   $(USRLIBEXECDIR)
USRLIBEXECDIR.64 =   $(USRLIBEXECDIR64)
PROTOETCDIR =      $(PROTO_DIR)/$(ETCDIR)
PROTOETCSECDIR =    $(PROTO_DIR)/$(ETCDIR)/security
PROTOUSRDIR =      $(PROTO_DIR)/$(USRDIR)
PROTOBINDIR =      $(PROTO_DIR)/$(BINDIR)
PROTOSBINDIR =      $(PROTO_DIR)/$(SBINDIR)
PROTOLIBDIR =      $(PROTO_DIR)/$(LIBDIR)
PROTOLIBEXECDIR =   $(PROTO_DIR)/$(LIBEXECDIR)
PROTOVARDIR =      $(PROTO_DIR)/$(VARDIR)
PROTOKERNELDRVDIR =     $(PROTO_DIR)/$(KERNELDRVDIR)
PROTOKERNELDRVDIR32 =   $(PROTO_DIR)/$(KERNELDRVDIR32)
PROTOKERNELDRVDIR64 =   $(PROTO_DIR)/$(KERNELDRVDIR64)
@@ -296,6 +297,9 @@
PROTOUSRLIBDIR =   $(PROTO_DIR)/$(USRLIBDIR)
PROTOUSRLIBDIR32 =   $(PROTO_DIR)/$(USRLIBDIR32)
PROTOUSRLIBDIR64 =   $(PROTO_DIR)/$(USRLIBDIR64)
PROTOUSRLIBEXECDIR =   $(PROTO_DIR)/$(USRLIBEXECDIR)
PROTOUSRLIBEXECDIR32 =   $(PROTO_DIR)/$(USRLIBEXECDIR32)
PROTOUSRLIBEXECDIR64 =   $(PROTO_DIR)/$(USRLIBEXECDIR64)
PROTOUSRINCDIR =   $(PROTO_DIR)/$(USRINCDIR)
PROTOUSRSHAREDIR =   $(PROTO_DIR)/$(USRSHAREDIR)
PROTOUSRSHARELIBDIR =   $(PROTO_DIR)/$(USRSHARELIBDIR)
@@ -318,6 +322,8 @@
PROTOUSRSBINDIR.64 =   $(PROTOUSRSBINDIR64)
PROTOUSRLIBDIR.32 =    $(PROTOUSRLIBDIR)
PROTOUSRLIBDIR.64 =    $(PROTOUSRLIBDIR64)
PROTOUSRLIBEXECDIR.32 = $(PROTOUSRLIBEXECDIR)
PROTOUSRLIBEXECDIR.64 = $(PROTOUSRLIBEXECDIR64)
# NOTE: We do not build SFW contents
# /usr/sfw/bin is just a historic artefact, containing symlinks
@@ -550,6 +556,11 @@
# set the default directory for test of the component
COMPONENT_TEST_DIR =   $(@D)
# prepare the testing environment before we run tests
COMPONENT_TEST_DEP += component-test-environment-prep
# we test built components
COMPONENT_TEST_DEP += $(BUILD_DIR)/%/.built
# determine the type of tests we want to run.
ifeq ($(strip $(wildcard $(COMPONENT_TEST_RESULTS_DIR)/results-*.master)),)
TEST_NO_ARCH =      $(BUILD_DIR_NO_ARCH)/.tested
@@ -622,13 +633,9 @@
        fi; \
    fi)
GCC_DEFAULT =   10
GCC_VERSION =   $(GCC_DEFAULT)
GCC_DEFAULT =   13
GCC_VERSION ?=   $(GCC_DEFAULT)
GCC_ROOT =   /usr/gcc/$(GCC_VERSION)
GCC_LIBDIR.32 =   $(GCC_ROOT)/lib
GCC_LIBDIR.64 =   $(GCC_ROOT)/lib/$(MACH64)
GCC_LIBDIR =   $(GCC_LIBDIR.$(BITS))
# Define runtime package names to be used in dependencies
GCC_VERSION_MAJOR    = $(shell echo $(GCC_VERSION) | $(GSED) -e 's/\([0-9]\+\)\.[0-9]\+.*/\1/')
@@ -658,6 +665,7 @@
GCC_INCDIR =   $(GCC_ROOT)/include
GCC_LIBGCCDIR =   $(GCC_ROOT)/lib/gcc
GCC_INCGXXDIR =   $(GCC_ROOT)/include/c++/$(GCC_FULL_VERSION)
PATH.prepend +=   $(GCC_BINDIR)
ifneq ($(strip $(CCACHE)),)
@@ -684,20 +692,19 @@
LD =      /usr/bin/ld
# Clang definitions (we only have 64 bit clang)
CLANG_VERSION           ?= 15
CLANG_FULL_VERSION      ?= $(CLANG_VERSION).0
CLANG_DEFAULT =      18
CLANG_VERSION =      $(CLANG_DEFAULT)
CLANG_FULL_VERSION =   $(CLANG_VERSION).1
CLANG_PREFIX             = /usr/clang/$(CLANG_FULL_VERSION)
CLANG_BINDIR =      $(CLANG_PREFIX)/bin
CLANG_LIBDIR             = $(CLANG_PREFIX)/lib
CLANG_DEVELOPER_PKG      = developer/clang-$(CLANG_VERSION)
CLANG_RUNTIME_PKG        = runtime/clang-$(CLANG_VERSION)
REQUIRED_PACKAGES_SUBST += CLANG_DEVELOPER_PKG
REQUIRED_PACKAGES_SUBST += CLANG_RUNTIME_PKG
PATH.prepend +=      $(CLANG_BINDIR)
# Python definitions
PYTHON.2.7.VENDOR_PACKAGES.64 = /usr/lib/python2.7/vendor-packages/64
PYTHON.2.7.VENDOR_PACKAGES.32 = /usr/lib/python2.7/vendor-packages
PYTHON.2.7.VENDOR_PACKAGES = $(PYTHON.2.7.VENDOR_PACKAGES.$(BITS))
PYTHON.3.9.VENDOR_PACKAGES.64 = /usr/lib/python3.9/vendor-packages
PYTHON.3.9.VENDOR_PACKAGES.32 = /usr/lib/python3.9/vendor-packages
PYTHON.3.9.VENDOR_PACKAGES = $(PYTHON.3.9.VENDOR_PACKAGES.$(BITS))
@@ -707,11 +714,27 @@
F77 =      $(F77.$(COMPILER).$(BITS))
FC =      $(FC.$(COMPILER).$(BITS))
RUBY_VERSION =  2.3
#
# We will start to obsolete major Ruby versions according the following table:
#
# +--------------+----------------+
# | Ruby version | Obsolete after |
# +--------------+----------------+
# |     2.3      |   2019-03-31   |
# |     3.2      |   2026-03-31   |
# +--------------+----------------+
#
# See https://www.ruby-lang.org/en/downloads/branches/
#
RUBY_VERSION = 3.2
RUBY_LIB_VERSION.2.3 = 2.3.0
RUBY_LIB_VERSION.2.6 = 2.6.0
RUBY_LIB_VERSION.3.2 = 3.2.0
RUBY.2.3 =   /usr/ruby/2.3/bin/ruby
RUBY.2.6 =   /usr/ruby/2.6/bin/ruby
RUBY.3.2 =   /usr/ruby/3.2/bin/ruby
RUBY =          $(RUBY.$(RUBY_VERSION))
RUBY_LIB_VERSION = $(RUBY_LIB_VERSION.$(RUBY_VERSION))
@@ -735,14 +758,10 @@
# python2 was built for both 32- and 64-bits.
# python3 is built for 64-bits only.
PYTHON.2.7 =   /usr/bin/python2.7
PYTHON.2.7.64 =   /usr/bin/$(MACH64)/python2.7
PYTHON.3.9 =   /usr/bin/python3.9
PYTHON.3.9.64 =   $(PYTHON.3.9)
PYTHON.64 =   $(PYTHON.$(PYTHON_VERSION).64)
PYTHON.32 =   $(PYTHON.$(PYTHON_VERSION))
PYTHON =   $(PYTHON.$(PYTHON_VERSION))
TOX.3.9 =   /usr/bin/tox-3.9
@@ -784,12 +803,11 @@
# and re-add $(PYTHON_SCRIPTS_PROCESS)
COMPONENT_POST_INSTALL_ACTION += $(PYTHON_SCRIPTS_PROCESS)
JAVA8_HOME =   /usr/jdk/instances/openjdk1.8.0
JAVA11_HOME =   /usr/jdk/instances/openjdk11.0.10
JAVA17_HOME =   /usr/jdk/instances/openjdk17
JAVA18_HOME =   /usr/jdk/instances/openjdk18
JAVA19_HOME =   /usr/jdk/instances/openjdk19
JAVA_HOME = $(JAVA8_HOME)
JAVA8_HOME =   /usr/jdk/openjdk1.8.0
JAVA11_HOME =   /usr/jdk/openjdk11
JAVA17_HOME =   /usr/jdk/openjdk17
JAVA21_HOME =   /usr/jdk/openjdk21
JAVA_HOME = $(JAVA17_HOME)
# QT macros
# We deliver version 5 in 32- and 64-bit variants.
@@ -805,7 +823,7 @@
QT5_PKG_CONFIG_PATH = $(QT5_LIBDIR)/pkgconfig
# We deliver version 6 only in a 64-bit variant.
QT6_VERSION = 6.3
QT6_VERSION = 6.6
QT6_BASEDIR = $(USRLIBDIR)/qt/$(QT6_VERSION)
QT6_BINDIR = $(QT6_BASEDIR)/bin/$(MACH64)
QT6_LIBDIR = $(QT6_BASEDIR)/lib/$(MACH64)
@@ -878,11 +896,30 @@
PKG_MACROS +=   PERL_ARCH=$(PERL_ARCH)
PKG_MACROS +=   PERL_VERSION=$(PERL_VERSION)
#
# Upstream supports major PostgreSQL versions for 5 years after its initial
# release.  After that one last minor version is released and then the major
# version is considered EOL.
#
# We will start to obsolete PostgreSQL versions according the following table:
#
# +--------------------+----------------+
# | PostgreSQL version | Obsolete after |
# +--------------------+----------------+
# |         12         |   2024-11-14   |
# |         14         |   2026-11-12   |
# |         15         |   2027-11-11   |
# |         16         |   2028-11-09   |
# +--------------------+----------------+
#
# See https://www.postgresql.org/support/versioning/
#
# Config magic for Postgres/EnterpriseDB/...
# Default DB version should be the newest one we do have so we detect any
# incompatibilities as soon as possible.  Components could override this when
# they are not ready yet to compile with so new version.
PG_VERSION ?=   15
PG_VERSION ?=   16
PG_IMPLEM ?=    postgres
PG_VERNUM =     $(subst .,,$(PG_VERSION))
# For dependencies, including REQUIRED_PACKAGES if needed
@@ -911,10 +948,26 @@
PG_CONFIG.32 =  $(PG_BINDIR.32)/pg_config
PG_CONFIG.64 =  $(PG_BINDIR.64)/pg_config
PG_CONFIG =     $(PG_CONFIG.$(BITS))
PATH.prepend +=   $(PG_BINDIR)
PKG_MACROS +=   PG_VERSION=$(PG_VERSION)
PKG_MACROS +=   PG_VERNUM=$(PG_VERNUM)
PKG_MACROS +=   PG_BASEPKG=$(PG_BASEPKG)
#
# Upstream maintains long-term MariaDB releases for at least 5 years and
# short-term MariaDB releases for at least one year.
#
# We will start to obsolete MariaDB versions according the following table:
#
# +-----------------+----------------+
# | MariaDB version | Obsolete after |
# +-----------------+----------------+
# |      10.6       |   2026-07      |
# +-----------------+----------------+
#
# See https://mariadb.org/about/#maintenance-policy
#
# Config magic for MySQL/MariaDB/Percona/...
# Default DB version should be the newest one we do have so we detect any
@@ -959,6 +1012,7 @@
MYSQL_CONFIG.64 =  $(MYSQL_BINDIR.64)/mysql_config
MYSQL_CONFIG =     $(MYSQL_CONFIG.$(BITS))
MYSQL_PKG_CONFIG_PATH =   $(MYSQL_LIBDIR)/pkgconfig
PATH.prepend +=      $(MYSQL_BINDIR)
PKG_MACROS +=   MYSQL_VERSION=$(MYSQL_VERSION)
PKG_MACROS +=   MYSQL_VERNUM=$(MYSQL_VERNUM)
@@ -997,6 +1051,12 @@
TCLSH.8.6.sparc.64 =   /usr/bin/sparcv9/tclsh8.6
TCLSH =      $(TCLSH.$(TCL_VERSION).$(MACH).$(BITS))
# ICU library
ICU_VERSION =         74
ICU_LIBRARY_PKG =      library/icu-$(ICU_VERSION)
REQUIRED_PACKAGES_SUBST +=   ICU_LIBRARY_PKG
CCSMAKE =   /usr/ccs/bin/make
GMAKE =      /usr/gnu/bin/make
GPATCH =   /usr/gnu/bin/patch
@@ -1018,8 +1078,8 @@
PKGLINT =   ${WS_TOOLS}/pkglint
endif
ACLOCAL =   /usr/bin/aclocal-1.10
AUTOMAKE =   /usr/bin/automake-1.10
ACLOCAL =   /usr/bin/aclocal-1.16
AUTOMAKE =   /usr/bin/automake-1.16
AUTORECONF =    /usr/bin/autoreconf
KSH93 =         /usr/bin/ksh93
@@ -1031,7 +1091,7 @@
LN =      /bin/ln
CAT =      /bin/cat
SYMLINK =   /bin/ln -s
ENV =      /usr/bin/env
ENV =      /usr/bin/env -i
FIND =      /usr/bin/find
INSTALL =   /usr/bin/ginstall
GNU_GREP =   /usr/gnu/bin/grep
@@ -1043,6 +1103,10 @@
STRIP =   /usr/bin/strip
IPS2TGZ =    $(WS_TOOLS)/ips2tgz
JQ =      /usr/bin/jq
DOS2UNIX =   /usr/bin/dos2unix
TAC =      /usr/bin/tac
QUILT =      /usr/bin/quilt
CTFCONVERT =   /opt/onbld/bin/$(MACH)/ctfconvert
INS.dir=        $(INSTALL) -d $@
INS.file=       $(INSTALL) -m 444 $< $(@D)
@@ -1189,6 +1253,31 @@
# Add compiler specific 'default' features
CFLAGS +=   $(CFLAGS.$(COMPILER))
# Per-compiler CFLAGS to use when building for CTF.  Currently only defined
# for gcc; could be made to work with other compilers.
# -gdwarf-4 is the newest DWARF revision understood by illumos libctf
#
# -gstrict-dwarf prevents the compiler from including newer DWARF features
CTF_CFLAGS.gcc = -g -gdwarf-4 -gstrict-dwarf
# -msave-args makes it possible for debugging tools (specifically pstack and
# mdb) to retrieve function arguments, and is required for the python pstack
# hooks.
CTF_CFLAGS.gcc += -msave-args
# By default, GCC may put parts of functions in different named sub-sections
# of .text based on their presumed or measured calling frequency.  This is not
# currently handled by libctf and other illumos tools which assume that a
# function's text lies in a single contiguous range of virtual addresses.
# Disable this optimization if building with CTF.
CTF_CFLAGS.gcc += -fno-reorder-functions -fno-reorder-blocks-and-partition
# Enable CTF if desired
ifeq ($(strip $(USE_CTF)),yes)
CFLAGS += $(if $(CTF_CFLAGS.$(COMPILER)), \
   $(CTF_CFLAGS.$(COMPILER)), \
   $(error Error: CTF_CFLAGS.$(COMPILER) must be defined to use CTF with $(COMPILER)))
endif
# Build 32 or 64 bit objects in C++ as well.
CXXFLAGS +=   $(CC_BITS)
@@ -1398,6 +1487,15 @@
# Generate conflicting packages for all built python version variants for given package
TEST_CONFLICTING_PACKAGES += $(foreach ver,$(PYTHON_VERSIONS),$(TEST_CONFLICTING_PACKAGES.python:%=%-$(subst .,,$(ver))))
# Targets for some tools rarely used by the build framework.  We do not add
# these tools to USERLAND_REQUIRED_PACKAGES to do not pollute it.
$(QUILT):
   @echo
   @echo "$(QUILT) is missing"
   @echo "Please install developer/quilt package"
   @echo
   @exit 1
include $(WS_MAKE_RULES)/environment.mk
include $(WS_MAKE_RULES)/depend.mk
include $(WS_MAKE_RULES)/component.mk