diff --git a/groovy18-timestamp.patch b/groovy18-timestamp.patch
new file mode 100644
index 0000000..716fcba
--- /dev/null
+++ b/groovy18-timestamp.patch
@@ -0,0 +1,107 @@
+--- groovy-core-GROOVY_1_8_9/gradle/assemble.gradle 2023-09-14 17:55:59.522896097 +0200
++++ groovy-core-GROOVY_1_8_9/gradle/assemble.gradle 2023-09-14 18:31:52.621162384 +0200
+@@ -45,6 +45,10 @@
+
+ binaryJarsMetaInf = {
+ Date buildTime = new Date()
++ def sourceDateEpoch = System.getenv("SOURCE_DATE_EPOCH")
++ if (sourceDateEpoch != null) {
++ buildTime = new Date(1000 * Long.parseLong(sourceDateEpoch))
++ }
+ from "$projectDir/LICENSE.txt"
+ from("$projectDir/src/main/META-INF/groovy-release-info.properties") {
+ filter {String line ->
+--- groovy-core-GROOVY_1_8_9/src/examples/transforms/global/CompiledAtASTTransformation.groovy 2023-09-14 17:55:59.532896167 +0200
++++ groovy-core-GROOVY_1_8_9/src/examples/transforms/global/CompiledAtASTTransformation.groovy 2023-09-14 18:18:30.645595375 +0200
+@@ -16,7 +16,7 @@
+ @GroovyASTTransformation(phase=CompilePhase.CONVERSION)
+ public class CompiledAtASTTransformation implements ASTTransformation {
+
+- private final static compileTime = new Date().toString()
++ private final static compileTime = System.getenv("SOURCE_DATE_EPOCH") != null ? new new Date(1000 * Long.parseLong(sourceDateEpoch)).toString() : new Date().toString()
+
+ public void visit(ASTNode[] astNodes, SourceUnit sourceUnit) {
+
+--- groovy-core-GROOVY_1_8_9/src/main/org/codehaus/groovy/tools/groovydoc/gstringTemplates/classLevel/classDocName.html 2023-09-14 17:55:59.569563087 +0200
++++ groovy-core-GROOVY_1_8_9/src/main/org/codehaus/groovy/tools/groovydoc/gstringTemplates/classLevel/classDocName.html 2023-09-14 18:27:30.922678287 +0200
+@@ -62,9 +62,9 @@
+ %>
+
+
+-
++
+ ${title}
+-
++
+
+
+
+--- groovy-core-GROOVY_1_8_9/src/main/org/codehaus/groovy/tools/groovydoc/gstringTemplates/topLevel/deprecated-list.html 2023-09-14 17:55:59.569563087 +0200
++++ groovy-core-GROOVY_1_8_9/src/main/org/codehaus/groovy/tools/groovydoc/gstringTemplates/topLevel/deprecated-list.html 2023-09-14 18:29:48.580300951 +0200
+@@ -38,9 +38,9 @@
+ %>
+
+
+-
++
+ ${title}
+-
++
+
+
+
+--- groovy-core-GROOVY_1_8_9/src/main/org/codehaus/groovy/tools/groovydoc/gstringTemplates/topLevel/help-doc.html 2023-09-14 17:55:59.569563087 +0200
++++ groovy-core-GROOVY_1_8_9/src/main/org/codehaus/groovy/tools/groovydoc/gstringTemplates/topLevel/help-doc.html 2023-09-14 18:30:08.917108852 +0200
+@@ -3,7 +3,7 @@
+ <% def title = subtitle + (props.windowTitle ? " (${props.windowTitle})" : "") %>
+
+
+-
++
+ ${title}
+
+
+--- groovy-core-GROOVY_1_8_9/src/main/org/codehaus/groovy/tools/groovydoc/gstringTemplates/topLevel/index-all.html 2023-09-14 17:55:59.569563087 +0200
++++ groovy-core-GROOVY_1_8_9/src/main/org/codehaus/groovy/tools/groovydoc/gstringTemplates/topLevel/index-all.html 2023-09-14 18:29:08.500022604 +0200
+@@ -16,9 +16,9 @@
+ %>
+
+
+-
++
+ ${title}
+-
++
+
+
+
+--- groovy-core-GROOVY_1_8_9/subprojects/groovy-jmx/src/main/groovy/groovy/jmx/builder/JmxTimerFactory.groovy 2023-09-14 17:55:59.506229315 +0200
++++ groovy-core-GROOVY_1_8_9/subprojects/groovy-jmx/src/main/groovy/groovy/jmx/builder/JmxTimerFactory.groovy 2023-09-14 18:08:37.814820693 +0200
+@@ -93,7 +93,13 @@
+ }
+
+ private def getNormalizedDate(date) {
+- if (!date) return new Date()
++ if (!date) {
++ def sourceDateEpoch = System.getenv("SOURCE_DATE_EPOCH")
++ if (sourceDateEpoch != null) {
++ return new Date(1000 * Long.parseLong(sourceDateEpoch))
++ }
++ return new Date()
++ }
+ if (date instanceof Date) {
+ return date
+ }
+@@ -102,8 +108,12 @@
+ case null:
+ case "now":
+ default:
++ if (sourceDateEpoch != null) {
++ startDate = new Date(1000 * Long.parseLong(sourceDateEpoch))
++ } else {
+ startDate = new Date()
+ }
++ }
+ return startDate
+ }
+
diff --git a/groovy18.changes b/groovy18.changes
index a7adf6e..00a69c8 100644
--- a/groovy18.changes
+++ b/groovy18.changes
@@ -1,3 +1,11 @@
+-------------------------------------------------------------------
+Thu Sep 14 16:34:06 UTC 2023 - Fridrich Strba
+
+- Added patch:
+ * groovy18-timestamp.patch
+ + use SOURCE_DATE_EPOCH for timestamp in classes generated by
+ groovy
+
-------------------------------------------------------------------
Mon May 16 11:48:35 UTC 2022 - Fridrich Strba
diff --git a/groovy18.spec b/groovy18.spec
index 9008b91..c0ec125 100644
--- a/groovy18.spec
+++ b/groovy18.spec
@@ -1,7 +1,7 @@
#
# spec file for package groovy18
#
-# Copyright (c) 2022 SUSE LLC
+# Copyright (c) 2023 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -45,6 +45,7 @@ Patch10: groovy18-asm7.patch
Patch11: groovy18-nofork.patch
Patch12: groovy18-jansi.patch
Patch13: groovy18-jline2.patch
+Patch14: groovy18-timestamp.patch
BuildRequires: ant
BuildRequires: ant-antlr
BuildRequires: antlr
@@ -141,6 +142,7 @@ cp %{SOURCE3} .
%patch11 -p1
%patch12 -p1
%patch13 -p1
+%patch14 -p1
# build.xml is not compatible with Ant 1.10+
sed -i "s| depends=\"-excludeLegacyAntVersion\"||" build.xml