Tarantool development patches archive
 help / color / mirror / Atom feed
From: "Бабин Олег via Tarantool-patches" <tarantool-patches@dev.tarantool.org>
To: tarantool-patches@dev.tarantool.org
Subject: Re: [Tarantool-patches]  [PATCH 1/3] build: export libCURL symbols
Date: Thu, 18 Mar 2021 14:33:53 +0300	[thread overview]
Message-ID: <1616067233.584323588@f728.i.mail.ru> (raw)

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


Hi! Thanks for your patch. This patch was followed [1], so maybe it's better to include it in this patchset.
    [1]  https://github.com/tarantool/tarantool/commit/0bb2c945aaef2830b7951eaaa0c4b02a08b80443
On 18.03.2021 11:51, Roman Khabibov via Tarantool-patches wrote:
>Export the symbols to tarantool executable in the case of libCURL
>included as bundled library or static build.
>
>This patch is just 1.10 adaptation of the original commit 9fc57c4
>performed by Yaroslav Dynnikov <yaroslav.dynnikov@gmail.com>.
>---
> CMakeLists.txt                     |  10 +++
> extra/curl_symbols                 |  81 ++++++++++++++++++
> extra/mkexports                    |  20 ++++-
> src/CMakeLists.txt                 |   5 +-
> test/box-tap/curl-exports.test.lua | 131 +++++++++++++++++++++++++++++
> 5 files changed, 242 insertions(+), 5 deletions(-)
> create mode 100755 extra/curl_symbols
> create mode 100755 test/box-tap/curl-exports.test.lua
>
>diff --git a/CMakeLists.txt b/CMakeLists.txt
>index 84e019eb0..5990d026e 100644
>--- a/CMakeLists.txt
>+++ b/CMakeLists.txt
>@@ -347,6 +347,16 @@ else()
>     find_package(CURL)
> endif()
> 
>+#
>+# Export libcurl symbols if the library is bundled.
>+#
>+if (ENABLE_BUNDLED_LIBCURL OR BUILD_STATIC)
>+    set(EXPORT_LIBCURL_SYMBOLS ON)
>+else()
>+    set(EXPORT_LIBCURL_SYMBOLS OFF)
>+endif()
>+message(STATUS "EXPORT_LIBCURL_SYMBOLS: ${EXPORT_LIBCURL_SYMBOLS}")
>+
> #
> # ReadLine
> #
>diff --git a/extra/curl_symbols b/extra/curl_symbols
>new file mode 100755
>index 000000000..89e247a00
>--- /dev/null
>+++ b/extra/curl_symbols
>@@ -0,0 +1,81 @@
>+curl_easy_cleanup
>+curl_easy_duphandle
>+curl_easy_escape
>+curl_easy_getinfo
>+curl_easy_init
>+curl_easy_pause
>+curl_easy_perform
>+curl_easy_recv
>+curl_easy_reset
>+curl_easy_send
>+curl_easy_setopt
>+curl_easy_strerror
>+curl_easy_unescape
>+curl_easy_upkeep
>+curl_escape
>+curl_formadd
>+curl_formfree
>+curl_formget
>+curl_free
>+curl_getdate
>+curl_getenv
>+curl_global_cleanup
>+curl_global_init
>+curl_global_init_mem
>+curl_global_sslset
>+curl_maprintf
>+curl_mfprintf
>+curl_mime_addpart
>+curl_mime_data
>+curl_mime_data_cb
>+curl_mime_encoder
>+curl_mime_filedata
>+curl_mime_filename
>+curl_mime_free
>+curl_mime_headers
>+curl_mime_init
>+curl_mime_name
>+curl_mime_subparts
>+curl_mime_type
>+curl_mprintf
>+curl_msnprintf
>+curl_msprintf
>+curl_multi_add_handle
>+curl_multi_assign
>+curl_multi_cleanup
>+curl_multi_fdset
>+curl_multi_info_read
>+curl_multi_init
>+curl_multi_perform
>+curl_multi_poll
>+curl_multi_remove_handle
>+curl_multi_setopt
>+curl_multi_socket
>+curl_multi_socket_action
>+curl_multi_socket_all
>+curl_multi_strerror
>+curl_multi_timeout
>+curl_multi_wait
>+curl_mvaprintf
>+curl_mvfprintf
>+curl_mvprintf
>+curl_mvsnprintf
>+curl_mvsprintf
>+curl_pushheader_byname
>+curl_pushheader_bynum
>+curl_share_cleanup
>+curl_share_init
>+curl_share_setopt
>+curl_share_strerror
>+curl_slist_append
>+curl_slist_free_all
>+curl_strequal
>+curl_strnequal
>+curl_unescape
>+curl_url
>+curl_url_cleanup
>+curl_url_dup
>+curl_url_get
>+curl_url_set
>+curl_version
>+curl_version_info
>diff --git a/extra/mkexports b/extra/mkexports
>index 145e5b8ce..2a3cd8401 100755
>--- a/extra/mkexports
>+++ b/extra/mkexports
>@@ -2,22 +2,36 @@
> # $1 - in  file
> # $2 - out file
> # $3 - os
>-# $4 - export templates
>+# $4 - is bundled curl on/off flag
>+# $5 - curl symbols
>+# $6 - export templates
>+echo "$1"
>+echo "$2"
>+echo "$3"
>+echo "$4"
>+echo "$5"
>+echo "$6"
> if [ "x$3x" = xDarwinx ]; then
>     # _func1
>     # _func2
>     sed -e 's/#.*//; /^[[:space:]]*$/d; s/^/_/;' $1 > $2
>+    if [ "x$4x" = xONx ]; then
>+      sed -e 's/#.*//; /^[[:space:]]*$/d; s/^/_/;' $5 >> $2
>+    fi
> else
>     # {
>     #   func1;
>     #   func2;
>     # };
>-    echo "$4"
>+    echo "$6"
>     ( echo "{" && {
>       # combine static defined list of functions
>       cat $1 ;
>       # with list of exported functions of bundled libraries
>-      for so in $4 ; do {
>+      if [ "x$4x" = xONx ]; then
>+        cat $5
>+      fi ;
>+      for so in $6 ; do {
>         # exported names from shared object
>         nm -D $so ||
>         # or follow patch from shared object script
>diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
>index 04289af3d..ee968820b 100644
>--- a/src/CMakeLists.txt
>+++ b/src/CMakeLists.txt
>@@ -231,13 +231,12 @@ target_link_libraries(server core bit uri uuid ${ICU_LIBRARIES})
> # Rule of thumb: if exporting a symbol from a static library, list the
> # library here.
> set (reexport_libraries server core misc bitset csv
>-     ${LUAJIT_LIBRARIES} ${MSGPUCK_LIBRARIES} ${ICU_LIBRARIES})
>+     ${LUAJIT_LIBRARIES} ${MSGPUCK_LIBRARIES} ${ICU_LIBRARIES} ${CURL_LIBRARIES})
> 
> set (common_libraries
>     ${reexport_libraries}
>     ${LIBYAML_LIBRARIES}
>     ${READLINE_LIBRARIES}
>-    ${CURL_LIBRARIES}
>     ${ICONV_LIBRARIES}
>     ${OPENSSL_LIBRARIES}
> )
>@@ -310,6 +309,8 @@ add_custom_command(
>     COMMAND ${CMAKE_SOURCE_DIR}/extra/mkexports
>             ${CMAKE_SOURCE_DIR}/extra/exports
>             ${exports_file} ${CMAKE_SYSTEM_NAME}
>+            ${EXPORT_LIBCURL_SYMBOLS}
>+            ${CMAKE_SOURCE_DIR}/extra/curl_symbols
>             ${EXPORT_LIST}
> )
> 
>diff --git a/test/box-tap/curl-exports.test.lua b/test/box-tap/curl-exports.test.lua
>new file mode 100755
>index 000000000..a8bb1a042
>--- /dev/null
>+++ b/test/box-tap/curl-exports.test.lua
>@@ -0,0 +1,131 @@
>+#!/usr/bin/env tarantool
>+
>+local tap = require('tap')
>+local ffi = require('ffi')
>+ffi.cdef([[
>+    void *dlsym(void *handle, const char *symbol);
>+    struct curl_version_info_data {
>+        int age;                  /* see description below */
>+        const char *version;      /* human readable string */
>+        unsigned int version_num; /* numeric representation */
>+        const char *host;         /* human readable string */
>+        int features;             /* bitmask, see below */
>+        char *ssl_version;        /* human readable string */
>+        long ssl_version_num;     /* not used, always zero */
>+        const char *libz_version; /* human readable string */
>+    };
>+]])
>+
>+local test = tap.test('curl-symbols')
>+test:plan(1)
>+
>+local RTLD_DEFAULT
>+-- See `man 3 dlsym`:
>+-- RTLD_DEFAULT
>+--   Find  the  first occurrence of the desired symbol using the default
>+--   shared object search order.  The search will include global symbols
>+--   in the executable and its dependencies, as well as symbols in shared
>+--   objects that were dynamically loaded with the RTLD_GLOBAL flag.
>+if jit.os == "OSX" then
>+    RTLD_DEFAULT = ffi.cast("void *", -2LL)
>+else
>+    RTLD_DEFAULT = ffi.cast("void *", 0LL)
>+end
>+
>+-- The following list was obtained by parsing libcurl.a static library:
>+-- nm libcurl.a | grep -oP 'T \K(curl_.+)$' | sort
>+local curl_symbols = {
>+    'curl_easy_cleanup',
>+    'curl_easy_duphandle',
>+    'curl_easy_escape',
>+    'curl_easy_getinfo',
>+    'curl_easy_init',
>+    'curl_easy_pause',
>+    'curl_easy_perform',
>+    'curl_easy_recv',
>+    'curl_easy_reset',
>+    'curl_easy_send',
>+    'curl_easy_setopt',
>+    'curl_easy_strerror',
>+    'curl_easy_unescape',
>+    'curl_easy_upkeep',
>+    'curl_escape',
>+    'curl_formadd',
>+    'curl_formfree',
>+    'curl_formget',
>+    'curl_free',
>+    'curl_getdate',
>+    'curl_getenv',
>+    'curl_global_cleanup',
>+    'curl_global_init',
>+    'curl_global_init_mem',
>+    'curl_global_sslset',
>+    'curl_maprintf',
>+    'curl_mfprintf',
>+    'curl_mime_addpart',
>+    'curl_mime_data',
>+    'curl_mime_data_cb',
>+    'curl_mime_encoder',
>+    'curl_mime_filedata',
>+    'curl_mime_filename',
>+    'curl_mime_free',
>+    'curl_mime_headers',
>+    'curl_mime_init',
>+    'curl_mime_name',
>+    'curl_mime_subparts',
>+    'curl_mime_type',
>+    'curl_mprintf',
>+    'curl_msnprintf',
>+    'curl_msprintf',
>+    'curl_multi_add_handle',
>+    'curl_multi_assign',
>+    'curl_multi_cleanup',
>+    'curl_multi_fdset',
>+    'curl_multi_info_read',
>+    'curl_multi_init',
>+    'curl_multi_perform',
>+    'curl_multi_poll',
>+    'curl_multi_remove_handle',
>+    'curl_multi_setopt',
>+    'curl_multi_socket',
>+    'curl_multi_socket_action',
>+    'curl_multi_socket_all',
>+    'curl_multi_strerror',
>+    'curl_multi_timeout',
>+    'curl_multi_wait',
>+    'curl_mvaprintf',
>+    'curl_mvfprintf',
>+    'curl_mvprintf',
>+    'curl_mvsnprintf',
>+    'curl_mvsprintf',
>+    'curl_pushheader_byname',
>+    'curl_pushheader_bynum',
>+    'curl_share_cleanup',
>+    'curl_share_init',
>+    'curl_share_setopt',
>+    'curl_share_strerror',
>+    'curl_slist_append',
>+    'curl_slist_free_all',
>+    'curl_strequal',
>+    'curl_strnequal',
>+    'curl_unescape',
>+    'curl_url',
>+    'curl_url_cleanup',
>+    'curl_url_dup',
>+    'curl_url_get',
>+    'curl_url_set',
>+    'curl_version',
>+    'curl_version_info',
>+}
>+
>+test:test('curl_symbols', function(t)
>+    t:plan(#curl_symbols)
>+    for _, sym in ipairs(curl_symbols) do
>+        t:ok(
>+            ffi.C.dlsym(RTLD_DEFAULT, sym) ~= nil,
>+            ('Symbol %q found'):format(sym)
>+        )
>+    end
>+end)
>+
>+os.exit(test:check() and 0 or 1)
>
 

[-- Attachment #2: Type: text/html, Size: 9639 bytes --]

             reply	other threads:[~2021-03-18 11:33 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-18 11:33 Бабин Олег via Tarantool-patches [this message]
  -- strict thread matches above, loose matches on Subject: below --
2021-03-19 14:13 [Tarantool-patches] [PATCH 0/3] Export curl symbols, enable smtp and install headers Roman Khabibov via Tarantool-patches
2021-03-19 14:13 ` [Tarantool-patches] [PATCH 1/3] build: export libCURL symbols Roman Khabibov via Tarantool-patches
2021-03-31 23:56   ` Alexander Turenko via Tarantool-patches
2021-04-09 19:54     ` Roman Khabibov via Tarantool-patches
2021-04-01  0:01   ` Alexander Turenko via Tarantool-patches
2021-03-18  8:51 [Tarantool-patches] [PATCH 0/3] Install iibCURL headers and export libCURL symbols for 1.10 Roman Khabibov via Tarantool-patches
2021-03-18  8:51 ` [Tarantool-patches] [PATCH 1/3] build: export libCURL symbols Roman Khabibov via Tarantool-patches

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1616067233.584323588@f728.i.mail.ru \
    --to=tarantool-patches@dev.tarantool.org \
    --cc=olegrok@tarantool.org \
    --subject='Re: [Tarantool-patches]  [PATCH 1/3] build: export libCURL symbols' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox