You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.4 KiB
42 lines
1.4 KiB
/*
|
|
* Copyright (c) 2016 - present Facebook, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*/
|
|
open! Utils;
|
|
|
|
/* module for escaping clang arguments on the command line and put them into files */
|
|
|
|
/** quoting style of the arguments */
|
|
type style =
|
|
| EscapedDoubleQuotes /** the arguments should be enclosed in "double quotes" and are already escaped */
|
|
| SingleQuotes /** the arguments should be enclosed in 'single quotes' and have to be escaped */
|
|
| EscapedNoQuotes /** the arguments should not be enclosed in quotes and are already escaped */;
|
|
|
|
let quote style =>
|
|
switch style {
|
|
| EscapedNoQuotes => (fun s => s)
|
|
| EscapedDoubleQuotes => (fun s => "\"" ^ s ^ "\"")
|
|
| SingleQuotes =>
|
|
let map = (
|
|
fun
|
|
| '\'' => Some "\\'"
|
|
| '\\' => Some "\\\\"
|
|
| _ => None
|
|
);
|
|
(fun s => "'" ^ Escape.escape_map map s ^ "'")
|
|
};
|
|
|
|
let mk_arg_file prefix style args => {
|
|
let temp_dir = Config.results_dir /\/ "clang";
|
|
create_dir temp_dir;
|
|
let file = Filename.temp_file temp_dir::temp_dir prefix ".txt";
|
|
let write_args outc => output_string outc (IList.map (quote style) args |> String.concat " ");
|
|
with_file file f::write_args |> ignore;
|
|
Logging.out "Clang options stored in file %s@\n" file;
|
|
file
|
|
};
|