diff options
| author | Antia Anderson <anita@ansan.io> | 2026-08-15 04:17:38 -0400 |
|---|---|---|
| committer | Antia Anderson <anita@ansan.io> | 2026-08-15 04:17:38 -0400 |
| commit | edee755fbbb971f035a7e5d96e3c00be62620ce6 (patch) | |
| tree | 0940b78dbdd0c16f954f2d4904d38f28e291502f /build.xml | |
| download | mai-trunk.tar.gz mai-trunk.zip | |
Signed-off-by: Antia Anderson <anita@ansan.io>
Diffstat (limited to 'build.xml')
| -rw-r--r-- | build.xml | 265 |
1 files changed, 265 insertions, 0 deletions
diff --git a/build.xml b/build.xml new file mode 100644 index 0000000..f5d65bc --- /dev/null +++ b/build.xml @@ -0,0 +1,265 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<project + name="mai" + default="build" + basedir="." + xmlns:ivy="antlib:org.apache.ivy.ant"> + + <!-- Project --> + <property name="src.dir" value="${basedir}/src"/> + <property name="test.dir" value="${basedir}/test"/> + + <property name="build.dir" value="${basedir}/build"/> + <property name="classes.dir" value="${build.dir}/classes"/> + <property name="test.classes.dir" value="${build.dir}/test-classes"/> + <property name="test.results.dir" value="${build.dir}/test-results"/> + <property name="dist.dir" value="${build.dir}/dist"/> + <property name="deps.dir" value="${build.dir}/deps"/> + + <!-- Bootstrap tools --> + <property name="tools.dir" value="${basedir}/.tools"/> + + <!-- Java --> + <property name="java.release" value="25"/> + + <!-- Ivy --> + <property name="ivy.version" value="2.6.0"/> + <property + name="ivy.jar" + value="${tools.dir}/ivy-${ivy.version}.jar"/> + + <property + name="ivy.url" + value="https://repo.maven.apache.org/maven2/org/apache/ivy/ivy/${ivy.version}/ivy-${ivy.version}.jar"/> + + <!-- Application --> + <property name="main.class" value="moe.anita.mai.Main"/> + <property name="jar.file" value="${dist.dir}/mai.jar"/> + + <!-- Ivy bootstrap --> + + <target name="check-ivy"> + <available + file="${ivy.jar}" + property="ivy.available"/> + </target> + + <target + name="download-ivy" + depends="check-ivy" + unless="ivy.available"> + + <mkdir dir="${tools.dir}"/> + + <echo message="Downloading Apache Ivy ${ivy.version}..."/> + + <get + src="${ivy.url}" + dest="${ivy.jar}" + usetimestamp="true"/> + </target> + + <target name="bootstrap-ivy" depends="download-ivy"> + <taskdef + resource="org/apache/ivy/ant/antlib.xml" + uri="antlib:org.apache.ivy.ant" + classpath="${ivy.jar}"/> + </target> + + <!-- Initialization --> + + <target name="init"> + <mkdir dir="${classes.dir}"/> + <mkdir dir="${test.classes.dir}"/> + <mkdir dir="${test.results.dir}"/> + <mkdir dir="${dist.dir}"/> + <mkdir dir="${deps.dir}"/> + </target> + + <!-- Dependencies --> + + <target name="resolve" depends="init,bootstrap-ivy"> + <ivy:resolve file="${basedir}/ivy.xml"/> + + <ivy:retrieve + conf="test" + pattern="${deps.dir}/test/[artifact]-[revision].[ext]"/> + </target> + + <path id="test.classpath"> + <pathelement location="${classes.dir}"/> + + <fileset dir="${deps.dir}/test"> + <include name="*.jar"/> + </fileset> + </path> + + <!-- Compile --> + + <target name="compile" depends="init"> + <javac + srcdir="${src.dir}" + destdir="${classes.dir}" + release="${java.release}" + encoding="UTF-8" + includeantruntime="false" + debug="true"/> + </target> + + <target name="compile-test" depends="compile,resolve"> + <javac + srcdir="${test.dir}" + destdir="${test.classes.dir}" + release="${java.release}" + encoding="UTF-8" + includeantruntime="false" + debug="true"> + + <classpath refid="test.classpath"/> + </javac> + </target> + + <!-- Tests --> + + <target name="test" depends="compile-test"> + <junitlauncher + haltOnFailure="true" + printSummary="true"> + + <classpath> + <pathelement location="${classes.dir}"/> + <pathelement location="${test.classes.dir}"/> + + <fileset dir="${deps.dir}/test"> + <include name="*.jar"/> + </fileset> + </classpath> + + <testclasses outputdir="${test.results.dir}"> + <fileset dir="${test.classes.dir}"> + <include name="**/*Test.class"/> + </fileset> + + <listener type="legacy-plain"/> + </testclasses> + </junitlauncher> + </target> + + <!-- JAR --> + + <target name="jar" depends="compile"> + <jar destfile="${jar.file}"> + <fileset dir="${classes.dir}"/> + + <manifest> + <attribute + name="Main-Class" + value="${main.class}"/> + + <attribute + name="Implementation-Title" + value="mai"/> + </manifest> + </jar> + </target> + + <!-- Build --> + + <target name="build" depends="jar"> + <echo message="Built ${jar.file}"/> + </target> + + <!-- Run --> + + <target name="run" depends="compile"> + <java + classname="${main.class}" + fork="true" + failonerror="true"> + + <classpath> + <pathelement location="${classes.dir}"/> + </classpath> + </java> + </target> + + <!-- LSP / JDT LS --> + + <target name="lsp" depends="resolve"> + <echo message="Generating JDT LS project files..."/> + + <echo file="${basedir}/.project"><![CDATA[<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>mai</name> + <comment></comment> + <projects></projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments></arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.jdt.core.javanature</nature> + </natures> +</projectDescription> +]]></echo> + + <echo file="${basedir}/.classpath"><![CDATA[<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="test"/> + <classpathentry + kind="con" + path="org.eclipse.jdt.launching.JRE_CONTAINER"/> +]]></echo> + + <fileset id="lsp.dependencies" dir="${deps.dir}/test"> + <include name="*.jar"/> + </fileset> + + <pathconvert + property="lsp.dependency.entries" + refid="lsp.dependencies" + pathsep=" "> + + <mapper> + <globmapper + from="${basedir}/*" + to=" <classpathentry kind="lib" path="*"/>"/> + </mapper> + </pathconvert> + + <echo + file="${basedir}/.classpath" + append="true">${lsp.dependency.entries} +</echo> + + <echo file="${basedir}/.classpath" append="true"><![CDATA[ + <classpathentry kind="output" path="build/classes"/> +</classpath> +]]></echo> + + <echo message="Generated .project and .classpath"/> + </target> + + <!-- Clean --> + + <target name="clean"> + <delete dir="${build.dir}"/> + </target> + + <target name="clean-lsp"> + <delete file="${basedir}/.project"/> + <delete file="${basedir}/.classpath"/> + <delete dir="${basedir}/.settings"/> + </target> + + <target name="clean-all" depends="clean,clean-lsp"> + <delete dir="${tools.dir}"/> + </target> + + <target name="rebuild" depends="clean,build"/> + +</project> |
