This is an automated email from the ASF dual-hosted git repository.

asf-gitbox-commits pushed a commit to branch cyclonedx
in repository https://gitbox.apache.org/repos/asf/ant.git

commit 4845f98bddebdfa3e93963015b5e7b5e90f9b13f
Author: Stefan Bodewig <[email protected]>
AuthorDate: Sun Jun 7 14:55:59 2026 +0200

    create SBOMs for distribution tarballs
---
 build.xml | 385 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 380 insertions(+), 5 deletions(-)

diff --git a/build.xml b/build.xml
index b0871bacb..e9a739a97 100644
--- a/build.xml
+++ b/build.xml
@@ -1392,7 +1392,7 @@
     <delete file="${dist.base.binaries}/${dist.name}-bin.tar"/>
   </target>
 
-  <target name="main-distribution" 
depends="pkg-distribution,tar-distribution,jars-sources,test-jar-source"
+  <target name="main-distribution" 
depends="pkg-distribution,-tar-distribution-sboms,jars-sources,test-jar-source"
           description="--> creates the zip, pkg, and tar distributions">
 
     <copy todir="${java-repository.dir}">
@@ -1503,7 +1503,7 @@
     </checksums>
   </target>
 
-  <target name="distribution" depends="main-distribution"
+  <target name="distribution" depends="main-distribution,distribution-sboms"
           description="--> creates the full Apache Ant distribution">
   </target>
 
@@ -2232,7 +2232,7 @@ ${antunit.reports}
              classname="org.apache.ant.cyclonedx.ComponentBomTask"
              classpathref="classpath" 
ignoresystemclasses="${ignoresystemclasses}"/>
 
-  <target name="init-cyclonedx" if="cyclonedx.antlib.present">
+  <target name="-init-cyclonedx" if="cyclonedx.antlib.present">
     <typedef uri="antlib:org.apache.ant.cyclonedx"
       resource="org/apache/ant/cyclonedx/antlib.xml">
       <classpath refid="classpath"/>
@@ -2295,7 +2295,7 @@ ${antunit.reports}
     </cdx:externalreferenceset>
   </target>
 
-  <target name="component-boms" depends="init-cyclonedx,jars,test-jar"
+  <target name="component-boms" depends="-init-cyclonedx,jars,test-jar"
           if="cyclonedx.antlib.present">
 
     <property file="${lib.dir}/libraries.properties"/>
@@ -2672,7 +2672,8 @@ ${antunit.reports}
 
     <ant-componentbom
         suffix="-testutil"
-        description="Apache Ant Test Utilities">
+        description="Apache Ant Test Utilities"
+        if:set="junit4.present" xmlns:if="ant:if">
       <deps>
         <dependency componentRef="cdx-ant"/>
         <dependency componentRef="cdx-junit"/>
@@ -2686,4 +2687,378 @@ ${antunit.reports}
     </ant-componentbom>
   </target>
 
