unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
* [PATCH v2] lib: make notmuch shared library install_name be full path on Mac OS X
@ 2015-03-04 22:32 J. Lewis Muir
  2015-03-04 22:39 ` Jinwoo Lee
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: J. Lewis Muir @ 2015-03-04 22:32 UTC (permalink / raw)
  To: notmuch

The install_name of libnotmuch.dylib on Mac OS X is what is written
into a program that links against it.  If it is just the name of the
shared library file, as opposed to the full path, the program won't be
able to find it when it runs and will abort.  Instead, the install_name
should be the full path to the shared library (in its final installed
location).

Why does Notmuch work without this patch when installed via Homebrew?
The answer is twofold.  One, /usr/local/lib is a special location in
which the dynamic linker will look by default to find shared libraries.
Homebrew highly recommends installing to /usr/local, and, assuming it
has been configured this way, the Notmuch library will end up installed
in /usr/local/lib, and the dynamic linker will find it.  Two, Homebrew
globally corrects all install names in dynamically shared libraries and
binaries for each package it installs.  So, even if the install names in
a package's binaries and libraries are incorrect, Homebrew corrects them
automatically, and no one ever knows.

Why does Notmuch work without this patch when installed via MacPorts?
The answer is that MacPorts applies a patch just like this patch to fix
the same problem.
---
 lib/Makefile.local | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/Makefile.local b/lib/Makefile.local
index 7278f46..f9ecd50 100644
--- a/lib/Makefile.local
+++ b/lib/Makefile.local
@@ -27,7 +27,7 @@ LIBRARY_SUFFIX = dylib
 LINKER_NAME = libnotmuch.$(LIBRARY_SUFFIX)
 SONAME = libnotmuch.$(LIBNOTMUCH_VERSION_MAJOR).$(LIBRARY_SUFFIX)
 LIBNAME = libnotmuch.$(LIBNOTMUCH_VERSION_MAJOR).$(LIBNOTMUCH_VERSION_MINOR).$(LIBNOTMUCH_VERSION_RELEASE).$(LIBRARY_SUFFIX)
-LIBRARY_LINK_FLAG = -dynamiclib -install_name $(SONAME) -compatibility_version $(LIBNOTMUCH_VERSION_MAJOR).$(LIBNOTMUCH_VERSION_MINOR) -current_version $(LIBNOTMUCH_VERSION_MAJOR).$(LIBNOTMUCH_VERSION_MINOR).$(LIBNOTMUCH_VERSION_RELEASE)
+LIBRARY_LINK_FLAG = -dynamiclib -install_name $(libdir)/$(SONAME) -compatibility_version $(LIBNOTMUCH_VERSION_MAJOR).$(LIBNOTMUCH_VERSION_MINOR) -current_version $(LIBNOTMUCH_VERSION_MAJOR).$(LIBNOTMUCH_VERSION_MINOR).$(LIBNOTMUCH_VERSION_RELEASE)
 else
 LIBRARY_SUFFIX = so
 LINKER_NAME = libnotmuch.$(LIBRARY_SUFFIX)
-- 
1.9.3 (Apple Git-50)

This version of the patch has a better commit message as suggested
by David Bremner on the mailing list.  The steps for reproducing the
problem and the steps showing the analysis of the problem have been
removed.  Added is an answer to the question of why Notmuch works
without this patch when installed via Homebrew and MacPorts.

The message-id of the previous version of this patch is
1409541227-38895-1-git-send-email-jlmuir@imca-cat.org.

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] lib: make notmuch shared library install_name be full path on Mac OS X
  2015-03-04 22:32 [PATCH v2] lib: make notmuch shared library install_name be full path on Mac OS X J. Lewis Muir
@ 2015-03-04 22:39 ` Jinwoo Lee
  2015-03-05  6:56 ` Tomi Ollila
  2015-03-06  7:05 ` David Bremner
  2 siblings, 0 replies; 5+ messages in thread
From: Jinwoo Lee @ 2015-03-04 22:39 UTC (permalink / raw)
  To: J. Lewis Muir, notmuch

