2012-03-30 20:22:10 +00:00
<?xml version="1.0" encoding="UTF-8"?>
2012-07-06 13:19:58 +00:00
<!-- ======================================================================
30 Mar 2012 13:35:40
2012-03-30 20:22:10 +00:00
2012-07-06 13:19:58 +00:00
FML
2012-03-30 20:22:10 +00:00
The Forge Mod Loader
2012-07-06 13:19:58 +00:00
cpw
2012-03-30 20:22:10 +00:00
====================================================================== -->
2012-07-03 03:43:29 +00:00
<project name= "FML" default= "jenkinsbuild" >
2012-03-30 20:22:10 +00:00
<description > The Forge Mod Loader</description>
2012-06-01 04:27:46 +00:00
<target name= "writeversion" depends= "buildenvsetup" >
2012-05-10 17:01:39 +00:00
<exec executable= "${python.exe}" dir= "${basedir}" failonerror= "true" >
<arg value= "${basedir}/getversion.py" />
2012-07-02 19:16:40 +00:00
<arg value= "${mcp.home}" />
2012-05-10 17:01:39 +00:00
</exec>
2012-05-10 13:42:31 +00:00
<propertyfile file= "fmlversion.properties" >
<entry key= "fmlbuild.build.number" type= "int" value= "${version.build}" />
2013-03-02 15:30:45 +00:00
<entry key= "fmlbuild.deobfuscation.hash" type= "string" value= "${deobf.checksum}" />
2012-05-10 13:42:31 +00:00
</propertyfile>
</target>
2012-06-01 04:27:46 +00:00
<target name= "buildenvsetup" >
2012-03-30 20:22:10 +00:00
<tstamp >
<format pattern= "yyMMddHHmmss" property= "timestamp" />
</tstamp>
<property environment= "env" />
2012-05-10 13:42:31 +00:00
<property name= "modname" value= "fml" />
2012-12-04 00:52:44 +00:00
<condition property= "mcp.home" value= "${env.WORKSPACE}/mcp" else= "${basedir}/mcp" >
2012-03-30 20:22:10 +00:00
<isset property= "env.WORKSPACE" />
</condition>
2012-12-03 03:59:22 +00:00
<property name= "fml.python.dir" location= "${basedir}/python" />
<condition property= "python.exe" value= "${fml.python.dir}/python_fml" else= "python" >
2012-04-04 15:05:31 +00:00
<os family= "Windows" />
2012-03-30 20:22:10 +00:00
</condition>
2012-12-03 03:59:22 +00:00
<condition property= "mcp.exists" >
<available file= "${mcp.home}/runtime/commands.py" />
</condition>
2012-12-17 21:53:40 +00:00
<condition property= "signature.exists" >
<available file= "${env.JENKINS_HOME}/fmlsigned.properties" />
</condition>
2012-03-30 20:22:10 +00:00
<property name= "mcp.obfoutput" location= "${mcp.home}/reobf" />
<property name= "client.mcp.obfoutput" location= "${mcp.obfoutput}/minecraft" />
<property name= "mcp.srcdir" location= "${mcp.home}/src" />
<property name= "client.mcp.srcdir" location= "${mcp.srcdir}/minecraft" />
2012-07-03 12:14:35 +00:00
<property name= "clean.mcp.srcdir" location= "${mcp.home}/src-base" />
<property name= "patch.mcp.srcdir" location= "${mcp.home}/src-work" />
2012-07-14 17:58:46 +00:00
<property name= "tmp.mcp.srcdir" location= "${mcp.home}/src-tmp" />
<property name= "renamed.mcp.srcdir" location= "${mcp.home}/src-renamed" />
2012-03-30 20:22:10 +00:00
<property name= "common.src.dir" location= "${basedir}/common" />
<property name= "client.src.dir" location= "${basedir}/client" />
<property name= "patch.src.dir" location= "${basedir}/patches" />
2012-08-09 06:44:32 +00:00
<property name= "fml.conf.dir" location= "${basedir}/conf" />
2012-05-10 17:01:39 +00:00
<condition property= "version.build" value= "${env.BUILD_NUMBER}" else= "1" >
<isset property= "env.BUILD_NUMBER" />
</condition>
2012-12-04 00:52:44 +00:00
<available file= "eclipse" property= "eclipse.exists" />
2012-06-01 04:27:46 +00:00
</target>
2012-07-03 03:43:29 +00:00
<target name= "makeversion" depends= "buildenvsetup" >
2012-05-10 17:01:39 +00:00
<antcall target= "writeversion" />
<property file= "fmlversion.properties" />
<property name= "build.number" value= "${fmlbuild.major.number}.${fmlbuild.minor.number}.${fmlbuild.revision.number}" />
<property name= "version.major" value= "${fmlbuild.major.number}" />
<property name= "version.minor" value= "${fmlbuild.minor.number}" />
<property name= "version.rev" value= "${fmlbuild.revision.number}" />
2012-12-03 13:13:20 +00:00
<property name= "version.minecraft" value= "${fmlbuild.mcversion}" />
<property name= "version.branch" value= "${fmlbuild.branch}" />
2012-05-10 17:01:39 +00:00
<property name= "version" value= "${version.major}.${version.minor}.${version.rev}.${version.build}" />
2012-03-30 20:22:10 +00:00
</target>
2012-04-04 13:48:36 +00:00
2012-12-03 03:59:22 +00:00
<target name= "makeclean" depends= "buildenvsetup" if= "mcp.exists" >
<exec executable= "${python.exe}" dir= "${mcp.home}" >
<arg value= "${mcp.home}/runtime/cleanup.py" />
<arg value= "-f" />
</exec>
</target>
2012-12-17 21:53:40 +00:00
2012-12-03 13:13:20 +00:00
<target name= "clean" depends= "buildenvsetup,makeclean" if= "mcp.exists" >
2012-03-30 20:22:10 +00:00
<exec executable= "${python.exe}" dir= "${mcp.home}" >
2012-12-04 00:52:44 +00:00
<arg value= "${basedir}/decompile.py" />
<arg value= "${mcp.home}" />
<arg value= "${basedir}" />
2012-03-30 20:22:10 +00:00
</exec>
</target>
2012-08-22 15:12:26 +00:00
<target name= "reobfuscate" depends= "buildenvsetup,recompile" >
2012-03-31 05:04:29 +00:00
<exec executable= "${python.exe}" dir= "${mcp.home}" failonerror= "true" >
2012-08-03 10:37:45 +00:00
<arg value= "${mcp.home}/runtime/reobfuscate.py" />
2012-03-30 20:22:10 +00:00
</exec>
2012-11-19 23:00:11 +00:00
<fail message= "Reobfuscation failed" >
<condition >
<not >
<and >
<available file= "${mcp.home}/temp/client.md5" />
2012-08-03 10:37:45 +00:00
<available file= "${mcp.home}/temp/client_reobf.md5" />
2012-11-19 23:00:11 +00:00
</and>
</not>
</condition>
</fail>
2012-04-04 15:05:31 +00:00
<exec executable= "${python.exe}" dir= "${mcp.home}" >
<arg value= "${basedir}/generatechangedfilelist.py" />
<arg value= "${mcp.home}" />
<arg value= "${basedir}/difflist.txt" />
2012-03-30 20:22:10 +00:00
</exec>
</target>
2012-08-11 16:34:25 +00:00
2012-08-03 10:37:45 +00:00
<target name= "recompile" depends= "buildenvsetup" >
<exec executable= "${python.exe}" dir= "${mcp.home}" failonerror= "true" >
<arg value= "${mcp.home}/runtime/recompile.py" />
</exec>
2012-11-19 23:00:11 +00:00
<fail message= "Compilation failed" >
<condition >
<not >
<available file= "${mcp.home}/bin/minecraft/net/minecraft/client/Minecraft.class" />
</not>
</condition>
</fail>
2012-08-03 10:37:45 +00:00
</target>
2012-03-30 20:22:10 +00:00
2012-07-03 03:43:29 +00:00
<target name= "merge-client" depends= "buildenvsetup" >
2012-08-03 10:37:45 +00:00
<copy todir= "${client.mcp.srcdir}" overwrite= "true" verbose= "true" >
<fileset dir= "${client.src.dir}" includes= "**/*.java" />
</copy>
2012-03-30 20:22:10 +00:00
</target>
2012-08-03 10:37:45 +00:00
<target name= "merge-common" >
2012-12-09 05:41:51 +00:00
<copy todir= "${client.mcp.srcdir}" overwrite= "true" verbose= "true" >
2012-03-30 20:22:10 +00:00
<fileset dir= "${common.src.dir}" includes= "**/*.java" />
</copy>
</target>
2012-08-11 16:34:25 +00:00
2012-08-14 02:51:53 +00:00
<target name= "merge-source" depends= "buildenvsetup,merge-client,merge-common" />
2012-03-30 20:22:10 +00:00
2012-12-03 13:13:20 +00:00
<target name= "build-universal" depends= "buildenvsetup,merge-client,merge-common,reobfuscate,makeversion" >
<condition property= "universal.jarname" value= "${modname}-universal-${version.minecraft}-${version}" else= "${modname}-universal-${version.minecraft}-${version}-${version.branch}" >
<equals arg1= "${version.branch}" arg2= "master" />
</condition>
2012-03-30 20:22:10 +00:00
2012-08-09 05:57:42 +00:00
<mkdir dir= "${basedir}/target" />
2012-08-11 16:34:25 +00:00
<jar destfile= "${basedir}/target/${universal.jarname}.zip" duplicate= "preserve" >
2012-08-09 05:57:42 +00:00
<manifest >
<attribute name= "Main-Class" value= "net.minecraft.server.MinecraftServer" />
2012-10-19 01:07:33 +00:00
<attribute name= "Class-Path" value= "minecraft_server.jar" />
2012-08-09 05:57:42 +00:00
</manifest>
2012-12-17 22:56:00 +00:00
<fileset dir= "${client.mcp.obfoutput}" includes= "**/*.class" excludes= "*.class" />
</jar>
<antcall target= "signjar" />
<zip update= "true" destfile= "${basedir}/target/${universal.jarname}.zip" >
<fileset dir= "${client.mcp.obfoutput}" includes= "*.class" />
2012-08-09 05:57:42 +00:00
<zipfileset dir= "${basedir}" includes= "fmlversion.properties" />
<zipfileset dir= "${basedir}" includes= "LICENSE-fml.txt" />
2012-10-25 13:02:49 +00:00
<zipfileset dir= "${common.src.dir}" includes= "mcpmod.info" />
<zipfileset dir= "${client.src.dir}" includes= "mcp.png" />
2012-08-09 05:57:42 +00:00
<zipfileset dir= "${basedir}" includes= "install/CREDITS-fml.txt" fullpath= "CREDITS-fml.txt" />
<zipfileset dir= "${common.src.dir}" includes= "*.cfg" />
<mappedresources >
<concat >
<fileset dir= "${basedir}/install" includes= "README.txt" />
<filterchain >
<replacetokens >
<token key= "MAJOR" value= "${version.major}" />
<token key= "MINOR" value= "${version.minor}" />
<token key= "REV" value= "${version.rev}" />
<token key= "BUILD" value= "${version.build}" />
<token key= "MCVERSION" value= "${version.minecraft}" />
</replacetokens>
</filterchain>
</concat>
<mergemapper to= "README-fml.txt" />
</mappedresources>
2012-12-17 22:56:00 +00:00
</zip>
2012-08-09 05:57:42 +00:00
</target>
2012-07-03 03:43:29 +00:00
<target name= "build-source-pack" depends= "makeversion" >
2012-12-03 13:38:20 +00:00
<property name= "srcpack.jarname" value= "${modname}-src-${version.minecraft}-${version}-${version.branch}" />
2012-08-09 05:57:42 +00:00
<zip destfile= "${basedir}/target/${srcpack.jarname}.zip" >
2012-11-09 01:54:05 +00:00
<zipfileset dir= "${basedir}" includes= "LICENSE-fml.txt,difflist.txt,commands.patch,mcp_merge.cfg,mc_versions.cfg" prefix= "fml" />
2012-08-04 00:32:23 +00:00
<zipfileset dir= "${common.src.dir}" includes= "**/*.java" prefix= "fml/common" />
<zipfileset dir= "${client.src.dir}" includes= "**/*.java" prefix= "fml/client" />
2012-10-25 14:00:34 +00:00
<zipfileset dir= "${client.src.dir}" includes= "mcp.png" prefix= "fml/client" />
2012-08-04 00:32:23 +00:00
<zipfileset dir= "${basedir}" includes= "fmlversion.properties" prefix= "fml/common" />
2012-08-09 05:57:42 +00:00
<zipfileset dir= "${common.src.dir}" includes= "*.cfg" prefix= "fml/common" />
2012-10-25 14:00:34 +00:00
<zipfileset dir= "${common.src.dir}" includes= "mcpmod.info" prefix= "fml/common" />
2012-04-04 15:05:31 +00:00
<zipfileset dir= "${patch.src.dir}" includes= "**/*.patch" prefix= "fml/patches" />
2012-08-09 06:44:32 +00:00
<zipfileset dir= "${fml.conf.dir}" prefix= "fml/conf" />
2012-12-03 03:59:22 +00:00
<zipfileset dir= "${fml.python.dir}" prefix= "fml/python" />
2012-04-04 13:48:36 +00:00
<mappedresources >
2012-04-04 15:05:31 +00:00
<concat >
<fileset dir= "${basedir}/install" includes= "README.txt" />
<filterchain >
<replacetokens >
<token key= "MAJOR" value= "${version.major}" />
<token key= "MINOR" value= "${version.minor}" />
<token key= "REV" value= "${version.rev}" />
<token key= "BUILD" value= "${version.build}" />
<token key= "MCVERSION" value= "${version.minecraft}" />
</replacetokens>
</filterchain>
</concat>
<mergemapper to= "fml/README-fml.txt" />
2012-04-04 13:48:36 +00:00
</mappedresources>
2012-08-03 10:37:45 +00:00
<zipfileset dir= "${basedir}/install" excludes= "README.txt,fml.pyc" prefix= "fml" />
2012-03-30 20:22:10 +00:00
</zip>
</target>
2012-04-04 13:48:36 +00:00
2013-03-02 15:02:02 +00:00
<target name= "build-deobf-data" depends= "makeversion" >
<zip file= "deobfuscation_data_${version.minecraft}.zip" >
<mappedresources >
<fileset dir= "${mcp.home}/conf" includes= "packaged.srg" />
<globmapper from= "packaged.srg" to= "joined.srg" />
</mappedresources>
</zip>
2013-03-02 15:30:45 +00:00
<checksum algorithm= "SHA1" property= "deobf.checksum" file= "deobfuscation_data_${version.minecraft}.zip" />
<antcall target= "writeversion" />
2013-03-02 15:02:02 +00:00
</target>
<target name= "build" depends= "buildenvsetup,merge-client,merge-common,build-universal,build-source-pack,build-deobf-data" />
2012-03-30 20:22:10 +00:00
2012-12-17 22:56:00 +00:00
<target name= "jenkinsbuild" depends= "buildenvsetup,jenkinsfmldecompile,patch,build" />
2012-07-06 13:19:58 +00:00
2012-07-03 03:43:29 +00:00
<target name= "patch" depends= "buildenvsetup" >
2012-03-31 00:38:31 +00:00
<exec executable= "${python.exe}" dir= "${basedir}" >
2012-04-04 15:05:31 +00:00
<arg value= "${basedir}/applypatches.py" />
2012-08-01 13:54:57 +00:00
<arg value= "${basedir}" />
2012-04-04 15:05:31 +00:00
<arg value= "${mcp.srcdir}" />
2012-04-05 07:09:29 +00:00
<arg value= "${mcp.home}" />
2012-03-31 00:38:31 +00:00
</exec>
2012-04-04 13:48:36 +00:00
2012-03-30 20:22:10 +00:00
</target>
2012-07-02 19:16:40 +00:00
<target name= "setupenvironment" depends= "buildenvsetup" >
<input message= "This will clean the mcp environment at ${mcp.home} and backup any src-work folder there (src-base will be erased). Continue?" validargs= "y,n" addproperty= "do.continue" />
<condition property= "do.not.continue" >
<equals arg1= "n" arg2= "${do.continue}" />
</condition>
<fail if= "do.not.continue" > You have decided not to continue. This script will stop now.</fail>
<echo > Preparing the MCP environment at ${mcp.home}</echo>
2012-11-19 23:00:11 +00:00
<antcall target= "fmldecompile" />
2012-07-03 12:14:35 +00:00
<echo > Moving old patched sources at ${patch.mcp.srcdir} out of the way</echo>
2012-07-02 19:16:40 +00:00
<move todir= "${mcp.home}/src-work${timestamp}" failonerror= "false" verbose= "true" >
2012-07-03 12:14:35 +00:00
<fileset dir= "${patch.mcp.srcdir}" />
2012-07-02 19:16:40 +00:00
</move>
2012-07-03 12:14:35 +00:00
<echo > Deleting old patch references at ${clean.mcp.srcdir}</echo>
<delete dir= "${clean.mcp.srcdir}" failonerror= "false" />
<echo > Creating new patch references at ${clean.mcp.srcdir}</echo>
<copy todir= "${clean.mcp.srcdir}" >
<fileset dir= "${mcp.srcdir}" />
2012-07-02 19:16:40 +00:00
</copy>
2012-07-06 13:19:58 +00:00
<antcall target= "cleanargo" />
2012-07-02 19:54:25 +00:00
<antcall target= "patch" />
2012-07-03 12:14:35 +00:00
<echo > Creating clean patched references at ${patch.mcp.srcdir}</echo>
<copy todir= "${patch.mcp.srcdir}" >
<fileset dir= "${mcp.srcdir}" />
2012-07-02 19:16:40 +00:00
</copy>
<antcall target= "writeversion" />
2012-12-04 00:52:44 +00:00
<antcall target= "makeeclipse" />
2012-12-03 13:13:20 +00:00
<echo > Setup complete! You should now be able to open ${basedir}/eclipse as a workspace in eclipse and import/refresh the FML project</echo>
2012-07-02 19:16:40 +00:00
</target>
2012-12-03 13:13:20 +00:00
2012-12-03 03:59:22 +00:00
<target name= "fmldecompile" depends= "buildenvsetup,makeclean" >
2012-08-02 13:00:52 +00:00
<exec executable= "${python.exe}" dir= "${basedir}" >
<arg value= "${basedir}/decompile.py" />
<arg value= "${mcp.home}" />
<arg value= "${basedir}" />
</exec>
2012-08-11 03:09:47 +00:00
</target>
2012-08-11 16:34:25 +00:00
2012-12-03 03:59:22 +00:00
<target name= "jenkinsfmldecompile" depends= "buildenvsetup,makeclean" >
2012-08-11 03:09:47 +00:00
<exec executable= "${python.exe}" dir= "${basedir}" >
<arg value= "${basedir}/decompile.py" />
<arg value= "${mcp.home}" />
<arg value= "${basedir}" />
<arg value= "-no_gen_conf" />
</exec>
2012-08-02 13:00:52 +00:00
</target>
2012-07-02 19:16:40 +00:00
2012-07-06 13:19:58 +00:00
<target name= "repatch" depends= "buildenvsetup,checkpatches" >
2012-07-03 03:43:29 +00:00
<echo > Moving old patched sources at ${mcp.home}/src-work out of the way</echo>
<move todir= "${mcp.home}/src-work${timestamp}" failonerror= "false" verbose= "true" >
2012-07-05 19:23:37 +00:00
<fileset dir= "${patch.mcp.srcdir}" />
2012-07-03 03:43:29 +00:00
</move>
2012-07-03 12:14:35 +00:00
<delete dir= "${mcp.srcdir}" />
<copy todir= "${mcp.srcdir}" >
2012-07-05 19:23:37 +00:00
<fileset dir= "${clean.mcp.srcdir}" />
2012-07-03 03:43:29 +00:00
</copy>
2012-07-06 13:19:58 +00:00
2012-07-05 19:23:37 +00:00
<antcall target= "cleanargo" />
2012-07-06 13:19:58 +00:00
2012-07-03 03:43:29 +00:00
<antcall target= "patch" />
2012-07-05 19:23:37 +00:00
<copy todir= "${patch.mcp.srcdir}" >
2012-07-03 12:14:35 +00:00
<fileset dir= "${mcp.srcdir}" />
2012-07-03 03:43:29 +00:00
</copy>
</target>
2012-08-11 16:34:25 +00:00
2012-08-03 10:37:45 +00:00
<target name= "repatchclean" depends= "buildenvsetup" >
<delete dir= "${mcp.srcdir}" />
<copy todir= "${mcp.srcdir}" >
<fileset dir= "${clean.mcp.srcdir}" />
</copy>
<antcall target= "cleanargo" />
<antcall target= "patch" />
</target>
2012-07-06 13:19:58 +00:00
2012-07-03 12:14:35 +00:00
<target name= "cleanargo" depends= "buildenvsetup" >
<delete dir= "${client.mcp.srcdir}/argo" />
2012-12-12 03:37:07 +00:00
<delete dir= "${client.mcp.srcdir}/org" />
2012-07-03 12:14:35 +00:00
</target>
2012-07-06 13:19:58 +00:00
<target name= "checkpatches" depends= "buildenvsetup" >
<uptodate property= "checkUptodate.uptodate" >
<srcfiles dir= "${patch.mcp.srcdir}" includes= "**/*.java" >
2012-11-19 23:00:11 +00:00
<present targetdir= "${patch.src.dir}" >
<globmapper from= "*.java" to= "*.java.patch" />
</present>
2012-07-06 13:19:58 +00:00
</srcfiles>
<globmapper from= "*.java" to= "${patch.src.dir}/*.java.patch" />
</uptodate>
2012-11-19 23:00:11 +00:00
<fail unless= "checkUptodate.uptodate" >
A patch is out of date. Update your patches!
</fail>
2012-07-06 13:19:58 +00:00
</target>
2012-07-02 19:54:25 +00:00
<target name= "updatepatches" depends= "buildenvsetup" >
<exec executable= "${python.exe}" dir= "${basedir}" >
<arg value= "${basedir}/update_patches.py" />
<arg value= "${mcp.home}" />
2012-08-02 07:51:51 +00:00
<arg value= "${basedir}" />
2012-07-02 19:54:25 +00:00
</exec>
</target>
2012-07-14 17:58:46 +00:00
2012-12-04 00:52:44 +00:00
<target name= "makeeclipse" depends= "buildenvsetup" unless= "eclipse.exists" >
<echo >
Extracting fresh eclipse workspace to ${basedir}/eclipse
</echo>
2012-12-09 01:08:51 +00:00
<unzip src= "${basedir}/eclipse-workspace-dev.zip" dest= "${basedir}" />
2012-12-04 00:52:44 +00:00
</target>
2012-08-22 15:12:26 +00:00
<target name= "makerenamedsource" depends= "buildenvsetup,repatch,merge-client,merge-common,reobfuscate" >
2012-07-14 17:58:46 +00:00
<copy todir= "${tmp.mcp.srcdir}" >
<fileset dir= "${mcp.srcdir}" />
</copy>
<exec executable= "${python.exe}" dir= "${mcp.home}" >
<arg value= "${mcp.home}/runtime/updatenames.py" />
<arg value= "-f" />
</exec>
<copy todir= "${renamed.mcp.srcdir}" >
<fileset dir= "${mcp.srcdir}" />
</copy>
<move todir= "${mcp.srcdir}" >
<fileset dir= "${tmp.mcp.srcdir}" />
</move>
</target>
2012-12-17 21:53:40 +00:00
<target name= "signjar" depends= "buildenvsetup,makeversion" if= "signature.exists" >
<condition property= "universal.jarname" value= "${modname}-universal-${version.minecraft}-${version}" else= "${modname}-universal-${version.minecraft}-${version}-${version.branch}" >
<equals arg1= "${version.branch}" arg2= "master" />
</condition>
<property file= "${env.JENKINS_HOME}/fmlsigned.properties" prefix= "sign" />
<echo > ${env.JENKINS_HOME} ${universal.jarname} ${sign.KEYPASS}</echo>
<signjar alias= "FML" jar= "${basedir}/target/${universal.jarname}.zip" keypass= "${sign.KEYPASS}" keystore= "${env.JENKINS_HOME}/${sign.KEYSTORE}" storepass= "${sign.STOREPASS}" verbose= "true" />
</target>
2012-03-30 20:22:10 +00:00
</project>