Embed timestamp explictly in the jar file, instead of relying on filesystem times.

This commit is contained in:
Martin Haye 2023-10-30 13:37:25 -07:00
parent cd5903367b
commit ce7ae8fb1c
3 changed files with 21 additions and 7 deletions

View File

@ -6,6 +6,10 @@
<target depends="init" description="Don't build Javadoc." name="javadoc"/> <target depends="init" description="Don't build Javadoc." name="javadoc"/>
<!-- use local groovy jar instead of NetBeans' version --> <!-- use local groovy jar instead of NetBeans' version -->
<property name="libs.groovy-all.classpath" value="./lib/groovy-4.0.13.jar:./lib/groovy-ant-4.0.13.jar:./lib/groovy-xml-4.0.13.jar:./lib/groovy-json-4.0.13.jar"/> <property name="libs.groovy-all.classpath" value="./lib/groovy-4.0.13.jar:./lib/groovy-ant-4.0.13.jar:./lib/groovy-xml-4.0.13.jar:./lib/groovy-json-4.0.13.jar"/>
<!-- put the current time/date into a file for engine timestamping -->
<exec executable="date" output="dist/tstamp.txt">
<arg value="+%s000"/>
</exec>
<!-- after building the 'thin' jar, make a 'thick' one incorporating all dependencies --> <!-- after building the 'thin' jar, make a 'thick' one incorporating all dependencies -->
<target name="-post-jar"> <target name="-post-jar">
<echo message="Packaging ${application.title} into a single JAR at ${dist.jar}"/> <echo message="Packaging ${application.title} into a single JAR at ${dist.jar}"/>
@ -22,6 +26,9 @@
<manifest> <manifest>
<attribute name="Main-Class" value="org.badvision.A2PackPartitions"/> <attribute name="Main-Class" value="org.badvision.A2PackPartitions"/>
</manifest> </manifest>
<fileset dir="dist">
<include name="tstamp.txt"/>
</fileset>
<fileset dir="../.."> <fileset dir="../..">
<include name="virtual/src/**/*.pla"/> <include name="virtual/src/**/*.pla"/>
<include name="virtual/src/**/*.plh"/> <include name="virtual/src/**/*.plh"/>

View File

@ -19,6 +19,7 @@ import java.nio.ByteBuffer
import java.nio.channels.Channels import java.nio.channels.Channels
import java.nio.charset.StandardCharsets import java.nio.charset.StandardCharsets
import java.nio.file.Files import java.nio.file.Files
import java.text.SimpleDateFormat
import java.util.Calendar import java.util.Calendar
import java.util.regex.Pattern import java.util.regex.Pattern
import java.util.zip.GZIPInputStream import java.util.zip.GZIPInputStream
@ -1002,8 +1003,14 @@ class A2PackPartitions
cache[key] = [hash:hash, data:buf] cache[key] = [hash:hash, data:buf]
} }
def updateEngineStamp(name, hash) def updateEngineStamp()
{ {
def hash
def tsfile = new File("build/tstamp.txt")
jitCopy(tsfile)
tsfile.withReader { reader ->
hash = Long.parseLong(reader.readLine())
}
if (!cache.containsKey("engineStamp") || cache["engineStamp"].hash < hash) if (!cache.containsKey("engineStamp") || cache["engineStamp"].hash < hash)
cache["engineStamp"] = [hash:hash] cache["engineStamp"] = [hash:hash]
} }
@ -2334,7 +2341,6 @@ class A2PackPartitions
def uncompData = readBinary(inDir + "build/" + codeName + ".b") def uncompData = readBinary(inDir + "build/" + codeName + ".b")
addToCache("code", code, codeName, hash, compress(uncompData)) addToCache("code", code, codeName, hash, compress(uncompData))
updateEngineStamp(codeName, hash)
} }
def assembleCore(inDir) def assembleCore(inDir)
@ -2356,7 +2362,6 @@ class A2PackPartitions
hash = file.lastModified() hash = file.lastModified()
if (!grabFromCache("sysCode", sysCode, name, hash)) { if (!grabFromCache("sysCode", sysCode, name, hash)) {
addToCache("sysCode", sysCode, name, hash, compress(readBinary(file.toString()))) addToCache("sysCode", sysCode, name, hash, compress(readBinary(file.toString())))
updateEngineStamp(name, hash)
} }
} }
else { else {
@ -2370,7 +2375,6 @@ class A2PackPartitions
addToCache("sysCode", sysCode, name, hash, addToCache("sysCode", sysCode, name, hash,
(name ==~ /loader|decomp/) ? [data:uncompData, len:uncompData.length, compressed:false] (name ==~ /loader|decomp/) ? [data:uncompData, len:uncompData.length, compressed:false]
: compress(uncompData)) : compress(uncompData))
updateEngineStamp(name, hash)
} }
} }
@ -2441,12 +2445,13 @@ class A2PackPartitions
addToCache("modules", modules, moduleName, hash, module) addToCache("modules", modules, moduleName, hash, module)
addToCache("bytecodes", bytecodes, moduleName, hash, bytecode) addToCache("bytecodes", bytecodes, moduleName, hash, bytecode)
addToCache("fixups", fixups, moduleName, hash, fixup) addToCache("fixups", fixups, moduleName, hash, fixup)
if (!(moduleName ==~ /.*(gs|gen)_.*/ || codeDir ==~ /.*mapScript.*/))
updateEngineStamp(moduleName, hash)
} }
def readAllCode() def readAllCode()
{ {
// Update the engine stamp from the tstamp.txt file
updateEngineStamp()
// Loader, ProRWTS, PLASMA VM, and memory manager // Loader, ProRWTS, PLASMA VM, and memory manager
assembleCore("src/core/") assembleCore("src/core/")

View File

@ -7,6 +7,7 @@ if [ "$#" -ne 1 ]; then
exit 1 exit 1
fi fi
./b
rm -f PackPartitions.exe rm -f PackPartitions.exe
java -Djava.awt.headless=true -jar /Users/mhaye/plat/virtual/launch4j/launch4j.jar launch4j.cfg.xml java -Djava.awt.headless=true -jar /Users/mhaye/plat/virtual/launch4j/launch4j.jar launch4j.cfg.xml
@ -16,8 +17,9 @@ cd bundle-tmp
unzip ../packer-bundle.zip unzip ../packer-bundle.zip
mv packer-bundle-* packer-bundle-$1 mv packer-bundle-* packer-bundle-$1
rm packer-bundle-$1/PackPartitions.exe rm packer-bundle-$1/PackPartitions.exe
rm -f packer-bundle-$1/world.xml
mv ../PackPartitions.exe packer-bundle-$1/PackPartitions.exe mv ../PackPartitions.exe packer-bundle-$1/PackPartitions.exe
zip -r packer-bundle-$1.zip * zip -r packer-bundle-$1.zip *
cp packer-bundle-$1.zip ../packer-bundle.zip cp packer-bundle-$1.zip ../packer-bundle.zip
cd .. cd ..
rm -r bundle-tmp rm -r bundle-tmp