source: subversion/applications/editors/josm/i18n/build.xml @ 34500

Last change on this file since 34500 was 34262, checked in by floscher, 17 months ago

Fix check for Transifex configuration

Normalize potential absolute path to only the plugin directory name before checking for Transifex configuration.

File size: 12.6 KB
Line 
1<?xml version="1.0" encoding="utf-8"?>
2<project name="JOSM i18n" default="build" basedir=".">
3    <!-- compilation properties -->
4    <property name="josm.build.dir" value="../core"/>
5    <property name="josm.presets" value="${josm.build.dir}/data/defaultpresets.xml"/>
6    <property name="plugin.dir" value="../plugins"/>
7    <property name="maps.srcfile" value="https://josm.openstreetmap.de/maps"/>
8    <property name="wiki.srcfile" value="https://josm.openstreetmap.de/josmfile?mode=en"/>
9    <property name="surveyor.srcfile" value="${plugin.dir}/surveyor/resources/surveyor.xml"/>
10    <property name="tag2link.srcfile" value="${plugin.dir}/tag2link/resources/tag2link_sources.xml"/>
11    <property name="i18n.build.dir" value="build"/>
12    <property name="i18n.install.dir" value="${josm.build.dir}/data"/>
13    <property name="i18n_data.install.dir" value="${josm.build.dir}/data_nodist/trans"/>
14    <property name="po.build.dir" value="${i18n.build.dir}"/>
15    <property name="ant.build.javac.target" value="1.5"/>
16    <property name="gettexttasks.jar" value="lib/gettext-ant-tasks-0.9.7.jar"/>
17    <property name="antcontrib.jar" value="lib/ant-contrib-1.0b3.jar"/>
18    <target name="init" description="Loads the Ant gettext and contrib tasks">
19        <taskdef name="gettext-extract" classname="org.xnap.commons.ant.gettext.GettextExtractKeysTask" classpath="${gettexttasks.jar}"/>
20        <!-- for the <foreach> possibility -->
21        <taskdef resource="net/sf/antcontrib/antcontrib.properties" classpath="${antcontrib.jar}"/>
22    </target>
23    <target name="builddir">
24        <mkdir dir="${i18n.build.dir}"/>
25    </target>
26    <target name="trans_.java" depends="builddir">
27        <exec executable="perl" failonerror="true" logError="true" output="${i18n.build.dir}/trans_presets.java">
28            <arg line="convpreset.pl ${josm.presets}"/>
29        </exec>
30        <exec executable="perl" failonerror="true" logError="true" output="${i18n.build.dir}/trans_maps.java">
31            <arg line="convmaps.pl ${maps.srcfile}"/>
32        </exec>
33        <exec executable="perl" failonerror="true" logError="true" output="${i18n.build.dir}/trans_surveyor.java">
34            <arg line="convsurveyor.pl ${surveyor.srcfile}"/>
35        </exec>
36        <exec executable="perl" failonerror="true" logError="true" output="${i18n.build.dir}/trans_tag2link.java">
37            <arg line="convtag2link.pl ${tag2link.srcfile}"/>
38        </exec>
39        <exec executable="perl" failonerror="true" logError="true" output="${i18n.build.dir}/trans_plugins.java">
40            <arg line="convplugins.pl ${plugin.dir}/*/build.xml"/>
41        </exec>
42        <exec executable="perl" failonerror="true">
43            <arg line="convwiki.pl ${wiki.srcfile} ${i18n.build.dir}/josmfiles ${i18n.build.dir}/josmfiles.zip"/>
44        </exec>
45        <copy file="specialmessages.java" todir="${i18n.build.dir}"/>
46    </target>
47    <!-- Create the file build/pluginSrc.txt, which contains a list of include patterns for all *.java files that should be translated relative to "${plugin.dir}" -->
48    <target name="filterpluginsources" depends="init">
49        <delete file="${po.build.dir}/pluginSrc.txt"/>
50        <foreach param="path" target="filterpluginsource">
51            <path>
52                <dirset dir="${plugin.dir}" includes="*" excludes="00_*" />
53            </path>
54        </foreach>
55    </target>
56    <!-- Helper task for `filterpluginsources`: Appends an include pattern to the file `build/pluginSrc.txt` if there is no file `.tx/config` for a plugin -->
57    <target name="filterpluginsource">
58      <if>
59          <not>
60              <available file="${path}/.tx/config" type="file" />
61          </not>
62          <then>
63              <basename file="${path}" property="dir"/>
64              <echo file="${po.build.dir}/pluginSrc.txt" append="true" message="${dir}/**/*.java&#xa;"></echo>
65          </then>
66      </if>
67    </target>
68    <target name="po/josm.pot" description="Extracts message keys from the source code" depends="trans_.java,init,filterpluginsources">
69        <gettext-extract keysFile="josm.raw.pot" poDirectory="po" keywords="-k -ktrc:1c,2 -kmarktrc:1c,2 -ktr -kmarktr -ktrn:1,2 -ktrnc:1c,2,3">
70            <!-- core.pot -->
71            <fileset dir="${josm.build.dir}/src" includes="**/*.java"/>
72            <fileset dir="${i18n.build.dir}" includes="specialmessages.java"/>
73            <fileset dir="${i18n.build.dir}" includes="trans_presets.java"/>
74            <fileset dir="${josm.build.dir}/data/validator" includes="*.mapcss"/>
75            <fileset dir="${josm.build.dir}/styles/standard" includes="*.mapcss"/>
76            <fileset dir="${i18n.build.dir}" includes="trans_maps.java"/>
77            <!-- data.pot -->
78            <fileset dir="${i18n.build.dir}" includes="trans_plugins.java"/>
79            <!-- <fileset dir="${i18n.build.dir}/josmfiles" includes="trans_*.*"/> disable for now -->
80            <!-- plugins.pot -->
81            <fileset dir="${plugin.dir}" includesfile="${po.build.dir}/pluginSrc.txt"/>
82            <fileset dir="${i18n.build.dir}" includes="trans_surveyor.java"/>
83            <fileset dir="${i18n.build.dir}" includes="trans_tag2link.java"/>
84        </gettext-extract>
85        <exec executable="msggrep" failonerror="true">
86            <arg line="--msgid --regexp='---DUMMY-MARKER---' --invert-match --output-file=po/josm.pot po/josm.raw.pot"/>
87        </exec>
88        <delete file="po/josm.raw.pot"/>
89    </target>
90    <target name="po/core.pot" description="Extracts message keys from the JOSM core source code" depends="trans_.java,init">
91        <gettext-extract keysFile="core.pot" poDirectory="po" keywords="-k -ktrc:1c,2 -kmarktrc:1c,2 -ktr -kmarktr -ktrn:1,2 -ktrnc:1c,2,3">
92            <fileset dir="${josm.build.dir}/src" includes="**/*.java"/>
93            <fileset dir="${i18n.build.dir}" includes="specialmessages.java"/>
94            <fileset dir="${i18n.build.dir}" includes="trans_presets.java"/>
95            <fileset dir="${josm.build.dir}/data/validator" includes="*.mapcss"/>
96            <fileset dir="${josm.build.dir}/styles/standard" includes="*.mapcss"/>
97            <!-- maps should be in data instead, but that requires language file loading support in trac python code -->
98            <fileset dir="${i18n.build.dir}" includes="trans_maps.java"/>
99        </gettext-extract>
100    </target>
101    <target name="po/data.pot" description="Extracts message keys from data files, e.g., presets, imagery (minus core strings)" depends="trans_.java,po/core.pot,init">
102        <gettext-extract keysFile="data.raw.pot" poDirectory="${i18n.build.dir}" keywords="-k -ktrc:1c,2 -kmarktrc:1c,2 -ktr -kmarktr -ktrn:1,2 -ktrnc:1c,2,3">
103            <fileset dir="${i18n.build.dir}" includes="trans_plugins.java"/>
104            <!-- <fileset dir="${i18n.build.dir}/josmfiles" includes="trans_*.*"/> -->
105        </gettext-extract>
106        <copy todir="${po.build.dir}">
107            <fileset dir="po" includes="core.pot"/>
108        </copy>
109        <exec executable="msgcomm" failonerror="true" output="po/data.pot">
110            <arg line="--unique po/core.pot ${po.build.dir}/core.pot ${i18n.build.dir}/data.raw.pot"/>
111        </exec>
112        <delete file="${po.build.dir}/core.pot"/>
113        <delete file="${po.build.dir}/data.raw.pot"/>
114    </target>
115    <target name="po/plugins.pot" description="Extracts message keys from the plugins source code (minus core and data strings)" depends="trans_.java,po/core.pot,po/data.pot,init">
116        <gettext-extract keysFile="plugins.raw.pot" poDirectory="${i18n.build.dir}" keywords="-k -ktrc:1c,2 -kmarktrc:1c,2 -ktr -kmarktr -ktrn:1,2 -ktrnc:1c,2,3">
117            <fileset dir="${plugin.dir}" includesfile="${po.build.dir}/pluginSrc.txt"/>
118            <fileset dir="${i18n.build.dir}" includes="trans_surveyor.java"/>
119            <fileset dir="${i18n.build.dir}" includes="trans_tag2link.java"/>
120        </gettext-extract>
121        <copy todir="${po.build.dir}">
122            <fileset dir="po" includes="core.pot"/>
123            <fileset dir="po" includes="data.pot"/>
124        </copy>
125        <exec executable="msgcomm" failonerror="true" output="po/plugins.pot">
126            <arg line="--unique po/core.pot ${po.build.dir}/core.pot po/data.pot ${po.build.dir}/data.pot ${i18n.build.dir}/plugins.raw.pot"/>
127        </exec>
128        <delete file="${po.build.dir}/core.pot"/>
129        <delete file="${po.build.dir}/data.pot"/>
130        <delete file="${po.build.dir}/plugins.raw.pot"/>
131    </target>
132    <target name="build" depends="pot,allpot">
133        <antcall target="buildcore"/>
134        <antcall target="buildplugins"/>
135    </target>
136    <target name="buildplugins" depends="init">
137        <foreach param="path" target="plugintrans" parallel="true" maxThreads="8">
138            <path>
139                <dirset dir="${plugin.dir}" includes="*" excludes="00_*" />
140            </path>
141        </foreach>
142    </target>
143    <target name="singleplugintrans" depends="init">
144        <antcall target="plugintrans">
145            <param name="path" value="${plugin}"/>
146        </antcall>
147    </target>
148    <target name="buildcore" depends="po/core.pot,po/data.pot">
149        <antcall target="coretrans"/>
150        <antcall target="datatrans"/>
151    </target>
152    <target name="coretrans">
153        <exec executable="perl" failonerror="true">
154            <arg line="i18n.pl --potfile=po/core.pot --basedir=${i18n.install.dir}/ po/*.po"/>
155        </exec>
156    </target>
157    <target name="datatrans">
158        <exec executable="perl" failonerror="true">
159            <arg line="i18n.pl --potfile=po/data.pot --basedir=${i18n_data.install.dir}/ po/*.po"/>
160        </exec>
161    </target>
162    <!-- If the file `josm.pot` is present and the plugin has a `data/` directory, update its *.po files based on the ones in the `po/` directory. -->
163    <!-- If the plugin has a Transifex config file `.tx/config`, skip this target altogether -->
164    <target name="plugintrans">
165        <basename file="${path}" property="dir"/>
166        <if>
167            <available file="${plugin.dir}/${dir}/.tx/config" type="file"/>
168            <then>
169                <echo message="Skip plugin ${dir}, because it is translated with Transifex!"/>
170            </then>
171            <else>
172                <echo message="Run plugintrans target for plugin ${dir}" level="info"/>
173                <mkdir dir="${po.build.dir}/plugin_${dir}"/>
174                <exec executable="perl" failonerror="true" output="${po.build.dir}/plugin_${dir}/trans_plugin.java">
175                    <arg line="convplugins.pl ${plugin.dir}/${dir}/build.xml"/>
176                </exec>
177                <gettext-extract keysFile="josm.pot" poDirectory="${po.build.dir}/plugin_${dir}" keywords="-k -ktrc:1c,2 -kmarktrc:1c,2 -ktr -kmarktr -ktrn:1,2 -ktrnc:1c,2,3">
178                    <fileset dir="${plugin.dir}/${dir}" includes="**/*.java"/>
179                    <fileset dir="${po.build.dir}/plugin_${dir}" includes="trans_*.java"/>
180                    <fileset dir="${i18n.build.dir}" includes="trans_${dir}.java"/> <!-- include plugin specific translation -->
181                </gettext-extract>
182                <if>
183                    <and>
184                        <available file="${po.build.dir}/plugin_${dir}/josm.pot" type="file"/>
185                        <available file="${plugin.dir}/${dir}/data/" type="dir"/>
186                    </and>
187                    <then>
188                        <exec executable="perl" failonerror="true">
189                            <arg line="i18n.pl --potfile=${po.build.dir}/plugin_${dir}/josm.pot --basedir=${plugin.dir}/${dir}/data/ po/*.po"/>
190                        </exec>
191                    </then>
192                </if>
193                <delete dir="${po.build.dir}/plugin_${dir}"/>
194            </else>
195        </if>
196    </target>
197    <target name="clean">
198        <delete dir="${i18n.build.dir}"/>
199        <delete file="po/josm.pot"/>
200        <delete>
201            <fileset dir="po" includes="*.*~" defaultexcludes="false"/>
202        </delete>
203        <delete>
204            <fileset dir="po" includes="*.po" defaultexcludes="false"/>
205        </delete>
206    </target>
207    <target name="test" depends="pot">
208        <mkdir dir="${i18n.build.dir}/test"/>
209        <exec executable="perl" failonerror="true">
210            <arg line="i18n.pl --potfile=po/josm.pot --basedir=${i18n.build.dir}/test/ po/*.po"/>
211        </exec>
212    </target>
213    <target name="pot" depends="po/josm.pot" />
214    <target name="allpot" depends="po/core.pot,po/data.pot,po/plugins.pot" />
215    <target name="update">
216        <exec executable="perl" failonerror="true">
217            <arg line="launchpad.pl bzronly"/>
218        </exec>
219        <antcall target="build"/>
220    </target>
221    <target name="updatecore">
222        <exec executable="perl" failonerror="true">
223            <arg line="launchpad.pl bzronly"/>
224        </exec>
225        <antcall target="buildcore"/>
226    </target>
227</project>
Note: See TracBrowser for help on using the repository browser.