Permalink
Fetching contributors…
Cannot retrieve contributors at this time
663 lines (532 sloc) 25.3 KB
<!--
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
-->
<project name="build" default="build-help" basedir=".">
<!-- ============================================================
set properties
============================================================ -->
<property file="personal.properties" />
<property file="build.properties" />
<property file="vendor.properties" />
<!-- hint: override in your personal.properties -->
<property name="BUILDER" value="The Unknown Builder"/>
<basename property="ant.file.basename" file="${ant.file}"/>
<available property="VENDOR_FOUND" file="${VENDOR}"/>
<tstamp>
<format property="TSTAMP_STARTED" pattern="HH:mm:ss"/>
</tstamp>
<!--
<tstamp>
<format property="BUILD_DATE" pattern="yyyy-MM-dd__HH-mm-ss" timezone="GMT"/>
</tstamp>
-->
<exec executable="node" outputproperty="BUILD_DATE">
<arg value="-e"/>
<arg value="console.log((new Date()).valueOf().toString(36).toUpperCase())"/>
</exec>
<condition property="BUILD_VERSION" value="${WEINRE_VERSION}-${BUILD_DATE}">
<matches pattern=".*pre$" string="${WEINRE_VERSION}"/>
</condition>
<condition property="BUILD_VERSION" value="${WEINRE_VERSION}">
<not>
<matches pattern=".*pre$" string="${WEINRE_VERSION}"/>
</not>
</condition>
<property name="ARCH-SRC" value="apache-cordova-weinre-${BUILD_VERSION}-src"/>
<property name="ARCH-BIN" value="apache-cordova-weinre-${BUILD_VERSION}-bin"/>
<property name="ARCH-DOC" value="apache-cordova-weinre-${BUILD_VERSION}-doc"/>
<!-- ============================================================
print some help
============================================================ -->
<target name="help">
<echo>
ant targets available:
[default] - runs `build-help`
build - runs a development-time build
build-archives - runs `build-clean`, then builds archives
build-archives-ck - runs `build-archives`, then builds
checksum files
build-help - prints a line about available help, then
runs `build`
build-clean - runs `clean` then `build`
clean - removes transient build files
the file `personal.properties` must be available in the same
directory as this ant file. Use the file
`sample.personal.properties` as a template.
To update the weinre dependencies, use
ant -f update-vendor.xml
</echo>
</target>
<!-- ============================================================
do a build, but print message about help
============================================================ -->
<target name="build-help">
<echo message="to see commands available, use `ant help`"/>
<antcall target="build"/>
</target>
<!-- ============================================================
do a clean build
============================================================ -->
<target name="build-clean" depends="clean,build">
</target>
<!-- ============================================================
clean
============================================================ -->
<target name="clean">
<delete dir="${OUT}"/>
<delete dir="${TMP}"/>
<delete dir="${WEB}"/>
<delete dir="${CACHED}"/>
</target>
<!-- ============================================================
development-time build
============================================================ -->
<target name="build">
<fail>
<condition>
<not>
<resourceexists>
<file file="personal.properties"/>
</resourceexists>
</not>
</condition>
The file 'personal.properties' was not found; create one based on 'sample.personal.properties'.
</fail>
<echo>building version ${BUILD_VERSION}</echo>
<mkdir dir="${OUT}"/>
<delete includeemptydirs="true">
<fileset dir="${OUT}" includes="**/*" excludes="build-done.txt"/>
</delete>
<exec
executable = "git"
outputproperty = "git-log"
failifexecutionfails = "false"
>
<arg line="log -1 --pretty=oneline"/>
</exec>
<condition property="git-log" value="no git status available">
<not>
<isset property="git-log"/>
</not>
</condition>
<property
name = "build-info-text"
value = "weinre build ${BUILD_VERSION} by ${BUILDER}"
/>
<concat
append = "no"
destfile = "${OUT}/build-info.txt"
>${build-info-text}
</concat> <!-- keep this outdented, since Ant is so wonderful -->
<concat
append = "yes"
fixlastline = "yes"
eol = "lf"
destfile = "${OUT}/build-info.txt"
>git: ${git-log}
</concat> <!-- keep this outdented, since Ant is so wonderful -->
<antcall target="build-server"/>
<antcall target="build-web"/>
<antcall target="build-json-idl"/>
<antcall target="build-client"/>
<antcall target="build-target"/>
<antcall target="build-doc"/>
<tstamp>
<format property="TSTAMP_FINISHED" pattern="HH:mm:ss"/>
</tstamp>
<property name="MESSAGE_FINISHED" value="at ${TSTAMP_FINISHED} for ${ant.file}:build-dev"/>
<antcall target="finished"/>
<antcall target="finished-growl"/>
<echo file="${OUT}/build-done.txt" message="${build-info-text} is finished!"/>
<echo file="${OUT}/version.txt" message="${BUILD_VERSION}"/>
</target>
<!-- ============================================================
check for personal properties
============================================================ -->
<target name="check-personal-properties" unless="personal.properties.exists">
</target>
<!-- ============================================================
basic server resources
============================================================ -->
<target name="build-server">
<delete dir="../${PROJECT_SERVER}/lib" />
<mkdir dir="../${PROJECT_SERVER}/lib" />
<mkdir dir="../${PROJECT_SERVER}/lib/service" />
<echo message="compiling CoffeeScript files in: ${PROJECT_SERVER}/lib-src"/>
<exec executable="node" failonerror="true" failifexecutionfails="true">
<arg value="../${PROJECT_SERVER}/node_modules/coffee-script/bin/coffee"/>
<arg value="--compile"/>
<arg value="--bare"/>
<arg value="--output"/>
<arg value="../${PROJECT_SERVER}/lib"/>
<arg value="../${PROJECT_SERVER}/lib-src"/>
</exec>
</target>
<!-- ============================================================
basic web resources
============================================================ -->
<target name="build-web">
<delete dir="${WEB}" />
<mkdir dir="${WEB}" />
<delete dir="${TMP}" />
<mkdir dir="${TMP}" />
<echo message="compiling CoffeeScript modules"/>
<mkdir dir="${TMP}/modules/weinre/client" />
<mkdir dir="${TMP}/modules/weinre/common" />
<mkdir dir="${TMP}/modules/weinre/target" />
<echo message="compiling CoffeeScript files in: ${PROJECT_WEB}/modules/weinre/client"/>
<exec executable="node" failonerror="true" failifexecutionfails="true">
<arg value="../${PROJECT_SERVER}/node_modules/coffee-script/bin/coffee"/>
<arg value="--compile"/>
<arg value="--bare"/>
<arg value="--output"/>
<arg value="${TMP}/modules/weinre/client"/>
<arg value="../${PROJECT_WEB}/modules/weinre/client"/>
</exec>
<echo message="compiling CoffeeScript files in: ${PROJECT_WEB}/modules/weinre/common"/>
<exec executable="node" failonerror="true" failifexecutionfails="true">
<arg value="../${PROJECT_SERVER}/node_modules/coffee-script/bin/coffee"/>
<arg value="--compile"/>
<arg value="--bare"/>
<arg value="--output"/>
<arg value="${TMP}/modules/weinre/common"/>
<arg value="../${PROJECT_WEB}/modules/weinre/common"/>
</exec>
<echo message="compiling CoffeeScript files in: ${PROJECT_WEB}/modules/weinre/target"/>
<exec executable="node" failonerror="true" failifexecutionfails="true">
<arg value="../${PROJECT_SERVER}/node_modules/coffee-script/bin/coffee"/>
<arg value="--compile"/>
<arg value="--bare"/>
<arg value="--output"/>
<arg value="${TMP}/modules/weinre/target"/>
<arg value="../${PROJECT_WEB}/modules/weinre/target"/>
</exec>
<echo message="transportd-izing modules"/>
<exec executable="python" failonerror="true" failifexecutionfails="true">
<arg file="scripts/module2amd.py"/>
<arg value="--quiet"/>
<arg value="--out"/>
<arg file="${WEB}"/>
<arg file="${TMP}/modules"/>
</exec>
<copy todir="${WEB}">
<fileset file="../${PROJECT_WEB}/modjewel.js"/>
</copy>
<!--
<copy todir="${WEB}">
<fileset file="${VENDOR}/json2/json2.js"/>
</copy>
-->
<copy todir="${WEB}">
<fileset dir="../${PROJECT_WEB}">
<exclude name="versions.js"/>
<exclude name="common/**/*"/>
<exclude name="bin/**/*"/>
<include name="**/*.js"/>
<include name="**/*.css"/>
<include name="**/*.html"/>
<include name="**/*.png"/>
</fileset>
</copy>
<echo message="building InjectedScript.js"/>
<echo
file = "${WEB}/weinre/target/InjectedScript.js"
message = "var injectedScriptConstructor = ${line.separator}"
/>
<concat
destfile = "${WEB}/weinre/target/InjectedScript.js"
append = "true"
>
<fileset file="${VENDOR}/webkit/WebCore/inspector/InjectedScriptSource.js"/>
</concat>
<echo message="building versions.js"/>
<copy todir="${WEB}">
<fileset dir="../${PROJECT_WEB}">
<include name="versions.js"/>
</fileset>
<filterset>
<filter token="WEINRE_VERSION" value="${BUILD_VERSION}"/>
<filter token="BUILD_DATE" value="${BUILD_DATE}"/>
</filterset>
</copy>
<echo message="building package.json"/>
<copy file="package.json.template" tofile="../${PROJECT_SERVER}/package.json" overwrite="true">
<filterset>
<filter token="WEINRE_VERSION" value="${BUILD_VERSION}"/>
</filterset>
</copy>
</target>
<!-- ============================================================
documentation
============================================================ -->
<target name="build-doc">
<mkdir dir="${WEB}/doc" />
<copy todir="${WEB}/doc" file="${OUT}/build-info.txt"/>
<build-html name="Building" title="Building" oDir="${WEB}/doc" iDir="../${PROJECT_DOC}"/>
<build-html name="Home" title="Home" oDir="${WEB}/doc" iDir="../${PROJECT_DOC}"/>
<build-html name="Installing" title="Installing" oDir="${WEB}/doc" iDir="../${PROJECT_DOC}"/>
<build-html name="License" title="License" oDir="${WEB}/doc" iDir="../${PROJECT_DOC}"/>
<build-html name="Running" title="Running" oDir="${WEB}/doc" iDir="../${PROJECT_DOC}"/>
<build-html name="MultiUser" title="Muli-User" oDir="${WEB}/doc" iDir="../${PROJECT_DOC}"/>
<build-html name="Security" title="Security" oDir="${WEB}/doc" iDir="../${PROJECT_DOC}"/>
<build-html name="UserInterface" title="User Interface" oDir="${WEB}/doc" iDir="../${PROJECT_DOC}"/>
<build-html name="ChangeLog" title="ChangeLog" oDir="${WEB}/doc" iDir="../${PROJECT_DOC}"/>
<copy file="${WEB}/doc/Home.html" tofile="${WEB}/doc/index.html"/>
<copy todir="${WEB}/doc/images" file="../${PROJECT_WEB}/images/weinre-icon-64x64.png"/>
<copy todir="${WEB}/doc/css"> <fileset dir="../${PROJECT_DOC}/css"/> </copy>
<copy todir="${WEB}/doc/images"> <fileset dir="../${PROJECT_DOC}/images"/> </copy>
<copy todir="${WEB}/doc/scripts"> <fileset dir="../${PROJECT_DOC}/scripts"/> </copy>
<delete dir="${WEB}/doc/images/orig" />
</target>
<!-- ============================================================
convert IDL to JSON (cached)
============================================================ -->
<target name="build-json-idl">
<uptodate property="JSON_IDL_UPTODATE" targetfile="${CACHED}/json-idl/all-json-idls.js">
<srcfiles dir="../${PROJECT_SERVER}/interfaces" includes="*.idl"/>
<srcfiles dir="${VENDOR}/webkit/WebCore/inspector" includes="*.idl"/>
</uptodate>
<antcall target="build-json-idl-fresh"/>
<copy todir="${WEB}/interfaces"> <fileset dir="${CACHED}/json-idl"/></copy>
</target>
<!-- ============================================================
convert IDL to JSON (slow part)
============================================================ -->
<target name="build-json-idl-fresh" unless="JSON_IDL_UPTODATE">
<delete dir="${CACHED}/json-idl"/>
<mkdir dir="${CACHED}/json-idl"/>
<simple-idl2json name="WeinreClientCommands" oDir="${CACHED}/json-idl" iDir="../${PROJECT_SERVER}/interfaces"/>
<simple-idl2json name="WeinreClientEvents" oDir="${CACHED}/json-idl" iDir="../${PROJECT_SERVER}/interfaces"/>
<simple-idl2json name="WeinreTargetCommands" oDir="${CACHED}/json-idl" iDir="../${PROJECT_SERVER}/interfaces"/>
<simple-idl2json name="WeinreTargetEvents" oDir="${CACHED}/json-idl" iDir="../${PROJECT_SERVER}/interfaces"/>
<simple-idl2json name="WeinreExtraClientCommands" oDir="${CACHED}/json-idl" iDir="../${PROJECT_SERVER}/interfaces"/>
<simple-idl2json name="WeinreExtraTargetEvents" oDir="${CACHED}/json-idl" iDir="../${PROJECT_SERVER}/interfaces"/>
<simple-idl2json name="InjectedScriptHost" oDir="${CACHED}/json-idl" iDir="${VENDOR}/webkit/WebCore/inspector"/>
<simple-idl2json name="Inspector" oDir="${CACHED}/json-idl" iDir="${VENDOR}/webkit/WebCore/inspector">
<arg value="--anyType"/>
<arg value="Value"/>
</simple-idl2json>
<simple-idl2json name="InspectorFrontendHost" oDir="${CACHED}/json-idl" iDir="${VENDOR}/webkit/WebCore/inspector">
<arg value="--anyType"/>
<arg value="MouseEvent"/>
</simple-idl2json>
<exec executable="python" failonerror="true" failifexecutionfails="true">
<arg file="scripts/collect-all-json-idl.py"/>
<arg file="${CACHED}/json-idl/all-json-idls.js"/>
<arg file="${CACHED}/json-idl"/>
</exec>
<exec executable="python" failonerror="true" failifexecutionfails="true">
<arg file="scripts/collect-all-json-idl.py"/>
<arg value="-min"/>
<arg file="${CACHED}/json-idl/all-json-idls-min.js"/>
<arg file="${CACHED}/json-idl"/>
</exec>
</target>
<!-- ============================================================
build the web/target files
============================================================ -->
<target name="build-target">
<mkdir dir="${WEB}/target"/>
<exec executable="python" failonerror="true" failifexecutionfails="true">
<arg file="scripts/build-target-scripts.py"/>
<arg file="${WEB}"/>
<arg file="${WEB}/target"/>
</exec>
</target>
<!-- ============================================================
build the web/client files
============================================================ -->
<target name="build-client">
<copy todir="${WEB}/client/nls/English.lproj">
<fileset file="${VENDOR}/webkit/WebCore/English.lproj/localizedStrings.js"/>
</copy>
<copy todir="${WEB}/client">
<fileset dir="${VENDOR}/webkit/WebCore/inspector/front-end"/>
</copy>
<!-- Replaces webkit-specific 'const' keyword in inspector files with 'var' to support non-webkit browsers -->
<replaceregexp match="const " replace="var " flags="g" byline="true">
<fileset dir="${WEB}/client" includes="**/*.js"/>
</replaceregexp>
<exec executable="python" failonerror="true" failifexecutionfails="true">
<arg file="scripts/build-client-html.py"/>
<arg file="${WEB}"/>
</exec>
</target>
<!-- ============================================================
build the archives
============================================================ -->
<target name="build-archives" depends="build-clean">
<!-- =================================== -->
<delete dir="${OUT}/archives"/>
<mkdir dir="${OUT}/archives"/>
<delete dir="${OUT}/files"/>
<delete dir="${OUT}/files/${ARCH-BIN}"/>
<mkdir dir="${OUT}/files/${ARCH-BIN}"/>
<copy todir="${OUT}/files/${ARCH-BIN}" file="${OUT}/build-info.txt"/>
<copy todir="${OUT}/files/${ARCH-BIN}" file="../LICENSE"/>
<copy todir="${OUT}/files/${ARCH-BIN}" file="../NOTICE"/>
<copy todir="${OUT}/files/${ARCH-BIN}">
<fileset dir="../${PROJECT_SERVER}">
<exclude name="weinre-hot"/>
</fileset>
</copy>
<chmod file="${OUT}/files/${ARCH-BIN}/weinre" perm="+x"/>
<!-- ant's zip task doesn't preserve permission bits -->
<exec executable="zip" dir="${OUT}/files">
<arg value="-q"/>
<arg value="-r"/>
<arg value="../archives/${ARCH-BIN}.zip"/>
<arg value="${ARCH-BIN}"/>
</exec>
<exec executable="tar" dir="${OUT}/files">
<arg value="-czf"/>
<arg value="../archives/${ARCH-BIN}.tar.gz"/>
<arg value="${ARCH-BIN}"/>
</exec>
<!-- =================================== -->
<delete dir="${OUT}/files/${ARCH-DOC}"/>
<mkdir dir="${OUT}/files/${ARCH-DOC}"/>
<copy todir="${OUT}/files/${ARCH-DOC}" file="${OUT}/build-info.txt" />
<copy todir="${OUT}/files/${ARCH-DOC}" file="../LICENSE"/>
<copy todir="${OUT}/files/${ARCH-DOC}" file="../NOTICE"/>
<copy todir="${OUT}/files/${ARCH-DOC}">
<fileset dir="${WEB}/doc"/>
</copy>
<copy todir="${OUT}/archives/doc">
<fileset dir="${OUT}/files/${ARCH-DOC}"/>
</copy>
<!-- ant's zip task doesn't preserve permission bits -->
<exec executable="zip" dir="${OUT}/files">
<arg value="-q"/>
<arg value="-r"/>
<arg value="../archives/${ARCH-DOC}.zip"/>
<arg value="${ARCH-DOC}"/>
</exec>
<exec executable="tar" dir="${OUT}/files">
<arg value="-czf"/>
<arg value="../archives/${ARCH-DOC}.tar.gz"/>
<arg value="${ARCH-DOC}"/>
</exec>
<!-- =================================== -->
<delete dir="${OUT}/files/${ARCH-SRC}"/>
<mkdir dir="${OUT}/files/${ARCH-SRC}"/>
<copy todir="${OUT}/files/${ARCH-SRC}" file="${OUT}/build-info.txt" />
<copy todir="${OUT}/files/${ARCH-SRC}" preservelastmodified="yes">
<fileset dir="..">
<exclude name="weinre.build/bin/**"/>
<exclude name="weinre.build/cached/**"/>
<exclude name="weinre.build/out/**"/>
<exclude name="weinre.build/tmp/**"/>
<exclude name="weinre.build/personal.properties"/>
<exclude name="weinre.server/tmp/**"/>
<exclude name="weinre.server/web/**"/>
</fileset>
</copy>
<exec executable="zip" dir="${OUT}/files">
<arg value="-q"/>
<arg value="-r"/>
<arg value="../archives/${ARCH-SRC}.zip"/>
<arg value="${ARCH-SRC}"/>
</exec>
<exec executable="tar" dir="${OUT}/files">
<arg value="-czf"/>
<arg value="../archives/${ARCH-SRC}.tar.gz"/>
<arg value="${ARCH-SRC}"/>
</exec>
</target>
<!-- ============================================================
build-archives-checksums
============================================================ -->
<target name="build-archives-ck" depends="build-archives">
<checksum file="${OUT}/archives/${ARCH-BIN}.zip" algorithm="MD5"/>
<checksum file="${OUT}/archives/${ARCH-DOC}.zip" algorithm="MD5"/>
<checksum file="${OUT}/archives/${ARCH-SRC}.zip" algorithm="MD5"/>
<checksum file="${OUT}/archives/${ARCH-BIN}.tar.gz" algorithm="MD5"/>
<checksum file="${OUT}/archives/${ARCH-DOC}.tar.gz" algorithm="MD5"/>
<checksum file="${OUT}/archives/${ARCH-SRC}.tar.gz" algorithm="MD5"/>
<checksum file="${OUT}/archives/${ARCH-BIN}.zip" algorithm="SHA1"/>
<checksum file="${OUT}/archives/${ARCH-DOC}.zip" algorithm="SHA1"/>
<checksum file="${OUT}/archives/${ARCH-SRC}.zip" algorithm="SHA1"/>
<checksum file="${OUT}/archives/${ARCH-BIN}.tar.gz" algorithm="SHA1"/>
<checksum file="${OUT}/archives/${ARCH-DOC}.tar.gz" algorithm="SHA1"/>
<checksum file="${OUT}/archives/${ARCH-SRC}.tar.gz" algorithm="SHA1"/>
<!-- =================================== -->
<!--
<delete dir="${OUT}/files"/>
-->
</target>
<!-- ============================================================
done!
============================================================ -->
<target name="finished">
<echo>ant completed successfully ${MESSAGE_FINISHED}</echo>
</target>
<!-- ============================================================
done! via growl
============================================================ -->
<target name="finished-growl" if="USE_GROWL">
<exec os="Mac OS X" executable="growlnotify">
<arg value="-m"/>
<arg value="${MESSAGE_FINISHED}"/>
<arg value="ant completed successfully"/>
</exec>
</target>
<!-- ============================================================
macro to compile IDL to JSON
============================================================ -->
<macrodef name="simple-idl2json">
<attribute name="name"/>
<attribute name="iDir"/>
<attribute name="oDir"/>
<element name="args" optional="true" implicit="true"/>
<sequential>
<exec executable="python" failonerror="true" failifexecutionfails="true">
<arg file="scripts/simple-idl2json.py"/>
<args/>
<arg value="--validate"/>
<arg file="@{iDir}/@{name}.idl"/>
<arg file="@{oDir}/@{name}.json"/>
</exec>
</sequential>
</macrodef>
<!-- ============================================================
macro to compile HTML
============================================================ -->
<macrodef name="build-html">
<attribute name="name"/>
<attribute name="title"/>
<attribute name="iDir"/>
<attribute name="oDir"/>
<element name="args" optional="true" implicit="true"/>
<sequential>
<delete file="@{oDir}/@{name}.html"/>
<concat destfile="@{oDir}/@{name}.html">
<filelist dir="@{iDir}" files="boilerplate-header.html.txt"/>
<filelist dir="@{iDir}" files="@{name}.body.html"/>
<filelist dir="@{iDir}" files="boilerplate-trailer.html.txt"/>
<filterchain>
<replacetokens>
<token key="PAGE_NAME" value="@{title}"/>
</replacetokens>
</filterchain>
</concat>
<echo>generated @{oDir}/@{name}.html</echo>
</sequential>
</macrodef>
<!-- ============================================================ -->
</project>