build_liteloader.xml 9.9 KB
<?xml version="1.0" encoding="UTF-8" ?>
<project name="liteloader" basedir="." default="rebuild">

	<taskdef resource="net/sf/antcontrib/antcontrib.properties" classpath="tasks/ant-contrib.jar" />

	<!-- Versions !!IMPORTANT -->
	<property name="version" value="1.6.4" />
	<property name="mcversion" value="1.6.4" />
	<property name="author" value="Mumfrey" />

	<!-- Project definitions and dependencies -->
	<property name="upstream" value="" />
	<property name="project" value="LiteLoader" />
	<property name="md5set" value="mcp" />
	<property name="outmd5set" value="liteloader" />
	<property name="tweakclass" value="com.mumfrey.liteloader.launch.LiteLoaderTweaker" />

	<property name="mcp.dir" location="../../.." />
	<property name="build" location="${mcp.dir}/build" />
	<property name="eclipse" location="${mcp.dir}/eclipse" />
	<property name="src" location="${mcp.dir}/src/minecraft" />
	<property name="temp" location="${mcp.dir}/temp" />
	<property name="md5.dir" location="${mcp.dir}/md5" />
	<property name="mc.src" location="${mcp.dir}/src/mcp" />
	<property name="libs" location="${mcp.dir}/lib" />

	<property name="dist.dir" location="${build}/dist" />
	<property name="stage.dir" location="${build}/stage/${ant.project.name}/${version}" />
	<property name="filetype" value="jar" />

	<property name="python" location="${mcp.dir}/runtime/bin/python/python_mcp.exe" />

    <target name="findmcp">
        <echo level="info" message="Searching for clean MCP source..." />
        <condition property="mcpsrc.exists">
            <available file="${mc.src}" type="dir"/>
        </condition>
    </target>
    
	<!-- Main target -->
	<target name="rebuild" depends="findmcp" description="Entry point">
		<antcall target="nobuild" />
		<antcall target="build" />
    </target>

	<target name="nobuild" description="Notify the user that they done goofed" unless="mcpsrc.exists">
		<echo level="info" message="--------------------------------------------------------------------------------" />
		<echo level="info" message=" "                                                                                />
		<echo level="info" message=" #NOPE!"                                                                          />
		<echo level="info" message=" "                                                                                />
		<echo level="info" message=" LiteLoader build uses the MCP src/minecraft directory as the target for source"  />
		<echo level="info" message=" aggregation so that MCP can be called without modifications. This means that"    />
		<echo level="info" message=" before you start you MUST copy the decompiled sources to src/mcp so that the"    />
		<echo level="info" message=" LiteLoader build script has a clean base to work from."                          />
		<echo level="info" message=" "                                                                                />
		<echo level="info" message=" To rectify this problem and allow the loader to build:"                          />
		<echo level="info" message=" "                                                                                />
		<echo level="info" message="   + Run the MCP decompile process so that clean sources end up in src/minecraft" />
		<echo level="info" message="   + RENAME the src/minecraft folder to src/mcp"                                  />
		<echo level="info" message="   + Run this builder again, the builder will create a clean MD5 set for the"     />
		<echo level="info" message="     clean sources"                                                               />
		<echo level="info" message=" "                                                                                />
		<echo level="info" message=" If you have already performed the above steps, and it's still not working, then" />
		<echo level="info" message=" it's probably time to learn ant scripting and figure out why."                   />
		<echo level="info" message=" "                                                                                />
		<echo level="info" message=" Never give up; never surrender!"                                                 />
		<echo level="info" message=" "                                                                                />
		<echo level="info" message="--------------------------------------------------------------------------------" />
    </target>

	<target name="build" description="Perform all tasks for a build" if="mcpsrc.exists">
		<antcall target="init" />
		<antcall target="recompile" />
        <antcall target="reobfuscate" />
        <antcall target="savemd5" />
        <antcall target="stage" />
        <antcall target="zip" />
	</target>

	<target name="clean">
        <echo level="info" message="Cleaning output directories" />
		
		<delete dir="${src}" />
		<delete dir="${mcp.dir}/reobf" />
	</target>

	<target name="contributesource" description="Contribute an upstream project source code to the source path">
		<echo level="info" message="Contributing project ${lib}" />
		<copy todir="${src}" verbose="false" overwrite="true" failonerror="false">
			<fileset dir="${eclipse}/${lib}/java">
				<exclude name="**/debug" />
				<exclude name="**/debug/*.java" />
			</fileset>
			<fileset dir="${eclipse}/${lib}/src" />
		</copy>
	</target>

	<target name="contributeresources" description="Contribute resources to the staging path">
		<echo level="info" message="Contributing project resources for ${lib}" />
		<copy todir="${stage.dir}" verbose="false" failonerror="false">
            <fileset dir="${eclipse}/${lib}/resources" excludes=".svn/**">
                <exclude name="**/Thumbs.db" />
                <exclude name="**/minecraft.key" />
            </fileset>
		</copy>
	</target>

	<target name="findmd5">
        <echo level="info" message="Searching for existing MD5 sets..." />
		<condition property="md5dir.exists">
			<available file="${md5.dir}" type="dir"/>
		</condition>
	</target>

	<target name="seedmd5" depends="findmd5" unless="md5dir.exists">
        <echo level="info" message="MD5 sets not found, seeding..." />
		<ant target="genmd5" antfile="seed_md5.xml" inheritall="false" />
	</target>

    <target name="notifymd5ok" depends="findmd5" if="md5dir.exists">
    	<echo level="info" message="MD5 sets already exist, skipping MD5 set seeding" />
    </target>

	<target name="preparemd5" description="Copy patched MD5 to the temp directory" depends="seedmd5, notifymd5ok, clean">
		<echo level="info" message="Prepare exclusion MD5s, using exclusion set &quot;${md5set}&quot;" />

		<copy tofile="${temp}/client.md5" file="${md5.dir}/client_${md5set}.md5" failonerror="true" verbose="true" overwrite="true" />
	</target>

	<target name="prepare" description="Prepare source for MCP" depends="preparemd5">
		<echo level="info" message="Prepare sources for compile" />

		<echo level="info" message="Contributing libs" />
		<copy todir="${libs}" verbose="true" overwrite="true">
			<fileset dir="${eclipse}/LiteLoader/lib">
				<exclude name="**/authlib*.jar" />
				<exclude name="**/log4j*.jar" />
			</fileset>
		</copy>

		<echo level="info" message="Contributing MC source" />
		<copy todir="${src}" verbose="false" overwrite="true">
			<fileset dir="${mc.src}" />
		</copy>

		<echo level="info" message="Contributing upstream projects" />
		<foreach list="${upstream}" param="lib" target="contributesource" />

		<antcall target="contributesource">
			<param name="lib" value="${project}" />
		</antcall>
	</target>

	<target name="init" description="Initialize build environment" depends="prepare">
		<echo level="info" message="Cleaning old stage and dist, MCP reobf directories" />

		<delete dir="${stage.dir}" />

		<echo level="info" message="Creating stage and dist dirs" />
		<mkdir dir="${stage.dir}" />
		<mkdir dir="${dist.dir}" />
		<mkdir dir="${md5.dir}" />
	</target>

	<target name="recompile" description="MCP recompile">
		<echo level="info" message="Compiling projects" />

		<exec executable="${python}" dir="${mcp.dir}">
			<arg value="runtime/recompile.py" />
			<arg value="--client" />
			<arg value="%*" />
		</exec>
	</target>

	<target name="reobfuscate" description="MCP reobfuscate">
		<echo level="info" message="Obfuscating classes" />

		<exec executable="${python}" dir="${mcp.dir}">
			<arg value="runtime/reobfuscate.py" />
			<arg value="--client" />
			<arg value="%*" />
		</exec>
	</target>

	<target name="savemd5" description="Put post-obfuscation MD5 to stored md5 set" if="outmd5set">
		<echo level="info" message="Storing obfuscated MD5s" />

		<copy file="${temp}/client_reobf.md5" tofile="${md5.dir}/client_${outmd5set}.md5" overwrite="true" verbose="true" />
	</target>

	<target name="stage" description="Stage resources into staging directory">
		<echo level="info" message="Staging resources" />

		<copy todir="${stage.dir}">
			<fileset dir="${mcp.dir}/reobf/minecraft" excludes=".svn/**, *.txt" />
		</copy>

		<foreach list="${upstream}" param="lib" target="contributeresources" />

		<antcall target="contributeresources">
			<param name="lib" value="${project}" />
		</antcall>

	</target>

	<target name="zip" description="Build the output zip file">
		<echo level="info" message="Building final output" />

		<mkdir dir="${dist.dir}" />
		
		<jar destfile="${dist.dir}/${ant.project.name}-${mcversion}.${filetype}" duplicate="preserve" index="true" manifestencoding="UTF-8">
			<manifest>
				<attribute name="Built-By" value="MCP (http://mcp.ocean-labs.de)" />
				<attribute name="Implementation-Vendor" value="${author}" />
				<attribute name="Implementation-Title" value="${ant.project.name}" />
				<attribute name="Implementation-Version" value="${version}" />
				<attribute name="TweakClass" value="${tweakclass}" />
			</manifest>
			<fileset dir="${stage.dir}" />
		</jar>
	</target>

</project>