Build all static svn client on Mac OSX, error on mod_dav_svn.so
Asked Answered
H

1

6

I'm trying to build svn client on Mac OS 10.7.5. My aim is to build svn client completely static so it would not depend on any dylib to be installed. The idea is that the svn client could be copied to a disk on key, or downloaded and will work without need to install or configure anything.

I downloaded the svn source code (subversion-1.7.8) and all the required dependencies (apr, par-util, neon, sqlite-amalgamation) and stated the configure - make - make install cycle.

Svn's configure option has --enable-all-static flag that creates the svn client that does not depend on external dylibs. However the build always fails with the following message:

Warning!  dlname not found in /Volumes/mydisk/build/svn/libexec/mod_dav_svn.la.
Assuming installing a .so rather than a libtool archive.
chmod 755 /Volumes/mydisk/build/svn/libexec/mod_dav_svn.so
chmod: /Volumes/mydisk/wsvn/build/svn/libexec/mod_dav_svn.so: No such file or directory
apxs:Error: Command failed with rc=65536
.
make: *** [install-mods-shared] Error 1

It seems that the build is looking for mod_dav_svn.so even when it is not needed and everything compiles static.

Funny thing is that the svn client that was build actually runs! I would like however, to complete the build & install properly.

My questions are:

  1. Is this build error a real one or just something I can ignore?
  2. How can I avoid this build error, in order to complete the build?

Thanks

Hypermetropia answered 14/1, 2013 at 9:7 Comment(0)
N
1

In my experience it can be tricky to compile applications that make use of 3rd party libraries and/or system libraries such as glibc etc. The problem is that in addition to your application being built statically, all these libraries need to provide both a dynamic (.so) version as well as a static version (.a) and some libraries just don't provide this, at least not easily. So you're forced to compile everything down the stack of dependencies yourself and this can be tough.

That being said here, courtesy Rick Vanderzwet's Blog:

% curl -O wget http://archive.apache.org/dist/subversion/subversion-1.7.8.tar.gz
% tar zxvf subversion-1.7.8.tar.gz
% cd subversion-1.7.8/
% ./get-deps.sh
% ./configure --with-ssl --without-gssapi --without-swig --enable-all-static
% make

Confirm with the following commands:

size of executable?

% ls -lh subversion/svn/svn
-rwxrwxr-x 1 saml saml 11M Jan 19 22:09 subversion/svn/svn

executable runs?

% subversion/svn/svn --version
svn, version 1.7.8 (r1419691)
   compiled Jan 19 2013, 22:03:50

Copyright (C) 2012 The Apache Software Foundation.
This software consists of contributions made by many people; see the NOTICE
file for more information.
Subversion is open source software, see http://subversion.apache.org/

The following repository access (RA) modules are available:

* ra_svn : Module for accessing a repository using the svn network protocol.
  - with Cyrus SASL authentication
  - handles 'svn' scheme
* ra_local : Module for accessing a repository on local disk.
  - handles 'file' scheme
* ra_serf : Module for accessing a repository via WebDAV protocol using serf.
  - handles 'http' scheme
  - handles 'https' scheme

what does the executable depend on?

%  ldd subversion/svn/svn
    linux-vdso.so.1 =>  (0x00007fffd7463000)
    libsasl2.so.2 => /usr/lib64/libsasl2.so.2 (0x00000034fc600000)
    libm.so.6 => /lib64/libm.so.6 (0x00000034e7600000)
    libssl.so.10 => /usr/lib64/libssl.so.10 (0x0000003210800000)
    libcrypto.so.10 => /lib64/libcrypto.so.10 (0x000000399a000000)
    libz.so.1 => /lib64/libz.so.1 (0x00000034e8600000)
    libmagic.so.1 => /usr/lib64/libmagic.so.1 (0x00000034ef600000)
    libexpat.so.1 => /lib64/libexpat.so.1 (0x00000034eb200000)
    libuuid.so.1 => /lib64/libuuid.so.1 (0x00000034eda00000)
    librt.so.1 => /lib64/librt.so.1 (0x00000034e8a00000)
    libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00000034f5e00000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00000034e7e00000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00000034e7a00000)
    libc.so.6 => /lib64/libc.so.6 (0x00000034e7200000)
    libresolv.so.2 => /lib64/libresolv.so.2 (0x00000034ea200000)
    libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x000000320f800000)
    libkrb5.so.3 => /lib64/libkrb5.so.3 (0x0000003210000000)
    libcom_err.so.2 => /lib64/libcom_err.so.2 (0x0000003d3ce00000)
    libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x0000003210400000)
    /lib64/ld-linux-x86-64.so.2 (0x00000034e6e00000)
    libfreebl3.so => /lib64/libfreebl3.so (0x00000034f6200000)
    libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x000000320fc00000)
    libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00000034f3a00000)
    libselinux.so.1 => /lib64/libselinux.so.1 (0x00000034e8e00000)

This last bit shows that this executable is still dependent on several dynamic libraries but it's much less than a typical dynamically built subversion!

EDIT #1

If you do not require mod_dav_svn support you can disable this through the use of the --without-serf switch to configure.

NOTE #1: Disabling this support will disable your svn client's ability to access SVN repos via http and https!

NOTE #2: If you look at the output from svn --version command you can see which repository access (RA) modules have been compiled into your svn client.

Nickels answered 20/1, 2013 at 2:44 Comment(6)
thanks for being the first to respond! As mentioned in the question, I'm able to compile and run the svn client. Problem is I'm left with a compilation procedure that always ends in an error. This is not good because: a) there might be a real error that I'm not able to see. b) someone else in my team might try to compile svn and think he's failed. c) I cannot automate the build of svn, since it will always end in an error. So my question remains: Is this build error a real one or just something I can ignore? How can I avoid this build error, in order to complete the build?Hypermetropia
I do require WebSVN support.Hypermetropia
Compiling with --without-apxs indeed finishes without and error. However I'm not sure if I need mod_dav_svn. Which of the build products (svn svnadmin svndumpfilter svnlook svnrdump svnserve svnsync svnversion) is the one that needs mod_dav_svn? And what functionality will it be missing?Hypermetropia
I want the server to expose repositories using http/https, so I do need mod_dav_svn. However maybe we can narrow the problem. Which of the products will actually use mod_dav_svn? I'm sure that the svn cluent does not need it.Hypermetropia
svnserve doesn't do http/https, it only does the svn protocol. Hence the existence of mod_dav_svn. https://mcmap.net/q/1918395/-subversion-svn-http-access None of the other tools use mod_dav_svn, it's purely for Apache's use only if you want http/https access to your SVN repo.Nickels
To sum up: svn configure script has an oversight, where if compiling with --enable-all-static, it emits an error about missing mod_dav_svn. Compiling with --without-apxs will avoid building mod_dav_svn and thus avoid the error. So currently specifying --enable-all-static require to also specify --without-apxs.Hypermetropia

© 2022 - 2024 — McMap. All rights reserved.