From 4888bfecc28c0b74a18351a08cce5618c5b54868 Mon Sep 17 00:00:00 2001 From: John Wiegley Date: Thu, 22 Dec 2016 10:34:56 -0800 Subject: coq_8_6: 8.6 is now default, 8.4 optional, updated mathcomp/ssreflect Addresses #14829 --- pkgs/applications/science/logic/coq/8.4.nix | 95 ++++++++++++++++++++++ pkgs/applications/science/logic/coq/default.nix | 95 ---------------------- pkgs/development/coq-modules/mathcomp/default.nix | 45 ++++++---- pkgs/development/coq-modules/mathcomp/generic.nix | 5 +- pkgs/development/coq-modules/ssreflect/default.nix | 14 ++++ pkgs/development/coq-modules/ssreflect/generic.nix | 5 +- pkgs/top-level/all-packages.nix | 73 +++++------------ 7 files changed, 165 insertions(+), 167 deletions(-) create mode 100644 pkgs/applications/science/logic/coq/8.4.nix delete mode 100644 pkgs/applications/science/logic/coq/default.nix diff --git a/pkgs/applications/science/logic/coq/8.4.nix b/pkgs/applications/science/logic/coq/8.4.nix new file mode 100644 index 000000000000..f162fe4a86ea --- /dev/null +++ b/pkgs/applications/science/logic/coq/8.4.nix @@ -0,0 +1,95 @@ +# - coqide compilation can be disabled by setting lablgtk to null; +# - The csdp program used for the Micromega tactic is statically referenced. +# However, coq can build without csdp by setting it to null. +# In this case some Micromega tactics will search the user's path for the csdp program and will fail if it is not found. + +{stdenv, fetchurl, pkgconfig, writeText, ocaml, findlib, camlp5, ncurses, lablgtk ? null, csdp ? null}: + +let + version = "8.4pl6"; + coq-version = "8.4"; + buildIde = lablgtk != null; + ideFlags = if buildIde then "-lablgtkdir ${lablgtk}/lib/ocaml/*/site-lib/lablgtk2 -coqide opt" else ""; + csdpPatch = if csdp != null then '' + substituteInPlace plugins/micromega/sos.ml --replace "; csdp" "; ${csdp}/bin/csdp" + substituteInPlace plugins/micromega/coq_micromega.ml --replace "System.is_in_system_path \"csdp\"" "true" + '' else ""; + +self = +stdenv.mkDerivation { + name = "coq-${version}"; + + inherit coq-version; + inherit ocaml camlp5; + + src = fetchurl { + url = "http://coq.inria.fr/distrib/V${version}/files/coq-${version}.tar.gz"; + sha256 = "1mpbj4yf36kpjg2v2sln12i8dzqn8rag6fd07hslj2lpm4qs4h55"; + }; + + buildInputs = [ pkgconfig ocaml findlib camlp5 ncurses lablgtk ]; + + patches = [ ./configure.patch ]; + + postPatch = '' + UNAME=$(type -tp uname) + RM=$(type -tp rm) + substituteInPlace configure --replace "/bin/uname" "$UNAME" + substituteInPlace tools/beautify-archive --replace "/bin/rm" "$RM" + ${csdpPatch} + ''; + + preConfigure = '' + configureFlagsArray=( + -opt + -camldir ${ocaml}/bin + -camlp5dir $(ocamlfind query camlp5) + ${ideFlags} + ) + ''; + + prefixKey = "-prefix "; + + buildFlags = "revision coq coqide"; + + setupHook = writeText "setupHook.sh" '' + addCoqPath () { + if test -d "''$1/lib/coq/${coq-version}/user-contrib"; then + export COQPATH="''${COQPATH}''${COQPATH:+:}''$1/lib/coq/${coq-version}/user-contrib/" + fi + } + + envHooks=(''${envHooks[@]} addCoqPath) + ''; + + passthru = { + emacsBufferSetup = pkgs: '' + ; Propagate coq paths to children + (inherit-local-permanent coq-prog-name "${self}/bin/coqtop") + (inherit-local-permanent coq-dependency-analyzer "${self}/bin/coqdep") + (inherit-local-permanent coq-compiler "${self}/bin/coqc") + ; If the coq-library path was already set, re-set it based on our current coq + (when (fboundp 'get-coq-library-directory) + (inherit-local-permanent coq-library-directory (get-coq-library-directory)) + (coq-prog-args)) + (mapc (lambda (arg) + (when (file-directory-p (concat arg "/lib/coq/${coq-version}/user-contrib")) + (setenv "COQPATH" (concat (getenv "COQPATH") ":" arg "/lib/coq/${coq-version}/user-contrib")))) '(${stdenv.lib.concatStringsSep " " (map (pkg: "\"${pkg}\"") pkgs)})) + ''; + }; + + meta = with stdenv.lib; { + description = "Formal proof management system"; + longDescription = '' + Coq is a formal proof management system. It provides a formal language + to write mathematical definitions, executable algorithms and theorems + together with an environment for semi-interactive development of + machine-checked proofs. + ''; + homepage = "http://coq.inria.fr"; + license = licenses.lgpl21; + branch = coq-version; + maintainers = with maintainers; [ roconnor thoughtpolice vbgl ]; + platforms = platforms.unix; + }; +}; in self diff --git a/pkgs/applications/science/logic/coq/default.nix b/pkgs/applications/science/logic/coq/default.nix deleted file mode 100644 index f162fe4a86ea..000000000000 --- a/pkgs/applications/science/logic/coq/default.nix +++ /dev/null @@ -1,95 +0,0 @@ -# - coqide compilation can be disabled by setting lablgtk to null; -# - The csdp program used for the Micromega tactic is statically referenced. -# However, coq can build without csdp by setting it to null. -# In this case some Micromega tactics will search the user's path for the csdp program and will fail if it is not found. - -{stdenv, fetchurl, pkgconfig, writeText, ocaml, findlib, camlp5, ncurses, lablgtk ? null, csdp ? null}: - -let - version = "8.4pl6"; - coq-version = "8.4"; - buildIde = lablgtk != null; - ideFlags = if buildIde then "-lablgtkdir ${lablgtk}/lib/ocaml/*/site-lib/lablgtk2 -coqide opt" else ""; - csdpPatch = if csdp != null then '' - substituteInPlace plugins/micromega/sos.ml --replace "; csdp" "; ${csdp}/bin/csdp" - substituteInPlace plugins/micromega/coq_micromega.ml --replace "System.is_in_system_path \"csdp\"" "true" - '' else ""; - -self = -stdenv.mkDerivation { - name = "coq-${version}"; - - inherit coq-version; - inherit ocaml camlp5; - - src = fetchurl { - url = "http://coq.inria.fr/distrib/V${version}/files/coq-${version}.tar.gz"; - sha256 = "1mpbj4yf36kpjg2v2sln12i8dzqn8rag6fd07hslj2lpm4qs4h55"; - }; - - buildInputs = [ pkgconfig ocaml findlib camlp5 ncurses lablgtk ]; - - patches = [ ./configure.patch ]; - - postPatch = '' - UNAME=$(type -tp uname) - RM=$(type -tp rm) - substituteInPlace configure --replace "/bin/uname" "$UNAME" - substituteInPlace tools/beautify-archive --replace "/bin/rm" "$RM" - ${csdpPatch} - ''; - - preConfigure = '' - configureFlagsArray=( - -opt - -camldir ${ocaml}/bin - -camlp5dir $(ocamlfind query camlp5) - ${ideFlags} - ) - ''; - - prefixKey = "-prefix "; - - buildFlags = "revision coq coqide"; - - setupHook = writeText "setupHook.sh" '' - addCoqPath () { - if test -d "''$1/lib/coq/${coq-version}/user-contrib"; then - export COQPATH="''${COQPATH}''${COQPATH:+:}''$1/lib/coq/${coq-version}/user-contrib/" - fi - } - - envHooks=(''${envHooks[@]} addCoqPath) - ''; - - passthru = { - emacsBufferSetup = pkgs: '' - ; Propagate coq paths to children - (inherit-local-permanent coq-prog-name "${self}/bin/coqtop") - (inherit-local-permanent coq-dependency-analyzer "${self}/bin/coqdep") - (inherit-local-permanent coq-compiler "${self}/bin/coqc") - ; If the coq-library path was already set, re-set it based on our current coq - (when (fboundp 'get-coq-library-directory) - (inherit-local-permanent coq-library-directory (get-coq-library-directory)) - (coq-prog-args)) - (mapc (lambda (arg) - (when (file-directory-p (concat arg "/lib/coq/${coq-version}/user-contrib")) - (setenv "COQPATH" (concat (getenv "COQPATH") ":" arg "/lib/coq/${coq-version}/user-contrib")))) '(${stdenv.lib.concatStringsSep " " (map (pkg: "\"${pkg}\"") pkgs)})) - ''; - }; - - meta = with stdenv.lib; { - description = "Formal proof management system"; - longDescription = '' - Coq is a formal proof management system. It provides a formal language - to write mathematical definitions, executable algorithms and theorems - together with an environment for semi-interactive development of - machine-checked proofs. - ''; - homepage = "http://coq.inria.fr"; - license = licenses.lgpl21; - branch = coq-version; - maintainers = with maintainers; [ roconnor thoughtpolice vbgl ]; - platforms = platforms.unix; - }; -}; in self diff --git a/pkgs/development/coq-modules/mathcomp/default.nix b/pkgs/development/coq-modules/mathcomp/default.nix index 189b12206400..81cfdecdfffb 100644 --- a/pkgs/development/coq-modules/mathcomp/default.nix +++ b/pkgs/development/coq-modules/mathcomp/default.nix @@ -1,24 +1,39 @@ -{ callPackage, coq, fetchurl }: +{ callPackage, fetchurl, coq }: -let src = - if coq.coq-version == "8.4" then +if coq.coq-version == "8.4" then - fetchurl { - url = http://ssr.msr-inria.inria.fr/FTP/mathcomp-1.6.tar.gz; - sha256 = "0adr556032r1jkvphbpfvrrv041qk0yqb7a1xnbam52ji0mdl2w8"; - } +callPackage ./generic.nix { + + name = "coq-mathcomp-1.6-${coq.coq-version}"; + src = fetchurl { + url = http://ssr.msr-inria.inria.fr/FTP/mathcomp-1.6.tar.gz; + sha256 = "0adr556032r1jkvphbpfvrrv041qk0yqb7a1xnbam52ji0mdl2w8"; + }; + +} + +else if coq.coq-version == "8.5" then - else if coq.coq-version == "8.5" then +callPackage ./generic.nix { - fetchurl { - url = http://ssr.msr-inria.inria.fr/FTP/mathcomp-1.6.tar.gz; - sha256 = "0adr556032r1jkvphbpfvrrv041qk0yqb7a1xnbam52ji0mdl2w8"; - } + name = "coq-mathcomp-1.6-${coq.coq-version}"; + src = fetchurl { + url = http://ssr.msr-inria.inria.fr/FTP/mathcomp-1.6.tar.gz; + sha256 = "0adr556032r1jkvphbpfvrrv041qk0yqb7a1xnbam52ji0mdl2w8"; + }; - else throw "No mathcomp package for Coq version ${coq.coq-version}"; +} -in +else if coq.coq-version == "8.6" then callPackage ./generic.nix { - inherit src; + + name = "coq-mathcomp-1.6.1-${coq.coq-version}"; + src = fetchurl { + url = https://github.com/math-comp/math-comp/archive/mathcomp-1.6.1.tar.gz; + sha256 = "1j9ylggjzrxz1i2hdl2yhsvmvy5z6l4rprwx7604401080p5sgjw"; + }; + } + +else throw "No ssreflect package for Coq version ${coq.coq-version}" diff --git a/pkgs/development/coq-modules/mathcomp/generic.nix b/pkgs/development/coq-modules/mathcomp/generic.nix index b257c81e85f8..9a6a98609d29 100644 --- a/pkgs/development/coq-modules/mathcomp/generic.nix +++ b/pkgs/development/coq-modules/mathcomp/generic.nix @@ -1,12 +1,11 @@ { stdenv, fetchurl, coq, ssreflect, ncurses, which , graphviz, ocamlPackages, withDoc ? false -, src +, src, name }: stdenv.mkDerivation { - name = "coq-mathcomp-1.6-${coq.coq-version}"; - + inherit name; inherit src; nativeBuildInputs = stdenv.lib.optionals withDoc [ graphviz ]; diff --git a/pkgs/development/coq-modules/ssreflect/default.nix b/pkgs/development/coq-modules/ssreflect/default.nix index 8ba49d06bae9..16147c4dc2ae 100644 --- a/pkgs/development/coq-modules/ssreflect/default.nix +++ b/pkgs/development/coq-modules/ssreflect/default.nix @@ -4,6 +4,7 @@ if coq.coq-version == "8.4" then callPackage ./generic.nix { + name = "coq-ssreflect-1.6-${coq.coq-version}"; src = fetchurl { url = http://ssr.msr-inria.inria.fr/FTP/mathcomp-1.6.tar.gz; sha256 = "0adr556032r1jkvphbpfvrrv041qk0yqb7a1xnbam52ji0mdl2w8"; @@ -15,6 +16,7 @@ else if coq.coq-version == "8.5" then callPackage ./generic.nix { + name = "coq-ssreflect-1.6-${coq.coq-version}"; src = fetchurl { url = http://ssr.msr-inria.inria.fr/FTP/mathcomp-1.6.tar.gz; sha256 = "0adr556032r1jkvphbpfvrrv041qk0yqb7a1xnbam52ji0mdl2w8"; @@ -22,4 +24,16 @@ callPackage ./generic.nix { } +else if coq.coq-version == "8.6" then + +callPackage ./generic.nix { + + name = "coq-ssreflect-1.6.1-${coq.coq-version}"; + src = fetchurl { + url = https://github.com/math-comp/math-comp/archive/mathcomp-1.6.1.tar.gz; + sha256 = "1j9ylggjzrxz1i2hdl2yhsvmvy5z6l4rprwx7604401080p5sgjw"; + }; + +} + else throw "No ssreflect package for Coq version ${coq.coq-version}" diff --git a/pkgs/development/coq-modules/ssreflect/generic.nix b/pkgs/development/coq-modules/ssreflect/generic.nix index 891a4e2885a6..3362e8839a75 100644 --- a/pkgs/development/coq-modules/ssreflect/generic.nix +++ b/pkgs/development/coq-modules/ssreflect/generic.nix @@ -1,12 +1,11 @@ { stdenv, fetchurl, coq, ncurses, which , graphviz, withDoc ? false -, src, patches ? [] +, src, name, patches ? [] }: stdenv.mkDerivation { - name = "coq-ssreflect-1.6-${coq.coq-version}"; - + inherit name; inherit src; nativeBuildInputs = stdenv.lib.optionals withDoc [ graphviz ]; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 82c131b901a0..6e5b498f70a3 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6603,7 +6603,9 @@ in valkyrie = callPackage ../development/tools/analysis/valkyrie { }; - inherit (ocaml-ng.ocamlPackages_4_02) verasco; + verasco = ocaml-ng.ocamlPackages_4_02.verasco.override { + coq = coq_8_4; + }; visualvm = callPackage ../development/tools/java/visualvm { }; @@ -16716,38 +16718,34 @@ in aspino = callPackage ../applications/science/logic/aspino {}; - coq = callPackage ../applications/science/logic/coq { + coq_8_3 = callPackage ../applications/science/logic/coq/8.3.nix { + make = pkgs.gnumake3; + inherit (ocamlPackages_3_12_1) ocaml findlib; + camlp5 = ocamlPackages_3_12_1.camlp5_transitional; + lablgtk = ocamlPackages_3_12_1.lablgtk_2_14; + }; + coq_8_4 = callPackage ../applications/science/logic/coq/8.4.nix { inherit (ocamlPackages_4_01_0) ocaml findlib lablgtk; camlp5 = ocamlPackages_4_01_0.camlp5_transitional; }; - - coq_HEAD = callPackage ../applications/science/logic/coq/HEAD.nix { + coq_8_5 = callPackage ../applications/science/logic/coq/8.5.nix { inherit (ocamlPackages) ocaml findlib lablgtk; camlp5 = ocamlPackages.camlp5_transitional; }; - coq_8_6 = callPackage ../applications/science/logic/coq/8.6.nix { inherit (ocamlPackages) ocaml findlib lablgtk; camlp5 = ocamlPackages.camlp5_transitional; }; - - coq_8_5 = callPackage ../applications/science/logic/coq/8.5.nix { + coq_HEAD = callPackage ../applications/science/logic/coq/HEAD.nix { inherit (ocamlPackages) ocaml findlib lablgtk; camlp5 = ocamlPackages.camlp5_transitional; }; - - coq_8_3 = callPackage ../applications/science/logic/coq/8.3.nix { - make = pkgs.gnumake3; - inherit (ocamlPackages_3_12_1) ocaml findlib; - camlp5 = ocamlPackages_3_12_1.camlp5_transitional; - lablgtk = ocamlPackages_3_12_1.lablgtk_2_14; - }; + coq = coq_8_6; mkCoqPackages_8_4 = self: let callPackage = newScope self; in { - inherit callPackage; - - bedrock = callPackage ../development/coq-modules/bedrock {}; + coq = coq_8_4; + coqPackages = coqPackages_8_4; contribs = let contribs = @@ -16757,86 +16755,59 @@ in in recurseIntoAttrs contribs; + bedrock = callPackage ../development/coq-modules/bedrock {}; coqExtLib = callPackage ../development/coq-modules/coq-ext-lib {}; - coqeal = callPackage ../development/coq-modules/coqeal {}; - coquelicot = callPackage ../development/coq-modules/coquelicot {}; - domains = callPackage ../development/coq-modules/domains {}; - fiat = callPackage ../development/coq-modules/fiat {}; fiat_HEAD = callPackage ../development/coq-modules/fiat/HEAD.nix {}; - flocq = callPackage ../development/coq-modules/flocq {}; - heq = callPackage ../development/coq-modules/heq {}; - interval = callPackage ../development/coq-modules/interval {}; - mathcomp = callPackage ../development/coq-modules/mathcomp {}; - paco = callPackage ../development/coq-modules/paco {}; - QuickChick = callPackage ../development/coq-modules/QuickChick {}; - ssreflect = callPackage ../development/coq-modules/ssreflect {}; - tlc = callPackage ../development/coq-modules/tlc {}; - unimath = callPackage ../development/coq-modules/unimath {}; - ynot = callPackage ../development/coq-modules/ynot {}; - }; mkCoqPackages_8_5 = self: let callPackage = newScope self; in rec { - inherit callPackage; - coq = coq_8_5; + coqPackages = coqPackages_8_5; coq-ext-lib = callPackage ../development/coq-modules/coq-ext-lib {}; - coquelicot = callPackage ../development/coq-modules/coquelicot {}; - dpdgraph = callPackage ../development/coq-modules/dpdgraph {}; - flocq = callPackage ../development/coq-modules/flocq {}; - interval = callPackage ../development/coq-modules/interval {}; - mathcomp = callPackage ../development/coq-modules/mathcomp { }; - ssreflect = callPackage ../development/coq-modules/ssreflect { }; - fiat_HEAD = callPackage ../development/coq-modules/fiat/HEAD.nix {}; - }; mkCoqPackages_8_6 = self: let callPackage = newScope self; in rec { - inherit callPackage; - coq = coq_8_6; + coqPackages = coqPackages_8_6; coq-ext-lib = callPackage ../development/coq-modules/coq-ext-lib {}; - coquelicot = callPackage ../development/coq-modules/coquelicot {}; - dpdgraph = callPackage ../development/coq-modules/dpdgraph {}; - flocq = callPackage ../development/coq-modules/flocq {}; - interval = callPackage ../development/coq-modules/interval {}; - + mathcomp = callPackage ../development/coq-modules/mathcomp { }; + ssreflect = callPackage ../development/coq-modules/ssreflect { }; fiat_HEAD = callPackage ../development/coq-modules/fiat/HEAD.nix {}; - }; - coqPackages = mkCoqPackages_8_4 coqPackages; + coqPackages_8_4 = mkCoqPackages_8_4 coqPackages_8_4; coqPackages_8_5 = mkCoqPackages_8_5 coqPackages_8_5; coqPackages_8_6 = mkCoqPackages_8_6 coqPackages_8_6; + coqPackages = coqPackages_8_6; cryptoverif = callPackage ../applications/science/logic/cryptoverif { }; -- cgit 1.4.1