On Wed, Mar  4, 2015 at 02:32 PM, "J. Lewis Muir" <jlmuir@imca-cat.org> wrote:
> The install_name of libnotmuch.dylib on Mac OS X is what is written
> into a program that links against it.  If it is just the name of the
> shared library file, as opposed to the full path, the program won't be
> able to find it when it runs and will abort.  Instead, the install_name
> should be the full path to the shared library (in its final installed
> location).

Thanks for this fix!  I built notmuch last night on my mac using the
prefix of "/opt/local", and it revealed this problem.  Manually moving
libnotmuch.dylib to $HOME/lib fixed it.  I'll try again once this patch
is checked in.

>
> Why does Notmuch work without this patch when installed via Homebrew?
> The answer is twofold.  One, /usr/local/lib is a special location in
> which the dynamic linker will look by default to find shared libraries.
> Homebrew highly recommends installing to /usr/local, and, assuming it
> has been configured this way, the Notmuch library will end up installed
> in /usr/local/lib, and the dynamic linker will find it.  Two, Homebrew
> globally corrects all install names in dynamically shared libraries and
> binaries for each package it installs.  So, even if the install names in
> a package's binaries and libraries are incorrect, Homebrew corrects them
> automatically, and no one ever knows.
>
> Why does Notmuch work without this patch when installed via MacPorts?
> The answer is that MacPorts applies a patch just like this patch to fix
> the same problem.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] lib: make notmuch shared library install_name be full path on Mac OS X
  2015-03-04 22:32 [PATCH v2] lib: make notmuch shared library install_name be full path on Mac OS X J. Lewis Muir
  2015-03-04 22:39 ` Jinwoo Lee
@ 2015-03-05  6:56 ` Tomi Ollila
  2015-03-06  7:05 ` David Bremner
  2 siblings, 0 replies; 5+ messages in thread
From: Tomi Ollila @ 2015-03-05  6:56 UTC (permalink / raw)
  To: J. Lewis Muir, notmuch

On Thu, Mar 05 2015, "J. Lewis Muir" <jlmuir@imca-cat.org> wrote:

> The install_name of libnotmuch.dylib on Mac OS X is what is written
> into a program that links against it.  If it is just the name of the
> shared library file, as opposed to the full path, the program won't be
> able to find it when it runs and will abort.  Instead, the install_name
> should be the full path to the shared library (in its final installed
> location).
>
> Why does Notmuch work without this patch when installed via Homebrew?
> The answer is twofold.  One, /usr/local/lib is a special location in
> which the dynamic linker will look by default to find shared libraries.
> Homebrew highly recommends installing to /usr/local, and, assuming it
> has been configured this way, the Notmuch library will end up installed
> in /usr/local/lib, and the dynamic linker will find it.  Two, Homebrew
> globally corrects all install names in dynamically shared libraries and
> binaries for each package it installs.  So, even if the install names in
> a package's binaries and libraries are incorrect, Homebrew corrects them
> automatically, and no one ever knows.
>
> Why does Notmuch work without this patch when installed via MacPorts?
> The answer is that MacPorts applies a patch just like this patch to fix
> the same problem.

looks ok to me...

Tomi

> ---
>  lib/Makefile.local | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/lib/Makefile.local b/lib/Makefile.local
> index 7278f46..f9ecd50 100644
> --- a/lib/Makefile.local
> +++ b/lib/Makefile.local
> @@ -27,7 +27,7 @@ LIBRARY_SUFFIX = dylib
>  LINKER_NAME = libnotmuch.$(LIBRARY_SUFFIX)
>  SONAME = libnotmuch.$(LIBNOTMUCH_VERSION_MAJOR).$(LIBRARY_SUFFIX)
>  LIBNAME = libnotmuch.$(LIBNOTMUCH_VERSION_MAJOR).$(LIBNOTMUCH_VERSION_MINOR).$(LIBNOTMUCH_VERSION_RELEASE).$(LIBRARY_SUFFIX)
> -LIBRARY_LINK_FLAG = -dynamiclib -install_name $(SONAME) -compatibility_version $(LIBNOTMUCH_VERSION_MAJOR).$(LIBNOTMUCH_VERSION_MINOR) -current_version $(LIBNOTMUCH_VERSION_MAJOR).$(LIBNOTMUCH_VERSION_MINOR).$(LIBNOTMUCH_VERSION_RELEASE)
> +LIBRARY_LINK_FLAG = -dynamiclib -install_name $(libdir)/$(SONAME) -compatibility_version $(LIBNOTMUCH_VERSION_MAJOR).$(LIBNOTMUCH_VERSION_MINOR) -current_version $(LIBNOTMUCH_VERSION_MAJOR).$(LIBNOTMUCH_VERSION_MINOR).$(LIBNOTMUCH_VERSION_RELEASE)
>  else
>  LIBRARY_SUFFIX = so
>  LINKER_NAME = libnotmuch.$(LIBRARY_SUFFIX)
> -- 
> 1.9.3 (Apple Git-50)
>
> This version of the patch has a better commit message as suggested
> by David Bremner on the mailing list.  The steps for reproducing the
> problem and the steps showing the analysis of the problem have been
> removed.  Added is an answer to the question of why Notmuch works
> without this patch when installed via Homebrew and MacPorts.
>
> The message-id of the previous version of this patch is
> 1409541227-38895-1-git-send-email-jlmuir@imca-cat.org.
> _______________________________________________
> notmuch mailing list
> notmuch@notmuchmail.org
> http://notmuchmail.org/mailman/listinfo/notmuch

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] lib: make notmuch shared library install_name be full path on Mac OS X
  2015-03-04 22:32 [PATCH v2] lib: make notmuch shared library install_name be full path on Mac OS X J. Lewis Muir
  2015-03-04 22:39 ` Jinwoo Lee
  2015-03-05  6:56 ` Tomi Ollila
@ 2015-03-06  7:05 ` David Bremner
  2015-03-06 15:35   ` J. Lewis Muir
  2 siblings, 1 reply; 5+ messages in thread
From: David Bremner @ 2015-03-06  7:05 UTC (permalink / raw)
  To: J. Lewis Muir, notmuch

"J. Lewis Muir" <jlmuir@imca-cat.org> writes:

> The install_name of libnotmuch.dylib on Mac OS X is what is written
> into a program that links against it.  If it is just the name of the
> shared library file, as opposed to the full path, the program won't be
> able to find it when it runs and will abort.  Instead, the install_name
> should be the full path to the shared library (in its final installed
> location).

Pushed this version to master. Thanks for working with us on this.

d

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] lib: make notmuch shared library install_name be full path on Mac OS X
  2015-03-06  7:05 ` David Bremner
@ 2015-03-06 15:35   ` J. Lewis Muir
  0 siblings, 0 replies; 5+ messages in thread
From: J. Lewis Muir @ 2015-03-06 15:35 UTC (permalink / raw)
  To: notmuch

On 3/6/15 1:05 AM, David Bremner wrote:
> "J. Lewis Muir" <jlmuir@imca-cat.org> writes:
>
>> The install_name of libnotmuch.dylib on Mac OS X is what is written
>> into a program that links against it.  If it is just the name of
>> the shared library file, as opposed to the full path, the program
>> won't be able to find it when it runs and will abort.  Instead, the
>> install_name should be the full path to the shared library (in its
>> final installed location).
>
> Pushed this version to master. Thanks for working with us on this.

Hi, David.

Great!  Absolutely.  Thank you!

Lewis

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2015-03-06 15:35 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-03-04 22:32 [PATCH v2] lib: make notmuch shared library install_name be full path on Mac OS X J. Lewis Muir
2015-03-04 22:39 ` Jinwoo Lee
2015-03-05  6:56 ` Tomi Ollila
2015-03-06  7:05 ` David Bremner
2015-03-06 15:35   ` J. Lewis Muir

Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).