Marcel Telka
2024-04-03 e60d2de5775b841de4ac7b2f31a5a640192ce2f3
make-rules/ips.mk
@@ -18,7 +18,7 @@
#
# CDDL HEADER END
#
# Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
# Copyright 2014 Andrzej Szeszo. All rights reserved.
#
@@ -96,16 +96,10 @@
$(foreach var, $(filter PY3_%_NAMING,$(.VARIABLES)), \
    $(eval $(call add-limiting-variable,$(var))))
ifeq   ($(strip $(COMPONENT_AUTOGEN_MANIFEST)),yes)
AUTOGEN_MANIFEST_TRANSFORMS +=      $(WS_TOP)/transforms/generate-cleanup
else
AUTOGEN_MANIFEST_TRANSFORMS +=      $(WS_TOP)/transforms/drop-all
endif
# For items defined as variables or that may contain whitespace, add
# them to a list to be expanded into PKG_OPTIONS later.
PKG_VARS += ARC_CASE TPNO
PKG_VARS += MACH MACH32 MACH64
PKG_VARS += BUILD_VERSION OS_VERSION PKG_SOLARIS_VERSION
PKG_VARS += GNU_TRIPLET
@@ -159,12 +153,19 @@
SAMPLE_MANIFEST_DIR =    $(COMPONENT_DIR)/manifests
SAMPLE_MANIFEST_FILE =   $(SAMPLE_MANIFEST_DIR)/sample-manifest.p5m
GENERIC_MANIFEST_FILE =   $(SAMPLE_MANIFEST_DIR)/generic-manifest.p5m
CANONICAL_MANIFESTS =   $(wildcard *.p5m)
CANONICAL_MANIFESTS =   $(filter-out dummy.p5m %.ARCH.p5m,$(wildcard *.p5m))
ifneq ($(wildcard $(HISTORY)),)
HISTORICAL_MANIFESTS = $(shell $(NAWK) -v FUNCTION=name -f $(GENERATE_HISTORY) < $(HISTORY))
endif
# Support for arch specific manifests
ARCH_MANIFESTS =   $(wildcard *.p5m.$(MACH))
GENERATED_ARCH_MANIFESTS =   $(ARCH_MANIFESTS:%.p5m.$(MACH)=%.ARCH.p5m)
CANONICAL_MANIFESTS +=  $(GENERATED_ARCH_MANIFESTS)
%.ARCH.p5m:    %.p5m.$(MACH)
   $(CP) $< $@
define ips-print-depend-require-rule
$(shell cat $(1) $(WS_TOP)/transforms/print-depend-require |\
@@ -185,7 +186,7 @@
define ips-print-names-rule
$(shell cat $(1) $(WS_TOP)/transforms/print-pkgs |\
   $(PKGMOGRIFY) $(PKG_OPTIONS) /dev/fd/0 |\
   $(PKGMOGRIFY) $(PKG_OPTIONS) $(call per-manifest-options,$(1:.p5m=)) /dev/fd/0 |\
   sed -e '/^$$/d' -e '/^#.*$$/d' | $(SORT) -u)
endef
@@ -216,7 +217,6 @@
VERSIONED_MANIFEST_TYPES =
UNVERSIONED_MANIFESTS = $(filter-out %-GENFRAG.p5m, $(CANONICAL_MANIFESTS))
GENERATE_GENERIC_TRANSFORMS=
# Look for manifests which need to be duplicated for each version of python.
ifeq ($(findstring -PYVER,$(CANONICAL_MANIFESTS)),-PYVER)
@@ -238,9 +238,9 @@
# - the $(PYV) string itself
PYTHON_PYV_VALUES = $(subst .,,$(PYTHON_VERSIONS) $(PYTHON_VERSIONS_OBSOLETING)) $$(PYV)
# Convert REQUIRED_PACKAGES to PYTHON_REQUIRED_PACKAGES for runtime/python
REQUIRED_PACKAGES_TRANSFORM += $(foreach v,$(PYTHON_PYV_VALUES), -e 's|^\(.*runtime/python\)-$(v)$$|PYTHON_\1|g')
REQUIRED_PACKAGES_TRANSFORM += $(foreach v,$(subst $,\$,$(PYTHON_PYV_VALUES)),-e 's|^\(.*runtime/python\)-$(v)$$|PYTHON_\1|g')
# Convert REQUIRED_PACKAGES to PYTHON_REQUIRED_PACKAGES for library/python/*
REQUIRED_PACKAGES_TRANSFORM += $(foreach v,$(PYTHON_PYV_VALUES), -e 's|^\(.*library/python/.*\)-$(v)$$|PYTHON_\1|g')
REQUIRED_PACKAGES_TRANSFORM += $(foreach v,$(subst $,\$,$(PYTHON_PYV_VALUES)),-e 's|^\(.*library/python/.*\)-$(v)$$|PYTHON_\1|g')
# Look for manifests which need to be duplicated for each version of perl.
ifeq ($(findstring -PERLVER,$(UNVERSIONED_MANIFESTS)),-PERLVER)
@@ -261,9 +261,9 @@
# - the $(PLV) string itself
PERL_PLV_VALUES = $(subst .,,$(PERL_VERSIONS) $(PERL_VERSIONS_OBSOLETING)) $$(PLV)
# Convert REQUIRED_PACKAGES to PERL_REQUIRED_PACKAGES for runtime/perl
REQUIRED_PACKAGES_TRANSFORM += $(foreach v,$(PERL_PLV_VALUES), -e 's|^\(.*runtime/perl\)-$(v)$$|PERL_\1|g')
REQUIRED_PACKAGES_TRANSFORM += $(foreach v,$(subst $,\$,$(PERL_PLV_VALUES)),-e 's|^\(.*runtime/perl\)-$(v)$$|PERL_\1|g')
# Convert REQUIRED_PACKAGES to PERL_REQUIRED_PACKAGES for library/perl-5/*
REQUIRED_PACKAGES_TRANSFORM += $(foreach v,$(PERL_PLV_VALUES), -e 's|^\(.*library/perl-5/.*\)-$(v)$$|PERL_\1|g')
REQUIRED_PACKAGES_TRANSFORM += $(foreach v,$(subst $,\$,$(PERL_PLV_VALUES)),-e 's|^\(.*library/perl-5/.*\)-$(v)$$|PERL_\1|g')
# Look for manifests which need to be duplicated for each version of ruby.
# NOPERL_MANIFESTS represents the manifests that are not Python or
@@ -275,7 +275,7 @@
RUBY_MANIFESTS = $(filter %-RUBYVER.p5m,$(NOPERL_MANIFESTS))
RUBYV_VALUES = $(RUBY_VERSIONS)
RUBYV_FMRI_VERSION = RUBYV
RUBYV_MANIFESTS = $(foreach v,$(RUBY_VERSIONS),$(RUBY_MANIFESTS:-RUBYVER.p5m=-$(shell echo $(v) | cut -d. -f1,2 | tr -d .).p5m))
RUBYV_MANIFESTS = $(foreach v,$(RUBY_VERSIONS),$(RUBY_MANIFESTS:-RUBYVER.p5m=-$(subst $(space),,$(wordlist 1,2,$(subst ., ,$(v)))).p5m))
RUBYNV_MANIFESTS = $(RUBY_MANIFESTS:-RUBYVER.p5m=.p5m)
else
NORUBY_MANIFESTS = $(NOPERL_MANIFESTS)
@@ -287,7 +287,7 @@
   $(PYV_MANIFESTS) $(PYNV_MANIFESTS) \
   $(PERLV_MANIFESTS) $(PERLNV_MANIFESTS) \
   $(RUBYV_MANIFESTS) $(RUBYNV_MANIFESTS) \
   $(NORUBY_MANIFESTS) $(HISTORICAL_MANIFESTS)
   $(NORUBY_MANIFESTS)
GENERATED =      $(MANIFEST_BASE)-generated
COMBINED =      $(MANIFEST_BASE)-combined
@@ -298,6 +298,8 @@
RESOLVED=$(VERSIONED_MANIFESTS:%.p5m=$(MANIFEST_BASE)-%.depend.res)
PRE_PUBLISHED=$(RESOLVED:%.depend.res=%.pre-published)
PUBLISHED=$(RESOLVED:%.depend.res=%.published)
PUBLISHED +=      $(HISTORICAL_MANIFESTS:%.p5m=$(MANIFEST_BASE)-%.published)
COPYRIGHT_FILE ?=   $(COMPONENT_NAME)-$(COMPONENT_VERSION).copyright
IPS_COMPONENT_VERSION ?=   $(COMPONENT_VERSION)
@@ -319,19 +321,17 @@
sample-manifest:   $(GENERATED).p5m
$(GENERATED).p5m:   install $(GENERATE_EXTRA_DEPS)
   [ ! -d $(SAMPLE_MANIFEST_DIR) ] && $(MKDIR) $(SAMPLE_MANIFEST_DIR) || true
   $(MKDIR) $(SAMPLE_MANIFEST_DIR)
   $(PKGSEND) generate $(PKG_HARDLINKS:%=--target %) $(PROTO_DIR) | \
   $(PKGMOGRIFY) $(PKG_OPTIONS) /dev/fd/0 $(GENERATE_TRANSFORMS) | \
      sed -e '/^$$/d' -e '/^#.*$$/d' \
      -e '/\.la$$/d' | \
      $(GSED) -e '/^$$/d' -e '/^#.*$$/d' \
         -e '/\.la$$/d' \
         -e 's/$(subst .,\.,$(GCC_GNU_TRIPLET))/$$(GCC_GNU_TRIPLET)/g' | \
      $(PKGFMT) -u | \
      uniq | \
      $(PKGFMT) | \
      cat $(METADATA_TEMPLATE) - $(GENERATE_EXTRA_CMD) | \
      $(CAT) $(METADATA_TEMPLATE) - $(GENERATE_EXTRA_CMD) | \
      $(TEE) $@ $(SAMPLE_MANIFEST_FILE) >/dev/null
   if [ "$(GENERATE_GENERIC_TRANSFORMS)X" != "X" ]; \
   then sed $(GENERATE_GENERIC_TRANSFORMS) $(SAMPLE_MANIFEST_FILE) \
      | gawk '!seen[$$0]++' > $(GENERIC_MANIFEST_FILE); fi;
# copy the canonical manifest(s) to the build tree
$(MANIFEST_BASE)-%.generate:   %.p5m canonical-manifests
@@ -442,8 +442,7 @@
       -D RUBYV=$(subst .,,$(1)) $$< > $$@
endef
$(foreach ver,$(RUBY_VERSIONS),\
        $(eval $(call ruby-manifest-rule,$(shell echo $(ver) | \
            cut -d. -f1,2),$(ver))))
        $(eval $(call ruby-manifest-rule,$(subst $(space),.,$(wordlist 1,2,$(subst ., ,$(ver)))),$(ver))))
