/*
* Copyright 2017-present Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package com.facebook.buck.cxx;
import static org.junit.Assume.assumeTrue;
import com.facebook.buck.testutil.integration.ProjectWorkspace;
import com.facebook.buck.util.Escaper;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.stream.Collectors;
public class WindowsUtils {
private static String clExe =
"C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\bin\\amd64\\cl.exe";
private static String linkExe =
"C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\bin\\amd64\\link.exe";
private static String libExe =
"C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\bin\\amd64\\lib.exe";
private static String[] includeDirs =
new String[] {
"C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\include",
"C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.10586.0\\ucrt",
"C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.10586.0\\um",
"C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.10586.0\\shared"
};
private static String[] libDirs =
new String[] {
"C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\LIB\\amd64",
"C:\\Program Files (x86)\\Windows Kits\\10\\lib\\10.0.10586.0\\ucrt\\x64",
"C:\\Program Files (x86)\\Windows Kits\\10\\lib\\10.0.10586.0\\um\\x64",
};
public static String vcvarsallBat =
"C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\vcvarsall.bat";
private WindowsUtils() {}
static void setUpWorkspace(ProjectWorkspace workspace, String... cells) throws IOException {
Escaper.Quoter quoter = Escaper.Quoter.DOUBLE_WINDOWS_JAVAC;
for (int i = -1; i < cells.length; i++) {
String prefix = i == -1 ? "" : cells[i] + "/";
String buckconfig = prefix + ".buckconfig";
String buildDefs = prefix + "BUILD_DEFS";
workspace.replaceFileContents(buckconfig, "$CL_EXE$", quoter.quote(clExe));
workspace.replaceFileContents(buckconfig, "$LIB_EXE$", quoter.quote(libExe));
workspace.replaceFileContents(buckconfig, "$LINK_EXE$", quoter.quote(linkExe));
workspace.replaceFileContents(
buildDefs,
"$WINDOWS_COMPILE_FLAGS$",
Arrays.stream(includeDirs)
.map(s -> quoter.quote("/I" + s))
.collect(Collectors.joining(", ")));
workspace.replaceFileContents(
buildDefs,
"$WINDOWS_LINK_FLAGS$",
Arrays.stream(libDirs)
.map(s -> quoter.quote("/LIBPATH:" + s))
.collect(Collectors.joining(", ")));
}
}
static void checkAssumptions() {
assumeTrue("cl.exe should exist", Files.isExecutable(Paths.get(clExe)));
assumeTrue("link.exe should exist", Files.isExecutable(Paths.get(linkExe)));
assumeTrue("lib.exe should exist", Files.isExecutable(Paths.get(libExe)));
for (String includeDir : includeDirs) {
assumeTrue(
String.format("include dir %s should exist", includeDir),
Files.isDirectory(Paths.get(includeDir)));
}
for (String libDir : libDirs) {
assumeTrue(
String.format("lib dir %s should exist", libDir), Files.isDirectory(Paths.get(libDir)));
}
}
}