https://github.com/apache/xmlgraphics-fop/pull/65 partial fix for https://issues.apache.org/jira/browse/FOP-2854 https://github.com/openSUSE/daps/issues/482 commit 27208260a35415e440b66c1ef4b3d8c116450ffb Author: Bernhard M. Wiedemann Date: Wed Dec 23 13:53:56 2020 +0100 FOP-2854: Allow to override CreationDate and MetadataDate Allow to override build date with SOURCE_DATE_EPOCH in order to make builds reproducible. See https://reproducible-builds.org/ for why this is good and https://reproducible-builds.org/specs/source-date-epoch/ for the definition of this variable. This patch was done while working on reproducible builds for openSUSE. diff --git a/fop-core/src/main/java/org/apache/fop/pdf/PDFMetadata.java b/fop-core/src/main/java/org/apache/fop/pdf/PDFMetadata.java index 107dba9fa..6f93f3da1 100644 --- a/fop-core/src/main/java/org/apache/fop/pdf/PDFMetadata.java +++ b/fop-core/src/main/java/org/apache/fop/pdf/PDFMetadata.java @@ -134,7 +134,9 @@ public class PDFMetadata extends PDFStream { //Set creation date if not available, yet if (info.getCreationDate() == null) { - Date d = new Date(); + Date d = System.getenv("SOURCE_DATE_EPOCH") == null ? + new Date() : + new Date(1000 * Long.parseLong(System.getenv("SOURCE_DATE_EPOCH"))); info.setCreationDate(d); } diff --git a/fop-core/src/main/java/org/apache/fop/render/intermediate/IFRenderer.java b/fop-core/src/main/java/org/apache/fop/render/intermediate/IFRenderer.java index 84e4e3a2c..022a7a7a6 100644 --- a/fop-core/src/main/java/org/apache/fop/render/intermediate/IFRenderer.java +++ b/fop-core/src/main/java/org/apache/fop/render/intermediate/IFRenderer.java @@ -544,7 +544,10 @@ public class IFRenderer extends AbstractPathOrientedRenderer { } else { xmpBasic.setCreatorTool(Version.getVersion()); } - xmpBasic.setMetadataDate(new java.util.Date()); + java.util.Date d = System.getenv("SOURCE_DATE_EPOCH") == null ? + new java.util.Date() : + new java.util.Date(1000 * Long.parseLong(System.getenv("SOURCE_DATE_EPOCH"))); + xmpBasic.setMetadataDate(d); if (getUserAgent().getCreationDate() != null) { xmpBasic.setCreateDate(getUserAgent().getCreationDate()); } else { diff --git a/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRenderingUtil.java b/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRenderingUtil.java index 1f383a29e..281eba87b 100644 --- a/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRenderingUtil.java +++ b/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRenderingUtil.java @@ -260,7 +260,10 @@ class PDFRenderingUtil { fopXMP.mergeInto(docXMP, exclude); XMPBasicAdapter xmpBasic = XMPBasicSchema.getAdapter(docXMP); //Metadata was changed so update metadata date - xmpBasic.setMetadataDate(new java.util.Date()); + java.util.Date d = System.getenv("SOURCE_DATE_EPOCH") == null ? + new java.util.Date() : + new java.util.Date(1000 * Long.parseLong(System.getenv("SOURCE_DATE_EPOCH"))); + xmpBasic.setMetadataDate(d); PDFMetadata.updateInfoFromMetadata(docXMP, pdfDoc.getInfo()); PDFMetadata pdfMetadata = pdfDoc.getFactory().makeMetadata(