notmuch release 0.20.2 now available
Suvayu Ali
fatkasuvayu+linux at gmail.com
Mon Jul 6 07:04:10 PDT 2015
Hi David,
First, apologies for the delay. I had a bicycle accident, still
recovering.
On Tue, Jun 30, 2015 at 07:02:52PM +0200, David Bremner wrote:
> Suvayu Ali <fatkasuvayu+linux at gmail.com> writes:
>
> > Yes, I have looked at what the official packages[1] do, I do exactly the
> > same[2]. Essentially the spec file does the following:
> >
> > pushd bindings/ruby
> > ruby extconf.rb --vendor --with-cflags="%{optflags}"
> > make %{?_smp_mflags}
> > popd
>
> I think the problem is contained in the original message. Since we want
> to create a shared library "notmuch.so" for ruby to import, we need to
> compile the C files in bindings/ruby with -fPIC.
>
> I don't know if this is Debian specific, or ruby version specific, but
> on my Debian Jessie machine with ruby 2.1, the generated Makefile
> bindings/ruby/Makefile has
>
> CFLAGS = $(CCDLFLAGS) -g -O2 -fstack-protector-strong -Wformat
> -Werror=format-security -fPIC $(ARCH_FLAG)
>
> in it
>
> even when invoked outside the notmuch build system; e.g.
>
> % cd bindings/ruby && ruby extconf.rb
>
> I guess the first step is to see if the -fPIC flag is also there on
> Fedora, and if not, why not. If I look at the builds for 0.19 [1]
> it seems it is. But notice there it is not required to pass it in to "--with-cflags"
Indeed. I looked at the generated Makefiles, they like below:
--- nm-0.20.2.mk 2015-07-06 15:11:26.138317221 +0200
+++ nm-master.mk 2015-07-06 15:41:14.929951640 +0200
@@ -80,7 +80,7 @@
debugflags = -ggdb3
warnflags = -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration -Wdeprecated-declarations -Wno-packed-bitfield-compat
CCDLFLAGS = -fPIC
-CFLAGS = $(CCDLFLAGS) -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic $(ARCH_FLAG)
+CFLAGS = $(CCDLFLAGS) -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -mtune=generic -fPIC $(ARCH_FLAG)
INCFLAGS = -I. -I../../lib -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir)
DEFS =
CPPFLAGS = $(DEFS) $(cppflags)
So actually, the master version gets the -fPIC flag. But it should be
redundant, since CCDLFLAGS is already set to -fPIC. Now when I compare
the corresponding compile commands, I see (you also noticed that in the
logs):
0.20.2: gcc -I. -I../../lib -I/usr/include -I/usr/include/ruby/backward -I/usr/include -I. -fPIC -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -m64 -o message.o -c message.c
master: gcc -I. -I../../lib -I/usr/include -I/usr/include/ruby/backward -I/usr/include -I. -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -o message.o -c message.c
So the trailing bits of the command is somehow dropped, and the
CCDLFLAGS seems to be absent (see, no empty space either). I do not
understand why that would be the case. I'll dig further when I can find
some more time ...
> [1] https://kojipkgs.fedoraproject.org/packages/notmuch/0.19/1.fc21/data/logs/x86_64/build.log
> - I couldn't find x86_64 build logs for 0.20
You can't, Fedora ships only 0.19. That's why I maintain the 0.20+ copr
repository, for myself and other interested (invisible) users out there
:-p. This gap was much wider in the past.
Cheers,
--
Suvayu
Open source is the future. It sets us free.
More information about the notmuch
mailing list