You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@couchdb.apache.org by "ASF GitHub Bot (JIRA)" <ji...@apache.org> on 2014/04/15 14:11:17 UTC
[jira] [Commented] (COUCHDB-2225) configure should fail if system
cannot generate shared libraries (in LT_INIT)
[ 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 <mm...@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)