parent
16f87d772f
commit
eae17c3743
@ -1,63 +1,49 @@ |
||||
{ stdenv, fetchurl, findXMLCatalogs |
||||
{ stdenv, fetchurl, zlib, xz, python ? null, pythonSupport ? true, findXMLCatalogs }: |
||||
|
||||
# Optional Dependencies |
||||
, icu ? null, python ? null, readline ? null, zlib ? null, xz ? null |
||||
}: |
||||
assert pythonSupport -> python != null; |
||||
|
||||
#TODO: share most stuff between python and non-python builds, perhaps via multiple-output |
||||
|
||||
let |
||||
mkFlag = trueStr: falseStr: cond: name: val: |
||||
if cond == null then null else |
||||
"--${if cond != false then trueStr else falseStr}${name}${if val != null && cond != false then "=${val}" else ""}"; |
||||
mkEnable = mkFlag "enable-" "disable-"; |
||||
mkWith = mkFlag "with-" "without-"; |
||||
mkOther = mkFlag "" "" true; |
||||
|
||||
shouldUsePkg = pkg: if pkg != null && stdenv.lib.any (x: x == stdenv.system) pkg.meta.platforms then pkg else null; |
||||
|
||||
optIcu = shouldUsePkg icu; |
||||
optPython = shouldUsePkg python; |
||||
optReadline = shouldUsePkg readline; |
||||
optZlib = shouldUsePkg zlib; |
||||
optXz = shouldUsePkg xz; |
||||
|
||||
sitePackages = if optPython == null then null else |
||||
"\${out}/lib/${python.libPrefix}/site-packages"; |
||||
version = "2.9.2"; |
||||
in |
||||
stdenv.mkDerivation rec { |
||||
|
||||
stdenv.mkDerivation (rec { |
||||
name = "libxml2-${version}"; |
||||
version = "2.9.2"; |
||||
|
||||
src = fetchurl { |
||||
url = "http://xmlsoft.org/sources/${name}.tar.gz"; |
||||
sha256 = "1g6mf03xcabmk5ing1lwqmasr803616gb2xhn7pll10x2l5w6y2i"; |
||||
}; |
||||
|
||||
buildInputs = [ optIcu optPython optReadline optZlib optXz ]; |
||||
propagatedBuildInputs = [ findXMLCatalogs ]; |
||||
buildInputs = stdenv.lib.optional pythonSupport python |
||||
# Libxml2 has an optional dependency on liblzma. However, on impure |
||||
# platforms, it may end up using that from /usr/lib, and thus lack a |
||||
# RUNPATH for that, leading to undefined references for its users. |
||||
++ (stdenv.lib.optional stdenv.isFreeBSD xz); |
||||
|
||||
propagatedBuildInputs = [ zlib findXMLCatalogs ]; |
||||
|
||||
configureFlags = [ |
||||
(mkWith (optIcu != null) "icu" optIcu) |
||||
(mkWith (optPython != null) "python" optPython) |
||||
(mkWith (optPython != null) "python-install-dir" sitePackages) |
||||
(mkWith (optReadline != null) "readline" optReadline) |
||||
(mkWith (optZlib != null) "zlib" optZlib) |
||||
(mkWith (optXz != null) "lzma" optXz) |
||||
]; |
||||
passthru = { inherit pythonSupport version; }; |
||||
|
||||
enableParallelBuilding = true; |
||||
|
||||
meta = with stdenv.lib; { |
||||
meta = { |
||||
homepage = http://xmlsoft.org/; |
||||
description = "An XML parsing library for C"; |
||||
license = licenses.mit; |
||||
platforms = platforms.unix; |
||||
maintainers = with maintainers; [ eelco wkennington ]; |
||||
license = "bsd"; |
||||
platforms = stdenv.lib.platforms.unix; |
||||
maintainers = [ stdenv.lib.maintainers.eelco ]; |
||||
}; |
||||
|
||||
passthru = { |
||||
inherit version; |
||||
pythonSupport = python != null; |
||||
}; |
||||
} |
||||
} // stdenv.lib.optionalAttrs pythonSupport { |
||||
configureFlags = "--with-python=${python}"; |
||||
|
||||
# this is a pair of ugly hacks to make python stuff install into the right place |
||||
preInstall = ''substituteInPlace python/libxml2mod.la --replace "${python}" "$out"''; |
||||
installFlags = ''pythondir="$(out)/lib/${python.libPrefix}/site-packages"''; |
||||
|
||||
} // stdenv.lib.optionalAttrs (!pythonSupport) { |
||||
configureFlags = "--with-python=no"; # otherwise build impurity bites us |
||||
}) |
||||
|
||||
|
Loading…
Reference in new issue