/******************************************************************************* * Copyright (c) 2011-2013 Nokia Siemens Networks Oyj, Finland. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Nokia Siemens Networks - initial implementation * Petri Tuononen - Initial implementation *******************************************************************************/ package org.eclipse.cdt.managedbuilder.llvm.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.lang.ProcessBuilder; /** * The purpose is to find a path where stdc++ library is located. * Currently the shell script is only for Linux. * * TODO: It might not be able to execute scripts therefore place the command into a variable. */ public class FindStdLibPath { private static final String WIN_SCRIPT = "scripts/find_path.bat"; //$NON-NLS-1$ private static final String STD_LIB = "libstdc++.a"; //$NON-NLS-1$ private static final String UNIX_SCRIPT = " echo `locate libstdc++.a | sort -r | head -1 | sed \"s/libstdc++.a$//\"` "; //$NON-NLS-1$ private static final String MAC_SCRIPT = " echo `locate libstdc++.dylib | sort -r | head -1 | sed \"s/libstdc++.dylib$//\"` "; //$NON-NLS-1$ /** * Find stdc++ library path. * * @return Stdc++ library path. */ public static String find() { ProcessBuilder pb = null; String os = System.getProperty("os.name").toLowerCase(); //$NON-NLS-1$ if (os.indexOf("win") >= 0) { //$NON-NLS-1$ pb = new ProcessBuilder("cmd", "/c", WIN_SCRIPT + " " + STD_LIB); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ } else if (os.indexOf( "nix") >=0 || os.indexOf( "nux") >=0) { //$NON-NLS-1$ //$NON-NLS-2$ pb = new ProcessBuilder("bash", "-c", UNIX_SCRIPT); //$NON-NLS-1$//$NON-NLS-2$ } else if (os.indexOf( "mac" ) >= 0) { //$NON-NLS-1$ pb = new ProcessBuilder("bash", "-c", MAC_SCRIPT); //$NON-NLS-1$//$NON-NLS-2$ } else { return null; } try { Process p = pb.start(); String line; BufferedReader input = new BufferedReader (new InputStreamReader(p.getInputStream())); line = input.readLine(); input.close(); if (line != null) { return line; } } catch (IOException e) { e.printStackTrace(); } return null; } }