X-Git-Url: http://git.hcoop.net/bpt/coccinelle.git/blobdiff_plain/d6ce1786f27a05efa53cabeca92fc8e744a4b239..HEAD:/release.nix diff --git a/release.nix b/release.nix index 9c9bb41..1e39b52 100644 --- a/release.nix +++ b/release.nix @@ -1,6 +1,6 @@ # Hydra build file for coccinelle -{ nixpkgs ? /etc/nixos/nixpkgs +{ nixpkgs ? "/etc/nixos/nixpkgs" , cocciSrc ? { outPath = ./.; revCount = 1234; gitTag = "abcdef"; } , testsSrc ? { outPath = ../big-tests; rev = 1234; } , officialRelease ? false @@ -47,7 +47,7 @@ let postDist = '' export HOME=$PREVHOME # restore the home directory - ensureDir "$out/tarballs" + mkdir -p "$out/tarballs" # rename the tarball to give it a version-specific name cp coccinelle-*.tar.gz "$out/tarballs/coccinelle-${version}${versionSuffix}.tar.gz" @@ -60,12 +60,13 @@ let # selOcamlDefault = orig: orig.ocamlPackages; + selOcaml400 = orig: orig.ocamlPackages_4_00_0; selOcaml312 = orig: orig.ocamlPackages_3_12_1; selOcaml311 = orig: orig.ocamlPackages_3_11_2; selOcaml310 = orig: orig.ocamlPackages_3_10_0; selCommonOcamlPkgs = ocamlPackages: with ocamlPackages; [ - findlib menhir ocaml_sexplib ocaml_extlib + findlib menhir ocaml_sexplib ]; selMinimalOcamlPkgs = ocamlPackages: with ocamlPackages; [ @@ -73,7 +74,7 @@ let ]; selAllOcamlPkgs = ocamlPackages: with ocamlPackages; [ - findlib menhir ocaml_sexplib ocaml_extlib ocaml_pcre pycaml + findlib menhir ocaml_sexplib ocaml_pcre pycaml ]; selCommonInputs = pkgs: [ pkgs.pkgconfig pkgs.pcre ]; @@ -93,6 +94,7 @@ let selOcaml = selOcamlDefault; extras = selCommonInputs pkgs; shell = selDefaultShell pkgs; + extraAttrs = { }; }; # creates a configuration for a given ocaml version @@ -104,16 +106,18 @@ let ocamls = selMinimalOcamlPkgs pkgs.ocamlPackages; extras = selCommonInputs pkgs; shell = selDefaultShell pkgs; + extraAttrs = { }; }; # creates a default configuration with additional flags - mkCfgDefault = { name, flags }: pkgs: { + mkCfgDefault = { name, flags, extra ? {} }: pkgs: { inherit name flags; pythons = selPythonDefault pkgs; ocamls = selAllOcamlPkgs pkgs.ocamlPackages; selOcaml = selOcamlDefault; extras = selCommonInputs pkgs; shell = selDefaultShell pkgs; + extraAttrs = extra; }; # creates a minimal configuration with additional flags @@ -124,6 +128,7 @@ let selOcaml = selOcamlDefault; extras = []; shell = selDefaultShell pkgs; + extraAttrs = { }; }; # creates a configuration for the given ocaml packages @@ -134,6 +139,7 @@ let selOcaml = selOcamlDefault; extras = selCommonInputs pkgs; shell = selDefaultShell pkgs; + extraAttrs = { }; }; # build the project using the given shell @@ -147,6 +153,7 @@ let flags = []; extras = [ pkgs.pcre ]; shell = selShell pkgs; + extraAttrs = { }; }; # creates a configuration with multiple ocaml versions: this gives @@ -165,6 +172,7 @@ let flags = []; extras = selCommonInputs pkgs ++ map (selOcaml pkgs) sels; shell = selDefaultShell pkgs; + extraAttrs = { }; }; @@ -175,7 +183,7 @@ let defaultCfg = mkCfgDefault { name = "default"; flags = []; }; debugCfg = mkCfgDefault { name = "debug"; flags = [ "--enable-release=no" ]; }; wrappersCfg = mkCfgDefault { name = "wrappers"; flags = [ "--enable-python" "--enable-ocaml" "--without-pkg-config" "--without-ocamlfind" ]; }; - manyOcamlCfg = mkCfgManyOcaml [ selOcaml312 selOcaml311 selOcaml310 ]; + manyOcamlCfg = mkCfgManyOcaml [ selOcaml400 selOcaml312 selOcaml311 selOcaml310 ]; minimalCfgs = map mkCfgMinimal [ { name = "minimal"; flags = []; } @@ -225,6 +233,8 @@ let # These versions ship with minimal global packages in order # to thest the bundled packages with these ocaml versions. ocamlCfgs = map mkCfgOcaml [ + { name = "400nat"; selOcaml = selOcaml400; flags = [ "--enable-release=yes" ]; } + { name = "400byt"; selOcaml = selOcaml400; flags = []; } { name = "312"; selOcaml = selOcaml312; flags = []; } { name = "311"; selOcaml = selOcaml311; flags = [ "--enable-release=yes" ]; } { name = "310"; selOcaml = selOcaml310; flags = []; } @@ -233,12 +243,12 @@ let # Several configurations testing different available # ocaml packages. pkgCfgs = map mkCfgPackage [ - { name = "extlib"; ocamls = ps: [ ps.ocaml_extlib ]; flags = [ "--enable-extlib" ]; } { name = "pcre"; ocamls = ps: [ ps.ocaml_pcre ]; flags = [ "--enable-pcre-syntax" ]; } { name = "sexplib"; ocamls = ps: [ ps.ocaml_sexplib ]; flags = [ "--enable-sexplib" ]; } { name = "pycaml"; ocamls = ps: [ ps.pycaml ]; flags = [ "--enable-pycaml" ]; } ]; + # Tests using several different types of shells. shellCfgs = map mkCfgShell [ { name = "bash"; selShell = pkgs: "${pkgs.bash}/bin/bash"; } { name = "dash"; selShell = pkgs: "${pkgs.dash}/bin/dash"; } @@ -248,11 +258,39 @@ let # { name = "tcsh"; selShell = pkgs: "${pkgs.tcsh}/bin/tcsh"; } ]; + # + # Configurations for the compilation of coccinelle using ocamlbuild. + # + + ocamlbuildZeroCfg = mkCfgMinimal { + name = "ocamlbuild-zero"; + flags = [ "--enable-ocamlbuild" "--enable-release" ]; + }; + + ocamlbuildFullCfg = mkCfgDefault { + name = "ocamlbuild-full"; + flags = [ "--enable-ocamlbuild" "--enable-release" ]; + }; + + ocamlbuildCfgs = map mkCfgOcaml [ + { name = "ocamlbuild-400nat"; selOcaml = selOcaml400; + flags = [ "--enable-ocamlbuild" "--enable-release=yes" ]; } + { name = "ocamlbuild-400byte"; selOcaml = selOcaml400; + flags = [ "--enable-ocamlbuild" ]; } + { name = "ocamlbuild-312"; selOcaml = selOcaml312; + flags = [ "--enable-ocamlbuild" "--enable-release" ]; } + { name = "ocamlbuild-311"; selOcaml = selOcaml311; + flags = [ "--enable-ocamlbuild" ]; } + { name = "ocamlbuild-310"; selOcaml = selOcaml310; + flags = [ "--enable-ocamlbuild" "--enable-release" ]; } + ] ++ [ ocamlbuildZeroCfg ocamlbuildFullCfg ]; + altCfgs = [ debugCfg manyOcamlCfg ] ++ minimalCfgs ++ ocamlCfgs ++ pythonCfgs - ++ pkgCfgs ++ shellCfgs; + ++ pkgCfgs ++ shellCfgs + ++ ocamlbuildCfgs; # @@ -277,7 +315,7 @@ let }; cfg = mkConfiguration pkgs; flags = [ "--enable-release=world" ] ++ cfg.flags; - in with pkgs; releaseTools.nixBuild { + in with pkgs; releaseTools.nixBuild ({ inherit (cfg) shell; name = "cocci-build-${cfg.name}"; src = tarball; @@ -302,12 +340,27 @@ let substituteInPlace $script --replace '#! /bin/sh' '#! ${cfg.shell}' done ''; - }; + } // cfg.extraAttrs); build = mkBuild defaultCfg; altBuilds = map mkBuild altCfgs; allBuilds = [ build ] ++ altBuilds; + # compile with ocaml profiling turned on and then running the + # test suite to collect results. + profileCfg = mkCfgDefault { + name = "profiling"; + flags = [ "--enable-release=profile" ]; + extra = { + installPhase = '' + mkdir -p "$out/nix-support" + cp ocamlprof.dump "$out/ocamlprof.dump" + echo "file binary $out/ocamlprof.dump" >> "$out/nix-support/hydra-build-products" + ''; + }; + }; + profile = mkBuild profileCfg {}; + # # Package builders @@ -355,8 +408,8 @@ let phases = [ "runPhase" ]; runPhase = '' - ensureDir "$out" - ensureDir "$out/nix-support" + mkdir -p "$out" + mkdir -p "$out/nix-support" touch "$TMPDIR/result.log" exec > >(tee -a "$TMPDIR/result.log") 2> >(tee -a "$TMPDIR/result.log" >&2) runHook execPhase @@ -421,7 +474,7 @@ let # as this directory contains large # files, we'll create links to the # individual files. - ensureDir "$TMPDIR/tests" + mkdir -p "$TMPDIR/tests" cp -rs ${testsSrc}/* "$TMPDIR/tests/" chmod -R u+w "$TMPDIR/tests/" cd "$TMPDIR/tests" @@ -467,7 +520,7 @@ let # as this directory contains large # files, we'll create links to the # individual files. - ensureDir "$TMPDIR/tests" + mkdir -p "$TMPDIR/tests" cp -rs ${testsSrc}/* "$TMPDIR/tests/" chmod -R u+w "$TMPDIR/tests/" @@ -509,7 +562,7 @@ let ocaml findlib menhir python pcre patchelf ]; - configureFlagsArray = [ "--enable-release" ]; + configureFlags = "--enable-release"; buildPhase = '' export TARGETDIR="$TMPDIR/dists" @@ -542,6 +595,7 @@ let inherit build; inherit report; inherit dist; + inherit profile; }; # artificial dependency on report to ensure that we are not going through