cp r157 from http://svn.hyperic.org/projects/hyperic_jni
This commit is contained in:
parent
c98ee1cbc0
commit
641f42540b
|
@ -0,0 +1,522 @@
|
|||
<!--
|
||||
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="uni.sdk.version" value="4u"/>
|
||||
<property name="osx.min" value="-mmacosx-version-min=10.3"/>
|
||||
|
||||
<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="uni.sdk"
|
||||
value="/Developer/SDKs/MacOSX10.${uni.sdk.version}.sdk">
|
||||
<istrue value="${darwin}"/>
|
||||
</condition>
|
||||
|
||||
<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"/>
|
||||
|
||||
<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="-m64" if="jni.usem64"/>
|
||||
<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="-m64" if="jni.usem64"/>
|
||||
</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="${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="${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">
|
||||
<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">
|
||||
<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>
|
||||
|
Binary file not shown.
|
@ -0,0 +1,22 @@
|
|||
|
||||
cpptasks.pat - provides support for HP cc and AIX xlc_r
|
||||
the classes listed below are copy-n-pastes from existing cpptasks
|
||||
classes, simply changed program names, flags, etc. the HP classes
|
||||
were submitted as a patch to ant-contrib-developers on 10/09/2002,
|
||||
to which there was no response, so have not bothered to submit the aix
|
||||
patch.
|
||||
SubsystemEnum patch is for the osf1 javac (aka tru64).
|
||||
was throwing IllegalAccessError. why clone a final String[] anyhow??
|
||||
CUtil patch is for jdk 1.3 (StringBuffer.indexOf is 1.4+)
|
||||
GccLinker patch adds -arch to known flags for building universal binaries
|
||||
|
||||
added | derived from
|
||||
--------------------------
|
||||
HPCompiler | aCCCompiler
|
||||
HPLinker | aCCLinker
|
||||
XlcCompiler | VisualAgeCCompiler
|
||||
XlcLinker | VisualAgeLinker
|
||||
|
||||
cpptasks.pat applies to:
|
||||
cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/ant-contrib \
|
||||
co -D"2006/04/28 15:00:00" cpptasks
|
|
@ -0,0 +1,696 @@
|
|||
Index: src/net/sf/antcontrib/cpptasks/CUtil.java
|
||||
===================================================================
|
||||
RCS file: /cvsroot/ant-contrib/cpptasks/src/net/sf/antcontrib/cpptasks/CUtil.java,v
|
||||
retrieving revision 1.28
|
||||
diff -u -r1.28 CUtil.java
|
||||
--- src/net/sf/antcontrib/cpptasks/CUtil.java 17 Mar 2006 16:38:12 -0000 1.28
|
||||
+++ src/net/sf/antcontrib/cpptasks/CUtil.java 29 Apr 2006 02:35:28 -0000
|
||||
@@ -438,19 +438,19 @@
|
||||
StringBuffer buf = new StringBuffer (attrValue);
|
||||
int quotePos;
|
||||
|
||||
- for (quotePos = -1; (quotePos = buf.indexOf("\"", quotePos + 1)) >= 0;) {
|
||||
+ for (quotePos = -1; (quotePos = buf.toString().indexOf("\"", quotePos + 1)) >= 0;) {
|
||||
buf.deleteCharAt(quotePos);
|
||||
buf.insert (quotePos, """);
|
||||
quotePos += 5;
|
||||
}
|
||||
|
||||
- for (quotePos = -1; (quotePos = buf.indexOf("<", quotePos + 1)) >= 0;) {
|
||||
+ for (quotePos = -1; (quotePos = buf.toString().indexOf("<", quotePos + 1)) >= 0;) {
|
||||
buf.deleteCharAt(quotePos);
|
||||
buf.insert (quotePos, "<");
|
||||
quotePos += 3;
|
||||
}
|
||||
|
||||
- for (quotePos = -1; (quotePos = buf.indexOf(">", quotePos + 1)) >= 0;) {
|
||||
+ for (quotePos = -1; (quotePos = buf.toString().indexOf(">", quotePos + 1)) >= 0;) {
|
||||
buf.deleteCharAt(quotePos);
|
||||
buf.insert (quotePos, ">");
|
||||
quotePos += 3;
|
||||
Index: src/net/sf/antcontrib/cpptasks/CompilerEnum.java
|
||||
===================================================================
|
||||
RCS file: /cvsroot/ant-contrib/cpptasks/src/net/sf/antcontrib/cpptasks/CompilerEnum.java,v
|
||||
retrieving revision 1.18
|
||||
diff -u -r1.18 CompilerEnum.java
|
||||
--- src/net/sf/antcontrib/cpptasks/CompilerEnum.java 8 Jul 2004 22:30:53 -0000 1.18
|
||||
+++ src/net/sf/antcontrib/cpptasks/CompilerEnum.java 29 Apr 2006 02:35:28 -0000
|
||||
@@ -25,7 +25,9 @@
|
||||
import net.sf.antcontrib.cpptasks.devstudio.DevStudioResourceCompiler;
|
||||
import net.sf.antcontrib.cpptasks.gcc.GccCCompiler;
|
||||
import net.sf.antcontrib.cpptasks.hp.aCCCompiler;
|
||||
+import net.sf.antcontrib.cpptasks.hp.HPCompiler;
|
||||
import net.sf.antcontrib.cpptasks.ibm.VisualAgeCCompiler;
|
||||
+import net.sf.antcontrib.cpptasks.ibm.XlcCompiler;
|
||||
import net.sf.antcontrib.cpptasks.intel.IntelLinux32CCompiler;
|
||||
import net.sf.antcontrib.cpptasks.intel.IntelLinux64CCompiler;
|
||||
import net.sf.antcontrib.cpptasks.intel.IntelWin32CCompiler;
|
||||
@@ -205,6 +207,8 @@
|
||||
new ProcessorEnumValue("armcpp", ADSCCompiler.getArmCpp()),
|
||||
new ProcessorEnumValue("tcc", ADSCCompiler.getThumbCC()),
|
||||
new ProcessorEnumValue("tcpp", ADSCCompiler.getThumbCpp()),
|
||||
+ new ProcessorEnumValue("hp", HPCompiler.getInstance()),
|
||||
+ new ProcessorEnumValue("xlc_r", XlcCompiler.getInstance()),
|
||||
// GCC Cross Compilers
|
||||
new ProcessorEnumValue(
|
||||
"sparc-sun-solaris2-gcc",
|
||||
Index: src/net/sf/antcontrib/cpptasks/LinkerEnum.java
|
||||
===================================================================
|
||||
RCS file: /cvsroot/ant-contrib/cpptasks/src/net/sf/antcontrib/cpptasks/LinkerEnum.java,v
|
||||
retrieving revision 1.16
|
||||
diff -u -r1.16 LinkerEnum.java
|
||||
--- src/net/sf/antcontrib/cpptasks/LinkerEnum.java 8 Jul 2004 22:30:53 -0000 1.16
|
||||
+++ src/net/sf/antcontrib/cpptasks/LinkerEnum.java 29 Apr 2006 02:35:28 -0000
|
||||
@@ -25,7 +25,9 @@
|
||||
import net.sf.antcontrib.cpptasks.gcc.GppLinker;
|
||||
import net.sf.antcontrib.cpptasks.gcc.LdLinker;
|
||||
import net.sf.antcontrib.cpptasks.hp.aCCLinker;
|
||||
+import net.sf.antcontrib.cpptasks.hp.HPLinker;
|
||||
import net.sf.antcontrib.cpptasks.ibm.VisualAgeLinker;
|
||||
+import net.sf.antcontrib.cpptasks.ibm.XlcLinker;
|
||||
import net.sf.antcontrib.cpptasks.intel.IntelLinux32Linker;
|
||||
import net.sf.antcontrib.cpptasks.intel.IntelLinux64Linker;
|
||||
import net.sf.antcontrib.cpptasks.intel.IntelWin32Linker;
|
||||
@@ -72,6 +74,8 @@
|
||||
new ProcessorEnumValue("armcpp", ADSLinker.getInstance()),
|
||||
new ProcessorEnumValue("tcc", ADSLinker.getInstance()),
|
||||
new ProcessorEnumValue("tcpp", ADSLinker.getInstance()),
|
||||
+ new ProcessorEnumValue("hp", HPLinker.getInstance()),
|
||||
+ new ProcessorEnumValue("xlc_r", XlcLinker.getInstance()),
|
||||
// gcc cross compilers
|
||||
new ProcessorEnumValue(
|
||||
"sparc-sun-solaris2-gcc",
|
||||
Index: src/net/sf/antcontrib/cpptasks/SubsystemEnum.java
|
||||
===================================================================
|
||||
RCS file: /cvsroot/ant-contrib/cpptasks/src/net/sf/antcontrib/cpptasks/SubsystemEnum.java,v
|
||||
retrieving revision 1.7
|
||||
diff -u -r1.7 SubsystemEnum.java
|
||||
--- src/net/sf/antcontrib/cpptasks/SubsystemEnum.java 28 Feb 2004 20:04:02 -0000 1.7
|
||||
+++ src/net/sf/antcontrib/cpptasks/SubsystemEnum.java 29 Apr 2006 02:35:28 -0000
|
||||
@@ -29,6 +29,6 @@
|
||||
setValue("gui");
|
||||
}
|
||||
public String[] getValues() {
|
||||
- return (String[]) values.clone();
|
||||
+ return values;
|
||||
}
|
||||
}
|
||||
Index: src/net/sf/antcontrib/cpptasks/gcc/GccLinker.java
|
||||
===================================================================
|
||||
RCS file:
|
||||
/cvsroot/ant-contrib/cpptasks/src/net/sf/antcontrib/cpptasks/gcc/GccLinker.java,v
|
||||
retrieving revision 1.32
|
||||
diff -u -r1.32 GccLinker.java
|
||||
--- src/net/sf/antcontrib/cpptasks/gcc/GccLinker.java 28 Feb 2004
|
||||
20:01:15 -0000 1.32
|
||||
+++ src/net/sf/antcontrib/cpptasks/gcc/GccLinker.java 29 Apr 2006
|
||||
17:27:50 -0000
|
||||
@@ -35,7 +35,7 @@
|
||||
private static String[] linkerOptions = new String[]{"-bundle",
|
||||
"-dynamiclib", "-nostartfiles", "-nostdlib", "-prebind",
|
||||
"-s",
|
||||
"-static", "-shared", "-symbolic", "-Xlinker",
|
||||
- "--export-all-symbols", "-static-libgcc",};
|
||||
+ "--export-all-symbols", "-static-libgcc", "-arch"};
|
||||
private static final GccLinker dllLinker = new GccLinker("gcc",
|
||||
objFiles,
|
||||
discardFiles, "lib", ".so", false, new GccLinker("gcc",
|
||||
objFiles,
|
||||
discardFiles, "lib", ".so", true, null));
|
||||
|
||||
--- /dev/null 2006-04-28 19:36:02.000000000 -0700
|
||||
+++ src/net/sf/antcontrib/cpptasks/hp/HPCompiler.java 2006-04-28 17:08:22.000000000 -0700
|
||||
@@ -0,0 +1,161 @@
|
||||
+/*
|
||||
+ * The Apache Software License, Version 1.1
|
||||
+ *
|
||||
+ * Copyright (c) 2001 The Ant-Contrib project. All rights
|
||||
+ * reserved.
|
||||
+ *
|
||||
+ * Redistribution and use in source and binary forms, with or without
|
||||
+ * modification, are permitted provided that the following conditions
|
||||
+ * are met:
|
||||
+ *
|
||||
+ * 1. Redistributions of source code must retain the above copyright
|
||||
+ * notice, this list of conditions and the following disclaimer.
|
||||
+ *
|
||||
+ * 2. Redistributions in binary form must reproduce the above copyright
|
||||
+ * notice, this list of conditions and the following disclaimer in
|
||||
+ * the documentation and/or other materials provided with the
|
||||
+ * distribution.
|
||||
+ *
|
||||
+ * 3. The end-user documentation included with the redistribution, if
|
||||
+ * any, must include the following acknowlegement:
|
||||
+ * "This product includes software developed by the
|
||||
+ * Apache Software Foundation (http://www.apache.org/)."
|
||||
+ * Alternately, this acknowlegement may appear in the software itself,
|
||||
+ * if and wherever such third-party acknowlegements normally appear.
|
||||
+ *
|
||||
+ * 4. The names "The Jakarta Project", "Ant", and "Apache Software
|
||||
+ * Foundation" must not be used to endorse or promote products derived
|
||||
+ * from this software without prior written permission. For written
|
||||
+ * permission, please contact apache@apache.org.
|
||||
+ *
|
||||
+ * 5. Products derived from this software may not be called "Apache"
|
||||
+ * nor may "Apache" appear in their names without prior written
|
||||
+ * permission of the Apache Group.
|
||||
+ *
|
||||
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
|
||||
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
|
||||
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
+ * SUCH DAMAGE.
|
||||
+ * ====================================================================
|
||||
+ *
|
||||
+ * This software consists of voluntary contributions made by many
|
||||
+ * individuals on behalf of the Apache Software Foundation. For more
|
||||
+ * information on the Apache Software Foundation, please see
|
||||
+ * <http://www.apache.org/>.
|
||||
+ */
|
||||
+package net.sf.antcontrib.cpptasks.hp;
|
||||
+
|
||||
+import java.io.File;
|
||||
+import java.util.Vector;
|
||||
+
|
||||
+import net.sf.antcontrib.cpptasks.CUtil;
|
||||
+import net.sf.antcontrib.cpptasks.compiler.LinkType;
|
||||
+import net.sf.antcontrib.cpptasks.compiler.Linker;
|
||||
+import net.sf.antcontrib.cpptasks.gcc.GccCompatibleCCompiler;
|
||||
+import org.apache.tools.ant.types.Environment;
|
||||
+
|
||||
+/**
|
||||
+ * Adapter for the HP compiler
|
||||
+ *
|
||||
+ * @author Curt Arnold
|
||||
+ */
|
||||
+public final class HPCompiler extends GccCompatibleCCompiler {
|
||||
+
|
||||
+ private String identifier;
|
||||
+ private File[] includePath;
|
||||
+ private static final HPCompiler instance =
|
||||
+ new HPCompiler("cc", false, null);
|
||||
+
|
||||
+ /**
|
||||
+ * Private constructor. Use GccCCompiler.getInstance() to get
|
||||
+ * singleton instance of this class.
|
||||
+ */
|
||||
+ private HPCompiler(
|
||||
+ String command,
|
||||
+ boolean newEnvironment,
|
||||
+ Environment env) {
|
||||
+ super(command, "-help", false, null, newEnvironment, env);
|
||||
+ }
|
||||
+
|
||||
+ public int getMaximumCommandLength() {
|
||||
+ return Integer.MAX_VALUE;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Gets singleton instance of this class
|
||||
+ */
|
||||
+ public static HPCompiler getInstance() {
|
||||
+ return instance;
|
||||
+ }
|
||||
+
|
||||
+ public File[] getEnvironmentIncludePath() {
|
||||
+ if (includePath == null) {
|
||||
+ File ccLoc = CUtil.getExecutableLocation("cc");
|
||||
+ if (ccLoc != null) {
|
||||
+ File compilerIncludeDir =
|
||||
+ new File(new File(ccLoc, "../include").getAbsolutePath());
|
||||
+ if (compilerIncludeDir.exists()) {
|
||||
+ includePath = new File[2];
|
||||
+ includePath[0] = compilerIncludeDir;
|
||||
+ }
|
||||
+ }
|
||||
+ if (includePath == null) {
|
||||
+ includePath = new File[1];
|
||||
+ }
|
||||
+ includePath[includePath.length - 1] = new File("/usr/include");
|
||||
+ }
|
||||
+ return includePath;
|
||||
+ }
|
||||
+
|
||||
+ public void addImpliedArgs(
|
||||
+ Vector args,
|
||||
+ boolean debug,
|
||||
+ boolean multithreaded,
|
||||
+ boolean exceptions,
|
||||
+ LinkType linkType) {
|
||||
+ args.addElement("-c");
|
||||
+ if (debug) {
|
||||
+ args.addElement("-g");
|
||||
+ }
|
||||
+ /*
|
||||
+ if (multithreaded) {
|
||||
+ args.addElement("-mt");
|
||||
+ }
|
||||
+ */
|
||||
+ if (linkType.isSharedLibrary()) {
|
||||
+ args.addElement("+z");
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ public void addWarningSwitch(Vector args, int level) {
|
||||
+ switch (level) {
|
||||
+ case 0 :
|
||||
+ args.addElement("-w");
|
||||
+ break;
|
||||
+
|
||||
+ case 1 :
|
||||
+ case 2 :
|
||||
+ args.addElement("+w");
|
||||
+ break;
|
||||
+ /*
|
||||
+ case 3:
|
||||
+ case 4:
|
||||
+ case 5:
|
||||
+ args.addElement("+w2");
|
||||
+ break;
|
||||
+ */
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ public Linker getLinker(LinkType linkType) {
|
||||
+ return HPLinker.getInstance().getLinker(linkType);
|
||||
+ }
|
||||
+}
|
||||
--- /dev/null 2006-04-28 19:36:02.000000000 -0700
|
||||
+++ src/net/sf/antcontrib/cpptasks/hp/HPLinker.java 2006-04-28 17:08:22.000000000 -0700
|
||||
@@ -0,0 +1,153 @@
|
||||
+/*
|
||||
+ * The Apache Software License, Version 1.1
|
||||
+ *
|
||||
+ * Copyright (c) 2001 The Ant-Contrib project. All rights
|
||||
+ * reserved.
|
||||
+ *
|
||||
+ * Redistribution and use in source and binary forms, with or without
|
||||
+ * modification, are permitted provided that the following conditions
|
||||
+ * are met:
|
||||
+ *
|
||||
+ * 1. Redistributions of source code must retain the above copyright
|
||||
+ * notice, this list of conditions and the following disclaimer.
|
||||
+ *
|
||||
+ * 2. Redistributions in binary form must reproduce the above copyright
|
||||
+ * notice, this list of conditions and the following disclaimer in
|
||||
+ * the documentation and/or other materials provided with the
|
||||
+ * distribution.
|
||||
+ *
|
||||
+ * 3. The end-user documentation included with the redistribution, if
|
||||
+ * any, must include the following acknowlegement:
|
||||
+ * "This product includes software developed by the
|
||||
+ * Apache Software Foundation (http://www.apache.org/)."
|
||||
+ * Alternately, this acknowlegement may appear in the software itself,
|
||||
+ * if and wherever such third-party acknowlegements normally appear.
|
||||
+ *
|
||||
+ * 4. The names "The Jakarta Project", "Ant", and "Apache Software
|
||||
+ * Foundation" must not be used to endorse or promote products derived
|
||||
+ * from this software without prior written permission. For written
|
||||
+ * permission, please contact apache@apache.org.
|
||||
+ *
|
||||
+ * 5. Products derived from this software may not be called "Apache"
|
||||
+ * nor may "Apache" appear in their names without prior written
|
||||
+ * permission of the Apache Group.
|
||||
+ *
|
||||
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
|
||||
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
|
||||
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
+ * SUCH DAMAGE.
|
||||
+ * ====================================================================
|
||||
+ *
|
||||
+ * This software consists of voluntary contributions made by many
|
||||
+ * individuals on behalf of the Apache Software Foundation. For more
|
||||
+ * information on the Apache Software Foundation, please see
|
||||
+ * <http://www.apache.org/>.
|
||||
+ */
|
||||
+package net.sf.antcontrib.cpptasks.hp;
|
||||
+
|
||||
+import java.io.File;
|
||||
+import java.util.Vector;
|
||||
+
|
||||
+import net.sf.antcontrib.cpptasks.CUtil;
|
||||
+import net.sf.antcontrib.cpptasks.compiler.LinkType;
|
||||
+import net.sf.antcontrib.cpptasks.compiler.Linker;
|
||||
+import net.sf.antcontrib.cpptasks.gcc.AbstractLdLinker;
|
||||
+
|
||||
+/**
|
||||
+ * Adapter for HP linker
|
||||
+ *
|
||||
+ * @author Curt Arnold
|
||||
+ */
|
||||
+public final class HPLinker extends AbstractLdLinker
|
||||
+{
|
||||
+ private static final String[] objFiles = new String[]
|
||||
+ { ".o", ".a", ".lib", ".dll", ".so", ".sl" };
|
||||
+ private static final String[] discardFiles = new String[0];
|
||||
+
|
||||
+ private static final HPLinker instance =
|
||||
+ new HPLinker("ld", objFiles, discardFiles, "", "");
|
||||
+ private static final HPLinker dllLinker =
|
||||
+ new HPLinker("ld", objFiles, discardFiles, "lib", ".sl");
|
||||
+ private static final HPLinker arLinker =
|
||||
+ new HPLinker("ld", objFiles, discardFiles, "", ".a");
|
||||
+
|
||||
+ private File[] libDirs;
|
||||
+
|
||||
+ private HPLinker(String command, String[] extensions,
|
||||
+ String[] ignoredExtensions, String outputPrefix,
|
||||
+ String outputSuffix) {
|
||||
+ super(command, "-help", extensions, ignoredExtensions,
|
||||
+ outputPrefix, outputSuffix,false,null);
|
||||
+ }
|
||||
+
|
||||
+ public static HPLinker getInstance() {
|
||||
+ return instance;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Returns library path.
|
||||
+ *
|
||||
+ */
|
||||
+ public File[] getLibraryPath() {
|
||||
+ if(libDirs == null) {
|
||||
+ File CCloc = CUtil.getExecutableLocation("ld");
|
||||
+ if(CCloc != null) {
|
||||
+ File compilerLib = new File(
|
||||
+ new File(CCloc, "../lib").getAbsolutePath());
|
||||
+ if (compilerLib.exists()) {
|
||||
+ libDirs = new File[2];
|
||||
+ libDirs[0] = compilerLib;
|
||||
+ }
|
||||
+ }
|
||||
+ if (libDirs == null) {
|
||||
+ libDirs = new File[1];
|
||||
+ }
|
||||
+ }
|
||||
+ libDirs[libDirs.length-1] = new File("/usr/lib");
|
||||
+ return libDirs;
|
||||
+ }
|
||||
+
|
||||
+ public void addImpliedArgs(boolean debug, LinkType linkType, Vector args) {
|
||||
+/* if(linkType.isStaticRuntime()) {
|
||||
+ args.addElement("-static");
|
||||
+ }
|
||||
+*/
|
||||
+ if(linkType.isSharedLibrary()) {
|
||||
+ args.addElement("-b");
|
||||
+ }
|
||||
+/*
|
||||
+ if (linkType.isStaticLibrary()) {
|
||||
+ args.addElement("-Wl,-noshared");
|
||||
+ }
|
||||
+*/
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ public Linker getLinker(LinkType type) {
|
||||
+ if(type.isStaticLibrary()) {
|
||||
+ return arLinker;
|
||||
+ }
|
||||
+ if(type.isSharedLibrary()) {
|
||||
+ return dllLinker;
|
||||
+ }
|
||||
+ return instance;
|
||||
+ }
|
||||
+
|
||||
+ public void addIncremental(boolean incremental, Vector args) {
|
||||
+ /*
|
||||
+ if (incremental) {
|
||||
+ args.addElement("-xidlon");
|
||||
+ } else {
|
||||
+ args.addElement("-xidloff");
|
||||
+ }
|
||||
+ */
|
||||
+ }
|
||||
+}
|
||||
--- /dev/null 2006-04-28 19:36:02.000000000 -0700
|
||||
+++ src/net/sf/antcontrib/cpptasks/ibm/XlcCompiler.java 2006-04-28 17:08:22.000000000 -0700
|
||||
@@ -0,0 +1,138 @@
|
||||
+/*
|
||||
+ * The Apache Software License, Version 1.1
|
||||
+ *
|
||||
+ * Copyright (c) 2001 The Ant-Contrib project. All rights
|
||||
+ * reserved.
|
||||
+ *
|
||||
+ * Redistribution and use in source and binary forms, with or without
|
||||
+ * modification, are permitted provided that the following conditions
|
||||
+ * are met:
|
||||
+ *
|
||||
+ * 1. Redistributions of source code must retain the above copyright
|
||||
+ * notice, this list of conditions and the following disclaimer.
|
||||
+ *
|
||||
+ * 2. Redistributions in binary form must reproduce the above copyright
|
||||
+ * notice, this list of conditions and the following disclaimer in
|
||||
+ * the documentation and/or other materials provided with the
|
||||
+ * distribution.
|
||||
+ *
|
||||
+ * 3. The end-user documentation included with the redistribution, if
|
||||
+ * any, must include the following acknowlegement:
|
||||
+ * "This product includes software developed by the
|
||||
+ * Ant-Contrib project (http://sourceforge.net/projects/ant-contrib)."
|
||||
+ * Alternately, this acknowlegement may appear in the software itself,
|
||||
+ * if and wherever such third-party acknowlegements normally appear.
|
||||
+ *
|
||||
+ * 4. The names "Ant-Contrib"
|
||||
+ * must not be used to endorse or promote products derived
|
||||
+ * from this software without prior written permission. For written
|
||||
+ * permission, please contact apache@apache.org.
|
||||
+ *
|
||||
+ * 5. Products derived from this software may not be called "Ant-Contrib"
|
||||
+ * nor may "Ant-Contrib" appear in their names without prior written
|
||||
+ * permission of the Ant-Contrib project.
|
||||
+ *
|
||||
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
|
||||
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
+ * DISCLAIMED. IN NO EVENT SHALL THE ANT-CONTRIB PROJECT OR
|
||||
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
+ * SUCH DAMAGE.
|
||||
+ * ====================================================================
|
||||
+ */
|
||||
+package net.sf.antcontrib.cpptasks.ibm;
|
||||
+
|
||||
+import java.io.File;
|
||||
+import java.util.Vector;
|
||||
+
|
||||
+import net.sf.antcontrib.cpptasks.compiler.LinkType;
|
||||
+import net.sf.antcontrib.cpptasks.compiler.Linker;
|
||||
+import net.sf.antcontrib.cpptasks.gcc.GccCompatibleCCompiler;
|
||||
+import org.apache.tools.ant.types.Environment;
|
||||
+
|
||||
+
|
||||
+/**
|
||||
+ * Adapter for the IBM(r) Visual Age(tm) C++ compiler for AIX(tm)
|
||||
+ *
|
||||
+ * @author Curt Arnold
|
||||
+ */
|
||||
+public final class XlcCompiler extends GccCompatibleCCompiler {
|
||||
+ private String identifier;
|
||||
+ private File[] includePath;
|
||||
+ private static final XlcCompiler instance =
|
||||
+ new XlcCompiler("xlc_r", false, null);
|
||||
+
|
||||
+ /**
|
||||
+ * Private constructor. Use getInstance() to get
|
||||
+ * singleton instance of this class.
|
||||
+ */
|
||||
+ private XlcCompiler(String command, boolean newEnvironment, Environment env) {
|
||||
+ super(command, "-help", false, null, newEnvironment, env);
|
||||
+ }
|
||||
+
|
||||
+ public int getMaximumCommandLength() {
|
||||
+ return Integer.MAX_VALUE;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Gets singleton instance of this class
|
||||
+ */
|
||||
+ public static XlcCompiler getInstance() {
|
||||
+ return instance;
|
||||
+ }
|
||||
+
|
||||
+ public void addImpliedArgs(
|
||||
+ Vector args,
|
||||
+ boolean debug,
|
||||
+ boolean multithreaded,
|
||||
+ boolean exceptions,
|
||||
+ LinkType linkType) {
|
||||
+ args.addElement("-c");
|
||||
+ if (debug) {
|
||||
+ args.addElement("-g");
|
||||
+ }
|
||||
+ if (linkType.isSharedLibrary()) {
|
||||
+ args.addElement("-fpic");
|
||||
+ args.addElement("-qmkshrobj");
|
||||
+
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ public void addWarningSwitch(Vector args, int level) {
|
||||
+ switch (level) {
|
||||
+ case 0 :
|
||||
+ args.addElement("-w");
|
||||
+ break;
|
||||
+
|
||||
+ case 1 :
|
||||
+ args.addElement("-qflag=s:s");
|
||||
+ break;
|
||||
+
|
||||
+ case 2 :
|
||||
+ args.addElement("-qflag=e:e");
|
||||
+ break;
|
||||
+
|
||||
+ case 3 :
|
||||
+ args.addElement("-qflag=w:w");
|
||||
+ break;
|
||||
+
|
||||
+ case 4 :
|
||||
+ args.addElement("-qflag=i:i");
|
||||
+ break;
|
||||
+
|
||||
+ case 5 :
|
||||
+ args.addElement("-qhalt=w:w");
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ public Linker getLinker(LinkType linkType) {
|
||||
+ return VisualAgeLinker.getInstance().getLinker(linkType);
|
||||
+ }
|
||||
+}
|
||||
--- /dev/null 2006-04-28 19:36:02.000000000 -0700
|
||||
+++ src/net/sf/antcontrib/cpptasks/ibm/XlcLinker.java 2006-04-28 17:08:22.000000000 -0700
|
||||
@@ -0,0 +1,112 @@
|
||||
+/*
|
||||
+ * The Apache Software License, Version 1.1
|
||||
+ *
|
||||
+ * Copyright (c) 2001 The Ant-Contrib project. All rights
|
||||
+ * reserved.
|
||||
+ *
|
||||
+ * Redistribution and use in source and binary forms, with or without
|
||||
+ * modification, are permitted provided that the following conditions
|
||||
+ * are met:
|
||||
+ *
|
||||
+ * 1. Redistributions of source code must retain the above copyright
|
||||
+ * notice, this list of conditions and the following disclaimer.
|
||||
+ *
|
||||
+ * 2. Redistributions in binary form must reproduce the above copyright
|
||||
+ * notice, this list of conditions and the following disclaimer in
|
||||
+ * the documentation and/or other materials provided with the
|
||||
+ * distribution.
|
||||
+ *
|
||||
+ * 3. The end-user documentation included with the redistribution, if
|
||||
+ * any, must include the following acknowlegement:
|
||||
+ * "This product includes software developed by the
|
||||
+ * Ant-Contrib project (http://sourceforge.net/projects/ant-contrib)."
|
||||
+ * Alternately, this acknowlegement may appear in the software itself,
|
||||
+ * if and wherever such third-party acknowlegements normally appear.
|
||||
+ *
|
||||
+ * 4. The names "Ant-Contrib"
|
||||
+ * must not be used to endorse or promote products derived
|
||||
+ * from this software without prior written permission. For written
|
||||
+ * permission, please contact apache@apache.org.
|
||||
+ *
|
||||
+ * 5. Products derived from this software may not be called "Ant-Contrib"
|
||||
+ * nor may "Ant-Contrib" appear in their names without prior written
|
||||
+ * permission of the Ant-Contrib project.
|
||||
+ *
|
||||
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
|
||||
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
+ * DISCLAIMED. IN NO EVENT SHALL THE ANT-CONTRIB PROJECT OR
|
||||
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
+ * SUCH DAMAGE.
|
||||
+ * ====================================================================
|
||||
+ */
|
||||
+package net.sf.antcontrib.cpptasks.ibm;
|
||||
+
|
||||
+import java.util.Vector;
|
||||
+
|
||||
+import net.sf.antcontrib.cpptasks.compiler.LinkType;
|
||||
+import net.sf.antcontrib.cpptasks.compiler.Linker;
|
||||
+import net.sf.antcontrib.cpptasks.gcc.AbstractLdLinker;
|
||||
+import net.sf.antcontrib.cpptasks.gcc.GccLibrarian;
|
||||
+
|
||||
+/**
|
||||
+ * Adapter for IBM(r) Visual Age(tm) Linker for AIX(tm)
|
||||
+ *
|
||||
+ * @author Curt Arnold
|
||||
+ */
|
||||
+public final class XlcLinker extends AbstractLdLinker
|
||||
+{
|
||||
+ private static final String[] objFiles = new String[]
|
||||
+ { ".o", ".a", ".lib",".dll", ".so", ".sl"};
|
||||
+ private static final String[] discardFiles = new String[]
|
||||
+ { };
|
||||
+
|
||||
+ private static final XlcLinker instance =
|
||||
+ new XlcLinker("ld", objFiles, discardFiles, "", "");
|
||||
+ private static final XlcLinker dllLinker =
|
||||
+ new XlcLinker("ld", objFiles, discardFiles, "lib", ".so");
|
||||
+
|
||||
+ private XlcLinker(String command, String[] extensions,
|
||||
+ String[] ignoredExtensions, String outputPrefix,
|
||||
+ String outputSuffix) {
|
||||
+ //
|
||||
+ // just guessing that -? might display something useful
|
||||
+ //
|
||||
+ super(command, "-?", extensions, ignoredExtensions,
|
||||
+ outputPrefix, outputSuffix,false,null);
|
||||
+ }
|
||||
+
|
||||
+ public static XlcLinker getInstance() {
|
||||
+ return instance;
|
||||
+ }
|
||||
+
|
||||
+ public void addImpliedArgs(boolean debug, LinkType linkType, Vector args) {
|
||||
+ if(debug) {
|
||||
+ //args.addElement("-g");
|
||||
+ }
|
||||
+ if(linkType.isSharedLibrary()) {
|
||||
+ args.addElement("-bdynamic");
|
||||
+ args.addElement("-G");
|
||||
+ args.addElement("-bnoentry");
|
||||
+ args.addElement("-bexpall");
|
||||
+ args.addElement("-lc_r");
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ public Linker getLinker(LinkType type) {
|
||||
+ if(type.isStaticLibrary()) {
|
||||
+ return GccLibrarian.getInstance();
|
||||
+ }
|
||||
+ if(type.isSharedLibrary()) {
|
||||
+ return dllLinker;
|
||||
+ }
|
||||
+ return instance;
|
||||
+ }
|
||||
+}
|
|
@ -0,0 +1,442 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package org.hyperic.jni;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.StringTokenizer;
|
||||
import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
import java.net.URLDecoder;
|
||||
|
||||
public class ArchLoader {
|
||||
private Object loadLock = new Object();
|
||||
|
||||
private boolean loaded = false;
|
||||
|
||||
private final static String osName = System.getProperty("os.name");
|
||||
|
||||
public final static boolean IS_WIN32 = osName.startsWith("Windows");
|
||||
public final static boolean IS_AIX = osName.equals("AIX");
|
||||
public final static boolean IS_HPUX = osName.equals("HP-UX");
|
||||
public final static boolean IS_SOLARIS = osName.equals("SunOS");
|
||||
public final static boolean IS_LINUX = osName.equals("Linux");
|
||||
public final static boolean IS_DARWIN = osName.equals("Mac OS X") || osName.equals("Darwin");
|
||||
public final static boolean IS_OSF1 = osName.equals("OSF1");
|
||||
public final static boolean IS_FREEBSD = osName.equals("FreeBSD");
|
||||
public final static boolean IS_NETWARE = osName.equals("NetWare");
|
||||
|
||||
private String packageName;
|
||||
private String name;
|
||||
private String resourcePath;
|
||||
private Class loaderClass;
|
||||
private String jarName;
|
||||
private String libName = null;
|
||||
private File nativeLibrary;
|
||||
private String version;
|
||||
|
||||
public ArchLoader() { }
|
||||
|
||||
public ArchLoader(Class loaderClass) {
|
||||
setLoaderClass(loaderClass); //e.g. Sigar.class
|
||||
|
||||
//argh. possible for loaderClass.getPackage()
|
||||
//to return null depending on ClassLoader
|
||||
String pname = loaderClass.getName();
|
||||
int ix = pname.lastIndexOf(".");
|
||||
pname = pname.substring(0, ix);
|
||||
setPackageName(pname); //e.g. org.hyperic.sigar
|
||||
|
||||
ix = pname.lastIndexOf(".");
|
||||
setName(pname.substring(ix+1)); //e.g. sigar
|
||||
|
||||
setJarName(getName() + ".jar");
|
||||
|
||||
setResourcePath(toResName(pname)); //e.g. org.hyperic/sigar
|
||||
}
|
||||
|
||||
public Class getLoaderClass() {
|
||||
return this.loaderClass;
|
||||
}
|
||||
|
||||
public void setLoaderClass(Class value) {
|
||||
this.loaderClass = value;
|
||||
}
|
||||
|
||||
public ClassLoader getClassLoader() {
|
||||
return getLoaderClass().getClassLoader();
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public void setName(String value) {
|
||||
this.name = value;
|
||||
}
|
||||
|
||||
public String getPackageName() {
|
||||
return this.packageName;
|
||||
}
|
||||
|
||||
public void setPackageName(String value) {
|
||||
this.packageName = value;
|
||||
}
|
||||
|
||||
public String getResourcePath() {
|
||||
return this.resourcePath;
|
||||
}
|
||||
|
||||
public void setResourcePath(String value) {
|
||||
this.resourcePath = value;
|
||||
}
|
||||
|
||||
public String getJarName() {
|
||||
return this.jarName;
|
||||
}
|
||||
|
||||
public void setJarName(String value) {
|
||||
this.jarName = value;
|
||||
}
|
||||
|
||||
public String getLibName() {
|
||||
return this.libName;
|
||||
}
|
||||
|
||||
public void setLibName(String value) {
|
||||
this.libName = value;
|
||||
}
|
||||
|
||||
public String getArchLibName()
|
||||
throws ArchNotSupportedException {
|
||||
|
||||
return getName() + "-" + ArchName.getName();
|
||||
}
|
||||
|
||||
public String getDefaultLibName()
|
||||
throws ArchNotSupportedException {
|
||||
|
||||
return
|
||||
System.getProperty(getPackageName() + ".libname",
|
||||
//e.g. javasigar-x86-linux
|
||||
"java" + getArchLibName());
|
||||
}
|
||||
|
||||
public File getNativeLibrary() {
|
||||
return this.nativeLibrary;
|
||||
}
|
||||
|
||||
private String toResName(String name) {
|
||||
StringBuffer sb = new StringBuffer(name);
|
||||
for (int i=0; i < sb.length(); i++) {
|
||||
if (sb.charAt(i) == '.') {
|
||||
sb.setCharAt(i, '/');
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public static String getLibraryPrefix() {
|
||||
if (IS_WIN32 || IS_NETWARE) {
|
||||
return "";
|
||||
}
|
||||
|
||||
return "lib";
|
||||
}
|
||||
|
||||
public static String getLibraryExtension() {
|
||||
if (IS_WIN32) {
|
||||
return ".dll";
|
||||
}
|
||||
|
||||
if (IS_NETWARE) {
|
||||
return ".nlm";
|
||||
}
|
||||
|
||||
if (IS_DARWIN) {
|
||||
return ".dylib";
|
||||
}
|
||||
|
||||
if (IS_HPUX) {
|
||||
return ".sl";
|
||||
}
|
||||
|
||||
return ".so";
|
||||
}
|
||||
|
||||
public String getLibraryName()
|
||||
throws ArchNotSupportedException {
|
||||
String libName;
|
||||
|
||||
if ((libName = getLibName()) == null) {
|
||||
libName = getDefaultLibName();
|
||||
setLibName(libName);
|
||||
}
|
||||
|
||||
String prefix = getLibraryPrefix();
|
||||
String ext = getLibraryExtension();
|
||||
|
||||
return prefix + libName + ext;
|
||||
}
|
||||
|
||||
public String getVersionedLibraryName() {
|
||||
|
||||
if (this.version == null) {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
getLibraryName();
|
||||
} catch (ArchNotSupportedException e) {
|
||||
return null;
|
||||
}
|
||||
String prefix = getLibraryPrefix();
|
||||
String ext = getLibraryExtension();
|
||||
|
||||
return prefix + this.libName + '-' + this.version + ext;
|
||||
}
|
||||
|
||||
private boolean isJarURL(URL url) {
|
||||
if (url == null) {
|
||||
return false;
|
||||
}
|
||||
String name = url.getFile();
|
||||
|
||||
String jarName = getJarName();
|
||||
if (name.indexOf(jarName) != -1) {
|
||||
return true;
|
||||
}
|
||||
|
||||
int ix = jarName.indexOf(".jar");
|
||||
if (ix != -1) {
|
||||
//check for a versioned name-x.x.jar
|
||||
jarName = jarName.substring(0, ix) + "-";
|
||||
|
||||
//lastIndex else could match "sigar-bin/"
|
||||
ix = name.lastIndexOf(jarName);
|
||||
if (ix != -1) {
|
||||
jarName = name.substring(ix);
|
||||
ix = jarName.indexOf(".jar");
|
||||
if (ix == -1) {
|
||||
return false;
|
||||
}
|
||||
this.version =
|
||||
jarName.substring(jarName.indexOf('-')+1, ix);
|
||||
jarName = jarName.substring(0, ix+4);
|
||||
setJarName(jarName); //for future reference
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public String findJarPath(String libName)
|
||||
throws ArchLoaderException {
|
||||
/*
|
||||
* native libraries should be installed along side
|
||||
* ${this.name}.jar, try to find where ${this.name}.jar
|
||||
* is on disk and use that path.
|
||||
*/
|
||||
if (getJarName() == null) {
|
||||
throw new ArchLoaderException("jarName is null");
|
||||
}
|
||||
|
||||
String path = getResourcePath();
|
||||
ClassLoader loader = getClassLoader();
|
||||
URL url = loader.getResource(path);
|
||||
|
||||
if (!isJarURL(url)) {
|
||||
url = null;
|
||||
}
|
||||
|
||||
if ((url == null) && (loader instanceof URLClassLoader)) {
|
||||
URL[] urls = ((URLClassLoader)loader).getURLs();
|
||||
|
||||
for (int i=0; i<urls.length; i++) {
|
||||
if (isJarURL(urls[i])) {
|
||||
url = urls[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (url == null) {
|
||||
throw new ArchLoaderException("Unable to find " +
|
||||
getJarName());
|
||||
}
|
||||
|
||||
path = url.getFile();
|
||||
|
||||
if (path.startsWith("file:")) {
|
||||
path = path.substring(5);
|
||||
}
|
||||
File file = new File(path);
|
||||
String jarName = getJarName();
|
||||
|
||||
while ((file != null) &&
|
||||
!file.getName().startsWith(jarName))
|
||||
{
|
||||
file = file.getParentFile();
|
||||
}
|
||||
|
||||
if (libName == null) {
|
||||
//return path containing ${this.name}.jar
|
||||
//which may or may not be -x.x.x.x versioned
|
||||
libName = jarName;
|
||||
}
|
||||
|
||||
if ((file != null) &&
|
||||
((file = file.getParentFile()) != null))
|
||||
{
|
||||
String dir = URLDecoder.decode(file.toString());
|
||||
if (findNativeLibrary(dir, libName)) {
|
||||
return dir;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
//java.lang.ClassLoader does not delegate native linking
|
||||
//to the parent ClassLoader.
|
||||
//overriding these methods provides a workaround.
|
||||
protected void systemLoadLibrary(String name) {
|
||||
System.loadLibrary(name);
|
||||
}
|
||||
|
||||
protected void systemLoad(String name) {
|
||||
System.load(name);
|
||||
}
|
||||
|
||||
protected boolean containsNativeLibrary(File dir, String name) {
|
||||
if (name == null) {
|
||||
return false;
|
||||
}
|
||||
File file = new File(dir, name);
|
||||
if (file.exists()) {
|
||||
this.nativeLibrary = file;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
protected boolean findNativeLibrary(String dir, String name) {
|
||||
//must be an absolute path; this allows relative to $PWD
|
||||
File path = new File(dir).getAbsoluteFile();
|
||||
if (containsNativeLibrary(path, name)) {
|
||||
return true;
|
||||
}
|
||||
else if (containsNativeLibrary(path, getVersionedLibraryName())) {
|
||||
return true;
|
||||
}
|
||||
//try w/o arch name (e.g. "libsigar.so")
|
||||
return containsNativeLibrary(path,
|
||||
getLibraryPrefix() +
|
||||
getName() +
|
||||
getLibraryExtension());
|
||||
}
|
||||
|
||||
protected boolean findInJavaLibraryPath(String libName) {
|
||||
String path = System.getProperty("java.library.path", "");
|
||||
StringTokenizer tok =
|
||||
new StringTokenizer(path, File.pathSeparator);
|
||||
while (tok.hasMoreTokens()) {
|
||||
path = tok.nextToken();
|
||||
if (findNativeLibrary(path, libName)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected void loadLibrary(String path)
|
||||
throws ArchNotSupportedException,
|
||||
ArchLoaderException {
|
||||
|
||||
try {
|
||||
String libName = getLibraryName();
|
||||
|
||||
if (path == null) {
|
||||
//e.g. org.hyperic.sigar.path
|
||||
path = System.getProperty(getPackageName() + ".path");
|
||||
}
|
||||
|
||||
if (path != null) {
|
||||
if (path.equals("-")) {
|
||||
return; //assume library is already loaded
|
||||
}
|
||||
findJarPath(null); //check for versioned .jar
|
||||
findNativeLibrary(path, libName);
|
||||
}
|
||||
else {
|
||||
if (findJarPath(libName) == null) {
|
||||
findInJavaLibraryPath(libName);
|
||||
}
|
||||
}
|
||||
|
||||
//nativeLibrary set when findJarPath() calls findNativeLibrary()
|
||||
if (this.nativeLibrary != null) {
|
||||
systemLoad(this.nativeLibrary.toString());
|
||||
}
|
||||
else {
|
||||
//LD_LIBRARY_PATH must be set for linux and solaris
|
||||
//SHLIB_PATH must be set for hpux
|
||||
//PATH must be set for windows
|
||||
systemLoadLibrary(libName);
|
||||
}
|
||||
} catch (RuntimeException e) {
|
||||
String reason = e.getMessage();
|
||||
if (reason == null) {
|
||||
reason = e.getClass().getName();
|
||||
}
|
||||
|
||||
String msg =
|
||||
"Failed to load " + libName +
|
||||
": " + reason;
|
||||
|
||||
throw new ArchLoaderException(msg);
|
||||
}
|
||||
}
|
||||
|
||||
public void load()
|
||||
throws ArchNotSupportedException,
|
||||
ArchLoaderException {
|
||||
load(null);
|
||||
}
|
||||
|
||||
public void load(String path)
|
||||
throws ArchNotSupportedException,
|
||||
ArchLoaderException {
|
||||
/*
|
||||
* System.loadLibrary() is only supposed to load the library
|
||||
* once per-classloader. but we make extra sure that is the case.
|
||||
*/
|
||||
synchronized (this.loadLock) {
|
||||
if (this.loaded) {
|
||||
return;
|
||||
}
|
||||
loadLibrary(path);
|
||||
this.loaded = true;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package org.hyperic.jni;
|
||||
|
||||
public class ArchLoaderException extends Exception {
|
||||
|
||||
public ArchLoaderException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public ArchLoaderException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,115 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package org.hyperic.jni;
|
||||
|
||||
/**
|
||||
* Helper class for naming the jni library with
|
||||
* platform/arch name for which it is binary compatible.
|
||||
*/
|
||||
public class ArchName {
|
||||
|
||||
static boolean useDmalloc =
|
||||
System.getProperty("jni.dmalloc") != null;
|
||||
|
||||
public static String getName() throws ArchNotSupportedException {
|
||||
String name = getArchName();
|
||||
if (useDmalloc) {
|
||||
name += "-dmalloc";
|
||||
}
|
||||
return name;
|
||||
}
|
||||
|
||||
public static boolean is64() {
|
||||
return "64".equals(System.getProperty("sun.arch.data.model"));
|
||||
}
|
||||
|
||||
private static String getArchName() throws ArchNotSupportedException {
|
||||
String name = System.getProperty("os.name");
|
||||
String arch = System.getProperty("os.arch");
|
||||
String version = System.getProperty("os.version");
|
||||
String majorVersion = version.substring(0, 1); //4.x, 5.x, etc.
|
||||
|
||||
if (arch.endsWith("86")) {
|
||||
arch = "x86";
|
||||
}
|
||||
|
||||
if (name.equals("Linux")) {
|
||||
return arch + "-linux";
|
||||
}
|
||||
else if (name.indexOf("Windows") > -1) {
|
||||
return arch + "-winnt";
|
||||
}
|
||||
else if (name.equals("SunOS")) {
|
||||
if (arch.startsWith("sparcv") && is64()) {
|
||||
arch = "sparc64";
|
||||
}
|
||||
return arch + "-solaris";
|
||||
}
|
||||
else if (name.equals("HP-UX")) {
|
||||
if (arch.startsWith("IA64")) {
|
||||
arch = "ia64";
|
||||
}
|
||||
else {
|
||||
arch = "pa";
|
||||
}
|
||||
if (version.indexOf("11") > -1) {
|
||||
return arch + "-hpux-11";
|
||||
}
|
||||
}
|
||||
else if (name.equals("AIX")) {
|
||||
if (majorVersion.equals("6")) {
|
||||
//v5 binary is compatible with v6
|
||||
majorVersion = "5";
|
||||
}
|
||||
//arch == "ppc" on 32-bit, "ppc64" on 64-bit
|
||||
return arch + "-aix-" + majorVersion;
|
||||
}
|
||||
else if (name.equals("Mac OS X") || name.equals("Darwin")) {
|
||||
if (is64()) {
|
||||
return "universal64-macosx";
|
||||
}
|
||||
else {
|
||||
return "universal-macosx";
|
||||
}
|
||||
}
|
||||
else if (name.equals("FreeBSD")) {
|
||||
//none of the 4,5,6 major versions are binary compatible
|
||||
return arch + "-freebsd-" + majorVersion;
|
||||
}
|
||||
else if (name.equals("OpenBSD")) {
|
||||
return arch + "-openbsd-" + majorVersion;
|
||||
}
|
||||
else if (name.equals("NetBSD")) {
|
||||
return arch + "-netbsd-" + majorVersion;
|
||||
}
|
||||
else if (name.equals("OSF1")) {
|
||||
return "alpha-osf1-" + majorVersion;
|
||||
}
|
||||
else if (name.equals("NetWare")) {
|
||||
return "x86-netware-" + majorVersion;
|
||||
}
|
||||
|
||||
String desc = arch + "-" + name + "-" + version;
|
||||
|
||||
throw new ArchNotSupportedException("platform (" + desc + ") not supported");
|
||||
}
|
||||
|
||||
private ArchName () { }
|
||||
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package org.hyperic.jni;
|
||||
|
||||
import org.apache.tools.ant.Task;
|
||||
import org.apache.tools.ant.BuildException;
|
||||
|
||||
public class ArchNameTask extends Task {
|
||||
|
||||
public void execute() throws BuildException {
|
||||
String osArch = System.getProperty("os.arch");
|
||||
|
||||
if (getProject().getProperty("jni.dmalloc") != null) {
|
||||
ArchName.useDmalloc = true;
|
||||
}
|
||||
|
||||
String archName;
|
||||
|
||||
try {
|
||||
archName = ArchName.getName();
|
||||
} catch (ArchNotSupportedException e) {
|
||||
//ok: can still compile *.java
|
||||
System.out.println(e.getMessage());
|
||||
return;
|
||||
}
|
||||
|
||||
System.out.println(archName);
|
||||
getProject().setProperty("jni.libarch", archName);
|
||||
getProject().setProperty("jni.libpre",
|
||||
ArchLoader.getLibraryPrefix());
|
||||
getProject().setProperty("jni.libext",
|
||||
ArchLoader.getLibraryExtension());
|
||||
|
||||
String compiler;
|
||||
if (ArchLoader.IS_WIN32) {
|
||||
compiler = "msvc";
|
||||
}
|
||||
else if (ArchLoader.IS_HPUX) {
|
||||
compiler = "hp";
|
||||
}
|
||||
else if (ArchLoader.IS_AIX) {
|
||||
compiler = "xlc_r";
|
||||
}
|
||||
else {
|
||||
compiler = "gcc";
|
||||
getProject().setProperty("jni.compiler.isgcc", "true");
|
||||
}
|
||||
|
||||
getProject().setProperty("jni.compiler", compiler);
|
||||
|
||||
if (ArchName.is64()) {
|
||||
getProject().setProperty("jni.arch64", "true");
|
||||
if (ArchLoader.IS_LINUX) {
|
||||
if (!osArch.equals("ia64")) {
|
||||
getProject().setProperty("jni.usem64", "true");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package org.hyperic.jni;
|
||||
|
||||
public class ArchNotSupportedException extends Exception {
|
||||
|
||||
public ArchNotSupportedException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public ArchNotSupportedException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,69 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package org.hyperic.jni;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import org.apache.tools.ant.BuildException;
|
||||
import org.apache.tools.ant.taskdefs.Copy;
|
||||
|
||||
public class CopyDependsTask extends Copy {
|
||||
|
||||
private File depends;
|
||||
|
||||
protected void validateAttributes()
|
||||
throws BuildException {
|
||||
|
||||
super.validateAttributes();
|
||||
if (this.depends == null) {
|
||||
throw new BuildException("missing depends attribute");
|
||||
}
|
||||
}
|
||||
|
||||
public void execute()
|
||||
throws BuildException {
|
||||
|
||||
if (this.destFile.exists()) {
|
||||
String state;
|
||||
if (this.depends.lastModified() >
|
||||
this.destFile.lastModified())
|
||||
{
|
||||
this.setOverwrite(true);
|
||||
state = "out of date";
|
||||
}
|
||||
else {
|
||||
state = "up to date";
|
||||
}
|
||||
|
||||
log(this.destFile +
|
||||
" " + state + " with " +
|
||||
this.depends);
|
||||
}
|
||||
|
||||
super.execute();
|
||||
}
|
||||
|
||||
public File getDepends() {
|
||||
return this.depends;
|
||||
}
|
||||
|
||||
public void setDepends(String depends) {
|
||||
this.depends = new File(depends);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue