b64d25c447
The execlineb program is the launcher (and lexer) of execline scripts. So it makes a lot of sense to have all the small tools in scope by default. We append to the end of PATH so that they can be easily overwritten by the user. Co-authored-by: Alyssa Ross <hi@alyssa.is>
134 lines
3.1 KiB
Nix
134 lines
3.1 KiB
Nix
{ stdenv, fetchurl, 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
|
|
# packages with setup hooks that should be run
|
|
# (see definition of `makeSetupHook`)
|
|
# : list drv
|
|
, setupHooks ? []
|
|
# : 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 = fetchurl {
|
|
url = "https://skarnet.org/software/${pname}/${pname}-${version}.tar.gz";
|
|
inherit sha256;
|
|
};
|
|
|
|
inherit outputs;
|
|
|
|
dontDisableStatic = true;
|
|
enableParallelBuilding = true;
|
|
|
|
nativeBuildInputs = setupHooks;
|
|
|
|
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;
|
|
};
|
|
|
|
}
|