unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
* [PATCH] libnotmuch: build symbols list without relying on gcc -aux-info.
@ 2011-06-27  1:08 david
  2011-06-27  2:42 ` david
  0 siblings, 1 reply; 8+ messages in thread
From: david @ 2011-06-27  1:08 UTC (permalink / raw)
  To: notmuch; +Cc: David Bremner

From: David Bremner <bremner@debian.org>

Carl reports "gcc -aux-info notmuch.aux lib/notmuch.h" does not
generate notmuch.aux for him with Debian gcc 4.6.0-8. A small
modification of the original sed regular expression allows us to work
directly from lib/notmuch.h, rather than preprocessing with gcc.

As with most such simple regex based "parsing", this is quite
sensitive to the input format, and needs that each symbol to be
exported from libnotmuch should

- start with "notmuch_"
- be the first non-whitespace token on the line
- be followed by an open parenthesis.
---
 lib/Makefile.local |    5 ++---
 1 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/lib/Makefile.local b/lib/Makefile.local
index a33ba34..0459fd0 100644
--- a/lib/Makefile.local
+++ b/lib/Makefile.local
@@ -76,9 +76,8 @@ $(dir)/$(LIBNAME): $(libnotmuch_modules) notmuch.sym
 	$(call quiet,CXX $(CXXFLAGS)) $(libnotmuch_modules) $(FINAL_LIBNOTMUCH_LDFLAGS) $(LIBRARY_LINK_FLAG) -o $@
 
 notmuch.sym: lib/notmuch.h
-	gcc -aux-info notmuch.aux $<
 	printf "{\nglobal:\n" > notmuch.sym
-	sed  -n 's/.*\(notmuch_[a-z_]*\) (.*/\t\1;/p' notmuch.aux >> notmuch.sym
+	sed  -n 's/^\s*\(notmuch_[a-z_]*\)\s*(.*/\t\1;/p' $< >> notmuch.sym
 	printf "local: *;\n};\n" >> notmuch.sym
 
 $(dir)/$(SONAME): $(dir)/$(LIBNAME)
@@ -103,4 +102,4 @@ install-$(dir): $(dir)/$(LIBNAME)
 	$(LIBRARY_INSTALL_POST_COMMAND)
 
 SRCS  := $(SRCS) $(libnotmuch_c_srcs) $(libnotmuch_cxx_srcs)
-CLEAN := $(CLEAN) $(libnotmuch_modules) $(dir)/$(SONAME) $(dir)/$(LINKER_NAME) $(dir)$(LIBNAME) libnotmuch.a notmuch.aux notmuch.sym
+CLEAN := $(CLEAN) $(libnotmuch_modules) $(dir)/$(SONAME) $(dir)/$(LINKER_NAME) $(dir)$(LIBNAME) libnotmuch.a notmuch.sym
-- 
1.7.5.4

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

* [PATCH] libnotmuch: build symbols list without relying on gcc -aux-info.
  2011-06-27  1:08 [PATCH] libnotmuch: build symbols list without relying on gcc -aux-info david
@ 2011-06-27  2:42 ` david
  2011-06-28 19:04   ` Carl Worth
  2011-11-29  6:51   ` New test for exported symbols David Bremner
  0 siblings, 2 replies; 8+ messages in thread
From: david @ 2011-06-27  2:42 UTC (permalink / raw)
  To: notmuch; +Cc: David Bremner

From: David Bremner <bremner@debian.org>

Carl reports "gcc -aux-info notmuch.aux lib/notmuch.h" does not
generate notmuch.aux for him with Debian gcc 4.6.0-8.

Based on a suggestion by Austin Clements, this version uses objdump to
get the symbols from the object files.

Any symbol that

    - is in some object file in $(libnotmuch_modules), and
    - starts with notmuch_

will be exported.
---

 Here is another way of doing this, probably better unless you are
 very attached to the idea of declaring the API in the header file.
 

 lib/Makefile.local |    7 +++----
 1 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/lib/Makefile.local b/lib/Makefile.local
index a33ba34..38913c6 100644
--- a/lib/Makefile.local
+++ b/lib/Makefile.local
@@ -75,10 +75,9 @@ $(dir)/$(LIBNAME): $(libnotmuch_modules) notmuch.sym
 	echo $(libnotmuch_modules)
 	$(call quiet,CXX $(CXXFLAGS)) $(libnotmuch_modules) $(FINAL_LIBNOTMUCH_LDFLAGS) $(LIBRARY_LINK_FLAG) -o $@
 
