Summary: Add config (and thereby both command line and .inferconfig file) option for FCP_CLANG_INCLUDE_TO_REPLACE. Reviewed By: jvillard Differential Revision: D3455993 fbshipit-source-id: dc3dfe4master
							parent
							
								
									447ef0e4ce
								
							
						
					
					
						commit
						9bada2f929
					
				| @ -0,0 +1,83 @@ | ||||
| (* | ||||
|  * 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 | ||||
| 
 | ||||
| (** Top-level driver that orchestrates build system integration, frontends, and backend *) | ||||
| 
 | ||||
| let set_env_for_clang_wrapper () = | ||||
|   (match Config.clang_include_to_override with | ||||
|    | Some dir -> Unix.putenv "FCP_CLANG_INCLUDE_TO_REPLACE" dir | ||||
|    | None -> () | ||||
|   ); | ||||
|   if Config.cxx_experimental then | ||||
|     Unix.putenv "FCP_INFER_CXX_MODELS" "1" ; | ||||
|   if Config.debug_mode || Config.frontend_stats then | ||||
|     Unix.putenv "FCP_DEBUG_MODE" "1" ; | ||||
|   if not Config.failures_allowed then | ||||
|     Unix.putenv "FCP_REPORT_FRONTEND_FAILURE" "1" ; | ||||
|   if Config.llvm then | ||||
|     Unix.putenv "LLVM_MODE" "1" | ||||
| 
 | ||||
| let () = | ||||
|   set_env_for_clang_wrapper () ; | ||||
|   let ( / ) = Filename.concat in | ||||
|   (* The infer executable in the bin directory is a symbolic link to the real binary in the lib | ||||
|      directory, so that the python script in the lib directory can be found relative to it. *) | ||||
|   let real_exe = | ||||
|     match Unix.readlink Sys.executable_name with | ||||
|     | link when Filename.is_relative link -> | ||||
|         (* Sys.executable_name is a relative symbolic link *) | ||||
|         (Filename.dirname Sys.executable_name) / link | ||||
|     | link -> | ||||
|         (* Sys.executable_name is an absolute symbolic link *) | ||||
|         link | ||||
|     | exception Unix.Unix_error(Unix.EINVAL, _, _) -> | ||||
|         (* Sys.executable_name is not a symbolic link *) | ||||
|         Sys.executable_name | ||||
|   in | ||||
|   let infer_py = (Filename.dirname real_exe) / "python" / "infer.py" in | ||||
|   let build_cmd = IList.rev Config.rest in | ||||
|   let buck = match build_cmd with "buck" :: _ -> true | _ -> false in | ||||
|   let args_py = | ||||
|     Array.of_list ( | ||||
|       infer_py :: | ||||
|       (match Config.analyzer with None -> [] | Some a -> | ||||
|         ["--analyzer"; Utils.string_of_analyzer a]) @ | ||||
|       (match Config.blacklist with | ||||
|        | Some s when buck -> ["--blacklist-regex"; s] | ||||
|        | _ -> []) @ | ||||
|       (if not Config.create_harness then [] else | ||||
|          ["--android-harness"]) @ | ||||
|       (if not Config.buck then [] else | ||||
|          ["--buck"]) @ | ||||
|       (if not Config.debug_mode then [] else | ||||
|          ["--debug"]) @ | ||||
|       (if not Config.debug_exceptions then [] else | ||||
|          ["--debug-exceptions"]) @ | ||||
|       (if Config.filtering then [] else | ||||
|          ["--no-filtering"]) @ | ||||
|       (if not Config.flavors || not buck then [] else | ||||
|          ["--use-flavors"]) @ | ||||
|       (match Config.infer_cache with None -> [] | Some s -> | ||||
|         ["--infer_cache"; s]) @ | ||||
|       "--multicore" :: (string_of_int Config.multicore) :: | ||||
|       "--out" :: Config.results_dir :: | ||||
|       (match Config.project_root with None -> [] | Some pr -> | ||||
|         ["--project_root"; pr]) @ | ||||
|       (if Config.rest = [] then [] else | ||||
|          ("--" :: build_cmd)) | ||||
|     ) in | ||||
|   let pid = Unix.create_process args_py.(0) args_py Unix.stdin Unix.stdout Unix.stderr in | ||||
|   let _, status = Unix.waitpid [] pid in | ||||
|   if status <> Unix.WEXITED 0 then ( | ||||
|     prerr_endline ("Failed to execute: " ^ (String.concat " " (Array.to_list args_py))) ; | ||||
|     exit 1 | ||||
|   ); | ||||
|   () | ||||
					Loading…
					
					
				
		Reference in new issue