biglybt: 3.5.0.0 -> 3.6.0.0
[NixPkgs.git] / pkgs / development / skaware-packages / clean-packaging.nix
blobd51cbec8aeb2675b9b010c493c6620c0901928c1
1 # set of utilities that assure the cwd of a build
2 # is completely clean after the build, meaning all
3 # files were either discarded or moved to outputs.
4 # This ensures nothing is forgotten and new files
5 # are correctly handled on update.
6 { lib, stdenv, file, writeScript }:
8 let
9   globWith = lib.concatMapStringsSep "\n";
10   rmNoise = noiseGlobs: globWith (f:
11     "rm -rf ${f}") noiseGlobs;
12   mvDoc = docGlobs: globWith
13     (f: ''mv ${f} "$DOCDIR" 2>/dev/null || true'')
14     docGlobs;
16   # Shell script that implements common move & remove actions
17   # $1 is the doc directory (will be created).
18   # Best used in conjunction with checkForRemainingFiles
19   commonFileActions =
20     { # list of fileglobs that are removed from the source dir
21       noiseFiles
22       # files that are moved to the doc directory ($1)
23       # TODO(Profpatsch): allow to set target dir with
24       # { glob = …; to = "html" } (relative to docdir)
25     , docFiles }:
26     writeScript "common-file-actions.sh" ''
27       #!${stdenv.shell}
28       set -e
29       DOCDIR="''${1?commonFileActions: DOCDIR as argv[1] required}"
30       shopt -s globstar extglob nullglob
31       mkdir -p "$DOCDIR"
32       ${mvDoc docFiles}
33       ${rmNoise noiseFiles}
34     '';
36   # Shell script to check whether the build directory is empty.
37   # If there are still files remaining, exit 1 with a helpful
38   # listing of all remaining files and their types.
39   checkForRemainingFiles = writeScript "check-for-remaining-files.sh" ''
40     #!${stdenv.shell}
41     echo "Checking for remaining source files"
42     rem=$(find -mindepth 1 -xtype f -print0 \
43            | tee $TMP/remaining-files)
44     if [[ "$rem" != "" ]]; then
45       echo "ERROR: These files should be either moved or deleted:"
46       cat $TMP/remaining-files | xargs -0 ${file}/bin/file
47       exit 1
48     fi
49   '';
51 in {
52   inherit commonFileActions checkForRemainingFiles;