Skip to contentSkip to conversation

sngrep: use pkg-config to discover OpenSSL to fix static linking

PATCH New Thomas Petazzoni 3 participants 4 messages Mar 4, 2017 – Mar 7, 2017

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 sngrep: use pkg-config to discover OpenSSL to fix static linking

Building sngrep with OpenSSL support in static linking configurations currently fails due to undefined symbols in the OpenSSL library. It's the usual problem with using AC_CHECK_LIB() to discover libraries instead of the pkg-config based PKG_CHECK_MODULES().

Therefore, this commit introduces a patch that switches to using pkg-config to discover OpenSSL. A preliminary patch is needed, without which appending to LIBS/CFLAGS doesn't work. Both patches have been submitted upstream.

Fixes:

http://autobuild.buildroot.net/results/911143de823b2c749ac0a59dfa06adb6ddd3de50/

---
 .../0001-src-Makefile.am-don-t-use-VPATH.patch     | 43 +++++++++++++
 ...e.ac-switch-to-pkg-config-to-find-openssl.patch | 75 ++++++++++++++++++++++
 package/sngrep/sngrep.mk                           |  2 +-
 3 files changed, 119 insertions(+), 1 deletion(-)
 create mode 100644 package/sngrep/0001-src-Makefile.am-don-t-use-VPATH.patch
 create mode 100644 package/sngrep/0002-configure.ac-switch-to-pkg-config-to-find-openssl.patch
package/sngrep/0001-src-Makefile.am-don-t-use-VPATH.patch new file +43 -0
new file mode 100644
index 0000000..3d98203
@@ -0,0 +1,43 @@
+From b6dcae8ec4334e2436cfa19a8052c3473f57a586 Mon Sep 17 00:00:00 2001
+From: Thomas Petazzoni <[email protected]>
+Date: Sat, 4 Mar 2017 15:02:43 +0100
+Subject: [PATCH 1/2] src/Makefile.am: don't use VPATH
+
+VPATH is a mechanism used to allow out-of-tree build, not to use source
+code from a different directory. For this purpose, one should simply use
+the "subdir-objects" AUTOMAKE_OPTIONS, and reference the source code of
+the sub-directory in the <prog>_SOURCES variable.
+
+Signed-off-by: Thomas Petazzoni <[email protected]>
+Upstream-status: https://github.com/irontec/sngrep/pull/176
+---
+ src/Makefile.am | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 931ee06..961f4a0 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -1,5 +1,5 @@
++AUTOMAKE_OPTIONS=subdir-objects
+ bin_PROGRAMS=sngrep
+-VPATH=curses
+ sngrep_SOURCES=capture.c
+ if USE_EEP
+ sngrep_SOURCES+=capture_eep.c
+@@ -12,8 +12,8 @@ sngrep_SOURCES+=capture_openssl.c
+ endif
+ sngrep_SOURCES+=address.c packet.c sip.c sip_call.c sip_msg.c sip_attr.c main.c
+ sngrep_SOURCES+=option.c group.c filter.c keybinding.c media.c setting.c rtp.c
+-sngrep_SOURCES+=util.c hash.c vector.c ui_panel.c scrollbar.c
+-sngrep_SOURCES+=ui_manager.c ui_call_list.c ui_call_flow.c ui_call_raw.c
+-sngrep_SOURCES+=ui_stats.c ui_filter.c ui_save.c ui_msg_diff.c
+-sngrep_SOURCES+=ui_column_select.c ui_settings.c
++sngrep_SOURCES+=util.c hash.c vector.c curses/ui_panel.c curses/scrollbar.c
++sngrep_SOURCES+=curses/ui_manager.c curses/ui_call_list.c curses/ui_call_flow.c curses/ui_call_raw.c
++sngrep_SOURCES+=curses/ui_stats.c curses/ui_filter.c curses/ui_save.c curses/ui_msg_diff.c
++sngrep_SOURCES+=curses/ui_column_select.c curses/ui_settings.c
+ 
+-- 
+2.7.4
+
package/sngrep/0002-configure.ac-switch-to-pkg-config-to-find-openssl.patch new file +75 -0

