Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:12.2:PowerPC
libssh2_org
0005-Add-symbol-versioning.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0005-Add-symbol-versioning.patch of Package libssh2_org
From 11c0cce6018e05a92719d6989826ccc2a8f23c81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cristian=20Rodr=C3=ADguez?= <crrodriguez@opensuse.org> Date: Thu, 2 Feb 2012 00:57:32 -0300 Subject: [PATCH 5/6] Add symbol versioning --- configure.ac | 84 ++++++++---------------------- m4/ld-version-script.m4 | 53 +++++++++++++++++++ m4/visibility.m4 | 78 ++++++++++++++++++++++++++++ src/Makefile.am | 11 +++- src/libssh2.map | 132 +++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 294 insertions(+), 64 deletions(-) create mode 100644 m4/ld-version-script.m4 create mode 100644 m4/visibility.m4 create mode 100644 src/libssh2.map diff --git a/configure.ac b/configure.ac index 5f94099..7d51197 100644 --- a/configure.ac +++ b/configure.ac @@ -1,10 +1,19 @@ -# AC_PREREQ(2.57) -AC_INIT(libssh2, [-], libssh2-devel@cool.haxx.se) +AC_INIT([libssh2],[-],[libssh2-devel@cool.haxx.se]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_SRCDIR([src]) -AM_CONFIG_HEADER([src/libssh2_config.h example/libssh2_config.h]) +AC_CONFIG_HEADERS([src/libssh2_config.h example/libssh2_config.h]) AM_MAINTAINER_MODE +AC_PROG_CC_STDC +AC_USE_SYSTEM_EXTENSIONS +AC_SYS_LARGEFILE +AC_PROG_INSTALL +AC_PROG_LN_S +AC_PROG_MAKE_SET +LT_INIT([win32-dll disable-static pic-only]) +gl_VISIBILITY +gl_LD_VERSION_SCRIPT + dnl SED is needed by some of the tools AC_PATH_PROG( SED, sed, sed-was-not-found-by-configure, $PATH:/usr/bin:/usr/local/bin) @@ -67,30 +76,22 @@ AC_SEARCH_LIBS(inet_addr, nsl) AC_SUBST(LIBS) -AC_PROG_CC -AC_PROG_INSTALL -AC_PROG_LN_S -AC_PROG_MAKE_SET AC_PATH_PROGS(SSHD, [sshd], [], [$PATH$PATH_SEPARATOR/usr/libexec$PATH_SEPARATOR]dnl [/usr/sbin$PATH_SEPARATOR/usr/etc$PATH_SEPARATOR/etc]) AM_CONDITIONAL(SSHD, test -n "$SSHD") -AC_LIBTOOL_WIN32_DLL -AC_PROG_LIBTOOL AC_C_BIGENDIAN -dnl check for how to do large files -AC_SYS_LARGEFILE # Configure parameters AC_ARG_WITH(libgcrypt, - AC_HELP_STRING([--with-libgcrypt],[Use Libgcrypt for crypto]), + AS_HELP_STRING([--with-libgcrypt],[Use Libgcrypt for crypto]), use_libgcrypt=$withval,use_libgcrypt=auto) AC_ARG_WITH(openssl, - AC_HELP_STRING([--with-openssl],[Use OpenSSL for crypto]), + AS_HELP_STRING([--with-openssl],[Use OpenSSL for crypto]), use_openssl=$withval,use_openssl=auto) AC_ARG_WITH(libz, - AC_HELP_STRING([--with-libz],[Use Libz for compression]), + AS_HELP_STRING([--with-libz],[Use Libz for compression]), use_libz=$withval,use_libz=auto) # Look for OpenSSL (default) @@ -136,15 +137,15 @@ fi # Optional Settings # AC_ARG_ENABLE(crypt-none, - AC_HELP_STRING([--enable-crypt-none],[Permit "none" cipher -- NOT RECOMMENDED]), + AS_HELP_STRING([--enable-crypt-none],[Permit "none" cipher -- NOT RECOMMENDED]), [AC_DEFINE(LIBSSH2_CRYPT_NONE, 1, [Enable "none" cipher -- NOT RECOMMENDED])]) AC_ARG_ENABLE(mac-none, - AC_HELP_STRING([--enable-mac-none],[Permit "none" MAC -- NOT RECOMMENDED]), + AS_HELP_STRING([--enable-mac-none],[Permit "none" MAC -- NOT RECOMMENDED]), [AC_DEFINE(LIBSSH2_MAC_NONE, 1, [Enable "none" MAC -- NOT RECOMMENDED])]) AC_ARG_ENABLE(gex-new, - AC_HELP_STRING([--disable-gex-new],[Disable "new" diffie-hellman-group-exchange-sha1 method]), + AS_HELP_STRING([--disable-gex-new],[Disable "new" diffie-hellman-group-exchange-sha1 method]), [GEX_NEW=$enableval]) if test "$GEX_NEW" != "no"; then AC_DEFINE(LIBSSH2_DH_GEX_NEW, 1, [Enable newer diffie-hellman-group-exchange-sha1 syntax]) @@ -155,8 +156,8 @@ dnl option to switch on compiler debug options dnl AC_MSG_CHECKING([whether to enable pedantic and debug compiler options]) AC_ARG_ENABLE(debug, -AC_HELP_STRING([--enable-debug],[Enable pedantic and debug options]) -AC_HELP_STRING([--disable-debug],[Disable debug options]), +AS_HELP_STRING([--enable-debug],[Enable pedantic and debug options]) +AS_HELP_STRING([--disable-debug],[Disable debug options]), [ case "$enable_debug" in no) AC_MSG_RESULT(no) @@ -176,45 +177,6 @@ AC_HELP_STRING([--disable-debug],[Disable debug options]), AC_MSG_RESULT(no) ) -dnl ************************************************************ -dnl Enable hiding of internal symbols in library to reduce its size and -dnl speed dynamic linking of applications. This currently is only supported -dnl on gcc >= 4.0 and SunPro C. -dnl -AC_MSG_CHECKING([whether to enable hidden symbols in the library]) -AC_ARG_ENABLE(hidden-symbols, -AC_HELP_STRING([--enable-hidden-symbols],[Hide internal symbols in library]) -AC_HELP_STRING([--disable-hidden-symbols],[Leave all symbols with default visibility in library]), -[ case "$enableval" in - no) - AC_MSG_RESULT(no) - ;; - *) - AC_MSG_CHECKING([whether $CC supports it]) - if test "$GCC" = yes ; then - if $CC --help --verbose 2>&1 | grep fvisibility= > /dev/null ; then - AC_MSG_RESULT(yes) - AC_DEFINE(LIBSSH2_API, [__attribute__ ((visibility ("default")))], [to make a symbol visible]) - CFLAGS="$CFLAGS -fvisibility=hidden" - else - AC_MSG_RESULT(no) - fi - - else - dnl Test for SunPro cc - if $CC 2>&1 | grep flags >/dev/null && $CC -flags | grep xldscope= >/dev/null ; then - AC_MSG_RESULT(yes) - AC_DEFINE(LIBSSH2_API, [__global], [to make a symbol visible]) - CFLAGS="$CFLAGS -xldscope=hidden" - else - AC_MSG_RESULT(no) - fi - fi - ;; - esac ], - AC_MSG_RESULT(no) -) - # Checks for header files. # AC_HEADER_STDC AC_CHECK_HEADERS([errno.h fcntl.h stdio.h stdlib.h unistd.h sys/uio.h]) @@ -254,16 +216,16 @@ AC_CHECK_FUNCS(gettimeofday select strtoll) dnl Check for select() into ws2_32 for Msys/Mingw if test "$ac_cv_func_select" != "yes"; then AC_MSG_CHECKING([for select in ws2_32]) - AC_TRY_LINK([ + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #ifdef HAVE_WINSOCK2_H #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #include <winsock2.h> #endif - ],[ + ]], [[ select(0,(fd_set *)NULL,(fd_set *)NULL,(fd_set *)NULL,(struct timeval *)NULL); - ],[ + ]])],[ AC_MSG_RESULT([yes]) HAVE_SELECT="1" AC_DEFINE_UNQUOTED(HAVE_SELECT, 1, diff --git a/m4/ld-version-script.m4 b/m4/ld-version-script.m4 new file mode 100644 index 0000000..5ed93ef --- /dev/null +++ b/m4/ld-version-script.m4 @@ -0,0 +1,53 @@ +# ld-version-script.m4 serial 3 +dnl Copyright (C) 2008-2012 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Simon Josefsson + +# FIXME: The test below returns a false positive for mingw +# cross-compiles, 'local:' statements does not reduce number of +# exported symbols in a DLL. Use --disable-ld-version-script to work +# around the problem. + +# gl_LD_VERSION_SCRIPT +# -------------------- +# Check if LD supports linker scripts, and define automake conditional +# HAVE_LD_VERSION_SCRIPT if so. +AC_DEFUN([gl_LD_VERSION_SCRIPT], +[ + AC_ARG_ENABLE([ld-version-script], + AS_HELP_STRING([--enable-ld-version-script], + [enable linker version script (default is enabled when possible)]), + [have_ld_version_script=$enableval], []) + if test -z "$have_ld_version_script"; then + AC_MSG_CHECKING([if LD -Wl,--version-script works]) + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map" + cat > conftest.map <<EOF +foo +EOF + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], + [accepts_syntax_errors=yes], [accepts_syntax_errors=no]) + if test "$accepts_syntax_errors" = no; then + cat > conftest.map <<EOF +VERS_1 { + global: sym; +}; + +VERS_2 { + global: sym; +} VERS_1; +EOF + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], + [have_ld_version_script=yes], [have_ld_version_script=no]) + else + have_ld_version_script=no + fi + rm -f conftest.map + LDFLAGS="$save_LDFLAGS" + AC_MSG_RESULT($have_ld_version_script) + fi + AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes") +]) diff --git a/m4/visibility.m4 b/m4/visibility.m4 new file mode 100644 index 0000000..c519711 --- /dev/null +++ b/m4/visibility.m4 @@ -0,0 +1,78 @@ +# visibility.m4 serial 4 (gettext-0.18.2) +dnl Copyright (C) 2005, 2008, 2010-2012 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl Tests whether the compiler supports the command-line option +dnl -fvisibility=hidden and the function and variable attributes +dnl __attribute__((__visibility__("hidden"))) and +dnl __attribute__((__visibility__("default"))). +dnl Does *not* test for __visibility__("protected") - which has tricky +dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on +dnl MacOS X. +dnl Does *not* test for __visibility__("internal") - which has processor +dnl dependent semantics. +dnl Does *not* test for #pragma GCC visibility push(hidden) - which is +dnl "really only recommended for legacy code". +dnl Set the variable CFLAG_VISIBILITY. +dnl Defines and sets the variable HAVE_VISIBILITY. + +AC_DEFUN([gl_VISIBILITY], +[ + AC_REQUIRE([AC_PROG_CC]) + CFLAG_VISIBILITY= + HAVE_VISIBILITY=0 + if test -n "$GCC"; then + dnl First, check whether -Werror can be added to the command line, or + dnl whether it leads to an error because of some other option that the + dnl user has put into $CC $CFLAGS $CPPFLAGS. + AC_MSG_CHECKING([whether the -Werror option is usable]) + AC_CACHE_VAL([gl_cv_cc_vis_werror], [ + gl_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Werror" + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[]], [[]])], + [gl_cv_cc_vis_werror=yes], + [gl_cv_cc_vis_werror=no]) + CFLAGS="$gl_save_CFLAGS"]) + AC_MSG_RESULT([$gl_cv_cc_vis_werror]) + dnl Now check whether visibility declarations are supported. + AC_MSG_CHECKING([for simple visibility declarations]) + AC_CACHE_VAL([gl_cv_cc_visibility], [ + gl_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fvisibility=hidden" + dnl We use the option -Werror and a function dummyfunc, because on some + dnl platforms (Cygwin 1.7) the use of -fvisibility triggers a warning + dnl "visibility attribute not supported in this configuration; ignored" + dnl at the first function definition in every compilation unit, and we + dnl don't want to use the option in this case. + if test $gl_cv_cc_vis_werror = yes; then + CFLAGS="$CFLAGS -Werror" + fi + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[extern __attribute__((__visibility__("hidden"))) int hiddenvar; + extern __attribute__((__visibility__("default"))) int exportedvar; + extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); + extern __attribute__((__visibility__("default"))) int exportedfunc (void); + void dummyfunc (void) {} + ]], + [[]])], + [gl_cv_cc_visibility=yes], + [gl_cv_cc_visibility=no]) + CFLAGS="$gl_save_CFLAGS"]) + AC_MSG_RESULT([$gl_cv_cc_visibility]) + if test $gl_cv_cc_visibility = yes; then + CFLAG_VISIBILITY="-fvisibility=hidden" + HAVE_VISIBILITY=1 + AC_DEFINE(LIBSSH2_API, [__attribute__ ((visibility ("default")))], [to make a symbol visible]) + fi + fi + AC_SUBST([CFLAG_VISIBILITY]) + AC_SUBST([HAVE_VISIBILITY]) + AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY], + [Define to 1 or 0, depending whether the compiler supports simple visibility declarations.]) +]) diff --git a/src/Makefile.am b/src/Makefile.am index 53fb4e8..4db2638 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -45,6 +45,11 @@ VERSION=-version-info 1:1:0 # set age to 0. (c:r:a=0) # -libssh2_la_LDFLAGS = $(VERSION) -no-undefined \ - -export-symbols-regex '^libssh2_.*' \ - $(LTLIBGCRYPT) $(LTLIBSSL) $(LTLIBZ) +libssh2_la_CFLAGS = $(CFLAG_VISIBILITY) +libssh2_la_LDFLAGS = $(VERSION) -no-undefined +if HAVE_LD_VERSION_SCRIPT +libssh2_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libssh2.map +else +libssh2_la_LDFLAGS += -export-symbols-regex '^libssh2_.*' +endif +libssh2_la_LIBADD = $(LTLIBGCRYPT) $(LTLIBSSL) $(LTLIBZ) diff --git a/src/libssh2.map b/src/libssh2.map new file mode 100644 index 0000000..5639bd1 --- /dev/null +++ b/src/libssh2.map @@ -0,0 +1,132 @@ +LIBSSH2_1.3.0 { +global: +libssh2_agent_connect; +libssh2_agent_disconnect; +libssh2_agent_free; +libssh2_agent_get_identity; +libssh2_agent_init; +libssh2_agent_list_identities; +libssh2_agent_userauth; +libssh2_banner_set; +libssh2_base64_decode; +libssh2_channel_close; +libssh2_channel_direct_tcpip_ex; +libssh2_channel_eof; +libssh2_channel_flush_ex; +libssh2_channel_forward_accept; +libssh2_channel_forward_cancel; +libssh2_channel_forward_listen_ex; +libssh2_channel_free; +libssh2_channel_get_exit_signal; +libssh2_channel_get_exit_status; +libssh2_channel_handle_extended_data; +libssh2_channel_handle_extended_data2; +libssh2_channel_open_ex; +libssh2_channel_process_startup; +libssh2_channel_read_ex; +libssh2_channel_receive_window_adjust; +libssh2_channel_receive_window_adjust2; +libssh2_channel_request_pty_ex; +libssh2_channel_request_pty_size_ex; +libssh2_channel_send_eof; +libssh2_channel_set_blocking; +libssh2_channel_setenv_ex; +libssh2_channel_wait_closed; +libssh2_channel_wait_eof; +libssh2_channel_window_read_ex; +libssh2_channel_window_write_ex; +libssh2_channel_write_ex; +libssh2_channel_x11_req_ex; +libssh2_crypt_methods; +libssh2_exit; +libssh2_free; +libssh2_hostkey_hash; +libssh2_hostkey_methods; +libssh2_init; +libssh2_keepalive_config; +libssh2_keepalive_send; +libssh2_knownhost_add; +libssh2_knownhost_addc; +libssh2_knownhost_check; +libssh2_knownhost_checkp; +libssh2_knownhost_del; +libssh2_knownhost_free; +libssh2_knownhost_get; +libssh2_knownhost_init; +libssh2_knownhost_readfile; +libssh2_knownhost_readline; +libssh2_knownhost_writefile; +libssh2_knownhost_writeline; +libssh2_md5; +libssh2_poll; +libssh2_poll_channel_read; +libssh2_publickey_add_ex; +libssh2_publickey_init; +libssh2_publickey_list_fetch; +libssh2_publickey_list_free; +libssh2_publickey_remove_ex; +libssh2_publickey_shutdown; +libssh2_scp_recv; +libssh2_scp_send64; +libssh2_scp_send_ex; +libssh2_session_abstract; +libssh2_session_banner_set; +libssh2_session_block_directions; +libssh2_session_callback_set; +libssh2_session_disconnect_ex; +libssh2_session_flag; +libssh2_session_free; +libssh2_session_get_blocking; +libssh2_session_get_timeout; +libssh2_session_handshake; +libssh2_session_hostkey; +libssh2_session_init_ex; +libssh2_session_last_errno; +libssh2_session_last_error; +libssh2_session_method_pref; +libssh2_session_methods; +libssh2_session_set_blocking; +libssh2_session_set_timeout; +libssh2_session_startup; +libssh2_sftp_close_handle; +libssh2_sftp_dtor; +libssh2_sftp_fstat_ex; +libssh2_sftp_fstatvfs; +libssh2_sftp_init; +libssh2_sftp_last_error; +libssh2_sftp_mkdir_ex; +libssh2_sftp_open_ex; +libssh2_sftp_read; +libssh2_sftp_readdir_ex; +libssh2_sftp_rename_ex; +libssh2_sftp_rmdir_ex; +libssh2_sftp_seek; +libssh2_sftp_seek64; +libssh2_sftp_shutdown; +libssh2_sftp_stat_ex; +libssh2_sftp_statvfs; +libssh2_sftp_symlink_ex; +libssh2_sftp_tell; +libssh2_sftp_tell64; +libssh2_sftp_unlink_ex; +libssh2_sftp_write; +libssh2_sha1; +libssh2_trace; +libssh2_trace_sethandler; +libssh2_userauth_authenticated; +libssh2_userauth_hostbased_fromfile_ex; +libssh2_userauth_keyboard_interactive_ex; +libssh2_userauth_list; +libssh2_userauth_password_ex; +libssh2_userauth_publickey; +libssh2_userauth_publickey_fromfile_ex; +libssh2_version; +local: *;}; + +LIBSSH2_1.4.0 { +global: +libssh2_session_supported_algs; +libssh2_session_banner_get; +libssh2_sftp_get_channel; +} LIBSSH2_1.3.0; + -- 1.7.7
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor