[ https://issues.apache.org/jira/browse/COUCHDB-2225?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13969471#comment-13969471 ]
ASF GitHub Bot commented on COUCHDB-2225: ----------------------------------------- GitHub user mgmarino opened a pull request: https://github.com/apache/couchdb/pull/209 COUCHDB-2225 Enforce that shared libraries can be built by the system. configure stage should ensure that shared libraries can be built. You can merge this pull request into a Git repository by running: $ git pull https://github.com/mgmarino/couchdb 2225-configure-enforce-shared-libraries Alternatively you can review and apply these changes as the patch at: https://github.com/apache/couchdb/pull/209.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #209 ---- commit 0c319d98bd49485f67988cedecd385acbfb83603 Author: Michael Marino <mmar...@gmail.com> Date: 2014-04-15T12:09:12Z COUCHDB-2225 Enforce that shared libraries can be built by the system. ---- > configure should fail if system cannot generate shared libraries (in LT_INIT) > ----------------------------------------------------------------------------- > > Key: COUCHDB-2225 > URL: https://issues.apache.org/jira/browse/COUCHDB-2225 > Project: CouchDB > Issue Type: Bug > Security Level: public(Regular issues) > Components: Build System > Reporter: Michael Marino > Priority: Minor > > The LT_INIT autoconf macro checks if the system can build shared libraries, > which couch needs: > {code:title=configure.ac} > ... > AC_ENABLE_SHARED > AC_DISABLE_STATIC > AC_PROG_CC > LT_INIT([win32-dll]) > LT_INIT > AC_PROG_LN_S > ... > {code} > The AC_DISABLE/ENABLE_* requests that the system builds shared libraries and > not static libraries, but does not enforce it. It should. > An example of a failure mode is the observed configure output on a Synology > (linux-based) system: > {code} > ... > checking whether the gcc linker > (/usr/local/x86_64-linux-gnu/x86_64-linux-gnu/x86_64-linux-gnu/bin/ld -m > elf_x86_64) supports shared libraries... no > checking dynamic linker characteristics... GNU/Linux ld.so > checking how to hardcode library paths into programs... unsupported > checking whether stripping libraries is possible... no > checking if libtool supports shared libraries... no > checking whether to build shared libraries... no > checking whether to build static libraries... yes > ... > {code} > In this case, gcc returns a broken path to ld, but configure succeeds even > though no shared libraries will/can be built. 'make' does fail later, but > not in a way that makes the source of the failure obvious: > {code} > cp .libs/ejson.so priv/ejson.so > cp: can't stat '.libs/ejson.so': No such file or directory > {code} > which arises because the so files are not built. In this case, configuration > and make succeed when the correct path to ld is given (e.g. ./configure > LD=/path/to/ld). However, generally, configure should die with an > appropriate error if the system can not build shared libraries. > Solution: > Change of the above lines in configure.ac: > {code:title=configure.ac} > ... > LT_INIT > AS_IF([test x"${enable_shared}" = "xno"], [ > AC_MSG_ERROR([System as configured cannot build shared libraries.]) > ]) > ... > {code} > And regeneration of configure. I'm happy to produce a pull request for this. > -- This message was sent by Atlassian JIRA (v6.2#6252)