75 lines not on this page · raw message

package/sngrep/sngrep.mk +1 -1
index b82d8ce..1e0e051 100644
@@ -9,7 +9,7 @@ SNGREP_SITE = $(call github,irontec,sngrep,$(SNGREP_VERSION))
 SNGREP_LICENSE = GPLv3+
 SNGREP_LICENSE_FILES = LICENSE
 SNGREP_AUTORECONF = YES
-SNGREP_DEPENDENCIES = libpcap ncurses
+SNGREP_DEPENDENCIES = libpcap ncurses host-pkgconf
 
 SNGREP_CONF_ENV += \
 	$(if $(BR2_STATIC_LIBS),LIBS="`$(STAGING_DIR)/usr/bin/pcap-config --static --libs`")
Signature · 1 line
2.7.4
#1 lore raw

PATCH 1/1 sngrep: use pkg-config to discover OpenSSL to fix static linking

Thomas, All,

On 2017-03-04 15:15 +0100, Thomas Petazzoni spake thusly:

Quoted 10 lines

Building sngrep with OpenSSL support in static linking configurations currently fails due to undefined symbols in the OpenSSL library. It's the usual problem with using AC_CHECK_LIB() to discover libraries instead of the pkg-config based PKG_CHECK_MODULES().

Therefore, this commit introduces a patch that switches to using pkg-config to discover OpenSSL. A preliminary patch is needed, without which appending to LIBS/CFLAGS doesn't work. Both patches have been submitted upstream.

Quoted 5 lines

Fixes:

http://autobuild.buildroot.net/results/911143de823b2c749ac0a59dfa06adb6ddd3de50/

Merged upstream.

Regards,
Yann E. MORIN.

Quoted 158 lines
---
 .../0001-src-Makefile.am-don-t-use-VPATH.patch     | 43 +++++++++++++
 ...e.ac-switch-to-pkg-config-to-find-openssl.patch | 75 ++++++++++++++++++++++
 package/sngrep/sngrep.mk                           |  2 +-
 3 files changed, 119 insertions(+), 1 deletion(-)
 create mode 100644 package/sngrep/0001-src-Makefile.am-don-t-use-VPATH.patch
 create mode 100644 package/sngrep/0002-configure.ac-switch-to-pkg-config-to-find-openssl.patch
