/* * Syncany, www.syncany.org * Copyright (C) 2011-2016 Philipp C. Heckel <philipp.heckel@gmail.com> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * 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, see <http://www.gnu.org/licenses/>. */ package org.syncany.util; import java.io.File; import java.nio.file.Files; import java.nio.file.Paths; public class EnvironmentUtil { public enum OperatingSystem { WINDOWS(false), OSX(true), UNIX_LIKE(true); private boolean unixLike; OperatingSystem(boolean unixLike) { this.unixLike = unixLike; } public boolean isUnixLike() { return unixLike; } }; private static OperatingSystem operatingSystem; static { if (File.separatorChar == '\\') { operatingSystem = OperatingSystem.WINDOWS; } else if (System.getProperty("os.name").toUpperCase().contains("OS X")) { operatingSystem = OperatingSystem.OSX; } else { operatingSystem = OperatingSystem.UNIX_LIKE; } } public static void setOperatingSystem(OperatingSystem aOperatingSystem) { operatingSystem = aOperatingSystem; } public static OperatingSystem getOperatingSystem() { return operatingSystem; } public static boolean isUnixLikeOperatingSystem() { return operatingSystem.isUnixLike(); } public static boolean isWindows() { return operatingSystem == OperatingSystem.WINDOWS; } public static boolean isMacOSX() { return operatingSystem == OperatingSystem.OSX; } public static boolean symlinksSupported() { return isUnixLikeOperatingSystem(); } public static boolean isDebianBased() { return isUnixLikeOperatingSystem() && Files.exists(Paths.get("/usr/bin/dpkg")); } /** * @see <a href="http://lopica.sourceforge.net/os.html">Possible return values</a> * @return x86, x86_64, sparc, ppc, armv41, i686, ppc64, powerpc, par-risc, ia64n, pa_risk2.0, pa_risk, power, power_rs, mips, alpha */ public static String getArchDescription() { String realArchDescription = System.getProperty("os.arch").toLowerCase(); switch (realArchDescription) { case "i386": return "x86"; case "amd64": return "x86_64"; default: return realArchDescription; } } /** * Returns the operating system short descripton. * * @see <a href="http://www.prepareitonline.com/forums/prepare/24-developer-discussions/question/1615-what-are-the-possible-values-system-getproperty-os-name-can-return-on-different-systems">Possible output values</a> * @return aix, digital, freebsd, hp, irix, linux, mac, mpe/ix, netware, os/2, solaris, windows */ public static String getOperatingSystemDescription() { String realOperatingSystemDescription = System.getProperty("os.name").toLowerCase().split(" ")[0]; switch (realOperatingSystemDescription) { case "linux": case "solaris": case "freebsd": case "aix": return "linux"; case "mac": case "macosx": return "macosx"; case "windows": return "windows"; default: return realOperatingSystemDescription; } } }