diff options
| author | Gaëtan Gilbert | 2018-10-31 15:29:57 +0100 |
|---|---|---|
| committer | Gaëtan Gilbert | 2018-11-02 13:48:16 +0100 |
| commit | 00a8604d89f47c903fc5283eebdda67c87468699 (patch) | |
| tree | f67746d0dc474fb6d7d239c269efd43f44678376 /ide/coqide_main.ml4 | |
| parent | 9b0a4b002e324d523b01e17fba7ba631a651f6b0 (diff) | |
Select OS specific coqide code with cp.
Diffstat (limited to 'ide/coqide_main.ml4')
| -rw-r--r-- | ide/coqide_main.ml4 | 154 |
1 files changed, 0 insertions, 154 deletions
diff --git a/ide/coqide_main.ml4 b/ide/coqide_main.ml4 deleted file mode 100644 index 3a92e1bc91..0000000000 --- a/ide/coqide_main.ml4 +++ /dev/null @@ -1,154 +0,0 @@ -(************************************************************************) -(* * The Coq Proof Assistant / The Coq Development Team *) -(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *) -(* <O___,, * (see CREDITS file for the list of authors) *) -(* \VV/ **************************************************************) -(* // * This file is distributed under the terms of the *) -(* * GNU Lesser General Public License Version 2.1 *) -(* * (see LICENSE file for the text of the license) *) -(************************************************************************) - -let _ = Coqide.set_signal_handlers () -let _ = GtkMain.Main.init () - -(* We handle Gtk warning messages ourselves : - - on win32, we don't want them to end on a non-existing console - - we display critical messages via pop-ups *) - -let catch_gtk_messages () = - let all_levels = - [`FLAG_RECURSION;`FLAG_FATAL;`ERROR;`CRITICAL;`WARNING; - `MESSAGE;`INFO;`DEBUG] - in - let log_level lvl = - let level_is tag = (lvl land Glib.Message.log_level tag) <> 0 in - if level_is `ERROR then `FATAL - else if level_is `CRITICAL then `ERROR - else if level_is `DEBUG then `DEBUG - else if level_is `WARNING then `WARNING - else if level_is `MESSAGE then `NOTICE - else `INFO - in - let handler ~level msg = - let header = "Coqide internal error: " in - match log_level level with - |`FATAL -> - let () = GToolbox.message_box ~title:"Error" (header ^ msg) in - Coqide.crash_save 1 - |`ERROR -> - if !Flags.debug then GToolbox.message_box ~title:"Error" (header ^ msg) - else Printf.eprintf "%s\n" (header ^ msg) - |`DEBUG -> Minilib.log msg - |level when Sys.os_type = "Win32" -> Minilib.log ~level msg - |_ -> Printf.eprintf "%s\n" msg - in - let catch domain = - ignore (Glib.Message.set_log_handler ~domain ~levels:all_levels handler) - in - List.iter catch ["GLib";"Gtk";"Gdk";"Pango"] - -let () = catch_gtk_messages () - - - -(** System-dependent settings *) - -let os_specific_init () = () - -(** Win32 *) - -IFDEF WIN32 THEN - -(* On win32, we add the directory of coqide to the PATH at launch-time - (this used to be done in a .bat script). *) - -let set_win32_path () = - Unix.putenv "PATH" - (Filename.dirname Sys.executable_name ^ ";" ^ - (try Sys.getenv "PATH" with _ -> "")) - -(* On win32, since coqide is now console-free, we re-route stdout/stderr - to avoid Sys_error if someone writes to them. We write to a pipe which - is never read (by default) or to a temp log file (when in debug mode). -*) - -let reroute_stdout_stderr () = - (* We anticipate a bit the argument parsing and look for -debug *) - let debug = List.mem "-debug" (Array.to_list Sys.argv) in - Minilib.debug := debug; - let out_descr = - if debug then - let (name,chan) = Filename.open_temp_file "coqide_" ".log" in - Coqide.logfile := Some name; - Unix.descr_of_out_channel chan - else - snd (Unix.pipe ()) - in - Unix.set_close_on_exec out_descr; - Unix.dup2 out_descr Unix.stdout; - Unix.dup2 out_descr Unix.stderr - -(* We also provide specific kill and interrupt functions. *) - -external win32_kill : int -> unit = "win32_kill" -external win32_interrupt : int -> unit = "win32_interrupt" -let () = - Coq.gio_channel_of_descr_socket := Glib.Io.channel_of_descr_socket; - set_win32_path (); - Coq.interrupter := win32_interrupt; - reroute_stdout_stderr () -END - -(** MacOSX *) - -IFDEF QUARTZ THEN -let osx = GosxApplication.osxapplication () - -let () = - let _ = osx#connect#ns_application_open_file - ~callback:(fun x -> Coqide.do_load x; true) - in - let _ = osx#connect#ns_application_block_termination - ~callback:Coqide.forbid_quit - in - let _ = osx#connect#ns_application_will_terminate - ~callback:Coqide.close_and_quit - in () - -let os_specific_init () = - let () = GtkosxApplication.Application.set_menu_bar osx#as_osxapplication - (GtkMenu.MenuShell.cast - (Coqide_ui.ui_m#get_widget "/CoqIde MenuBar")#as_widget) - in - let () = GtkosxApplication.Application.insert_app_menu_item - osx#as_osxapplication - (Coqide_ui.ui_m#get_widget "/CoqIde MenuBar/Edit/Prefs")#as_widget 1 - in - let () = GtkosxApplication.Application.set_help_menu osx#as_osxapplication - (Some (GtkMenu.MenuItem.cast - (Coqide_ui.ui_m#get_widget "/CoqIde MenuBar/Help")#as_widget)) - in - osx#ready () -END - -let load_prefs () = - try Preferences.load_pref () - with e -> Ideutils.flash_info - ("Could not load preferences ("^Printexc.to_string e^").") - -let () = - load_prefs (); - let argl = List.tl (Array.to_list Sys.argv) in - let argl = Coqide.read_coqide_args argl in - let files = Coq.filter_coq_opts argl in - let args = List.filter (fun x -> not (List.mem x files)) argl in - Coq.check_connection args; - Coqide.sup_args := args; - Coqide.main files; - os_specific_init (); - try - GMain.main (); - failwith "Gtk loop ended" - with e -> - Minilib.log ("CoqIde unexpected error:" ^ Printexc.to_string e); - Coqide.crash_save 127 |
