{ bdbSupport ? true, # build support for Berkeley DB repositories httpServer ? false, # build Apache DAV module httpSupport ? true, # client must support http pythonBindings ? false, perlBindings ? false, javahlBindings ? false, saslSupport ? false, lib, stdenv, fetchurl, fetchpatch, apr, aprutil, zlib, sqlite, openssl, lz4, utf8proc, autoconf, libtool, apacheHttpd ? null, expat, swig ? null, jdk ? null, python3 ? null, py3c ? null, perl ? null, sasl ? null, serf ? null, nixosTests, }: assert bdbSupport -> aprutil.bdbSupport; assert httpServer -> apacheHttpd != null; assert pythonBindings -> swig != null && python3 != null && py3c != null; assert javahlBindings -> jdk != null && perl != null; let common = { version, hash, extraPatches ? [ ], }: stdenv.mkDerivation (finalAttrs: { inherit version; pname = "subversion${lib.optionalString (!bdbSupport && perlBindings && pythonBindings) "-client"}"; src = fetchurl { url = "mirror://apache/subversion/subversion-${finalAttrs.version}.tar.bz2"; inherit hash; }; # Can't do separate $lib and $bin, as libs reference bins outputs = [ "out" "dev" "man" ]; nativeBuildInputs = [ autoconf libtool python3 ] ++ lib.optional perlBindings perl; # Needed for swig / EXTERN.h buildInputs = [ zlib apr aprutil sqlite openssl lz4 utf8proc ] ++ lib.optional httpSupport serf ++ lib.optionals pythonBindings [ python3 py3c ] ++ lib.optional perlBindings perl ++ lib.optional saslSupport sasl; strictDeps = true; patches = [ ./apr-1.patch # swig-4.4 support: # https://lists.apache.org/thread/7rtyfcmg737bnmnrwf6bjmlxx4wpq2og (fetchpatch { name = "swig-4.4.patch"; url = "https://github.com/apache/subversion/commit/bf72420e86059a894fa3aacbbd6e3bee9286e46e.patch"; hash = "sha256-0X9y/0qDDctKo1vu86pKu3k79zIqhOhQU9rvyG4v6jg="; }) ] ++ extraPatches; # Remove vendored swig-3 files as these will shadow the swig provided # ones and result in compile errors. # Also remove the generated Perl wrappers from the release tarball # so they are rebuilt with the same SWIG runtime as libsvn_swig_perl. postPatch = '' rm subversion/bindings/swig/proxy/{perlrun.swg,pyrun.swg,python.swg,rubydef.swg,rubyhead.swg,rubytracking.swg,runtime.swg,swigrun.swg} '' + lib.optionalString perlBindings '' rm subversion/bindings/swig/perl/native/{core.c,svn_*.c} ''; env = { # We are hitting the following issue even with APR 1.6.x # -> https://issues.apache.org/jira/browse/SVN-4813 # "-P" CPPFLAG is needed to build Python bindings and subversionClient CPPFLAGS = toString [ "-P" ]; } // lib.optionalAttrs stdenv.hostPlatform.isDarwin { CXX = "clang++"; CC = "clang"; CPP = "clang -E"; CXXCPP = "clang++ -E"; }; preConfigure = '' ./autogen.sh ''; configureFlags = [ (lib.withFeature bdbSupport "berkeley-db") (lib.withFeatureAs httpServer "apxs" "${apacheHttpd.dev}/bin/apxs") (lib.withFeatureAs (pythonBindings || perlBindings) "swig" swig) (lib.withFeatureAs saslSupport "sasl" sasl) (lib.withFeatureAs httpSupport "serf" serf) "--with-zlib=${zlib.dev}" "--with-sqlite=${sqlite.dev}" "--with-apr=${apr.dev}" "--with-apr-util=${aprutil.dev}" ] ++ lib.optionals javahlBindings [ "--enable-javahl" "--with-jdk=${jdk}" ]; preBuild = '' makeFlagsArray=(APACHE_LIBEXECDIR=$out/modules) ''; postInstall = lib.optionalString pythonBindings '' make swig-py swig_pydir=$(toPythonPath $out)/libsvn swig_pydir_extra=$(toPythonPath $out)/svn make install-swig-py swig_pydir=$(toPythonPath $out)/libsvn swig_pydir_extra=$(toPythonPath $out)/svn '' + lib.optionalString perlBindings '' make install-swig-pl '' + '' mkdir -p $out/share/bash-completion/completions cp tools/client-side/bash_completion $out/share/bash-completion/completions/subversion for f in $out/lib/*.la $out/lib/python*/site-packages/*/*.la; do substituteInPlace $f \ --replace "${expat.dev}/lib" "${expat.out}/lib" \ --replace "${zlib.dev}/lib" "${zlib.out}/lib" \ --replace "${sqlite.dev}/lib" "${sqlite.out}/lib" \ --replace "${openssl.dev}/lib" "${lib.getLib openssl}/lib" done ''; inherit perlBindings pythonBindings; enableParallelBuilding = true; # Missing install dependencies: # libtool: error: error: relink 'libsvn_ra_serf-1.la' with the above command before installing it # make: *** [build-outputs.mk:1316: install-serf-lib] Error 1 enableParallelInstalling = false; nativeCheckInputs = [ python3 ]; doCheck = false; # fails 10 out of ~2300 tests passthru.tests = { inherit (nixosTests) svnserve; }; meta = { description = "Version control system intended to be a compelling replacement for CVS in the open source community"; license = lib.licenses.asl20; homepage = "https://subversion.apache.org/"; mainProgram = "svn"; maintainers = [ ]; platforms = lib.platforms.linux ++ lib.platforms.darwin; }; }); in { subversion = common { version = "1.14.5"; hash = "sha256-54op53Zri3s1RJfQj3GlVkGrxTZ1zhh1WEeBquNWRKE="; }; }