/*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the
* Free Software Foundation; either version 2.1 of the License, or (at
* your option) any later version. This library 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 Lesser General Public License for more details.
*/
package com.sun.jna;
/** Provide simplified platform information. */
public final class Platform
{
public static final int UNSPECIFIED = -1;
public static final int MAC = 0;
public static final int LINUX = 1;
public static final int WINDOWS = 2;
public static final int SOLARIS = 3;
public static final int FREEBSD = 4;
public static final int OPENBSD = 5;
public static final int WINDOWSCE = 6;
/** Whether read-only (final) fields within Structures are supported. */
public static final boolean RO_FIELDS;
/** Whether this platform provides NIO Buffers. */
public static final boolean HAS_BUFFERS;
/** Whether this platform provides the AWT Component class. */
public static final boolean HAS_AWT;
/** Canonical name of this platform's math library. */
public static final String MATH_LIBRARY_NAME;
/** Canonical name of this platform's C runtime library. */
public static final String C_LIBRARY_NAME;
private static final int osType;
private static boolean winVista = false;
private static String osName;
static
{
osName = System.getProperty("os.name").toLowerCase();
if (osName.startsWith("linux"))
{
osType = LINUX;
}
else if (osName.startsWith("mac") || osName.startsWith("darwin"))
{
osType = MAC;
}
else if (osName.startsWith("windows ce"))
{
osType = WINDOWSCE;
}
else if (osName.startsWith("windows"))
{
osType = WINDOWS;
winVista = osName.contains("vista") || osName.contains(" 7") || osName.contains("2008") || osName.contains(" 8");
}
else if (osName.startsWith("solaris") || osName.startsWith("sunos"))
{
osType = SOLARIS;
}
else if (osName.startsWith("freebsd"))
{
osType = FREEBSD;
}
else if (osName.startsWith("openbsd"))
{
osType = OPENBSD;
}
else
{
osType = UNSPECIFIED;
}
boolean hasAWT = false;
try
{
Class.forName("java.awt.Component");
hasAWT = true;
}
catch (ClassNotFoundException e)
{
}
HAS_AWT = hasAWT;
boolean hasBuffers = false;
try
{
Class.forName("java.nio.Buffer");
hasBuffers = true;
}
catch (ClassNotFoundException e)
{
}
HAS_BUFFERS = hasBuffers;
RO_FIELDS = osType != WINDOWSCE;
C_LIBRARY_NAME = osType == WINDOWS ? "msvcrt" : osType == WINDOWSCE ? "coredll" : "c";
MATH_LIBRARY_NAME = osType == WINDOWS ? "msvcrt" : osType == WINDOWSCE ? "coredll" : "m";
}
private Platform()
{
}
public static final int getOSType()
{
return osType;
}
public static final boolean isMac()
{
return osType == MAC;
}
public static final boolean isLinux()
{
return osType == LINUX;
}
public static final boolean isWindowsCE()
{
return osType == WINDOWSCE;
}
public static final boolean isWinVista()
{
return winVista;
}
/** Returns true for any windows variant. */
public static final boolean isWindows()
{
return osType == WINDOWS || osType == WINDOWSCE;
}
public static final boolean isSolaris()
{
return osType == SOLARIS;
}
public static final boolean isFreeBSD()
{
return osType == FREEBSD;
}
public static final boolean isOpenBSD()
{
return osType == OPENBSD;
}
public static final boolean isX11()
{
// TODO: check filesystem for /usr/X11 or some other X11-specific test
return !Platform.isWindows() && !Platform.isMac();
}
public static final boolean hasRuntimeExec()
{
if (isWindowsCE() && "J9".equals(System.getProperty("java.vm.name")))
return false;
return true;
}
public static final boolean is64Bit()
{
String model = System.getProperty("sun.arch.data.model", System.getProperty("com.ibm.vm.bitmode"));
if (model != null)
{
return "64".equals(model);
}
String arch = System.getProperty("os.arch").toLowerCase();
if ("x86_64".equals(arch) || "ia64".equals(arch) || "ppc64".equals(arch) || "sparcv9".equals(arch) || "amd64".equals(arch))
{
return true;
}
return Native.POINTER_SIZE == 8;
}
public static final boolean isIntel()
{
String arch = System.getProperty("os.arch").toLowerCase().trim();
if (arch.equals("i386") || arch.equals("x86") || arch.equals("x86_64") || arch.equals("amd64"))
{
return true;
}
else
{
return false;
}
}
public static final boolean isPPC()
{
String arch = System.getProperty("os.arch").toLowerCase().trim();
if (arch.equals("ppc") || arch.equals("ppc64") || arch.equals("powerpc") || arch.equals("powerpc64"))
{
return true;
}
else
{
return false;
}
}
public static final boolean isARM()
{
String arch = System.getProperty("os.arch").toLowerCase().trim();
if (arch.equals("arm"))
{
return true;
}
else
{
return false;
}
}
}