123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596(******************************************************************************)(* OASIS: architecture for building OCaml libraries and applications *)(* *)(* Copyright (C) 2011-2016, Sylvain Le Gall *)(* Copyright (C) 2008-2011, OCamlCore SARL *)(* *)(* This library is free software; you can redistribute it and/or modify it *)(* under the terms of the GNU Lesser General Public License as published by *)(* the Free Software Foundation; either version 2.1 of the License, or (at *)(* your option) any later version, with the OCaml static compilation *)(* exception. *)(* *)(* This library is distributed in the hope that it will be useful, but *)(* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *)(* or FITNESS FOR A PARTICULAR PURPOSE. See the file COPYING for more *)(* details. *)(* *)(* You should have received a copy of the GNU Lesser General Public License *)(* along with this library; if not, write to the Free Software Foundation, *)(* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *)(******************************************************************************)(* Dynamic runtime for building setup.ml.
We use this to reduce setup.ml replaceable section to a few lines
everything else is dynamically generated.
*)let()=OASISBuiltinPlugins.init()openOASISTypesletdynrun_ctxt=!BaseContext.defaultletsetup_t=letpkg=OASISParse.from_file~ctxt:dynrun_ctxtOASISParse.default_oasis_fninlet_,setup_t=BaseSetup.of_package~ctxt:dynrun_ctxt~setup_update:falseOASISSetupUpdate.Dynamicpkginsetup_t(* Re-export BaseSetup.setup so one can modify setup_t before passing it
to setup(). *)moduleBaseSetup=structincludeBaseSetupletsetup~ctxtsetup_t=lettmp_setup_fn=Filename.temp_file(setup_t.package.name^"-setup")".ml"inletrestored=reffalseinletcleanup~ctxt()=ifnot!restoredthenbeginrestored:=true;BaseGenerate.restore~ctxt();ifSys.file_existstmp_setup_fnthenSys.removetmp_setup_fnendintrylet_lst:'alist=BaseGenerate.generate~ctxt~backup:true~setup_fn:tmp_setup_fn~restore:trueOASISSetupUpdate.NoUpdate(OASISParse.from_file~ctxt:!BaseContext.defaultOASISParse.default_oasis_fn)inat_exit(cleanup~ctxt);letsetup_t=(* Override distclean, because it remove setup.log and we need it for
* BaseGenerate.restore
*){setup_twithdistclean=setup_t.distclean@[fun~ctxt__->cleanup~ctxt()]}inBaseSetup.setupsetup_t;cleanup~ctxt()withe->cleanup~ctxt();raiseeendletsetup():unit=BaseSetup.setup~ctxt:dynrun_ctxtsetup_t