Summary: Also be more careful when escaping arguments and create a module for shared functionality between the clang frontend and the buck compilation database. Reviewed By: jberdine Differential Revision: D4036627 fbshipit-source-id: c981184master
parent
4aaec9b220
commit
5d4e3fa267
@ -0,0 +1,39 @@
|
||||
/*
|
||||
* 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 */;
|
||||
|
||||
let quote style =>
|
||||
switch style {
|
||||
| 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
|
||||
};
|
@ -0,0 +1,18 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
/* module for escaping clang arguments on the command line and put them into files */
|
||||
|
||||
/** quoting style */
|
||||
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 */;
|
||||
|
||||
let quote: style => string => string;
|
||||
|
||||
let mk_arg_file: string => style => list string => string;
|
Loading…
Reference in new issue