@ -1174,17 +1174,17 @@ and verbose_out =
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    ~ meta : " file "  " " 
 
					 
					 
					 
					    ~ meta : " file "  " " 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					and  version  = 
 
					 
					 
					 
					and  version  = 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  CLOpt . mk_bool  ~ deprecated : [ " version " ]  ~ long : " version " 
 
					 
					 
					 
					  let  var  =  ref  ` None  in 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    ~ exes : CLOpt . [ Toplevel ; Analyze ; Clang ; Java ; Print ]  " Print version information and exit  " 
 
					 
					 
					 
					  CLOpt . mk_set  var  ` Full  ~ deprecated : [ " version " ]  ~ long : " version " 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
 
					 
					 
					 
					    ~ exes : CLOpt . [ Toplevel ; Analyze ; Clang ; Java ; Print ]  
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					and  version_json  = 
 
					 
					 
					 
					    " Print version information and exit "  ;  
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  CLOpt . mk_ bool  ~ deprecated : [ " version_json " ]  ~ long : " version-json " 
 
					 
					 
					 
					  CLOpt . mk_ set var  ` Json   ~ deprecated : [ " version_json " ]  ~ long : " version-json " 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    ~ exes : CLOpt . [ Analyze ; Clang ; Java ; Print ] 
 
					 
					 
					 
					    ~ exes : CLOpt . [ Analyze ; Clang ; Java ; Print ] 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    " Print version  json formatted"  
 
					 
					 
					 
					    " Print version  information in json format and exit"  ;  
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
 
					 
					 
					 
					  CLOpt . mk_set  var  ` Vcs  ~ long : " version-vcs "  
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					and  version_vcs  = 
 
					 
					 
					 
					    ~ exes : CLOpt . [ Analyze ; Clang ; Java ; Print ]  
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  CLOpt . mk_bool  ~ long : " version-vcs " 
 
					 
					 
					 
					    " Print version control system commit and exit "  ;  
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    ~  exes: CLOpt . [ Analyze ; Clang ; Ja  va; P  rint]  " Print version control system commit and exit "  
 
					 
					 
					 
					   var
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					and  whole_seconds  = 
 
					 
					 
					 
					and  whole_seconds  = 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  CLOpt . mk_bool  ~ deprecated : [ " whole_seconds " ]  ~ long : " whole-seconds " 
 
					 
					 
					 
					  CLOpt . mk_bool  ~ deprecated : [ " whole_seconds " ]  ~ long : " whole-seconds " 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -1244,6 +1244,7 @@ let rest =
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					          specs_library  :=  List . rev_append  files  ! specs_library 
 
					 
					 
					 
					          specs_library  :=  List . rev_append  files  ! specs_library 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        ) 
 
					 
					 
					 
					        ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      )  in 
 
					 
					 
					 
					      )  in 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  let  version_spec  =  Arg . Unit  ( fun  ()  ->  version  :=  ` Javac )  in 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  CLOpt . mk_subcommand 
 
					 
					 
					 
					  CLOpt . mk_subcommand 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    ~ exes : CLOpt . [ Toplevel ] 
 
					 
					 
					 
					    ~ exes : CLOpt . [ Toplevel ] 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    " Stop argument processing, use remaining arguments as a build command " 
 
					 
					 
					 
					    " Stop argument processing, use remaining arguments as a build command " 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -1251,7 +1252,8 @@ let rest =
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					       match  Filename . basename  build_exe  with 
 
					 
					 
					 
					       match  Filename . basename  build_exe  with 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					       |  " java "  |  " javac "  ->  [ 
 
					 
					 
					 
					       |  " java "  |  " javac "  ->  [ 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					           ( " -classes_out " ,  classes_out_spec ,  " " ) ;  ( " -d " ,  classes_out_spec ,  " " ) ; 
 
					 
					 
					 
					           ( " -classes_out " ,  classes_out_spec ,  " " ) ;  ( " -d " ,  classes_out_spec ,  " " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					           ( " -classpath " ,  classpath_spec ,  " " ) ;  ( " -cp " ,  classpath_spec ,  " " ) 
 
					 
					 
					 
					           ( " -classpath " ,  classpath_spec ,  " " ) ;  ( " -cp " ,  classpath_spec ,  " " ) ; 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					           ( " -version " ,  version_spec ,  " " ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         ] 
 
					 
					 
					 
					         ] 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					       |  _  ->  [] 
 
					 
					 
					 
					       |  _  ->  [] 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    ) 
 
					 
					 
					 
					    ) 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -1284,21 +1286,35 @@ let exe_usage (exe : CLOpt.exe) =
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      version_string 
 
					 
					 
					 
					      version_string 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					let  post_parsing_initialization  ()  = 
 
					 
					 
					 
					let  post_parsing_initialization  ()  = 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  F . set_margin  ! margin  ; 
 
					 
					 
					 
					  ( match  ! version  with 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					   |  ` Full  -> 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  if  ! version  then  ( 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					       (*  TODO ( 11791235 )  change back to stdout once buck integration is fixed  *) 
 
					 
					 
					 
					       (*  TODO ( 11791235 )  change back to stdout once buck integration is fixed  *) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    F . fprintf  F . err_formatter  " %s@. "  version_string  ; 
 
					 
					 
					 
					       prerr_endline  version_string 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    exit  0 
 
					 
					 
					 
					   |  ` Javac  when  ! buck  -> 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  ) ; 
 
					 
					 
					 
					       (*  print buck key  *) 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  if  ! version_json  then  ( 
 
					 
					 
					 
					       let  javac_version  = 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    F . fprintf  F . std_formatter  " %s@. "  Version . versionJson  ; 
 
					 
					 
					 
					         (*  stderr contents of build command  *) 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    exit  0 
 
					 
					 
					 
					         let  chans  =  Unix . open_process_full  ( String . concat  ~ sep : "   "  ( List . rev  ! rest ) )  ~ env : [| |]  in 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  ) ; 
 
					 
					 
					 
					         let  err  =  String . strip  ( In_channel . input_all  chans . stderr )  in 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  if  ! version_vcs  then  ( 
 
					 
					 
					 
					         Unix . close_process_full  chans  | >  ignore ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    F . fprintf  F . std_formatter  " %s@. "  Version . commit  ; 
 
					 
					 
					 
					         err  in 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    exit  0 
 
					 
					 
					 
					       let  analyzer_name  = 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         IList . assoc  ( = ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					           ( match  ! analyzer  with  Some  a  ->  a  |  None  ->  Infer ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					           ( IList . map  ( fun  ( n , a )  ->  ( a , n ) )  string_to_analyzer )  in 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					       let  infer_version  =  Version . commit  in 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					       F . eprintf  " %s/%s/%s@. "  javac_version  analyzer_name  infer_version 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					   |  ` Javac  -> 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					       prerr_endline  version_string 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					   |  ` Json  -> 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					       print_endline  Version . versionJson 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					   |  ` Vcs  -> 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					       print_endline  Version . commit 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					   |  ` None  ->  () 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  ) ; 
 
					 
					 
					 
					  ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  if  ! version  < >  ` None  then  exit  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  F . set_margin  ! margin  ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  let  set_minor_heap_size  nMb  =  (*  increase the minor heap size to speed up gc  *) 
 
					 
					 
					 
					  let  set_minor_heap_size  nMb  =  (*  increase the minor heap size to speed up gc  *) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    let  ctrl  =  Gc . get  ()  in 
 
					 
					 
					 
					    let  ctrl  =  Gc . get  ()  in