Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file OMakePlugin.ml
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283(******************************************************************************)(* 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 *)(******************************************************************************)(** Generate omake configure/build/doc/test/install system
@author Gerd Stolpmann
*)openBaseEnvopenOASISTypesletrun_command=BaseCustom.runmoduleBuildRuntime=structletmain~ctxtrunpkgextra_args=run_command"omake"(["build"]@OMakeFields.(run.extra_args))extra_args;(* Register generated files in the log files. *)List.iter(funsct->letevs=matchsctwith|Library(cs,bs,lib)whenvar_choosebs.bs_build->beginletevs,_=BaseBuilt.of_libraryOASISHostPath.of_unix(cs,bs,lib)inevsend|Executable(cs,bs,exec)whenvar_choosebs.bs_build->beginletevs,_,_=BaseBuilt.of_executableOASISHostPath.of_unix(cs,bs,exec)inevsend|_->[]inList.iter(fun(bt,bnm,lst)->BaseBuilt.register~ctxtbtbnmlst)evs)pkg.sectionsletclean~ctxtrunpkgextra_args=run_command"omake"(["clean"]@OMakeFields.(run.extra_args))extra_args;List.iter(function|Library(cs,_,_)->BaseBuilt.unregister~ctxtBaseBuilt.BLibcs.cs_name|Executable(cs,_,_)->BaseBuilt.unregister~ctxtBaseBuilt.BExeccs.cs_name;BaseBuilt.unregister~ctxtBaseBuilt.BExecLibcs.cs_name|Doc(cs,_)->(* "omake clean" also cleans docs *)BaseBuilt.unregister~ctxtBaseBuilt.BDoccs.cs_name|_->())pkg.sectionsletdistclean~ctxt:_run_extra_args=run_command"omake"(["distclean"]@OMakeFields.(run.extra_args))extra_args;List.iter(funfn->ifSys.file_existsfnthenSys.removefn)[".omakedb";".omakedb.lock"]endmoduleInstallRuntime=structletinstall~ctxt:_run_extra_args=run_command"omake"(["install"]@OMakeFields.(run.extra_args))extra_argsletuninstall~ctxt:_run_extra_args=run_command"omake"(["uninstall"]@OMakeFields.(run.extra_args))extra_argsendmoduleDocRuntime=structopenOMakeFieldsletmain~ctxtrunpkg(cs,doc)extra_args=lettarget=OASISUnixPath.make[run.run_path;cs.cs_name^".doc";string_of_formatdoc.doc_format;]inrun_command"omake"([target]@run.OMakeFields.extra_args)extra_args;(* The following exists only to make the internal install plugin happy: *)List.iter(funsct->matchsctwith|Doc(cs,doc)whenvar_choosedoc.doc_build->letfiles=Array.to_list(Sys.readdir(OASISHostPath.of_unixtarget))inletfiles=List.filter(funn->n.[0]<>'.')filesinletfull_files=List.map(funn->OASISHostPath.of_unix(OASISUnixPath.concattargetn))filesinBaseBuilt.register~ctxtBaseBuilt.BDoccs.cs_name[full_files]|_->())pkg.sectionsend(* END EXPORT *)openOASISGettextopenOASISPluginopenOMakeFieldsletodn_of_run_tv=OASISDataNotation.REC("OMakeFields",[("run_path",(odn_of_unix_dirnamev.run_path));("extra_args",((funx->OASISDataNotation.of_listOASISDataNotation.of_stringx)v.extra_args))])letneed_ocaml_401ctxtpkg=letopenOASISVersion.StringVersioninset_error(not(comparator_ge"4.01"pkg.ocaml_version))"omake plugin is only available for OCaml >= 4.01. \
Please restrict your requirements with 'OCamlVersion: >= 4.01'."ctxt(* Build plugin *)letbuild_init()=letgeneratordata={OMakeFields.run_path="";OMakeFields.extra_args=OMakeFields.BuildFields.extra_argsdata;}inletdoitctxtpkg=letctxt=need_ocaml_401ctxtpkginletrun=generatorpkg.schema_datainletequip()=OMakeEquip.equip_projectctxtpkgin{ctxtwithother_actions=equip::ctxt.other_actions},{OASISPlugin.chng_moduls=[OMakeData.omakesys_ml];chng_main=OASISDataNotation.func_with_arg_ctxtBuildRuntime.main("OMakePlugin.BuildRuntime.main")runodn_of_run_t;chng_clean=Some(OASISDataNotation.func_with_arg_ctxtBuildRuntime.clean("OMakePlugin.BuildRuntime.clean")runodn_of_run_t);chng_distclean=Some(OASISDataNotation.func_with_arg_ctxtBuildRuntime.distclean("OMakePlugin.BuildRuntime.distclean")runodn_of_run_t);}inBuild.register_actBuildFields.self_iddoit;register_generator_packageBuildFields.idBuildFields.build_datagenerator(* Install plugin *)letinstall_init()=letgenerator_inst_={OMakeFields.run_path="";OMakeFields.extra_args=[]}inletgenerator_uninst_={OMakeFields.run_path="";OMakeFields.extra_args=[]}inletdoit_installplugin_ctxtpkg=letplugin_ctxt=need_ocaml_401plugin_ctxtpkginletrun=generator_instpkg.schema_datainletequip()=OMakeEquip.equip_projectplugin_ctxtpkgin{plugin_ctxtwithother_actions=equip::plugin_ctxt.other_actions},{chng_moduls=[OMakeData.omakesys_ml];chng_main=OASISDataNotation.func_with_arg_ctxtInstallRuntime.install"OMakePlugin.InstallRuntime.install"runodn_of_run_t;chng_clean=None;chng_distclean=None}inletdoit_uninstallplugin_ctxtpkg=letplugin_ctxt=need_ocaml_401plugin_ctxtpkginletrun=generator_uninstpkg.schema_datainletequip()=OMakeEquip.equip_projectplugin_ctxtpkgin{plugin_ctxtwithother_actions=equip::plugin_ctxt.other_actions},{chng_moduls=[OMakeData.omakesys_ml];chng_main=OASISDataNotation.func_with_arg_ctxtInstallRuntime.uninstall"OMakePlugin.InstallRuntime.uninstall"runodn_of_run_t;chng_clean=None;chng_distclean=None}inInstall.register_actInstallFields.self_id(doit_install,doit_uninstall);register_generator_packageInstallFields.idInstallFields.install_datagenerator_inst;register_generator_packageInstallFields.idInstallFields.uninstall_datagenerator_uninst(* Doc plugin *)letdoc_init()=letgeneratordata=(* bug in OASIS? DocFields.path gives here always PropList.Not_set exn *){OMakeFields.run_path=DocFields.pathdata;OMakeFields.extra_args=BuildFields.extra_argsdata;}inletdoitctxtpkg(cs,_)=letrun=generatorcs.cs_datainletequip()=OMakeEquip.equip_projectctxtpkgin{ctxtwithother_actions=equip::ctxt.other_actions},{OASISPlugin.chng_moduls=[OMakeData.omakesys_ml];chng_main=OASISDataNotation.func_with_arg_ctxtDocRuntime.main"OMakePlugin.DocRuntime.main"runodn_of_run_t;chng_clean=None;chng_distclean=None;}inDoc.register_actDocFields.self_iddoit;register_generator_section`DocDocFields.idDocFields.doc_datageneratorletinit()=register_helpBuildFields.build_plugin(help_defaultOMakeData.readme_template_mkd);build_init();install_init();doc_init()