私は通常このように呼び出されるコンパイラ(および言語)を構築しています:
java -jar nc.jar \
-p some/referenced/package.nc \
-p framework.nc \
source1.ns source2.ns sourceN.ns \
-o output/package.nc
コンパイラを呼び出して標準ライブラリとすべてのテストケースをコンパイルするタスクをANTビルドファイルに含めたいのですが、個別のコンパイラ呼び出しを<java>
タスクとして指定するのは面倒です。
<target name="framework" depends="compiler" description="Build the n framework">
<!-- More compile steps -->
<java jar="nc.jar" fork="true">
<arg value="-p"/>
<arg path="../nframework/build/n.core.nc"/>
<arg path="../nframework/n/debug/DebugPrint.ns"/>
<arg path="../nframework/n/debug/Trace.ns"/>
<arg value="-o"/>
<arg path="../nframework/build/n.debug.nc"/>
</java>
<!-- More compile steps -->
</target>
これを次のように単純化できる、ある種のANTタスクを作成したいと思います。
<target name="framework" depends="compiler" description="Build the n framework">
<!-- More compile steps -->
<nc output="../nframework/build/n.debug.nc">
<link-package path="../nframework/build/n.core.nc"/>
<src>
<fileset dir="../nframework/n/debug" includes="**/*.ns"/>
</src>
</nc>
<!-- More compile steps -->
</target>
この目的のために、私はmacrodefを試しました:
<macrodef name="nc">
<attribute name="output"/>
<element name="link-package"/>
<element name="src"/>
<sequential>
<java jar="nc.jar" fork="true">
<arg value="-p"/>
<!-- This doesn't do what I want -->
<link-package/>
<!-- Neither does this -->
<src/>
<arg value="-o"/>
<arg path="@{output}"/>
</java>
</sequential>
</macrodef>
上記のいくつかのバリエーションを試しましたが、それぞれが次のようなエラーでエラーになります。/home/jwarner/code/nlang/nc/build.xml:55:javaはネストされた「fileset」要素をサポートしていません。
ANT自体を拡張せずにこれを行う方法はありますか?あるいは、コンパイラにantタスクを追加するのはかなり簡単でしょうか?私は最終的な<nc>
タスクの構文についてひどくうるさくはありません。