package/sngrep/0001-src-Makefile.am-don-t-use-VPATH.patch new file +43 -0
new file mode 100644
index 0000000..3d98203
@@ -0,0 +1,43 @@
+From b6dcae8ec4334e2436cfa19a8052c3473f57a586 Mon Sep 17 00:00:00 2001
+From: Thomas Petazzoni <[email protected]>
+Date: Sat, 4 Mar 2017 15:02:43 +0100
+Subject: [PATCH 1/2] src/Makefile.am: don't use VPATH
+
+VPATH is a mechanism used to allow out-of-tree build, not to use source
+code from a different directory. For this purpose, one should simply use
+the "subdir-objects" AUTOMAKE_OPTIONS, and reference the source code of
+the sub-directory in the <prog>_SOURCES variable.
+
+Signed-off-by: Thomas Petazzoni <[email protected]>
+Upstream-status: https://github.com/irontec/sngrep/pull/176
+---
+ src/Makefile.am | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 931ee06..961f4a0 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -1,5 +1,5 @@
++AUTOMAKE_OPTIONS=subdir-objects
+ bin_PROGRAMS=sngrep
+-VPATH=curses
+ sngrep_SOURCES=capture.c
+ if USE_EEP
+ sngrep_SOURCES+=capture_eep.c
+@@ -12,8 +12,8 @@ sngrep_SOURCES+=capture_openssl.c
+ endif
+ sngrep_SOURCES+=address.c packet.c sip.c sip_call.c sip_msg.c sip_attr.c main.c
+ sngrep_SOURCES+=option.c group.c filter.c keybinding.c media.c setting.c rtp.c
+-sngrep_SOURCES+=util.c hash.c vector.c ui_panel.c scrollbar.c
+-sngrep_SOURCES+=ui_manager.c ui_call_list.c ui_call_flow.c ui_call_raw.c
+-sngrep_SOURCES+=ui_stats.c ui_filter.c ui_save.c ui_msg_diff.c
+-sngrep_SOURCES+=ui_column_select.c ui_settings.c
++sngrep_SOURCES+=util.c hash.c vector.c curses/ui_panel.c curses/scrollbar.c
++sngrep_SOURCES+=curses/ui_manager.c curses/ui_call_list.c curses/ui_call_flow.c curses/ui_call_raw.c
++sngrep_SOURCES+=curses/ui_stats.c curses/ui_filter.c curses/ui_save.c curses/ui_msg_diff.c
++sngrep_SOURCES+=curses/ui_column_select.c curses/ui_settings.c
+ 
+-- 
+2.7.4
+
package/sngrep/0002-configure.ac-switch-to-pkg-config-to-find-openssl.patch new file +75 -0
new file mode 100644
index 0000000..b51581f
@@ -0,0 +1,75 @@
+From 22b08ab1a45eb3773b3c90dc37a31a7574520daa Mon Sep 17 00:00:00 2001
+From: Thomas Petazzoni <[email protected]>
+Date: Sat, 4 Mar 2017 14:56:53 +0100
+Subject: [PATCH 2/2] configure.ac: switch to pkg-config to find openssl
+
+Using AC_CHECK_LIB() doesn't work properly for static linking, because
+it doesn't return information on transitive dependencies of
+libraries. For example, if library A internally uses library B, then
+with dynamic linking, doing -lA is sufficient. However, with static
+linking, one must do -lA -lB, and AC_CHECK_LIB() will only give the -lA
+information. This for example causes a build failure when building
+sngrep statically with openssl enabled:
+
+checking for SSL_new in -lssl... no
+configure: error:  You need to have libssl installed to compile sngrep
+
+due to undefined symbols in the OpenSSL library.
+
+The proper solution for this is to discover the library using
+pkg-config, because pkg-config properly returns the list of necessary
+libraries, as it understands the concept of "list of libraries needed
+when dynamic linking" and "list of libraries needed for static linking".
+
+Signed-off-by: Thomas Petazzoni <[email protected]>
+Upstream-status: https://github.com/irontec/sngrep/pull/176
+---
+ configure.ac    | 9 +--------
+ src/Makefile.am | 4 ++++
+ 2 files changed, 5 insertions(+), 8 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 42e00e9..9f8e6d2 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -129,14 +129,7 @@ AS_IF([test "x$WITH_OPENSSL" == "xyes"], [
+ 	AS_IF([test "x$WITH_GNUTLS" == "xyes"], [
+ 	    AC_MSG_ERROR([ GnuTLS and OpenSSL can not be enabled at the same time ])
+ 	], [])
+-
+-	AC_CHECK_LIB([ssl], [SSL_new], [], [
+-	    AC_MSG_ERROR([ You need to have libssl installed to compile sngrep])
+-	])
+-
+-	AC_CHECK_LIB([crypto], [EVP_get_cipherbyname], [], [
+-	    AC_MSG_ERROR([ You need to have libcrypto installed to compile sngrep])
+-	])
++	PKG_CHECK_MODULES([SSL], [libssl libcrypto])
+ 	AC_DEFINE([WITH_OPENSSL],[],[Compile With Openssl compatibility])
+ ], [])
+ 
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 961f4a0..3a471b7 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -1,6 +1,8 @@
+ AUTOMAKE_OPTIONS=subdir-objects
+ bin_PROGRAMS=sngrep
+ sngrep_SOURCES=capture.c
++sngrep_CFLAGS=
++sngrep_LDADD=
+ if USE_EEP
+ sngrep_SOURCES+=capture_eep.c
+ endif
+@@ -9,6 +11,8 @@ sngrep_SOURCES+=capture_gnutls.c
+ endif
+ if WITH_OPENSSL
+ sngrep_SOURCES+=capture_openssl.c
++sngrep_CFLAGS+=$(SSL_CFLAGS)
++sngrep_LDADD+=$(SSL_LIBS)
+ endif
+ sngrep_SOURCES+=address.c packet.c sip.c sip_call.c sip_msg.c sip_attr.c main.c
+ sngrep_SOURCES+=option.c group.c filter.c keybinding.c media.c setting.c rtp.c
+-- 
+2.7.4
+
package/sngrep/sngrep.mk +1 -1
index b82d8ce..1e0e051 100644
@@ -9,7 +9,7 @@ SNGREP_SITE = $(call github,irontec,sngrep,$(SNGREP_VERSION))
 SNGREP_LICENSE = GPLv3+
 SNGREP_LICENSE_FILES = LICENSE
 SNGREP_AUTORECONF = YES
