sigar/bindings/java/hyperic_jni/jni-build.xml
2009-09-30 15:46:36 -07:00

519 lines
16 KiB
XML

<!--
Copyright (C) [2004, 2005, 2006], Hyperic, Inc.
This file is part of SIGAR.
SIGAR is free software; you can redistribute it and/or modify
it under the terms version 2 of the GNU General Public License as
published by the Free Software Foundation. This program is distributed
in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU General Public License for more
details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA.
-->
<property environment="env"/>
<property name="build" location="build"/>
<property name="jni.bin" location="${build}"/>
<property name="jni.define.name" value="JNI"/>
<property name="jni.source.dir" value="src"/>
<property name="jni.src.java" value="src"/>
<property name="jni.libprefix" value="java"/>
<property name="jni.libversion" value=""/>
<property name="cpptasks.jar" location="lib/cpptasks.jar"/>
<taskdef name="cc" classname="net.sf.antcontrib.cpptasks.CCTask">
<classpath location="${cpptasks.jar}"/>
</taskdef>
<target name="jni-init">
<mkdir dir="${build}/classes"/>
<available property="libproc.h" file="/usr/include/libproc.h"/>
<condition property="jni.debug" value="true">
<isset property="jni.dmalloc"/>
</condition>
<condition property="jni.optim" value="true">
<not>
<istrue value="${jni.debug}"/>
</not>
</condition>
<condition property="static.gcc">
<os arch="i386"/><!-- only for x86 solaris -->
</condition>
<condition property="jni.javahome" value="${env.JAVA_HOME}">
<isset property="env.JAVA_HOME"/>
</condition>
<condition property="jni.javahome" value="${java.home}">
<not>
<isset property="jni.javahome"/>
</not>
</condition>
<echo>java.home=${jni.javahome}</echo>
<checksum file="${jni.javahome}/include/jni.h" property="jni.md5"/>
<condition property="linux">
<equals arg1="${os.name}" arg2="Linux"/>
</condition>
<condition property="solaris">
<equals arg1="${os.name}" arg2="SunOS"/>
</condition>
<condition property="win32">
<os family="windows"/>
</condition>
<condition property="hpux">
<equals arg1="${os.name}" arg2="HP-UX"/>
</condition>
<condition property="aix">
<equals arg1="${os.name}" arg2="AIX"/>
</condition>
<condition property="darwin">
<equals arg1="${os.name}" arg2="Mac OS X"/>
</condition>
<condition property="freebsd">
<equals arg1="${os.name}" arg2="FreeBSD"/>
</condition>
<condition property="openbsd">
<equals arg1="${os.name}" arg2="OpenBSD"/>
</condition>
<condition property="netbsd">
<equals arg1="${os.name}" arg2="NetBSD"/>
</condition>
<condition property="osf1">
<equals arg1="${os.name}" arg2="OSF1"/>
</condition>
<condition property="jni.os" value="linux">
<isset property="linux"/>
</condition>
<condition property="jni.os" value="win32">
<isset property="win32"/>
</condition>
<condition property="jni.os" value="solaris">
<isset property="solaris"/>
</condition>
<condition property="jni.os" value="aix">
<isset property="aix"/>
</condition>
<condition property="jni.os" value="hpux">
<isset property="hpux"/>
</condition>
<condition property="jni.os" value="darwin">
<isset property="darwin"/>
</condition>
<condition property="jni.os" value="freebsd">
<isset property="freebsd"/>
</condition>
<condition property="jni.os" value="openbsd">
<isset property="openbsd"/>
</condition>
<condition property="jni.os" value="netbsd">
<isset property="netbsd"/>
</condition>
<!-- darwin and freebsd use the same source files -->
<condition property="jni.src" value="darwin">
<isset property="freebsd"/>
</condition>
<condition property="jni.src" value="darwin">
<isset property="openbsd"/>
</condition>
<condition property="jni.src" value="darwin">
<isset property="netbsd"/>
</condition>
<condition property="jni.os" value="osf1">
<isset property="osf1"/>
</condition>
<condition property="jni.jdk.os" value="${jni.os}">
<and>
<isfalse value="${hpux}"/>
<isfalse value="${osf1}"/>
</and>
</condition>
<condition property="jni.jdk.os" value="hp-ux">
<istrue value="${hpux}"/>
</condition>
<condition property="jni.jdk.os" value="alpha">
<istrue value="${osf1}"/>
</condition>
<condition property="jni.src" value="${jni.os}">
<isfalse value="${jni.src}"/>
</condition>
<echo message="jni.src=${jni.src}, jni.jdk.os=${jni.jdk.os}, ${sun.arch.data.model}-bit"/>
<javac srcdir="${jni.src.java}" destdir="${build}/classes" debug="true"
source="1.4" target="1.4"
includes="org/hyperic/jni/*.java"/>
<taskdef name="libarch" classname="org.hyperic.jni.ArchNameTask">
<classpath location="${build}/classes"/>
</taskdef>
<taskdef name="copydep" classname="org.hyperic.jni.CopyDependsTask">
<classpath location="${build}/classes"/>
</taskdef>
<libarch/>
<property name="jni.project.archname"
value="${project.name}-${jni.libarch}"/>
<condition property="jni.libname"
value="${jni.libprefix}${jni.project.archname}${jni.libversion}">
<isfalse value="${jni.libname}"/>
</condition>
<property name="jni.libname.full"
value="${jni.libpre}${jni.libname}${jni.libext}"/>
<property name="jni.objdir" value="${build}/obj/${jni.libarch}"/>
<condition property="jni.cc" value="uni-cc">
<isset property="darwin"/>
</condition>
<property name="jni.cc" value="jni-cc"/>
<condition property="cc.runtime" value="static">
<isset property="win32"/>
</condition>
<condition property="cc.runtime" value="dynamic">
<not>
<isset property="win32"/>
</not>
</condition>
</target>
<target name="jni-lib-copy" if="jni.libarch">
<mkdir dir="${jni.bin}/lib"/>
<copy toDir="${jni.bin}/lib" overwrite="true">
<fileset dir="${jni.objdir}/lib"/>
</copy>
<chmod perm="a+x">
<fileset dir="${jni.bin}/lib">
<include name="*.sl"/>
</fileset>
</chmod>
</target>
<target name="jni-compile" if="jni.libarch">
<antcall target="${jni.cc}" inheritRefs="true"/>
</target>
<!-- run jni-cc twice {ppc,i386}, then feed both to lipo to build a universal binary -->
<target name="uni-cc" if="jni.libarch">
<property name="shlib" value="${jni.objdir}/lib/lib${jni.libname}.dylib"/>
<!-- ppc -->
<echo message="build 'ppc' arch"/>
<antcall target="jni-cc" inheritRefs="true">
<param name="uni.arch" value="ppc"/>
</antcall>
<copy file="${shlib}" tofile="${shlib}.ppc"/>
<!-- i386 -->
<echo message="build 'i386' arch"/>
<delete>
<fileset dir="${jni.objdir}" includes="*.o"/>
</delete>
<antcall target="jni-cc" inheritRefs="true">
<param name="uni.arch" value="i386"/>
</antcall>
<copy file="${shlib}" tofile="${shlib}.i386"/>
<echo message="lipo 'ppc'+'i386'"/>
<exec executable="lipo">
<arg line="-create ${shlib}.ppc ${shlib}.i386 -output ${jni.objdir}/lib/lib${jni.libname}.dylib"/>
</exec>
<delete>
<fileset dir="${jni.objdir}/lib" includes="*.ppc,*.i386"/>
</delete>
</target>
<target name="jni-cc" if="jni.libarch">
<mkdir dir="${jni.objdir}/lib"/>
<echo message="jni libname=${jni.libname}"/>
<cc outtype="shared"
outfile="${jni.objdir}/lib/${jni.libname}"
objdir="${jni.objdir}"
runtime="${cc.runtime}"
relentless="false">
<!-- HPUX -->
<compiler name="hp" if="hpux">
<compilerarg value="+Z"/>
<compilerarg value="+DD64" if="jni.arch64"/>
<defineset>
<define name="${jni.define.name}_HPUX"/>
<define name="_HPUX_SOURCE"/>
<define name="_REENTRANT"/>
</defineset>
</compiler>
<linker name="hp" if="hpux">
<libset if="jni.libset.libs"
dir="${jni.libset.dir}"
libs="${jni.libset.libs}"/>
<syslibset libs="nsl"/>
<syslibset libs="nm"/>
</linker>
<!-- Solaris -->
<compiler name="gcc" if="solaris">
<compilerarg value="-O2" if="jni.optim"/>
<compilerarg value="-g" if="jni.debug"/>
<compilerarg value="-Wall"/>
<compilerarg value="-Werror" if="jni.werror"/>
<compilerarg value="-m64" if="jni.arch64"/>
<defineset>
<define name="${jni.define.name}_SOLARIS"/>
<define name="_REENTRANT"/>
<define name="_POSIX_PTHREAD_SEMANTICS"/>
<define name="DMALLOC" if="jni.dmalloc"/>
</defineset>
</compiler>
<linker name="gcc" if="solaris">
<!-- required for modern gcc to avoid libgcc_s.so dependency -->
<!-- this arg is ignored by older gcc -->
<linkerarg value="-static-libgcc"/>
<linkerarg value="-m64" if="jni.arch64"/>
<libset if="jni.libset.libs"
dir="${jni.libset.dir}"
libs="${jni.libset.libs}"/>
<libset if="jni.dmalloc"
dir="${jni.dmalloc}/lib"
libs="dmallocth"/>
</linker>
<!-- Linux -->
<compiler name="gcc" debug="${jni.debug}" if="linux">
<compilerarg value="-O2" if="jni.optim"/>
<compilerarg value="-g" if="jni.debug"/>
<compilerarg value="-Wall"/>
<compilerarg value="-Werror" if="jni.werror"/>
<compilerarg value="${jni.gccm}" if="jni.gccm"/>
<defineset>
<define name="${jni.define.name}_LINUX"/>
<define name="_REENTRANT"/>
<define name="DMALLOC" if="jni.dmalloc"/>
</defineset>
</compiler>
<linker name="gcc" if="linux">
<libset if="jni.libset.libs"
dir="${jni.libset.dir}"
libs="${jni.libset.libs}"/>
<libset if="jni.dmalloc"
dir="${jni.dmalloc}/lib"
libs="dmallocth"/>
<linkerarg value="${jni.gccm}" if="jni.gccm"/>
</linker>
<!-- Darwin -->
<compiler name="gcc" if="darwin">
<compilerarg value="-Wall"/>
<compilerarg value="-Werror" if="jni.werror"/>
<compilerarg value="-m64" if="jni.arch64"/>
<compilerarg value="-O2" if="jni.optim"/>
<compilerarg value="-g" if="jni.debug"/>
<compilerarg value="-isysroot"/>
<compilerarg value="${uni.sdk}"/>
<compilerarg value="-arch"/>
<compilerarg value="${uni.arch}"/>
<compilerarg value="-mmacosx-version-min=${osx.min}"/>
<sysincludepath location="/Developer/Headers/FlatCarbon"/>
<defineset>
<define name="DARWIN"/>
<define name="DARWIN_HAS_LIBPROC_H" if="libproc.h"/>
</defineset>
</compiler>
<linker name="gcc" if="darwin">
<linkerarg value="-m64" if="jni.arch64"/>
<linkerarg value="-Wl,-syslibroot,${uni.sdk}"/>
<linkerarg value="-arch"/>
<linkerarg value="${uni.arch}"/>
<linkerarg value="-mmacosx-version-min=${osx.min}"/>
<!-- for Gestalt() -->
<linkerarg value="-framework"/>
<linkerarg value="CoreServices"/>
<linkerarg value="-sectcreate,__TEXT,__info_plist,${jni.info.plist}" if="jni.info.plist"/>
<libset if="jni.libset.libs"
dir="${jni.libset.dir}"
libs="${jni.libset.libs}"/>
<syslibset libs="IOKit"/>
</linker>
<!-- Freebsd -->
<compiler name="gcc" if="freebsd">
<compilerarg value="-O2" if="jni.optim"/>
<compilerarg value="-g" if="jni.debug"/>
<compilerarg value="-Wall"/>
<compilerarg value="-Werror" if="jni.werror"/>
<defineset>
<define name="${jni.define.name}_FREEBSD"/>
</defineset>
</compiler>
<linker name="gcc" if="freebsd">
<libset if="jni.libset.libs"
dir="${jni.libset.dir}"
libs="${jni.libset.libs}"/>
<syslibset libs="kvm"/>
</linker>
<!-- OpenBSD -->
<compiler name="gcc" if="openbsd">
<compilerarg value="-O2" if="jni.optim"/>
<compilerarg value="-g" if="jni.debug"/>
<compilerarg value="-Wall"/>
<!-- <compilerarg value="-Werror" if="jni.werror"/> -->
<defineset>
<define name="${jni.define.name}_OPENBSD"/>
</defineset>
</compiler>
<linker name="gcc" if="openbsd">
<libset if="jni.libset.libs"
dir="${jni.libset.dir}"
libs="${jni.libset.libs}"/>
<syslibset libs="kvm"/>
</linker>
<!-- NetBSD -->
<compiler name="gcc" if="netbsd">
<compilerarg value="-O2" if="jni.optim"/>
<compilerarg value="-g" if="jni.debug"/>
<compilerarg value="-Wall"/>
<!-- <compilerarg value="-Werror" if="jni.werror"/> -->
<defineset>
<define name="${jni.define.name}_NETBSD"/>
</defineset>
</compiler>
<linker name="gcc" if="netbsd">
<libset if="jni.libset.libs"
dir="${jni.libset.dir}"
libs="${jni.libset.libs}"/>
<syslibset libs="kvm"/>
</linker>
<!-- AIX -->
<compiler name="xlc_r" if="aix">
<compilerarg value="-q64" if="jni.arch64"/>
<defineset>
<define name="${jni.define.name}_AIX"/>
<define name="_ALL_SOURCE"/>
<define name="_ANSI_C_SOURCE"/>
<define name="_POSIX_SOURCE"/>
</defineset>
</compiler>
<linker name="xlc_r" if="aix">
<linkerarg value="-b64" if="jni.arch64"/>
<libset if="jni.libset.libs"
dir="${jni.libset.dir}"
libs="${jni.libset.libs}"/>
</linker>
<!-- WIN32 -->
<linker name="msvc" debug="${jni.debug}" if="win32">
<libset if="jni.libset.libs"
dir="${jni.libset.dir}"
libs="${jni.libset.libs}"/>
<linkerarg value="/MACHINE:X64" if="jni.arch64"/>
<linkerarg value="${jni.info.res}" if="jni.info.res"/>
<syslibset libs="kernel32,user32,advapi32,ws2_32,netapi32,shell32,pdh,version"/>
</linker>
<compiler name="msvc" debug="${jni.debug}" if="win32">
<defineset>
<define name="WIN32"/>
<define name="_CRT_SECURE_NO_DEPRECATE"/>
<!-- XXX 2008 MSC express/SDK does not include atl headers -->
<define name="SIGAR_NO_ATL" if="jni.noatl"/>
</defineset>
</compiler>
<!-- OSF1 -->
<compiler name="gcc" if="osf1">
<compilerarg value="-Wall"/>
<compilerarg value="-pthread"/>
<defineset>
<define name="${jni.define.name}_OSF1"/>
</defineset>
</compiler>
<linker name="gcc" if="osf1">
<libset if="jni.libset.libs"
dir="${jni.libset.dir}"
libs="${jni.libset.libs}"/>
<syslibset libs="mach"/>
</linker>
<!-- C sources -->
<fileset dir="${jni.source.dir}">
<patternset refid="jni.source.files"/>
</fileset>
<includepath>
<path refid="jni.include.dirs"/>
</includepath>
<sysincludepath location="${jni.javahome}/include"/>
<sysincludepath location="${jni.javahome}/include/${jni.jdk.os}"/>
<sysincludepath location="${jni.dmalloc}/include"
if="jni.dmalloc"/>
</cc>
</target>
<target name="jni-clean">
<delete dir="${jni.objdir}"/>
</target>