123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213(**************************************************************************)(* *)(* Copyright 2015-2018 OCamlPro *)(* *)(* All rights reserved. This file is distributed under the terms of the *)(* GNU Lesser General Public License version 2.1, with the special *)(* exception on linking described in the file LICENSE. *)(* *)(**************************************************************************)openOpamCompatmoduleE=structtypeOpamStd.Config.E.t+=|COLORofOpamStd.Config.when_option|CONFIRMLEVELofOpamStd.Config.answeroption|DEBUGofintoption|DEBUGSECTIONSofOpamStd.Config.sectionsoption|ERRLOGLENofintoption|KEEPLOGSofbooloption|LOGSofstringoption|MERGEOUTofbooloption|NOofbooloption|PRECISETRACKINGofbooloption|SAFEofbooloption|STATUSLINEofOpamStd.Config.when_option|USEOPENSSLofbooloption|UTF8ofOpamStd.Config.when_extoption|UTF8MSGSofbooloption|VERBOSEofOpamStd.Config.leveloption|YESofbooloptionopenOpamStd.Config.Eletcolor=value(functionCOLORc->c|_->None)letconfirmlevel=value(functionCONFIRMLEVELc->c|_->None)letdebug=value(functionDEBUGi->i|_->None)letdebugsections=value(functionDEBUGSECTIONSs->s|_->None)leterrloglen=value(functionERRLOGLENi->i|_-> None)letkeeplogs=value(functionKEEPLOGSb->b|_->None)letlogs=value(functionLOGSs->s|_->None)letmergeout=value(functionMERGEOUTb->b|_->None)letno=value(functionNOb->b|_->None)letprecisetracking=value(functionPRECISETRACKING b->b|_->None)letsafe=value(functionSAFEb->b|_->None)letstatusline=value(functionSTATUSLINEc->c|_->None)letuseopenssl=value(functionUSEOPENSSLb->b|_->None)letutf8=value(functionUTF8c->c|_->None)letutf8msgs=value(functionUTF8MSGSb->b|_->None)letverbose=value(functionVERBOSEl->l|_->None)letyes=value(functionYESb->b|_->None)endtypet={debug_level:int;debug_sections:OpamStd.Config.sections;verbose_level:OpamStd.Config.level;color:OpamStd.Config.when_;utf8:OpamStd.Config.when_ext;disp_status_line:OpamStd.Config.when_;confirm_level:[OpamStd.Config.answer|`undefined];yes:booloption;safe_mode:bool;log_dir:string;keep_log_dir:bool;errlog_length:int;merged_output:bool;use_openssl:bool;precise_tracking:bool;set:bool;}type'aoptions_fun=?debug_level:int->?debug_sections:OpamStd.Config.sections->?verbose_level:OpamStd.Config.level->?color:OpamStd.Config.when_->?utf8:OpamStd.Config.when_ext->?disp_status_line:OpamStd.Config.when_->?confirm_level:OpamStd.Config.answer->?yes:booloption->?safe_mode:bool->?log_dir:string->?keep_log_dir:bool->?errlog_length:int->?merged_output:bool->?use_openssl:bool->?precise_tracking:bool->'aletdefault={debug_level=0;debug_sections=OpamStd.String.Map.empty;verbose_level=0;color=`Auto;utf8=`Auto;disp_status_line=`Auto;confirm_level=`undefined;yes=None;safe_mode=false;log_dir=(letuser=tryUnix.getlogin()withUnix.Unix_error_->"xxx"inletbase=Printf.sprintf"opam-%s-%d"user(OpamStubs.getpid())inFilename.(concat(get_temp_dir_name ())base));keep_log_dir=false;errlog_length =12;merged_output=true;use_openssl=true;precise_tracking=false;set=false;}letsetkkt?debug_level?debug_sections?verbose_level?color?utf8?disp_status_line?confirm_level?yes?safe_mode?log_dir?keep_log_dir?errlog_length?merged_output?use_openssl?precise_tracking=let(+)xopt=matchoptwithSomex->x|None ->xink{debug_level=t.debug_level+debug_level;debug_sections=t.debug_sections +debug_sections;verbose_level=t.verbose_level +verbose_level;color=t.color+color;utf8=t.utf8+utf8;disp_status_line =t.disp_status_line+disp_status_line;confirm_level=(matchconfirm_levelwith|Some(`all_yes|`all_no|`ask|`unsafe_yesasc)->c|None->t.confirm_level);yes=t.yes+yes;safe_mode=t.safe_mode+safe_mode;log_dir=t.log_dir+log_dir;keep_log_dir=t.keep_log_dir+keep_log_dir;errlog_length=t.errlog_length +errlog_length;merged_output=t.merged_output +merged_output;use_openssl=t.use_openssl+use_openssl;precise_tracking=t.precise_tracking +precise_tracking;set=true;}letsett=setk(funx()->x)t(* Global configuration reference *)letr=refdefaultletupdate?noop:_=setk (funcfg()->r:=cfg)!rletinitkk=letopenOpamStd inletutf8=Option.Op.(E.utf8()++(E.utf8msgs ()>>=function|true->Some`Extended|false->None))inletyes=matchE.yes(),E.no()with|Sometrue,_->Some(Sometrue)|_,Sometrue->Some(Somefalse)|_,_->Nonein(setk(setk(func->r:=c;k))!r)?debug_level:(E.debug())?debug_sections:(E.debugsections())?verbose_level:(E.verbose())?color:(E.color())?utf8?disp_status_line:(E.statusline())?confirm_level:(E.confirmlevel())?yes?safe_mode:(E.safe())?log_dir:(E.logs())?keep_log_dir:(E.keeplogs())?errlog_length:(E.errloglen())?merged_output:(E.mergeout())?use_openssl:(E.useopenssl())?precise_tracking:(E.precisetracking())letinit?noop:_=initk(fun()->())letanswer()=match!r.confirm_level,!r.yeswith|#OpamStd.Config.answerasc,_->c|_,Sometrue->`all_yes|_,Somefalse->`all_no|_->`askletanswer_is=letanswer=lazy(answer())infuna->Lazy.forceanswer=aletanswer_is_yes()=answer_is `all_yes||answer_is`unsafe_yes#ifdefDEVELOPERletdeveloper=true#elseletdeveloper=false#endif