summary refs log tree commit diff
path: root/pkgs/build-support/skaware/build-skaware-package.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/build-support/skaware/build-skaware-package.nix')
-rw-r--r--pkgs/build-support/skaware/build-skaware-package.nix128
1 files changed, 128 insertions, 0 deletions
diff --git a/pkgs/build-support/skaware/build-skaware-package.nix b/pkgs/build-support/skaware/build-skaware-package.nix
new file mode 100644
index 00000000000..5f6951cb25f
--- /dev/null
+++ b/pkgs/build-support/skaware/build-skaware-package.nix
@@ -0,0 +1,128 @@
+{ stdenv, fetchgit, writeScript, file }:
+let lib = stdenv.lib;
+in {
+  # : string
+  pname
+  # : string
+, version
+  # : string
+, sha256
+  # : string
+, description
+  # : list Platform
+, platforms ? lib.platforms.all
+  # : list string
+, outputs ? [ "bin" "lib" "dev" "doc" "out" ]
+  # TODO(Profpatsch): automatically infer most of these
+  # : list string
+, configureFlags
+  # mostly for moving and deleting files from the build directory
+  # : lines
+, postInstall
+  # : list Maintainer
+, maintainers ? []
+
+
+}:
+
+let
+
+  # File globs that can always be deleted
+  commonNoiseFiles = [
+    ".gitignore"
+    "Makefile"
+    "INSTALL"
+    "configure"
+    "patch-for-solaris"
+    "src/**/*"
+    "tools/**/*"
+    "package/**/*"
+    "config.mak"
+  ];
+
+  # File globs that should be moved to $doc
+  commonMetaFiles = [
+    "COPYING"
+    "AUTHORS"
+    "NEWS"
+    "CHANGELOG"
+    "README"
+    "README.*"
+  ];
+
+  globWith = stdenv.lib.concatMapStringsSep "\n";
+  rmNoise = globWith (f:
+    ''rm -rf ${f}'') commonNoiseFiles;
+  mvMeta = globWith
+    (f: ''mv ${f} "$DOCDIR" 2>/dev/null || true'')
+    commonMetaFiles;
+
+  # Move & remove actions, taking the package doc directory
+  commonFileActions = writeScript "common-file-actions.sh" ''
+    #!${stdenv.shell}
+    set -e
+    DOCDIR="$1"
+    shopt -s globstar extglob nullglob
+    ${rmNoise}
+    mkdir -p "$DOCDIR"
+    ${mvMeta}
+  '';
+
+
+in stdenv.mkDerivation {
+  name = "${pname}-${version}";
+
+  src = fetchgit {
+    url = "git://git.skarnet.org/${pname}";
+    rev = "refs/tags/v${version}";
+    inherit sha256;
+  };
+
+  inherit outputs;
+
+  dontDisableStatic = true;
+  enableParallelBuilding = true;
+
+  configureFlags = configureFlags ++ [
+    "--enable-absolute-paths"
+    (if stdenv.isDarwin
+      then "--disable-shared"
+      else "--enable-shared")
+  ]
+    # On darwin, the target triplet from -dumpmachine includes version number,
+    # but skarnet.org software uses the triplet to test binary compatibility.
+    # Explicitly setting target ensures code can be compiled against a skalibs
+    # binary built on a different version of darwin.
+    # http://www.skarnet.org/cgi-bin/archive.cgi?1:mss:623:heiodchokfjdkonfhdph
+    ++ (lib.optional stdenv.isDarwin
+         "--build=${stdenv.hostPlatform.system}");
+
+  # TODO(Profpatsch): ensure that there is always a $doc output!
+  postInstall = ''
+    echo "Cleaning & moving common files"
+    mkdir -p $doc/share/doc/${pname}
+    ${commonFileActions} $doc/share/doc/${pname}
+
+    ${postInstall}
+  '';
+
+  postFixup = ''
+    echo "Checking for remaining source files"
+    rem=$(find -mindepth 1 -xtype f -print0 \
+           | tee $TMP/remaining-files)
+    if [[ "$rem" != "" ]]; then
+      echo "ERROR: These files should be either moved or deleted:"
+      cat $TMP/remaining-files | xargs -0 ${file}/bin/file
+      exit 1
+    fi
+  '';
+
+  meta = {
+    homepage = "https://skarnet.org/software/${pname}/";
+    inherit description platforms;
+    license = stdenv.lib.licenses.isc;
+    maintainers = with lib.maintainers;
+      [ pmahoney Profpatsch ] ++ maintainers;
+  };
+
+}