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)