# A rule to create a helper transform package for ruby, that will insert the
# appropriate conditional dependencies into a ruby library's
@@ -452,9 +451,8 @@
$(BUILD_DIR)/mkgeneric-ruby: $(WS_TOP)/make-rules/shared-macros.mk $(MAKEFILE_PREREQ)
   $(RM) $@
   $(foreach ver,$(RUBY_VERSIONS),\
           $(call mkgeneric,runtime/ruby,$(shell echo $(ver) | \
               cut -d. -f1,2 | tr -d .)))
   $(call mkgenericdep,runtime/ruby,$(shell echo $(RUBY_VERSIONS) | cut -d. -f1,2 | tr -d .))
           $(call mkgeneric,runtime/ruby,$(subst $(space),,$(wordlist 1,2,$(subst ., ,$(ver))))))
   $(call mkgenericdep,runtime/ruby,$(subst $(space),,$(wordlist 1,2,$(subst ., ,$(RUBY_VERSIONS)))))
# Build Ruby version-wrapping manifests from the generic version.
# Creates build/manifest-*-modulename.p5m file.
@@ -464,30 +462,12 @@
           $(WS_TOP)/transforms/mkgeneric $< > $@
   if [ -f $*-GENFRAG.p5m ]; then cat $*-GENFRAG.p5m >> $@; fi
ifeq   ($(strip $(COMPONENT_AUTOGEN_MANIFEST)),yes)
# auto-generate file/directory list
$(MANIFEST_BASE)-%.generated:   %.p5m $(BUILD_DIR)
   (cat $(METADATA_TEMPLATE); \
   $(PKGSEND) generate $(PKG_HARDLINKS:%=--target %) $(PROTO_DIR)) | \
   $(PKGMOGRIFY) $(PKG_OPTIONS) /dev/fd/0 $(AUTOGEN_MANIFEST_TRANSFORMS) | \
      sed -e '/^$$/d' -e '/^#.*$$/d' | $(PKGFMT) | \
      cat $< - >$@
per-manifest-options = $(foreach var,$(PKG_VARS),$(if $($(var).$(1)),-D $(var)="$(strip $($(var).$(1)))")) \
   $(if $(COMPONENT_CLASSIFICATION.$(1)),-D COMPONENT_CLASSIFICATION="org.opensolaris.category.2008:$(strip $(COMPONENT_CLASSIFICATION.$(1)))")
# mogrify non-parameterized manifests
$(MANIFEST_BASE)-%.mogrified:   %.generated $(MAKEFILE_PREREQ)
   $(PKGMOGRIFY) $(PKG_OPTIONS) $< \
      $(PUBLISH_TRANSFORMS) | \
      sed -e '/^$$/d' -e '/^#.*$$/d' | uniq >$@
# mogrify parameterized manifests
$(MANIFEST_BASE)-%.mogrified:   $(MANIFEST_BASE)-%.generated $(MAKEFILE_PREREQ)
   $(PKGMOGRIFY) $(PKG_OPTIONS) $< \
      $(PUBLISH_TRANSFORMS) | \
      sed -e '/^$$/d' -e '/^#.*$$/d' | uniq >$@
else
# mogrify non-parameterized manifests
$(MANIFEST_BASE)-%.mogrified:   %.p5m $(BUILD_DIR) $(MAKEFILE_PREREQ)
   $(PKGMOGRIFY) $(PKG_OPTIONS) $< \
   $(PKGMOGRIFY) $(PKG_OPTIONS) $(call per-manifest-options,$*) $< \
      $(PUBLISH_TRANSFORMS) | \
      sed -e '/^$$/d' -e '/^#.*$$/d' | uniq >$@
@@ -496,13 +476,15 @@
   $(PKGMOGRIFY) $(PKG_OPTIONS) $< \
      $(PUBLISH_TRANSFORMS) | \
      sed -e '/^$$/d' -e '/^#.*$$/d' | uniq >$@
endif
# mangle the file contents
$(BUILD_DIR) $(MANGLED_DIR):
   $(MKDIR) $@
PKGMANGLE_OPTIONS = -D $(MANGLED_DIR) $(PKG_PROTO_DIRS:%=-d %)
ifeq ($(strip $(USE_CTF)),yes)
PKGMANGLE_OPTIONS += -c $(CTFCONVERT)
endif
$(MANIFEST_BASE)-%.mangled:   $(MANIFEST_BASE)-%.mogrified $(MANGLED_DIR)
   $(PKGMANGLE) $(PKGMANGLE_OPTIONS) -m $< >$@
@@ -531,9 +513,12 @@
$(BUILD_DIR)/runtime-perl.p5m: $(WS_TOOLS)/runtime-perl.p5m
   $(CP) $< $@
$(BUILD_DIR)/runtime-ruby.p5m: $(WS_TOOLS)/runtime-ruby.p5m
   $(CP) $< $@
# resolve the dependencies all at once
$(BUILD_DIR)/.resolved-$(MACH):   $(DEPENDED) $(RESOLVE_DEPS) $(BUILD_DIR)/runtime-perl.p5m
   $(PKGDEPEND) resolve $(RESOLVE_DEPS:%=-e %) -m $(DEPENDED) $(BUILD_DIR)/runtime-perl.p5m
$(BUILD_DIR)/.resolved-$(MACH):   $(DEPENDED) $(RESOLVE_DEPS) $(BUILD_DIR)/runtime-perl.p5m $(BUILD_DIR)/runtime-ruby.p5m
   $(PKGDEPEND) resolve $(RESOLVE_DEPS:%=-e %) -m $(DEPENDED) $(BUILD_DIR)/runtime-perl.p5m $(BUILD_DIR)/runtime-ruby.p5m
   $(TOUCH) $@
# generate list of sed rules to filter out component's own packages from
@@ -597,10 +582,17 @@
      sed -e '/^$$/d' -e '/^#.*$$/d' | uniq >$@
   @echo "NEW PACKAGE CONTENTS ARE LOCALLY VALIDATED AND READY TO GO"
$(MANIFEST_BASE)-%.histogrified: $(MANIFEST_BASE)-%.p5m
   $(PKGMOGRIFY) -D CONSOLIDATION="$(CONSOLIDATION)" $< > $@
# Push to the repo
$(MANIFEST_BASE)-%.published:   $(MANIFEST_BASE)-%.pre-published
   $(PKGSEND) $(PKGSEND_PUBLISH_OPTIONS) $<
   $(PKGFMT) <$< >$@
$(MANIFEST_BASE)-%.published:   $(MANIFEST_BASE)-%.histogrified
   $(PKGSEND) -s $(PKG_REPO) publish --fmri-in-manifest --no-catalog $<
   $(CP) $< $@
$(BUILD_DIR)/.pre-published-$(MACH):   $(PRE_PUBLISHED)
   $(TOUCH) $@
@@ -613,10 +605,11 @@
      $(foreach t,$(VERSIONED_MANIFEST_TYPES),$(call ips-print-depend-require-type-rule,$(t))) | tr ' ' '\n'
print-package-names:   canonical-manifests $(MKGENERIC_SCRIPTS)
   @echo $(call ips-print-names-rule,$(NONVER_MANIFESTS)) \
   @echo $(foreach m,$(NONVER_MANIFESTS),\
      $(call ips-print-names-rule,$(m))) \
       $(foreach t,$(VERSIONED_MANIFEST_TYPES),\
           $(call ips-print-names-type-rule,$(t))) \
       | tr ' ' '\n'
       | tr ' ' '\n' | $(SORT) -u
print-package-paths:   canonical-manifests
   @cat $(CANONICAL_MANIFESTS) $(WS_TOP)/transforms/print-paths | \
@@ -671,3 +664,4 @@
CLEAN_PATHS +=   $(BUILD_DIR)/mkgeneric-perl
CLEAN_PATHS +=   $(BUILD_DIR)/mkgeneric-python
CLEAN_PATHS +=   $(BUILD_DIR)/mkgeneric-ruby
CLEAN_PATHS +=   $(GENERATED_ARCH_MANIFESTS)