summary refs log tree commit diff
path: root/pkgs/build-support
diff options
context:
space:
mode:
authorFrederik Rietdijk <fridh@fridh.nl>2018-10-09 15:37:52 +0200
committerFrederik Rietdijk <fridh@fridh.nl>2018-10-09 15:37:52 +0200
commitbc9bd012c4ba75df94a688b281369a1b433d1264 (patch)
tree0a82c80048903831bd0d8b5d12ce25d555e346ae /pkgs/build-support
parentf1987fb58f57828944ca822bbb39b3de87f01863 (diff)
parenteeaf3a131fbe8611d59592ae2e215131b23c70e5 (diff)
downloadnixlib-bc9bd012c4ba75df94a688b281369a1b433d1264.tar
nixlib-bc9bd012c4ba75df94a688b281369a1b433d1264.tar.gz
nixlib-bc9bd012c4ba75df94a688b281369a1b433d1264.tar.bz2
nixlib-bc9bd012c4ba75df94a688b281369a1b433d1264.tar.lz
nixlib-bc9bd012c4ba75df94a688b281369a1b433d1264.tar.xz
nixlib-bc9bd012c4ba75df94a688b281369a1b433d1264.tar.zst
nixlib-bc9bd012c4ba75df94a688b281369a1b433d1264.zip
Merge staging-next into staging
Diffstat (limited to 'pkgs/build-support')
-rw-r--r--pkgs/build-support/build-bazel-package/default.nix23
-rw-r--r--pkgs/build-support/trivial-builders.nix155
-rw-r--r--pkgs/build-support/vm/default.nix4
3 files changed, 163 insertions, 19 deletions
diff --git a/pkgs/build-support/build-bazel-package/default.nix b/pkgs/build-support/build-bazel-package/default.nix
index 07d37451ddf9..28247bac1021 100644
--- a/pkgs/build-support/build-bazel-package/default.nix
+++ b/pkgs/build-support/build-bazel-package/default.nix
@@ -25,7 +25,13 @@ in stdenv.mkDerivation (fBuildAttrs // {
     buildPhase = fFetchAttrs.buildPhase or ''
       runHook preBuild
 
-      bazel --output_base="$bazelOut" --output_user_root="$bazelUserRoot" fetch $bazelFlags $bazelTarget
+      # Bazel computes the default value of output_user_root before parsing the
+      # flag. The computation of the default value involves getting the $USER
+      # from the environment. I don't have that variable when building with
+      # sandbox enabled. Code here
+      # https://github.com/bazelbuild/bazel/blob/9323c57607d37f9c949b60e293b573584906da46/src/main/cpp/startup_options.cc#L123-L124
+      #
+      USER=homeless-shelter bazel --output_base="$bazelOut" --output_user_root="$bazelUserRoot" fetch $bazelFlags $bazelTarget
 
       runHook postBuild
     '';
@@ -33,10 +39,19 @@ in stdenv.mkDerivation (fBuildAttrs // {
     installPhase = fFetchAttrs.installPhase or ''
       runHook preInstall
 
+      # Remove all built in external workspaces, Bazel will recreate them when building
+      rm -rf $bazelOut/external/{bazel_tools,\@bazel_tools.marker}
+      rm -rf $bazelOut/external/{embedded_jdk,\@embedded_jdk.marker}
+      rm -rf $bazelOut/external/{local_*,\@local_*}
+
       # Patching markers to make them deterministic
-      for i in $bazelOut/external/\@*.marker; do
-        sed -i 's, -\?[0-9][0-9]*$, 1,' "$i"
-      done
+      sed -i 's, -\?[0-9][0-9]*$, 1,' $bazelOut/external/\@*.marker
+
+      # Remove all vcs files
+      rm -rf $(find $bazelOut/external -type d -name .git)
+      rm -rf $(find $bazelOut/external -type d -name .svn)
+      rm -rf $(find $bazelOut/external -type d -name .hg)
+
       # Patching symlinks to remove build directory reference
       find $bazelOut/external -type l | while read symlink; do
         ln -sf $(readlink "$symlink" | sed "s,$NIX_BUILD_TOP,NIX_BUILD_TOP,") "$symlink"
diff --git a/pkgs/build-support/trivial-builders.nix b/pkgs/build-support/trivial-builders.nix
index d2acc2679afa..7543433640a3 100644
--- a/pkgs/build-support/trivial-builders.nix
+++ b/pkgs/build-support/trivial-builders.nix
@@ -12,15 +12,40 @@ in
 
 rec {
 
-  # Run the shell command `buildCommand' to produce a store path named
-  # `name'.  The attributes in `env' are added to the environment
-  # prior to running the command.
+  /* Run the shell command `buildCommand' to produce a store path named
+  * `name'.  The attributes in `env' are added to the environment
+  * prior to running the command. By default `runCommand' runs using
+  * stdenv with no compiler environment. `runCommandCC` 
+  *
+  * Examples:
+  * runCommand "name" {envVariable = true;} ''echo hello''
+  * runCommandNoCC "name" {envVariable = true;} ''echo hello'' # equivalent to prior
+  * runCommandCC "name" {} ''gcc -o myfile myfile.c; cp myfile $out''; 
+  */
   runCommand = runCommandNoCC;
   runCommandNoCC = runCommand' stdenvNoCC;
   runCommandCC = runCommand' stdenv;
 
 
-  # Create a single file.
+  /* Writes a text file to the nix store.
+   * The contents of text is added to the file in the store.
+   *
+   * Examples:
+   * # Writes my-file to /nix/store/<store path>
+   * writeTextFile "my-file"
+   *   ''
+   *   Contents of File
+   *   '';
+   *
+   * # Writes executable my-file to /nix/store/<store path>/bin/my-file
+   * writeTextFile "my-file"
+   *   ''
+   *   Contents of File
+   *   ''
+   *   true
+   *   "/bin/my-file";
+   *   true
+   */
   writeTextFile =
     { name # the name of the derivation
     , text
@@ -51,13 +76,69 @@ rec {
       '';
 
 
-  # Shorthands for `writeTextFile'.
+  /*
+   * Writes a text file to nix store with no optional parameters available.
+   *
+   * Example:
+   * # Writes contents of file to /nix/store/<store path>
+   * writeText "my-file"
+   *   ''
+   *   Contents of File
+   *   '';
+   *
+  */
   writeText = name: text: writeTextFile {inherit name text;};
+  /*
+   * Writes a text file to nix store in a specific directory with no
+   * optional parameters available. Name passed is the destination.
+   *
+   * Example:
+   * # Writes contents of file to /nix/store/<store path>/<name>
+   * writeTextDir "share/my-file"
+   *   ''
+   *   Contents of File
+   *   '';
+   *
+  */
   writeTextDir = name: text: writeTextFile {inherit name text; destination = "/${name}";};
+  /*
+   * Writes a text file to /nix/store/<store path> and marks the file as executable.
+   *
+   * Example:
+   * # Writes my-file to /nix/store/<store path>/bin/my-file and makes executable
+   * writeScript "my-file"
+   *   ''
+   *   Contents of File
+   *   '';
+   *
+  */
   writeScript = name: text: writeTextFile {inherit name text; executable = true;};
+  /*
+   * Writes a text file to /nix/store/<store path>/bin/<name> and
+   * marks the file as executable.
+   *
+   * Example:
+   * # Writes my-file to /nix/store/<store path>/bin/my-file and makes executable.
+   * writeScript "my-file"
+   *   ''
+   *   Contents of File
+   *   '';
+   *
+  */
   writeScriptBin = name: text: writeTextFile {inherit name text; executable = true; destination = "/bin/${name}";};
 
-  # Create a Shell script, check its syntax
+  /*
+   * Writes a Shell script and check its syntax. Automatically includes interpreter
+   * above the contents passed.
+   *
+   * Example:
+   * # Writes my-file to /nix/store/<store path>/bin/my-file and makes executable.
+   * writeScript "my-file"
+   *   ''
+   *   Contents of File
+   *   '';
+   *
+  */
   writeShellScriptBin = name : text :
     writeTextFile {
       inherit name;
@@ -90,7 +171,18 @@ rec {
     $CC -x c code.c -o "$n"
     '';
 
-  # Create a forest of symlinks to the files in `paths'.
+  /*
+  * Create a forest of symlinks to the files in `paths'.
+  *
+  * Examples:
+  * # adds symlinks of hello to current build.
+  * { symlinkJoin, hello }:
+  * symlinkJoin { name = "myhello"; paths = [ hello ]; }
+  *
+  * # adds symlinks of hello to current build and prints "links added"
+  * { symlinkJoin, hello }:
+  * symlinkJoin { name = "myhello"; paths = [ hello ]; postBuild = "echo links added"; }
+  */
   symlinkJoin =
     args_@{ name
          , paths
@@ -112,7 +204,23 @@ rec {
       '';
 
 
-  # Make a package that just contains a setup hook with the given contents.
+  /*
+   * Make a package that just contains a setup hook with the given contents.
+   * This setup hook will be invoked by any package that includes this package
+   * as a buildInput. Optionally takes a list of substitutions that should be
+   * applied to the resulting script.
+   *
+   * Examples:
+   * # setup hook that depends on the hello package and runs ./myscript.sh
+   * myhellohook = makeSetupHook { deps = [ hello ]; } ./myscript.sh;
+   *
+   * # wrotes a setup hook where @bash@ myscript.sh is substituted for the
+   * # bash interpreter. 
+   * myhellohookSub = makeSetupHook {
+   *                 deps = [ hello ];
+   *                 substitutions = { bash = "${pkgs.bash}/bin/bash"; };
+   *               } ./myscript.sh;
+   */
   makeSetupHook = { name ? "hook", deps ? [], substitutions ? {} }: script:
     runCommand name substitutions
       (''
@@ -126,6 +234,7 @@ rec {
 
 
   # Write the references (i.e. the runtime dependencies in the Nix store) of `path' to a file.
+
   writeReferencesToFile = path: runCommand "runtime-deps"
     {
       exportReferencesGraph = ["graph" path];
@@ -141,8 +250,17 @@ rec {
     '';
 
 
-  # Quickly create a set of symlinks to derivations.
-  # entries is a list of attribute sets like { name = "name" ; path = "/nix/store/..."; }
+  /*
+   * Quickly create a set of symlinks to derivations.
+   * entries is a list of attribute sets like
+   * { name = "name" ; path = "/nix/store/..."; }
+   *
+   * Example:
+   *
+   * # Symlinks hello path in store to current $out/hello
+   * linkFarm "hello" entries = [ { name = "hello"; path = pkgs.hello; } ];
+   *
+   */
   linkFarm = name: entries: runCommand name { preferLocalBuild = true; }
     ("mkdir -p $out; cd $out; \n" +
       (lib.concatMapStrings (x: ''
@@ -151,9 +269,20 @@ rec {
       '') entries));
 
 
-  # Print an error message if the file with the specified name and
-  # hash doesn't exist in the Nix store. Do not use this function; it
-  # produces packages that cannot be built automatically.
+  /* Print an error message if the file with the specified name and
+   * hash doesn't exist in the Nix store. This function should only
+   * be used by non-redistributable software with an unfree license
+   * that we need to require the user to download manually. It produces
+   * packages that cannot be built automatically.
+   *
+   * Examples:
+   * 
+   * requireFile {
+   *   name = "my-file";
+   *   url = "http://example.com/download/";
+   *   sha256 = "ffffffffffffffffffffffffffffffffffffffffffffffffffff";
+   * }
+   */
   requireFile = { name ? null
                 , sha256 ? null
                 , sha1 ? null
diff --git a/pkgs/build-support/vm/default.nix b/pkgs/build-support/vm/default.nix
index 03b3fb1f9f27..7880d98e6b6a 100644
--- a/pkgs/build-support/vm/default.nix
+++ b/pkgs/build-support/vm/default.nix
@@ -990,7 +990,7 @@ rec {
       name = "debian-9.4-stretch-i386";
       fullName = "Debian 9.4 Stretch (i386)";
       packagesList = fetchurl {
-        url = https://web.archive.org/web/20180912163509/http://ftp.debian.org/debian/dists/stretch/main/binary-i386/Packages.xz;
+        url = http://snapshot.debian.org/archive/debian/20180912T154744Z/dists/stretch/main/binary-i386/Packages.xz;
         sha256 = "0flvn8zn7vk04p10ndf3aq0mdr8k2ic01g51aq4lsllkv8lmwzyh";
       };
       urlPrefix = mirror://debian;
@@ -1001,7 +1001,7 @@ rec {
       name = "debian-9.4-stretch-amd64";
       fullName = "Debian 9.4 Stretch (amd64)";
       packagesList = fetchurl {
-        url = https://web.archive.org/web/20180912163152/http://ftp.debian.org/debian/dists/stretch/main/binary-amd64/Packages.xz;
+        url = http://snapshot.debian.org/archive/debian/20180912T154744Z/dists/stretch/main/binary-amd64/Packages.xz;
         sha256 = "11vnn9bba2jabixvabfbw9zparl326c88xn99di7pbr5xsnl15jm";
       };
       urlPrefix = mirror://debian;