Files
jlibcom/build.xml

460 lines
21 KiB
XML

<?xml version="1.0"?>
<!-- ======================================================================
Ant build file for JACOB.
Created Feb 4, 2005 1:23:05 PM as part of migration from ANT
Last Modified October 13, 2005
Tested on Eclipse 3.2 with the Callisto plugis, Ant 1.6.1 and MS Visual C++ 6.0
Eclipse users are pretty lucky because the whole project
can be built inside eclipse due to their built in ANT support.
Developers will need to find a copy of MS Visual C++ 6.0.
The build proces defined in this build.xml file does support
MS Visual C++ 8.0 (Visual C++ 2005 Express) when combined with the M SDK.
The problem is that SafeArray.cpp will not compile
with that more advanced (and 64 bit aware) environment.
YOU MUST define a file named compilation_tools.properties!
The file for MS Visual C++ 6.0 building only the 32 bit version
(the only version available through 1.11) looks something like:
JDK=d:/j2sdk1.4.2_09
MSDEVDIR=d:\\apps\\Microsoft Visual Studio\\VC98
version=1.11-pre2
Construction with 64 bit support requires the MS Platform SDK.
compilation_tools.properties in this situation should look
something like:
JDK=d:/j2sdk1.4.2_09
MSDEVDIR=d:\\apps\\Microsoft Visual Studio\\VC98
MSSDKDIR=D:\\Apps\\Microsoft Platform SDK for Windows Server 2003 R2
version=1.11-pre2
DO NOT check compilation_tools.properties into source control as the
values are specific to YOUR environment.
the version.properties file is now completely autogenerated
====================================================================== -->
<project name="jacob" default="default" basedir=".">
<!-- ======================================================================
First handle the properties that come from property files
Sets a default for properties that were not in the file.
Relies on the fact that properties cannot be reset once set.
================================================================== -->
<property file="compilation_tools.properties" />
<property name="JDK" value="JDK not set in compilation_tools properties file"/>
<!-- MSDEVDIR is a required parameter so set to a message if its not set -->
<property name="MSDEVDIR" value="MSDEVDIR not set in compilation_tools properties file"/>
<!-- MSSDKDIR is an optional parameter. It is set to the same as MSDEVDIR if not specified
sets it to the "there is a problem" type message if no SDK or DEV was provided -->
<property name="MSSDKDIR" value="${MSDEVDIR}"/>
<echo message="executing with MSDEVDIR=${MSDEVDIR}" />
<echo message="executing with MSSDKDIR=${MSSDKDIR}"/>
<!-- ======================================================================
Now build up all the derived properties
================================================================== -->
<property name="application.title" value="JACOB : Java COM Bridge" />
<property name="application.vendor" value="http://jacob-project.sourceforge.net" />
<property name="src.java.jacob.mainpackage" value="com.jacob" />
<property name="java.class.main" value="com.jacob.com.Jacob" />
<property name="generated.filename.dll" value="jacob.dll" />
<property name="generated.filename.jar" value="jacob.jar" />
<property name="generated.filename.zip" value="jacob_${version}" />
<property name="src.java.jacob" value="${basedir}/src" />
<property name="src.java.samples" value="${basedir}/samples" />
<property name="src.java.unittest" value="${basedir}/unittest" />
<property name="src.cpp" value="${basedir}/jni" />
<property name="release.dir" value="${basedir}/release" />
<property name="release.dir.x86" value="${release.dir}/x86" />
<property name="release.dir.x86.cpp" value="${release.dir.x86}/jni" />
<property name="release.file.x86.dll" value="${release.dir.x86}/${generated.filename.dll}" />
<property name="release.dir.AMD64" value="${release.dir}/AMD64" />
<property name="release.dir.AMD64.cpp" value="${release.dir.AMD64}/jni" />
<property name="release.file.AMD64.dll" value="${release.dir.AMD64}/${generated.filename.dll}" />
<property name="release.dir.java" value="${release.dir}/java" />
<property name="release.file.jar" value="${release.dir.java}/${generated.filename.jar}" />
<property name="compiler.x86" value="${MSDEVDIR}\bin\cl.exe" />
<property name="linker.x86" value="${MSDEVDIR}\bin\link.exe" />
<property name="include.x86" value="${MSDEVDIR}\include" />
<property name="include.x86.atl" value="${MSDEVDIR}\atl\include" />
<property name="library.x86" value="${MSDEVDIR}\lib" />
<property name="compiler.AMD64" value="${MSSDKDIR}\bin\win64\x86\AMD64\cl.exe" />
<property name="linker.AMD64" value="${MSSDKDIR}\bin\win64\x86\AMD64\link.exe" />
<property name="include.AMD64" value="${MSSDKDIR}\include" />
<property name="library.AMD64" value="${MSSDKDIR}\lib\AMD64" />
<!-- Itanium support not yet implemented -->
<property name="compiler.IA64" value="${MSDEVDIR}\bin\win64\cl.exe" />
<property name="linker.IA64" value="${MSDEVDIR}\bin\win64\link.exe" />
<property name="include.IA64" value="${MSSDKDIR}\include" />
<property name="library.IA64" value="${MSSDKDIR}\lib\IA64" />
<!-- ======================================================================
Create the necessary directory structure (does nothing if it
already there)
================================================================== -->
<mkdir dir="${release.dir.java}"/>
<mkdir dir="${release.dir.x86.cpp}"/>
<mkdir dir="${release.dir.AMD64.cpp}"/>
<mkdir dir="${release.dir}"/>
<!-- ======================================================================
Writes out a version file to be included in the jar
================================================================== -->
<property name="version" value="version not set in compilation_tools properties file"/>
<propertyfile file="version.properties">
<entry key="version" type="string" value="${version}" />
<entry key="build.iteration" type="int" operation="+" value="1" pattern="00" />
<entry key="build.date" type="date" value="now" operation="=" pattern="dd-MMMM-yyyy HH:mm:ss" />
</propertyfile>
<property file="version.properties" />
<!-- ======================================================================
32 bit x86 can only be built on 32 bit because of a JDK library issue.
true if on x86, unset in all other cases.
Assume 64 bit builds are ok if MSDEVDIR and MSSDKDIR are different
================================================================== -->
<condition property="canBuildX86">
<os arch="x86"/>
</condition>
<echo message="canBuildX86=${canBuildX86}" />
<condition property="canBuildAMD64">
<not>
<equals arg1="${MSSDKDIR}" arg2="${MSDEVDIR}"/>
</not>
</condition>
<echo message="canBuildAMD64=${canBuildAMD64}" />
<!-- ======================================================================
Compare the date/time of the DLL against that of the cpp source.
Up to date is only true if dll exists and is later than source
================================================================== -->
<uptodate property="dllUpToDateX86" targetfile="${release.file.x86.dll}">
<srcfiles dir="${src.cpp}" includes="*.cpp" />
<srcfiles dir="${src.cpp}" includes="*.h" />
<!-- Check the build file itself as well -->
<srcfiles dir="${basedir}" includes="build.xml" />
</uptodate>
<echo message="checkDllUpToDateX86= ${dllUpToDateX86}" />
<uptodate property="dllUpToDateAMD64" targetfile="${release.file.AMD64.dll}">
<srcfiles dir="${src.cpp}" includes="*.cpp" />
<srcfiles dir="${src.cpp}" includes="*.h" />
<!-- Check the build file itself as well -->
<srcfiles dir="${basedir}" includes="build.xml" />
</uptodate>
<echo message="checkDllUpToDateAMD64= ${dllUpToDateAMD64}" />
<!-- ======================================================================
We should build if we can build and the dll is not up to date
================================================================== -->
<condition property="shouldBuildX86">
<and>
<isset property="canBuildX86"/>
<not>
<isset property="dllUpToDateX86"/>
</not>
</and>
</condition>
<echo message="shouldBuildX86= ${shouldBuildX86}" />
<condition property="shouldBuildAMD64">
<and>
<isset property="canBuildAMD64"/>
<not>
<isset property="dllUpToDateAMD64"/>
</not>
</and>
</condition>
<echo message="shouldBuildAMD64= ${shouldBuildAMD64}" />
<!--=v=v=v=v=v=v=v=v=v=v=v=v=v=v=v=v=v=v=v=v=v=v=v=v=v=v=v=v=v
START of TASKS
=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^ -->
<!-- =================================
target: default
================================= -->
<target name="default"
depends="javaJarBin,makeDllX86,makeDllAMD64">
<echo message="${application.title} ${version} build ${build.iteration} : finished on ${build.date}" />
</target>
<!-- ======================================================================
Target (still in development) that removes all bin directories
================================================================== -->
<target name="clean">
<delete>
<fileset dir="${release.dir.java}"/>
<fileset dir="${release.dir.x86.cpp}"/>
<fileset dir="${release.dir.AMD64.cpp}"/>
<fileset dir="${release.dir}"/>
</delete>
</target>
<!-- ======================================================================
Compare the date/time of the JAR against that
of the java source
================================================================== -->
<target name="javaJarCheck">
<uptodate property="jarUpToDate" targetfile="${release.file.jar}">
<srcfiles dir="${src.java.jacob}" includes="com/**/*.java" />
<!-- Check the build file itself as well -->
<srcfiles dir="${basedir}" includes="build.xml" />
</uptodate>
<echo message="javaJarCheck says jarUpToDate= ${jarUpToDate}" />
</target>
<!-- ======================================================================
Compile the java files and copy version.properties to be jar'd up
Relies on ant recognizing when a file needs to be compiled
================================================================== -->
<target name="javaCompile" >
<echo>Building Jacob , sample and, test classes in ${release.dir.java}</echo>
<javac srcdir="${src.java.jacob}:${src.java.samples}:${src.java.unittest}"
destdir="${release.dir.java}"
listfiles="true" debug="on" source="1.4" />
<copy file="version.properties" todir="${release.dir.java}"/>
</target>
<!-- ======================================================================
Package the classes into a JAR.
Put version.propertes into the jar file so version retrieval method can find it
================================================================== -->
<target name="javaJarBin"
depends="javaCompile,javaJarCheck"
unless="jarUpToDate">
<echo>Removing old jars</echo>
<delete file="${release.file.jar}" />
<echo>Packaging java classes...</echo>
<jar destfile="${release.file.jar}" basedir="${release.dir.java}" update="false">
<exclude name="**/CVS" />
<!-- exclude all unit tests (ending in Test)
and everything in the samples and test packages -->
<exclude name="com/**/*Test.class"/>
<exclude name="com/jacob/samples/**"/>
<exclude name="com/jacob/test/**"/>
<include name="com/**/*.class" />
<include name="version.properties" />
<manifest>
<attribute name="Built-By" value="${user.name}" />
<attribute name="Main-Class" value="${java.class.main}"/>
<section name="${src.java.jacob.mainpackage}">
<attribute name="Specification-Title" value="${application.title}" />
<attribute name="Specification-Vendor" value="${application.vendor}" />
<attribute name="Implementation-Title" value="${application.title} Java libraries" />
<attribute name="Implementation-Version" value="${version} build ${build.iteration} on ${build.date}" />
</section>
</manifest>
</jar>
</target>
<!-- ======================================================================
Compile the c source files.
================================================================== -->
<target name="compileX86" if="shouldBuildX86">
<echo>Clean up the (x86) target folders and file, for safety</echo>
<delete file="${release.dir.x86.cpp}/**/*.*" />
<echo>Compiling (x86) C++ classes with JDK JNI library ${JDK}</echo>
<apply executable="${compiler.x86}" dir="${release.dir.x86.cpp}" parallel="false" verbose="true" failonerror="true">
<arg value="-c" />
<arg value="/nologo" />
<!-- create a multi threaded library -->
<!-- <arg value="/MT" /> -->
<!-- raise the warning level from the default -->
<arg value="/W2" />
<!-- sets the exception model -->
<arg value="/EHsc" />
<!-- optimize build for speed. (is this VC specific? -->
<arg value="/O2" />
<!-- next two wipe out a lot of deprecated warnings about strings when using VC++ 8.0 and SDK-->
<arg value="/D" />
<arg value="_CRT_SECURE_NO_DEPRECATE" />
<arg value="/D" />
<arg value="_CRT_NONSTDC_NO_DEPRECATE" />
<arg value="/D" />
<arg value="_STATIC_CPPLIB" />
<arg value="-I" />
<arg value="${JDK}\include" />
<arg value="-I" />
<arg value="${JDK}\include\win32" />
<!-- hopefully 6.0 won't barf including same dir twice -->
<arg value="-I" />
<arg value="${include.x86}" />
<arg value="-I" />
<arg value="${include.x86.atl}" />
<!-- after SDK because SDK may be more up to date -->
<arg value="-I" />
<arg value="${MSDEVDIR}\Include" />
<fileset dir="${src.cpp}">
<include name="*.cpp" />
</fileset>
</apply>
</target>
<target name="compileAMD64" if="shouldBuildAMD64">
<echo>Clean up the (AMD64) target folders and file, for safety</echo>
<delete file="${release.dir.AMD64.cpp}/**/*.*" />
<echo>Compiling C++ (AMD64) classes with JDK JNI library ${JDK}</echo>
<apply executable="${compiler.AMD64}" dir="${release.dir.AMD64.cpp}" parallel="false" verbose="true" failonerror="true">
<arg value="-c" />
<arg value="/nologo" />
<!-- create a multi threaded library -->
<!-- <arg value="/MT" /> -->
<!-- raise the warning level from the default -->
<arg value="/W3" />
<!-- sets the exception model -->
<arg value="/EHsc" />
<!-- optimize build for speed. (is this VC specific? -->
<arg value="/O2" />
<!-- next two wipe out a lot of deprecated warnings about strings when using VC++ 8.0 and SDK-->
<arg value="/D" />
<arg value="_CRT_SECURE_NO_DEPRECATE" />
<arg value="/D" />
<arg value="_CRT_NONSTDC_NO_DEPRECATE" />
<arg value="/D" />
<arg value="_STATIC_CPPLIB" />
<arg value="-I" />
<arg value="${JDK}\include" />
<arg value="-I" />
<arg value="${JDK}\include\win32" />
<!-- hopefully 6.0 won't barf including same dir twice -->
<arg value="-I" />
<arg value="${include.AMD64}" />
<arg value="-I" />
<arg value="${include.AMD64}\crt" />
<arg value="-I" />
<arg value="${include.AMD64}\atl" />
<!-- after SDK because SDK may be more up to date -->
<!--
<arg value="-I" />
<arg value="${MSDEVDIR}\Include" />
-->
<fileset dir="${src.cpp}">
<include name="*.cpp" />
</fileset>
</apply>
</target>
<!-- ======================================================================
Link the obj files into a DLL.
DLL construction matrix (Yes=DLL can be built, No=DLL cannot)
_________________________________________________
Type of machine ANT is running on
32 bit 64 bit
32 bit target Yes No
64 bit target Yes Yes
================================================================== -->
<target name="makeDllX86" depends="compileX86" if="shouldBuildX86">
<echo>Clean up the target folders and file, for safety</echo>
<delete file="${release.file.x86.dll}" />
<echo>Creating ${release.file.x86.dll}</echo>
<apply executable="${linker.x86}" dir="${release.dir.x86.cpp}" parallel="true" verbose="true" failonerror="true">
<arg value="/nologo" />
<arg value="/dll" />
<arg value="/version:${version}" />
<arg value="/out:${release.file.x86.dll}" />
<arg value="/libpath:${library.x86}" />
<srcfile />
<arg value="${JDK}\lib\jvm.lib" />
<fileset dir="${release.dir.x86.cpp}">
<include name="*.obj" />
</fileset>
</apply>
</target>
<target name="makeDllAMD64" depends="compileAMD64" if="shouldBuildAMD64">
<echo>Clean up the target folders and file, for safety</echo>
<delete file="${release.file.AMD64.dll}" />
<echo>Creating {$release.file.AMD64.dll}</echo>
<apply executable="${linker.AMD64}" dir="${release.dir.AMD64.cpp}" parallel="true" verbose="true" failonerror="true">
<arg value="/nologo" />
<arg value="/dll" />
<arg value="/version:${version}" />
<arg value="/out:${release.file.AMD64.dll}" />
<arg value="/libpath:${library.AMD64}" />
<arg value="/libpath:${library.AMD64}\atlmfc" />
<srcfile />
<arg value="${JDK}\lib\jvm.lib" />
<arg value="bufferoverflowu.lib" />
<fileset dir="${release.dir.AMD64.cpp}">
<include name="*.obj" />
</fileset>
</apply>
</target>
<!-- ======================================================================
Use this target to create javadoc from ${src.java.jacob.mainpackage}/*
================================================================== -->
<target name="generateJavaDoc">
<defaultexcludes add="**/*Test*"/>
<javadoc
packagenames="${src.java.jacob.mainpackage}/**"
sourcepath="${src.java.jacob}"
destdir="${release.dir.java}/docs/api"
author="true"
version="true"
use="true"
windowtitle="${application.title} API Docs">
<doctitle><![CDATA[<h1>${application.title}</h1>]]></doctitle>
<bottom><![CDATA[<i>${application.vendor}</i>]]></bottom>
<group title="Core COM Communication" packages="${src.java.jacob.mainpackage}.com/**"/>
<group title="Higher Level Active X" packages="${src.java.jacob.mainpackage}.activeX/**"/>
<group title="API Stub Generator" packages="${src.java.jacob.mainpackage}.jacobgen/**"/>
<link offline="true" href="http://java.sun.com/j2se/1.4.2/docs/api/" packagelistLoc="C:\tmp"/>
<link href="http://java.sun.com/j2se/1.4.2/docs/api/"/>
</javadoc>
<defaultexcludes default="true"/>
</target>
<!-- ======================================================================
Use this target to package all the files for a release
================================================================== -->
<target name="PackageRelease"
depends="makeDllX86,makeDllAMD64,javaJarBin,generateJavaDoc">
<echo>Packaging release... ${release.file.jar}</echo>
<zip
destfile="${release.dir}/${generated.filename.zip}.zip">
<exclude name="**/CVS" />
<exclude name="**/*.obj" />
<exclude name="**/*.class" />
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="LICENSE.* version.properties README.txt" />
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="docs/**" />
<zipfileset dir="${release.dir.x86}" prefix="${generated.filename.zip}/x86" includes="${generated.filename.dll}" />
<zipfileset dir="${release.dir.AMD64}" prefix="${generated.filename.zip}/AMD64" includes="${generated.filename.dll}" />
<zipfileset dir="${release.dir.java}" prefix="${generated.filename.zip}" includes="${generated.filename.jar}" />
<zipfileset dir="${release.dir.java}" prefix="${generated.filename.zip}" includes="docs/**"/>
</zip>
<zip
destfile="${release.dir}/${generated.filename.zip}_src.zip">
<exclude name="**/CVS" />
<exclude name="**/*.obj" />
<exclude name="**/*.class" />
<exclude name="**/*.dll" />
<exclude name="**/*.exp" />
<exclude name="**/*.jar" />
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="src/**" />
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="docs/**" />
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="jni/**" />
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="samples/**" />
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="unittest/**" />
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="vstudio/**" />
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="lib/**" />
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="build.xml, README.txt" />
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="LICENSE.* version.properties" />
</zip>
</target>
</project>