(defvar opam nil) (defvar git-opam-url) (defvar opam-vars '("lib" "libexec" "bin" "sbin" "toplevel" "share" "share_root" "etc" "doc" "stublibs")) (defvar utop nil "the full path of utop") (setf git-opam-url "https://github.com/ocaml/opam.git") (defun opam-config-var (var) (let ((command-string (concat "opam config var " var))) (substring (shell-command-to-string command-string) 0 -1))) (defun opam-config-env () (dolist (var (car (read-from-string (shell-command-to-string "opam config env --sexp")))) (let ((var-name (car var)) (var-val (cadr var))) (setenv var-name (let ((old-v (getenv var-name))) (if old-v (concat old-v ":" var-val) var-val))))) (add-to-list 'load-path (concat (opam-config-var "share") "/emacs/site-lisp/"))) (defun check-opam () (if (not (which "opam")) (progn (message "Please install opam") nil) (progn (opam-config-env) (setq utop (which "utop")) (unless utop (message "Please install utop with (opam install utop)")) utop))) (register-mypkg (list :name "opam" :enabled (check-opam) :packages nil :init #'(lambda () (setq utop-command (concat utop " -emacs")) (autoload 'utop "utop" "toplevel of ocaml" t))))