-notmuch.sym: lib/notmuch.h
-	gcc -aux-info notmuch.aux $<
+notmuch.sym: $(libnotmuch_modules)
 	printf "{\nglobal:\n" > notmuch.sym
-	sed  -n 's/.*\(notmuch_[a-z_]*\) (.*/\t\1;/p' notmuch.aux >> notmuch.sym
+	objdump -t $(libnotmuch_modules)| awk '$$4 == ".text" && $$6 ~ "^notmuch" {print "\t"$$6";"}' >>notmuch.sym
 	printf "local: *;\n};\n" >> notmuch.sym
 
 $(dir)/$(SONAME): $(dir)/$(LIBNAME)
@@ -103,4 +102,4 @@ install-$(dir): $(dir)/$(LIBNAME)
 	$(LIBRARY_INSTALL_POST_COMMAND)
 
 SRCS  := $(SRCS) $(libnotmuch_c_srcs) $(libnotmuch_cxx_srcs)
-CLEAN := $(CLEAN) $(libnotmuch_modules) $(dir)/$(SONAME) $(dir)/$(LINKER_NAME) $(dir)$(LIBNAME) libnotmuch.a notmuch.aux notmuch.sym
+CLEAN := $(CLEAN) $(libnotmuch_modules) $(dir)/$(SONAME) $(dir)/$(LINKER_NAME) $(dir)$(LIBNAME) libnotmuch.a notmuch.sym
-- 
1.7.5.4

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

* Re: [PATCH] libnotmuch: build symbols list without relying on gcc -aux-info.
  2011-06-27  2:42 ` david
@ 2011-06-28 19:04   ` Carl Worth
  2011-06-28 19:45     ` David Bremner
  2011-11-29  6:51   ` New test for exported symbols David Bremner
  1 sibling, 1 reply; 8+ messages in thread
From: Carl Worth @ 2011-06-28 19:04 UTC (permalink / raw)
  To: david, notmuch; +Cc: David Bremner

