diff options
author | Frederik Rietdijk <fridh@fridh.nl> | 2018-10-09 15:37:22 +0200 |
---|---|---|
committer | Frederik Rietdijk <fridh@fridh.nl> | 2018-10-09 15:37:22 +0200 |
commit | eeaf3a131fbe8611d59592ae2e215131b23c70e5 (patch) | |
tree | 3336175c63d192abf6c27dafa05cb80290f9a887 /pkgs/build-support | |
parent | 0adf6521f992da8426be16583c86f6caf38d0628 (diff) | |
parent | 5176389f1d931e2862a87205d478eff2586f1df2 (diff) | |
download | nixlib-eeaf3a131fbe8611d59592ae2e215131b23c70e5.tar nixlib-eeaf3a131fbe8611d59592ae2e215131b23c70e5.tar.gz nixlib-eeaf3a131fbe8611d59592ae2e215131b23c70e5.tar.bz2 nixlib-eeaf3a131fbe8611d59592ae2e215131b23c70e5.tar.lz nixlib-eeaf3a131fbe8611d59592ae2e215131b23c70e5.tar.xz nixlib-eeaf3a131fbe8611d59592ae2e215131b23c70e5.tar.zst nixlib-eeaf3a131fbe8611d59592ae2e215131b23c70e5.zip |
Merge master into staging-next
Diffstat (limited to 'pkgs/build-support')
-rw-r--r-- | pkgs/build-support/build-bazel-package/default.nix | 23 | ||||
-rw-r--r-- | pkgs/build-support/trivial-builders.nix | 155 | ||||
-rw-r--r-- | pkgs/build-support/vm/default.nix | 4 |
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; |