From 61e65babd3f5d0330d984ce4239fd8f7cd278f47 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Mon, 22 Jan 2018 02:45:17 +0100 Subject: [PATCH] Fix for #227 (#228) * Fixes #223 * Upgrade to OCaml 4.06 and Core 0.10 * Fixes #223 (#226) (#61) * Fixed qp_edit --- README.md | 6 +++-- configure | 28 +++++++++++++--------- install/scripts/install_ocaml.sh | 5 ++-- ocaml/TaskServer.ml | 11 +++++---- ocaml/qp_create_ezfio_from_xyz.ml | 2 +- ocaml/qp_create_guess.ml | 2 +- ocaml/qp_find_pi_space.ml | 2 +- ocaml/qp_print.ml | 2 +- ocaml/qp_run.ml | 2 +- ocaml/qp_set_mo_class.ml | 2 +- scripts/ezfio_interface/qp_edit_template | 2 +- scripts/ezfio_interface/upgrade_1.0_2.0.sh | 27 --------------------- scripts/qp_upgrade_ocaml.sh | 19 +++++++++++++++ 13 files changed, 56 insertions(+), 54 deletions(-) delete mode 100755 scripts/ezfio_interface/upgrade_1.0_2.0.sh create mode 100755 scripts/qp_upgrade_ocaml.sh diff --git a/README.md b/README.md index a11c5713..52f949c3 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,9 @@ ## IMPORTANT -If you have problems upgrading to the current version, consider re-installing everything from scratch including the OCaml compiler. -To do this, you will have to remove the `quantum_package` directory **and** the `$HOME/.opam` directory as well. +If you have problems upgrading to the current version, first try +`qp_upgrade_ocaml.sh`. If it fails, then consider re-installing everything from +scratch including the OCaml compiler. To do this, you will have to remove the +`quantum_package` directory **and** the `$HOME/.opam` directory as well. diff --git a/configure b/configure index 9b59b209..9f677e92 100755 --- a/configure +++ b/configure @@ -49,7 +49,7 @@ QP_ROOT_INSTALL = join(QP_ROOT, "install") os.environ["PATH"] = os.environ["PATH"] + ":" + QP_ROOT_BIN d_dependency = { - "ocaml": ["m4", "curl", "zlib", "patch", "gcc", "zeromq"], + "ocaml": ["m4", "curl", "zlib", "patch", "gcc", "zeromq", "gmp"], "m4": ["make"], "curl": ["make"], "zlib": ["gcc", "make"], @@ -67,7 +67,8 @@ d_dependency = { "ninja": ["g++", "python"], "make": [], "p_graphviz": ["python"], - "bats": [] + "bats": [], + "gmp" : ["make", "g++"] } from collections import namedtuple @@ -136,6 +137,11 @@ zeromq = Info( description=' ZeroMQ', default_path=join(QP_ROOT_LIB, "libzmq.a")) +gmp= Info( + url='https://gmplib.org/download/gmp/gmp-6.1.2.tar.bz2', + description=' The GNU Multiple Precision Arithmetic Library', + default_path=join(QP_ROOT_LIB, "libgmp.a")) + f77zmq = Info( url='{head}/zeromq/f77_zmq/{tail}'.format(**path_github), description=' F77-ZeroMQ', @@ -155,7 +161,7 @@ d_info = dict() for m in ["ocaml", "m4", "curl", "zlib", "patch", "irpf90", "docopt", "resultsFile", "ninja", "emsl", "ezfio", "p_graphviz", - "zeromq", "f77zmq", "bats"]: + "zeromq", "f77zmq", "bats", "gmp"]: exec ("d_info['{0}']={0}".format(m)) @@ -480,16 +486,16 @@ def create_ninja_and_rc(l_installed): 'export QP_PYTHON={0}'.format(":".join(l_python)), "", 'export IRPF90={0}'.format(path_irpf90.replace(QP_ROOT,"${QP_ROOT}")), 'export NINJA={0}'.format(path_ninja.replace(QP_ROOT,"${QP_ROOT}")), - 'function qp_append_export () {', - ' #Append path $2:${!1}. Add the semicolon only if ${!1} is defined', + 'function qp_prepend_export () {', + ' #Prepend path $2:${!1}. Add the semicolon only if ${!1} is defined', ' eval "value_1=\"\${$1}\""', - ' echo ${2}${value_1:+:${value_1}}', + ' echo ${value_1:+${value_1}:}${2}', '}', - 'export PYTHONPATH=$(qp_append_export "PYTHONPATH" "${QP_EZFIO}/Python":"${QP_PYTHON}")', - 'export PATH=$(qp_append_export "PATH" "${QP_PYTHON}":"${QP_ROOT}"/bin:"${QP_ROOT}"/ocaml)', - 'export LD_LIBRARY_PATH=$(qp_append_export "LD_LIBRARY_PATH" "${QP_ROOT}"/lib:"${QP_ROOT}"/lib64)', - 'export LIBRARY_PATH=$(qp_append_export "LIBRARY_PATH" "${QP_ROOT}"/lib:"${QP_ROOT}"/lib64)', - 'export C_INCLUDE_PATH=$(qp_append_export "C_INCLUDE_PATH" "${QP_ROOT}"/include)', + 'export PYTHONPATH=$(qp_prepend_export "PYTHONPATH" "${QP_EZFIO}/Python":"${QP_PYTHON}")', + 'export PATH=$(qp_prepend_export "PATH" "${QP_PYTHON}":"${QP_ROOT}"/bin:"${QP_ROOT}"/ocaml)', + 'export LD_LIBRARY_PATH=$(qp_prepend_export "LD_LIBRARY_PATH" "${QP_ROOT}"/lib:"${QP_ROOT}"/lib64)', + 'export LIBRARY_PATH=$(qp_prepend_export "LIBRARY_PATH" "${QP_ROOT}"/lib:"${QP_ROOT}"/lib64)', + 'export C_INCLUDE_PATH=$(qp_prepend_export "C_INCLUDE_PATH" "${QP_ROOT}"/include)', '', 'if [[ $SHELL == "bash" ]] ; then', ' source ${QP_ROOT}/install/EZFIO/Bash/ezfio.sh', diff --git a/install/scripts/install_ocaml.sh b/install/scripts/install_ocaml.sh index f322bd0b..9e8a2b25 100755 --- a/install/scripts/install_ocaml.sh +++ b/install/scripts/install_ocaml.sh @@ -5,11 +5,12 @@ QP_ROOT=$PWD cd - # Normal installation -PACKAGES="core.v0.9.1 cryptokit.1.10 ocamlfind sexplib.v0.9.1 ZMQ ppx_sexp_conv ppx_deriving" +PACKAGES="core.v0.10.0 cryptokit ocamlfind sexplib.v0.10.0 ZMQ ppx_sexp_conv ppx_deriving" # Needed for ZeroMQ export C_INCLUDE_PATH="${QP_ROOT}"/include:"${C_INCLUDE_PATH}" export LIBRARY_PATH="${QP_ROOT}"/lib:"${LIBRARY_PATH}" +export LDFLAGS="-L$QP_ROOT/lib" export LD_LIBRARY_PATH="${QP_ROOT}"/lib:"${LD_LIBRARY_PATH}" # return 0 if program version is equal or greater than check version @@ -64,7 +65,7 @@ fi cd Downloads || exit 1 chmod +x ocaml.sh || exit 1 -echo N | ./ocaml.sh ${QP_ROOT}/bin/ 4.04.2 || exit 1 +echo N | ./ocaml.sh ${QP_ROOT}/bin/ 4.06.0 || exit 1 ${QP_ROOT}/bin/opam config setup -a -q || exit 1 diff --git a/ocaml/TaskServer.ml b/ocaml/TaskServer.ml index 31d6ab3b..170e011a 100644 --- a/ocaml/TaskServer.ml +++ b/ocaml/TaskServer.ml @@ -1,6 +1,7 @@ open Core open Qptypes +module StringHashtbl = Hashtbl.Make(String) type pub_state = | Waiting @@ -28,7 +29,7 @@ type t = progress_bar : Progress_bar.t option ; running : bool; accepting_clients : bool; - data : (string, string) Hashtbl.t; + data : string StringHashtbl.t; } @@ -208,7 +209,7 @@ let end_job msg program_state rep_socket pair_socket = address_inproc = None; running = true; accepting_clients = false; - data = Hashtbl.create ~hashable:String.hashable (); + data = StringHashtbl.create (); } and wait n = @@ -592,7 +593,7 @@ let put_data msg rest_of_msg program_state rep_socket = in let success () = - Hashtbl.set program_state.data ~key ~data:value ; + StringHashtbl.set program_state.data ~key ~data:value ; Message.PutDataReply (Message.PutDataReply_msg.create ()) |> Message.to_string |> ZMQ.Socket.send rep_socket; @@ -622,7 +623,7 @@ let get_data msg program_state rep_socket = let success () = let value = - match Hashtbl.find program_state.data key with + match StringHashtbl.find program_state.data key with | Some value -> value | None -> "" in @@ -776,7 +777,7 @@ let run ~port = address_inproc = None; progress_bar = None ; accepting_clients = false; - data = Hashtbl.create ~hashable:String.hashable (); + data = StringHashtbl.create (); } in diff --git a/ocaml/qp_create_ezfio_from_xyz.ml b/ocaml/qp_create_ezfio_from_xyz.ml index 93c8c8ff..737052ee 100644 --- a/ocaml/qp_create_ezfio_from_xyz.ml +++ b/ocaml/qp_create_ezfio_from_xyz.ml @@ -665,7 +665,7 @@ let run ?o b au c d m p cart xyz_file = let command = - Command.basic + Command.basic_spec ~summary: "Quantum Package command" ~readme:(fun () -> " diff --git a/ocaml/qp_create_guess.ml b/ocaml/qp_create_guess.ml index b841c350..71a5b296 100644 --- a/ocaml/qp_create_guess.ml +++ b/ocaml/qp_create_guess.ml @@ -128,7 +128,7 @@ let spec = +> anon ("ezfio_file" %: string) let () = - Command.basic + Command.basic_spec ~summary: "Quantum Package command" ~readme:( fun () -> " Creates an open-shell multiplet initial guess\n\n" ) diff --git a/ocaml/qp_find_pi_space.ml b/ocaml/qp_find_pi_space.ml index 0f5f7365..dcd671ce 100644 --- a/ocaml/qp_find_pi_space.ml +++ b/ocaml/qp_find_pi_space.ml @@ -95,7 +95,7 @@ let spec = let command = - Command.basic + Command.basic_spec ~summary: "Quantum Package command" ~readme:(fun () -> "Find all the pi molecular orbitals to create a pi space. diff --git a/ocaml/qp_print.ml b/ocaml/qp_print.ml index ea52bd7f..efbdc01e 100644 --- a/ocaml/qp_print.ml +++ b/ocaml/qp_print.ml @@ -141,7 +141,7 @@ let run_o ~action ezfio_filename = ;; let command = - Command.basic + Command.basic_spec ~summary: "Quantum Package command" ~readme:(fun () -> " diff --git a/ocaml/qp_run.ml b/ocaml/qp_run.ml index f426932b..f3f0b14e 100644 --- a/ocaml/qp_run.ml +++ b/ocaml/qp_run.ml @@ -150,7 +150,7 @@ let spec = let () = - Command.basic + Command.basic_spec ~summary: "Quantum Package command" ~readme:( fun () -> " Executes a Quantum Package binary file among these:\n\n" diff --git a/ocaml/qp_set_mo_class.ml b/ocaml/qp_set_mo_class.ml index ef2cc977..e12a2d75 100644 --- a/ocaml/qp_set_mo_class.ml +++ b/ocaml/qp_set_mo_class.ml @@ -323,7 +323,7 @@ let spec = let command = - Command.basic + Command.basic_spec ~summary: "Quantum Package command" ~readme:(fun () -> "Set the orbital classes in an EZFIO directory diff --git a/scripts/ezfio_interface/qp_edit_template b/scripts/ezfio_interface/qp_edit_template index 55a35f83..2e2c26c6 100644 --- a/scripts/ezfio_interface/qp_edit_template +++ b/scripts/ezfio_interface/qp_edit_template @@ -256,7 +256,7 @@ let spec = let command = - Command.basic + Command.basic_spec ~summary: "Quantum Package command" ~readme:(fun () -> " diff --git a/scripts/ezfio_interface/upgrade_1.0_2.0.sh b/scripts/ezfio_interface/upgrade_1.0_2.0.sh deleted file mode 100755 index ec0ab770..00000000 --- a/scripts/ezfio_interface/upgrade_1.0_2.0.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash -# Convert a old ezfio file (with option.irp.f ezfio_default) -# into a new EZFIO.cfg type - -# Hartree Fock -# Changin the case, don't know if is needed or not -mv $1/Hartree_Fock $1/hartree_fock 2> /dev/null - -mv $1/hartree_Fock/thresh_SCF $1/hartree_fock/thresh_scf 2> /dev/null - -# BiInts -mv $1/bi_integrals $1/bielect_integrals 2> /dev/null - -if [ -f $1/bielect_integrals/read_ao_integrals ]; then - if [ `cat $1/bielect_integrals/read_ao_integrals` -eq "True" ] - then - echo "Read" > $1/bielect_integrals/disk_access_ao_integrals - - elif [ `cat bielect_integrals/write_ao_integrals` -eq "True" ] - then - echo "Write" > $1/bielect_integrals/disk_access_ao_integrals - - else - echo "None" > $1/bielect_integrals/disk_access_ao_integrals - - fi -fi \ No newline at end of file diff --git a/scripts/qp_upgrade_ocaml.sh b/scripts/qp_upgrade_ocaml.sh new file mode 100755 index 00000000..ad2156e9 --- /dev/null +++ b/scripts/qp_upgrade_ocaml.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +OCAML_VERSION="4.06.0" +PACKAGES="core.v0.10.0 cryptokit ocamlfind sexplib.v0.10.0 ZMQ ppx_sexp_conv ppx_deriving" + +if [[ -z ${QP_ROOT} ]] +then + print "The QP_ROOT environment variable is not set." + print "Please reload the quantum_package.rc file." + exit -1 +fi + +cd $QP_ROOT/ocaml +opam update +opam switch ${OCAML_VERSION} +eval `opam config env` +opam install -y ${PACKAGES} || echo "Upgrade failed. You can try running +configure ; $0" +