Introduce a `skawarePackages.buildPackage` function that contains the common setup, removing a lot of duplication. In particular, we require that the build directory has to be empty after the `fixupPhase`, to make sure every relevant file is moved to the outputs. A next step would be to deduplicate the `configureFlags` attributes and only require a `skawareInputs` field.wip/yesman
parent
57b431590b
commit
0071ae1d4f
@ -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; |
||||
}; |
||||
|
||||
} |
@ -1,51 +1,30 @@ |
||||
{ stdenv, fetchgit }: |
||||
{ stdenv, skawarePackages }: |
||||
|
||||
let |
||||
with skawarePackages; |
||||
|
||||
buildPackage { |
||||
pname = "skalibs"; |
||||
version = "2.7.0.0"; |
||||
sha256 = "068pkbl91mi35amlhv491dwrbzyfifrlxijss0g2vf693xvx6lxm"; |
||||
|
||||
in stdenv.mkDerivation rec { |
||||
|
||||
name = "skalibs-${version}"; |
||||
|
||||
src = fetchgit { |
||||
url = "git://git.skarnet.org/skalibs"; |
||||
rev = "refs/tags/v${version}"; |
||||
sha256 = "068pkbl91mi35amlhv491dwrbzyfifrlxijss0g2vf693xvx6lxm"; |
||||
}; |
||||
description = "A set of general-purpose C programming libraries"; |
||||
|
||||
outputs = [ "lib" "dev" "doc" "out" ]; |
||||
|
||||
dontDisableStatic = true; |
||||
|
||||
enableParallelBuilding = true; |
||||
|
||||
configureFlags = [ |
||||
"--enable-force-devr" # assume /dev/random works |
||||
# assume /dev/random works |
||||
"--enable-force-devr" |
||||
"--libdir=\${lib}/lib" |
||||
"--dynlibdir=\${lib}/lib" |
||||
"--includedir=\${dev}/include" |
||||
"--sysdepdir=\${lib}/lib/skalibs/sysdeps" |
||||
] |
||||
++ (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 |
||||
++ (stdenv.lib.optional stdenv.isDarwin "--build=${stdenv.hostPlatform.system}"); |
||||
]; |
||||
|
||||
postInstall = '' |
||||
mkdir -p $doc/share/doc/skalibs |
||||
rm -rf sysdeps.cfg |
||||
rm libskarnet.* |
||||
|
||||
mv doc $doc/share/doc/skalibs/html |
||||
''; |
||||
|
||||
meta = { |
||||
homepage = http://skarnet.org/software/skalibs/; |
||||
description = "A set of general-purpose C programming libraries"; |
||||
platforms = stdenv.lib.platforms.all; |
||||
license = stdenv.lib.licenses.isc; |
||||
maintainers = with stdenv.lib.maintainers; [ pmahoney Profpatsch ]; |
||||
}; |
||||
|
||||
} |
||||
|
@ -1,47 +1,35 @@ |
||||
{ stdenv, fetchurl, skalibs }: |
||||
{ stdenv, skawarePackages }: |
||||
|
||||
with stdenv.lib; |
||||
with skawarePackages; |
||||
|
||||
stdenv.mkDerivation rec { |
||||
name = "s6-portable-utils-${version}"; |
||||
let |
||||
pname = "s6-portable-utils"; |
||||
|
||||
in buildPackage { |
||||
pname = pname; |
||||
version = "2.2.1.2"; |
||||
sha256 = "1zfanja5mbyafmzw28dlx1bb3fixa7lidbs62sxf849ly3z0zqp2"; |
||||
|
||||
src = fetchurl { |
||||
url = "https://www.skarnet.org/software/s6-portable-utils/${name}.tar.gz"; |
||||
sha256 = "0if77z07rfygd1yk9d2abxkdbx3dg52vcjhb20isb8kvqxhkg8ih"; |
||||
}; |
||||
description = "A set of tiny general Unix utilities optimized for simplicity and small size"; |
||||
|
||||
outputs = [ "bin" "dev" "doc" "out" ]; |
||||
|
||||
dontDisableStatic = true; |
||||
|
||||
configureFlags = [ |
||||
"--enable-absolute-paths" |
||||
"--bindir=\${bin}/bin" |
||||
"--includedir=\${dev}/include" |
||||
"--with-sysdeps=${skalibs.lib}/lib/skalibs/sysdeps" |
||||
"--with-include=${skalibs.dev}/include" |
||||
"--with-lib=${skalibs.lib}/lib" |
||||
"--with-dynlib=${skalibs.lib}/lib" |
||||
] |
||||
# 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 |
||||
++ (stdenv.lib.optional stdenv.isDarwin "--build=${stdenv.hostPlatform.system}"); |
||||
]; |
||||
|
||||
postInstall = '' |
||||
mkdir -p $doc/share/doc/s6-portable-utils/ |
||||
mv doc $doc/share/doc/s6-portable-utils/html |
||||
# remove all s6 executables from build directory |
||||
rm $(find -name "s6-*" -type f -mindepth 1 -maxdepth 1 -executable) |
||||
rm seekablepipe |
||||
|
||||
mv doc $doc/share/doc/${pname}/html |
||||
''; |
||||
|
||||
meta = { |
||||
homepage = http://www.skarnet.org/software/s6-portable-utils/; |
||||
description = "A set of tiny general Unix utilities optimized for simplicity and small size"; |
||||
platforms = platforms.all; |
||||
license = licenses.isc; |
||||
maintainers = with maintainers; [ pmahoney Profpatsch ]; |
||||
}; |
||||
|
||||
} |
||||
|
Loading…
Reference in new issue