/* * 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; } } }