+  <target name="-prepare-distribution-bom"
+          depends="-init-cyclonedx"
+          if="cyclonedx.antlib.present">
+    <macrodef name="ant-distributionbom">
+      <attribute name="distdir"/>
+      <attribute name="subdir"/>
+      <attribute name="kind"/>
+      <attribute name="descriptionsuffix"/>
+      <attribute name="ext"/>
+      <attribute name="componentType"/>
+      <element name="archiveContent"/>
+      <element name="moreComponentChildren" optional="true"/>
+      <sequential>
+        <cdx:componentbom
+            bomName="${dist.name}-@{kind}.@{ext}.cyclonedx"
+            outputdirectory="@{distdir}"
+            format="all"
+            useComponentSupplier="true"
+            useComponentManufacturer="true"
+            xmlns:cdx="antlib:org.apache.ant.cyclonedx">
+          <component
+              
name="https://archive.apache.org/dist/ant/@{subdir}/${dist.name}-@{kind}.@{ext}";
+              
purl="https://archive.apache.org/dist/ant/@{subdir}/${dist.name}-@{kind}.@{ext}";
+              version="${pom.version}"
+              type="@{componentType}"
+              description="Apache Ant @{descriptionsuffix}"
+              publisher="The Apache Software Foundation"
+              supplierIsManufacturer="true">
+            <file file="@{distdir}/${dist.name}-@{kind}.@{ext}"/>
+            <supplier refid="ant-pmc"/>
+            <license refid="apache-2"/>
+            <externalReferenceSet refid="ant-common-refs"/>
+            <moreComponentChildren/>
+          </component>
+          <license refid="apache-2"/>
+          <pureFileComponents>
+            <archiveContent/>
+          </pureFileComponents>
+        </cdx:componentbom>
+      </sequential>
+    </macrodef>
+    <macrodef name="create-tarball-boms">
+      <attribute name="distdir"/>
+      <attribute name="subdir"/>
+      <attribute name="kind"/>
+      <attribute name="descriptionsuffix"/>
+      <attribute name="componentType" default="file"/>
+      <element name="componentChildren" optional="true"/>
+      <element name="archiveContents"/>
+      <sequential>
+        <ant-distributionbom
+            distdir="@{distdir}"
+            subdir="@{subdir}"
+            kind="@{kind}"
+            descriptionsuffix="@{descriptionsuffix}"
+            ext="zip"
+            componentType="@{componentType}">
+          <moreComponentChildren>
+            <componentChildren/>
+          </moreComponentChildren>
+          <archiveContent>
+            <archiveContents/>
+          </archiveContent>
+        </ant-distributionbom>
+        <ant-distributionbom
+            distdir="@{distdir}"
+            subdir="@{subdir}"
+            kind="@{kind}"
+            descriptionsuffix="@{descriptionsuffix}"
+            ext="tar.gz"
+            componentType="@{componentType}">
+          <moreComponentChildren>
+            <componentChildren/>
+          </moreComponentChildren>
+          <archiveContent>
+            <archiveContents/>
+          </archiveContent>
+        </ant-distributionbom>
+        <ant-distributionbom
+            distdir="@{distdir}"
+            subdir="@{subdir}"
+            kind="@{kind}"
+            descriptionsuffix="@{descriptionsuffix}"
+            ext="tar.bz2"
+            componentType="@{componentType}">
+          <moreComponentChildren>
+            <componentChildren/>
+          </moreComponentChildren>
+          <archiveContent>
+            <archiveContents/>
+          </archiveContent>
+        </ant-distributionbom>
+        <ant-distributionbom
+            distdir="@{distdir}"
+            subdir="@{subdir}"
+            kind="@{kind}"
+            descriptionsuffix="@{descriptionsuffix}"
+            ext="tar.xz"
+            componentType="@{componentType}">
+          <moreComponentChildren>
+            <componentChildren/>
+          </moreComponentChildren>
+          <archiveContent>
+            <archiveContents/>
+          </archiveContent>
+        </ant-distributionbom>
+      </sequential>
+    </macrodef>
+  </target>
+
+  <target name="-tar-distribution-sboms"
+          
depends="-prepare-distribution-bom,component-boms,zip-distribution,tar-distribution"
+          if="cyclonedx.antlib.present">
+    <create-tarball-boms
+        distdir="${dist.base.binaries}"
+        subdir="binaries"
+        kind="bin"
+        componentType="application"
+        descriptionsuffix="Binary Distribution">
+      <componentChildren>
+        <component>
+          <sbomLink>
+            <file file="${build.lib}/ant-launcher-cyclonedx.json"/>
+          </sbomLink>
+          <file file="${build.lib}/ant-launcher.jar"/>
+        </component>
+        <dependency componentRef="cdx-ant-launcher"/>
+        <component>
+          <sbomLink>
+            <file file="${build.lib}/ant-cyclonedx.json"/>
+          </sbomLink>
+          <file file="${build.lib}/ant.jar"/>
+        </component>
+        <dependency componentRef="cdx-ant"/>
+        <component scope="optional" if:set="antlr.present" xmlns:if="ant:if">
+          <sbomLink>
+            <file file="${build.lib}/ant-antlr-cyclonedx.json"/>
+          </sbomLink>
+          <file file="${build.lib}/ant-antlr.jar"/>
+        </component>
+        <dependency componentRef="cdx-ant-antlr"
+                    if:set="apache-bcel.present" xmlns:if="ant:if"/>
+        <component scope="optional" if:set="apache-bcel.present" 
xmlns:if="ant:if">
+          <sbomLink>
+            <file file="${build.lib}/ant-apache-bcel-cyclonedx.json"/>
+          </sbomLink>
+          <file file="${build.lib}/ant-apache-bcel.jar"/>
+        </component>
+        <dependency componentRef="cdx-ant-apache-bcel"
+                    if:set="apache-bcel.present" xmlns:if="ant:if"/>
+        <component scope="optional" if:set="apache-bcel.present" 
xmlns:if="ant:if">
+          <sbomLink>
+            <file file="${build.lib}/ant-apache-bsf-cyclonedx.json"/>
+          </sbomLink>
+          <file file="${build.lib}/ant-apache-bsf.jar"/>
+        </component>
+        <dependency componentRef="cdx-ant-apache-bsf"
+                    if:set="apache-bcel.present" xmlns:if="ant:if"/>
+        <component scope="optional" if:set="apache-log4j.present" 
xmlns:if="ant:if">
+          <sbomLink>
+            <file file="${build.lib}/ant-apache-log4j-cyclonedx.json"/>
+          </sbomLink>
+          <file file="${build.lib}/ant-apache-log4j.jar"/>
+        </component>
+        <dependency componentRef="cdx-ant-apache-log4j"
+                    if:set="apache-log4j.present" xmlns:if="ant:if"/>
+        <component scope="optional" if:set="apache-oro.present" 
xmlns:if="ant:if">
+          <sbomLink>
+            <file file="${build.lib}/ant-apache-oro-cyclonedx.json"/>
+          </sbomLink>
+          <file file="${build.lib}/ant-apache-oro.jar"/>
+        </component>
+        <dependency componentRef="cdx-ant-apache-oro"
+                    if:set="apache-oro.present" xmlns:if="ant:if"/>
+        <component scope="optional" if:set="apache-regexp.present" 
xmlns:if="ant:if">
+          <sbomLink>
+            <file file="${build.lib}/ant-apache-regexp-cyclonedx.json"/>
+          </sbomLink>
+          <file file="${build.lib}/ant-apache-regexp.jar"/>
+        </component>
+        <dependency componentRef="cdx-ant-apache-regexp"
+                    if:set="apache-regexp.present" xmlns:if="ant:if"/>
+        <component scope="optional" if:set="apache-resolver.present" 
xmlns:if="ant:if">
+          <sbomLink>
+            <file file="${build.lib}/ant-apache-resolver-cyclonedx.json"/>
+          </sbomLink>
+          <file file="${build.lib}/ant-apache-resolver.jar"/>
+        </component>
+        <dependency componentRef="cdx-ant-apache-resolver"
+                    if:set="apache-resolver.present" xmlns:if="ant:if"/>
+        <component scope="optional" if:set="apache-xalan2.present" 
xmlns:if="ant:if">
+          <sbomLink>
+            <file file="${build.lib}/ant-apache-xalan2-cyclonedx.json"/>
+          </sbomLink>
+          <file file="${build.lib}/ant-apache-xalan2.jar"/>
+        </component>
+        <dependency componentRef="cdx-ant-apache-xalan2"
+                    if:set="apache-xalan2.present" xmlns:if="ant:if"/>
+        <component scope="optional" if:set="commons-logging.present" 
xmlns:if="ant:if">
+          <sbomLink>
+            <file file="${build.lib}/ant-commons-logging-cyclonedx.json"/>
+          </sbomLink>
+          <file file="${build.lib}/ant-commons-logging.jar"/>
+        </component>
+        <dependency componentRef="cdx-ant-commons-logging"
+                    if:set="commons-logging.present" xmlns:if="ant:if"/>
+        <component scope="optional" if:set="commons-net.present" 
xmlns:if="ant:if">
+          <sbomLink>
+            <file file="${build.lib}/ant-commons-net-cyclonedx.json"/>
+          </sbomLink>
+          <file file="${build.lib}/ant-commons-net.jar"/>
+        </component>
+        <dependency componentRef="cdx-ant-commons-net"
+                    if:set="commons-net.present" xmlns:if="ant:if"/>
+        <component scope="optional" if:set="imageio.present" xmlns:if="ant:if">
+          <sbomLink>
+            <file file="${build.lib}/ant-imageio-cyclonedx.json"/>
+          </sbomLink>
+          <file file="${build.lib}/ant-imageio.jar"/>
+        </component>
+        <dependency componentRef="cdx-ant-imageio"
+                    if:set="imageio.present" xmlns:if="ant:if"/>
+        <component scope="optional" if:set="jai.present" xmlns:if="ant:if">
+          <sbomLink>
+            <file file="${build.lib}/ant-jai-cyclonedx.json"/>
+          </sbomLink>
+          <file file="${build.lib}/ant-jai.jar"/>
+        </component>
+        <dependency componentRef="cdx-ant-jai"
+                    if:set="jai.present" xmlns:if="ant:if"/>
+        <component scope="optional" if:set="jakartamail.present" 
xmlns:if="ant:if">
+          <sbomLink>
+            <file file="${build.lib}/ant-jakartamail-cyclonedx.json"/>
+          </sbomLink>
+          <file file="${build.lib}/ant-jakartamail.jar"/>
+        </component>
+        <dependency componentRef="cdx-ant-jakartamail"
+                    if:set="jakartamail.present" xmlns:if="ant:if"/>
+        <component scope="optional" if:set="javamail.present" 
xmlns:if="ant:if">
+          <sbomLink>
+            <file file="${build.lib}/ant-javamail-cyclonedx.json"/>
+          </sbomLink>
+          <file file="${build.lib}/ant-javamail.jar"/>
+        </component>
+        <dependency componentRef="cdx-ant-javamail"
+                    if:set="javamail.present" xmlns:if="ant:if"/>
+        <component scope="optional" if:set="jdepend.present" xmlns:if="ant:if">
+          <sbomLink>
+            <file file="${build.lib}/ant-jdepend-cyclonedx.json"/>
+          </sbomLink>
+          <file file="${build.lib}/ant-jdepend.jar"/>
+        </component>
+        <dependency componentRef="cdx-ant-jdepend"
+                    if:set="jdepend.present" xmlns:if="ant:if"/>
+        <component scope="optional" if:set="jmf.present" xmlns:if="ant:if">
+          <sbomLink>
+            <file file="${build.lib}/ant-jmf-cyclonedx.json"/>
+          </sbomLink>
+          <file file="${build.lib}/ant-jmf.jar"/>
+        </component>
+        <dependency componentRef="cdx-ant-jmf"
+                    if:set="jmf.present" xmlns:if="ant:if"/>
+        <component scope="optional" if:set="jsch.present" xmlns:if="ant:if">
+          <sbomLink>
+            <file file="${build.lib}/ant-jsch-cyclonedx.json"/>
+          </sbomLink>
+          <file file="${build.lib}/ant-jsch.jar"/>
+        </component>
+        <dependency componentRef="cdx-ant-jsch"
+                    if:set="jsch.present" xmlns:if="ant:if"/>
+        <component scope="optional" if:set="junit4.present" xmlns:if="ant:if">
+          <sbomLink>
+            <file file="${build.lib}/ant-junit4-cyclonedx.json"/>
+          </sbomLink>
+          <file file="${build.lib}/ant-junit4.jar"/>
+        </component>
+        <dependency componentRef="cdx-ant-junit4"
+                    if:set="junit4.present" xmlns:if="ant:if"/>
+        <component scope="optional" if:set="junit.present" xmlns:if="ant:if">
+          <sbomLink>
+            <file file="${build.lib}/ant-junit-cyclonedx.json"/>
+          </sbomLink>
+          <file file="${build.lib}/ant-junit.jar"/>
+        </component>
+        <dependency componentRef="cdx-ant-junit"
+                    if:set="junit.present" xmlns:if="ant:if"/>
+        <component scope="optional" if:set="junitlauncher.present" 
xmlns:if="ant:if">
+          <sbomLink>
+            <file file="${build.lib}/ant-junitlauncher-cyclonedx.json"/>
+          </sbomLink>
+          <file file="${build.lib}/ant-junitlauncher.jar"/>
+        </component>
+        <dependency componentRef="cdx-ant-junitlauncher"
+                    if:set="junitlauncher.present" xmlns:if="ant:if"/>
+        <component scope="optional" if:set="netrexx.present" xmlns:if="ant:if">
+          <sbomLink>
+            <file file="${build.lib}/ant-netrexx-cyclonedx.json"/>
+          </sbomLink>
+          <file file="${build.lib}/ant-netrexx.jar"/>
+        </component>
+        <dependency componentRef="cdx-ant-netrexx"
+                    if:set="netrexx.present" xmlns:if="ant:if"/>
+        <component scope="optional" if:set="swing.present" xmlns:if="ant:if">
+          <sbomLink>
+            <file file="${build.lib}/ant-swing-cyclonedx.json"/>
+          </sbomLink>
+          <file file="${build.lib}/ant-swing.jar"/>
+        </component>
+        <dependency componentRef="cdx-ant-swing"
+                    if:set="swing.present" xmlns:if="ant:if"/>
+        <component scope="optional" if:set="xz.present" xmlns:if="ant:if">
+          <sbomLink>
+            <file file="${build.lib}/ant-xz-cyclonedx.json"/>
+          </sbomLink>
+          <file file="${build.lib}/ant-xz.jar"/>
+        </component>
+        <dependency componentRef="cdx-ant-xz"
+                    if:set="xz.present" xmlns:if="ant:if"/>
+        <component scope="optional" if:set="junit4.present" xmlns:if="ant:if">
+          <sbomLink>
+            <file file="${build.lib}/ant-testutil-cyclonedx.json"/>
+          </sbomLink>
+          <file file="${build.lib}/ant-testutil.jar"/>
+        </component>
+      </componentChildren>
+      <archiveContents>
+        <fileset dir="${dist.name}/.."
+                 includes="${dist.name}/"
+                 defaultexcludes="no"/>
+      </archiveContents>
+    </create-tarball-boms>
+  </target>
+
+  <target name="distribution-sboms"
+          depends="-prepare-distribution-bom,main-distribution"
+          if="cyclonedx.antlib.present">
+    <property name="manual-zip-content" 
value="${build.dir}/manual-zip-content"/>
+    <mkdir dir="${manual-zip-content}"/>
+    <unzip dest="${manual-zip-content}" 
src="${dist.base.manual}/${dist.name}-manual.zip"/>
+    <create-tarball-boms
+        distdir="${dist.base.manual}"
+        subdir="manual"
+        kind="manual"
+        descriptionsuffix="Manual">
+      <archiveContents>
+        <fileset dir="${manual-zip-content}" defaultexcludes="no"/>
+      </archiveContents>
+    </create-tarball-boms>
+    <delete dir="${manual-zip-content}"/>
+
+    <property name="src-zip-content" value="${build.dir}/src-zip-content"/>
+    <mkdir dir="${src-zip-content}"/>
+    <create-tarball-boms
+        distdir="${dist.base.source}"
+        subdir="source"
+        kind="src"
+        descriptionsuffix="Source Distribution">
+      <archiveContents>
+        <fileset dir="${src-zip-content}" defaultexcludes="no"/>
+      </archiveContents>
+    </create-tarball-boms>
+    <delete dir="${src-zip-content}"/>
+
+    <checksums>
+      <fileset dir="${dist.base.binaries}/">
+        <exclude name="**/*.asc"/>
+        <exclude name="**/*.sha512"/>
+      </fileset>
+      <fileset dir="${dist.base.source}/">
+        <exclude name="**/*.asc"/>
+        <exclude name="**/*.sha512"/>
+      </fileset>
+    </checksums>
+  </target>
 </project>

Reply via email to