[-- Attachment #1: Type: text/plain, Size: 849 bytes --]

On Sun, 26 Jun 2011 23:42:25 -0300, david@tethera.net wrote:
>  Here is another way of doing this, probably better unless you are
>  very attached to the idea of declaring the API in the header file.

Thanks for both of these, David. I've gone ahead and pushed the first,
(generating the symbol list with sed and notmuch.h).

I assume by "better" you mean that this one is less fragile to issues
like the precise formatting of our notmuch.h header file.

Meanwhile, though, our API *is* declared in the header file, (that's
what the header file exists for), so I do prefer to base our symbol list
on it.

In fact, the ideal would probably be to take the objdump method and use
it in the test suite to verify that its output matches the contents of
notmuch.sym generated from the header file.

-Carl

-- 
carl.d.worth@intel.com

[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]

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

* Re: [PATCH] libnotmuch: build symbols list without relying on gcc -aux-info.
  2011-06-28 19:04   ` Carl Worth
@ 2011-06-28 19:45     ` David Bremner
  0 siblings, 0 replies; 8+ messages in thread
From: David Bremner @ 2011-06-28 19:45 UTC (permalink / raw)
  To: Carl Worth, notmuch

[-- Attachment #1: Type: text/plain, Size: 758 bytes --]

On Tue, 28 Jun 2011 12:04:39 -0700, Carl Worth <cworth@cworth.org> wrote:

> I assume by "better" you mean that this one is less fragile to issues
> like the precise formatting of our notmuch.h header file.

Yes, that's what I meant.

> Meanwhile, though, our API *is* declared in the header file, (that's
> what the header file exists for), so I do prefer to base our symbol list
> on it.

Sure, that makes sense to me.  I cherry-picked the sed patch to the
release branch.

> In fact, the ideal would probably be to take the objdump method and use
> it in the test suite to verify that its output matches the contents of
> notmuch.sym generated from the header file.

The second patch being turned into a test sounds like a great idea. I
can do that.

d



[-- Attachment #2: Type: application/pgp-signature, Size: 315 bytes --]

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

* New test for exported symbols
  2011-06-27  2:42 ` david
  2011-06-28 19:04   ` Carl Worth
@ 2011-11-29  6:51   ` David Bremner
  2011-11-29  6:51     ` [PATCH 1/2] test/symbol-hiding: add some whitespace between tests David Bremner
                       ` (2 more replies)
  1 sibling, 3 replies; 8+ messages in thread
From: David Bremner @ 2011-11-29  6:51 UTC (permalink / raw)
  To: notmuch

As long promised, here is a test to compare the list of symbols
retrieved with objdump to those from notmuch.sym

I didn't verify whether this runs properly during out of tree builds.

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

* [PATCH 1/2] test/symbol-hiding: add some whitespace between tests
  2011-11-29  6:51   ` New test for exported symbols David Bremner
@ 2011-11-29  6:51     ` David Bremner
  2011-11-29  6:51     ` [PATCH 2/2] test/symbol-hiding: compare exported symbols with existing one David Bremner
  2011-12-08  0:59     ` New test for exported symbols David Bremner
  2 siblings, 0 replies; 8+ messages in thread
From: David Bremner @ 2011-11-29  6:51 UTC (permalink / raw)
  To: notmuch; +Cc: David Bremner

This is in preparation for adding a third test to this file
---
 test/symbol-hiding |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/test/symbol-hiding b/test/symbol-hiding
index f67b653..6d4e4ff 100755
--- a/test/symbol-hiding
+++ b/test/symbol-hiding
@@ -19,7 +19,9 @@ output="A Xapian exception occurred opening database: Couldn't stat 'fakedb/.not
 caught No chert database found at path \`./nonexistant'"
 
 mkdir -p fakedb/.notmuch
+
 test_expect_success 'running test' run_test
+
 test_begin_subtest 'checking output'
 test_expect_equal "$result" "$output" 
 test_done
-- 
1.7.5.4

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

* [PATCH 2/2] test/symbol-hiding: compare exported symbols with existing one
  2011-11-29  6:51   ` New test for exported symbols David Bremner
  2011-11-29  6:51     ` [PATCH 1/2] test/symbol-hiding: add some whitespace between tests David Bremner
@ 2011-11-29  6:51     ` David Bremner
  2011-12-08  0:59     ` New test for exported symbols David Bremner
  2 siblings, 0 replies; 8+ messages in thread
From: David Bremner @ 2011-11-29  6:51 UTC (permalink / raw)
  To: notmuch; +Cc: David Bremner

We assume that any symbol starting with notmuch_ in lib/*.o should be
exported, and that only those symbols should be exported.
---
 test/symbol-hiding |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/test/symbol-hiding b/test/symbol-hiding
index 6d4e4ff..68f0d1b 100755
--- a/test/symbol-hiding
+++ b/test/symbol-hiding
@@ -24,4 +24,10 @@ test_expect_success 'running test' run_test
 
 test_begin_subtest 'checking output'
 test_expect_equal "$result" "$output" 
+
+test_begin_subtest 'comparing existing to exported symbols'
+objdump -t $TEST_DIRECTORY/../lib/*.o | awk '$4 == ".text" && $6 ~ "^notmuch" {print $6}' | sort | uniq > ACTUAL
+sed -n 's/[[:blank:]]*\(notmuch_[^;]*\);/\1/p' $TEST_DIRECTORY/../notmuch.sym | sort | uniq > EXPORTED
+test_expect_equal_file EXPORTED ACTUAL
+
 test_done
-- 
1.7.5.4

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

* Re: New test for exported symbols
  2011-11-29  6:51   ` New test for exported symbols David Bremner
  2011-11-29  6:51     ` [PATCH 1/2] test/symbol-hiding: add some whitespace between tests David Bremner
  2011-11-29  6:51     ` [PATCH 2/2] test/symbol-hiding: compare exported symbols with existing one David Bremner
@ 2011-12-08  0:59     ` David Bremner
  2 siblings, 0 replies; 8+ messages in thread
From: David Bremner @ 2011-12-08  0:59 UTC (permalink / raw)
  To: notmuch

On Mon, 28 Nov 2011 22:51:14 -0800, David Bremner <bremner@debian.org> wrote:
> As long promised, here is a test to compare the list of symbols
> retrieved with objdump to those from notmuch.sym
> 
> I didn't verify whether this runs properly during out of tree builds.

aidecoe did verify this for me on Gentoo, so I pushed these 

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

end of thread, other threads:[~2011-12-08  0:59 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-06-27  1:08 [PATCH] libnotmuch: build symbols list without relying on gcc -aux-info david
2011-06-27  2:42 ` david
2011-06-28 19:04   ` Carl Worth
2011-06-28 19:45     ` David Bremner
2011-11-29  6:51   ` New test for exported symbols David Bremner
2011-11-29  6:51     ` [PATCH 1/2] test/symbol-hiding: add some whitespace between tests David Bremner
2011-11-29  6:51     ` [PATCH 2/2] test/symbol-hiding: compare exported symbols with existing one David Bremner
2011-12-08  0:59     ` New test for exported symbols David Bremner

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).