buildcraft/build.xml
2013-11-13 17:23:41 -08:00

240 lines
7 KiB
XML

<project name="BuildCraft" default="main">
<property environment="env"/>
<!-- Properties -->
<dirname property="imported.basedir" file="${ant.file.BuildCraft}"/>
<property name="build.dir" value="build"/>
<property name="src.dir" value="${imported.basedir}"/>
<property name="lang.dir" value="${imported.basedir}/../buildcraft.localization"/>
<property name="resources.dir" value="${imported.basedir}/buildcraft_resources"/>
<property name="download.dir" value="download"/>
<property name="classes.dir" value="${build.dir}/classes"/>
<property name="jar.dir" value="bin"/>
<property name="forge.dir" value="${build.dir}/forge"/>
<property name="mcp.dir" value="${forge.dir}/mcp"/>
<property name="mcpsrc.dir" value="${mcp.dir}/src"/>
<property name="mc.version" value="1.6.4"/>
<property name="forge.version" value="9.11.1.949"/>
<!-- <property name="project.version" value="0.0.0"/>-->
<property name="buildcraft.name" value="buildcraft"/>
<property name="forge.name" value="minecraftforge-src-${mc.version}-${forge.version}.zip"/>
<available property="forge-exists" file="${download.dir}/${forge.name}"/>
<available file="${src.dir}/.git" type="dir" property="git.present"/>
<condition property="out-of-date">
<not>
<and>
<isset property="forge-exists"/>
<available file="${mcpsrc.dir}"/>
</and>
</not>
</condition>
<mkdir dir="${download.dir}"/>
<!-- Targets -->
<!-- Clear build directory -->
<target name="clean">
<delete dir="${build.dir}"/>
</target>
<!-- Set full version -->
<target name="initialize-version" depends="version-provided,version-not-provided,git.revision">
<property name="project.version.full" value="${project.version}.${build.number}"/>
</target>
<!-- Set unknown build number -->
<target name="version-not-provided" unless="env.BUILD_NUMBER">
<property name="build.number" value="unknown"/>
</target>
<!-- Set build number from environment -->
<target name="version-provided" if="env.BUILD_NUMBER">
<property name="build.number" value="${env.BUILD_NUMBER}"/>
</target>
<target name="git.revision">
<exec executable="git" dir="${src.dir}" outputproperty="git.revision" failifexecutionfails="false" errorproperty="">
<arg value="describe"/>
<arg line="--match &quot;[^(jenkins)]*&quot;"/>
<arg value="--tags"/>
</exec>
<loadresource property="git.clean.revision">
<propertyresource name="git.revision"/>
<filterchain>
<tokenfilter>
<filetokenizer/>
<replaceregex pattern="-[a-z0-9]+$" replace=""/>
<replacestring from="-" to="."/>
</tokenfilter>
</filterchain>
</loadresource>
<condition property="project.version" value="${git.clean.revision}" else="0.0.0">
<and>
<isset property="git.clean.revision"/>
<length string="${git.clean.revision}" trim="yes" length="0" when="greater"/>
</and>
</condition>
<condition property="project.complete.version" value="${git.revision}" else="0.0.0">
<and>
<isset property="git.revision"/>
<length string="${git.revision}" trim="yes" length="0" when="greater"/>
</and>
</condition>
<echo>Building buildcraft version ${project.complete.version} (${project.version})</echo>
</target>
<!-- Download necessary files -->
<target name="download-files" depends="download-forge"/>
<!-- Download forge (if it doesn't exist) -->
<target name="download-forge" unless="forge-exists">
<get src="http://files.minecraftforge.net/${forge.name}" dest="${download.dir}" usetimestamp="True"/>
</target>
<!-- Setup mcp and forge -->
<target name="setup" depends="download-files" if="out-of-date">
<unzip dest="${forge.dir}/.." src="${download.dir}/${forge.name}"/>
<!-- Fix executable permissions -->
<chmod dir="${forge.dir}" perm="ugo+rx" includes="**.sh"/>
<!-- Install forge -->
<exec dir="${forge.dir}" executable="cmd" osfamily="windows">
<arg line="/c install.cmd"/>
</exec>
<exec dir="${forge.dir}" executable="sh" osfamily="unix">
<arg value="install.sh"/>
</exec>
</target>
<target name="clean-src">
<delete verbose="true">
<fileset dir="${mcpsrc.dir}/minecraft">
<present present="both" targetdir="${src.dir}/common" />
</fileset>
</delete>
</target>
<target name="copy-src" depends="clean-src,initialize-version">
<!-- Copy sources -->
<copy todir="${mcpsrc.dir}/minecraft" verbose="true">
<fileset dir="${src.dir}/common"/>
<filterset>
<filter token="VERSION" value="${project.complete.version}" />
<filter token="BUILD_NUMBER" value="${build.number}" />
</filterset>
</copy>
</target>
<target name="compile" depends="initialize-version,setup,copy-src">
<mkdir dir="${classes.dir}"/>
<delete includeemptydirs="true">
<fileset dir="${classes.dir}" includes="**/*"/>
</delete>
<!-- Recompile -->
<exec dir="${mcp.dir}" executable="cmd" osfamily="windows">
<arg line="/c recompile.bat"/>
</exec>
<exec dir="${mcp.dir}" executable="sh" osfamily="unix">
<arg value="recompile.sh"/>
</exec>
<!-- Check for failure -->
<fail message="MCP failed to build">
<condition>
<resourcecontains resource="${mcp.dir}/logs/client_compile.log" substring="error:"/>
</condition>
</fail>
</target>
<target name="reobf" depends="compile">
<!-- Reobfuscate -->
<exec dir="${mcp.dir}" executable="cmd" osfamily="windows">
<arg line="/c reobfuscate_srg.bat"/>
</exec>
<exec dir="${mcp.dir}" executable="sh" osfamily="unix">
<arg value="reobfuscate_srg.sh"/>
</exec>
<!-- Copy classes -->
<copy todir="${classes.dir}">
<fileset dir="${mcp.dir}/reobf/minecraft"/>
</copy>
<!-- Copy resources -->
<copy todir="${classes.dir}">
<fileset dir="${resources.dir}">
<exclude name="build.xml"/>
</fileset>
</copy>
<!-- Copy localizations -->
<copy todir="${classes.dir}" failonerror="false">
<fileset dir="${lang.dir}">
<exclude name="README.md"/>
</fileset>
</copy>
<!-- Reset src dir to post-forge-install state -->
<delete dir="${mcpsrc.dir}/minecraft/buildcraft"/>
</target>
<!-- Package the compiled files -->
<target name="package" depends="reobf">
<mkdir dir="${jar.dir}"/>
<delete includeemptydirs="true">
<fileset dir="${jar.dir}" includes="**/*"/>
</delete>
<condition property="jar.file.name" value="${jar.dir}/${buildcraft.name}-${mc.version}-${project.version.full}.jar" else="${jar.dir}/${buildcraft.name}-universal-${mc.version}-${project.version.full}.jar">
<isset property="forge-long-name"/>
</condition>
<jar destfile="${jar.file.name}" basedir="${classes.dir}"/>
<copy todir="${jar.dir}/changelog">
<fileset dir="${resources.dir}/changelog">
<include name="*" />
</fileset>
</copy>
</target>
<target name="run">
<!-- Start Client -->
<exec dir="${mcp.dir}" executable="cmd" osfamily="windows">
<arg line="/c startclient.bat"/>
</exec>
<exec dir="${mcp.dir}" executable="sh" osfamily="unix">
<arg value="startclient.sh"/>
</exec>
</target>
<target name="test-run" depends="compile,run"/>
<!-- Default target to run -->
<target name="main" depends="package"/>
</project>