-SNGREP_DEPENDENCIES = libpcap ncurses
+SNGREP_DEPENDENCIES = libpcap ncurses host-pkgconf
 
 SNGREP_CONF_ENV += \
 	$(if $(BR2_STATIC_LIBS),LIBS="`$(STAGING_DIR)/usr/bin/pcap-config --static --libs`")
Signature · 6 lines
2.7.4

_______________________________________________
buildroot mailing list
buildroot at busybox.net
http://lists.busybox.net/mailman/listinfo/buildroot
Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
author Applied
#2 lore raw

PATCH 1/1 sngrep: use pkg-config to discover OpenSSL to fix static linking

In reply to Thomas Petazzoni

Hello,

Quoted 14 lines · Thomas Petazzoni

Building sngrep with OpenSSL support in static linking configurations currently fails due to undefined symbols in the OpenSSL library. It's the usual problem with using AC_CHECK_LIB() to discover libraries instead of the pkg-config based PKG_CHECK_MODULES().

Therefore, this commit introduces a patch that switches to using pkg-config to discover OpenSSL. A preliminary patch is needed, without which appending to LIBS/CFLAGS doesn't work. Both patches have been submitted upstream.

Fixes:

http://autobuild.buildroot.net/results/911143de823b2c749ac0a59dfa06adb6ddd3de50/

Quoted 8 lines
---
 .../0001-src-Makefile.am-don-t-use-VPATH.patch     | 43 +++++++++++++
 ...e.ac-switch-to-pkg-config-to-find-openssl.patch | 75 ++++++++++++++++++++++
 package/sngrep/sngrep.mk                           |  2 +-
 3 files changed, 119 insertions(+), 1 deletion(-)
 create mode 100644 package/sngrep/0001-src-Makefile.am-don-t-use-VPATH.patch
 create mode 100644 package/sngrep/0002-configure.ac-switch-to-pkg-config-to-find-openssl.patch

Applied to master, thanks.

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#3 lore raw

PATCH 1/1 sngrep: use pkg-config to discover OpenSSL to fix static linking

In reply to Thomas Petazzoni
Quoted 12 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

"Thomas" == Thomas Petazzoni <[email protected]> writes:

Building sngrep with OpenSSL support in static linking configurations currently fails due to undefined symbols in the OpenSSL library. It's the usual problem with using AC_CHECK_LIB() to discover libraries instead of the pkg-config based PKG_CHECK_MODULES().

Therefore, this commit introduces a patch that switches to using pkg-config to discover OpenSSL. A preliminary patch is needed, without which appending to LIBS/CFLAGS doesn't work. Both patches have been submitted upstream.

Quoted 5 lines

Fixes:

http://autobuild.buildroot.net/results/911143de823b2c749ac0a59dfa06adb6ddd3de50/

Committed to 2017.02.x, thanks.

Signature · 1 line
Bye, Peter Korsgaard