xf.li | 6c8fc1e | 2023-08-12 00:11:09 -0700 | [diff] [blame^] | 1 | #*************************************************************************** |
| 2 | # _ _ ____ _ |
| 3 | # Project ___| | | | _ \| | |
| 4 | # / __| | | | |_) | | |
| 5 | # | (__| |_| | _ <| |___ |
| 6 | # \___|\___/|_| \_\_____| |
| 7 | # |
| 8 | # Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al. |
| 9 | # |
| 10 | # This software is licensed as described in the file COPYING, which |
| 11 | # you should have received as part of this distribution. The terms |
| 12 | # are also available at https://curl.se/docs/copyright.html. |
| 13 | # |
| 14 | # You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| 15 | # copies of the Software, and permit persons to whom the Software is |
| 16 | # furnished to do so, under the terms of the COPYING file. |
| 17 | # |
| 18 | # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| 19 | # KIND, either express or implied. |
| 20 | # |
| 21 | # SPDX-License-Identifier: curl |
| 22 | # |
| 23 | ########################################################################### |
| 24 | include(CheckCSourceCompiles) |
| 25 | |
| 26 | option(CURL_HIDDEN_SYMBOLS "Set to ON to hide libcurl internal symbols (=hide all symbols that aren't officially external)." ON) |
| 27 | mark_as_advanced(CURL_HIDDEN_SYMBOLS) |
| 28 | |
| 29 | if(CURL_HIDDEN_SYMBOLS) |
| 30 | set(SUPPORTS_SYMBOL_HIDING FALSE) |
| 31 | |
| 32 | if(CMAKE_C_COMPILER_ID MATCHES "Clang" AND NOT MSVC) |
| 33 | set(SUPPORTS_SYMBOL_HIDING TRUE) |
| 34 | set(_SYMBOL_EXTERN "__attribute__ ((__visibility__ (\"default\")))") |
| 35 | set(_CFLAG_SYMBOLS_HIDE "-fvisibility=hidden") |
| 36 | elseif(CMAKE_COMPILER_IS_GNUCC) |
| 37 | if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.4) |
| 38 | # note: this is considered buggy prior to 4.0 but the autotools don't care, so let's ignore that fact |
| 39 | set(SUPPORTS_SYMBOL_HIDING TRUE) |
| 40 | set(_SYMBOL_EXTERN "__attribute__ ((__visibility__ (\"default\")))") |
| 41 | set(_CFLAG_SYMBOLS_HIDE "-fvisibility=hidden") |
| 42 | endif() |
| 43 | elseif(CMAKE_C_COMPILER_ID MATCHES "SunPro" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 8.0) |
| 44 | set(SUPPORTS_SYMBOL_HIDING TRUE) |
| 45 | set(_SYMBOL_EXTERN "__global") |
| 46 | set(_CFLAG_SYMBOLS_HIDE "-xldscope=hidden") |
| 47 | elseif(CMAKE_C_COMPILER_ID MATCHES "Intel" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 9.0) |
| 48 | # note: this should probably just check for version 9.1.045 but I'm not 100% sure |
| 49 | # so let's do it the same way autotools do. |
| 50 | set(SUPPORTS_SYMBOL_HIDING TRUE) |
| 51 | set(_SYMBOL_EXTERN "__attribute__ ((__visibility__ (\"default\")))") |
| 52 | set(_CFLAG_SYMBOLS_HIDE "-fvisibility=hidden") |
| 53 | check_c_source_compiles("#include <stdio.h> |
| 54 | int main (void) { printf(\"icc fvisibility bug test\"); return 0; }" _no_bug) |
| 55 | if(NOT _no_bug) |
| 56 | set(SUPPORTS_SYMBOL_HIDING FALSE) |
| 57 | set(_SYMBOL_EXTERN "") |
| 58 | set(_CFLAG_SYMBOLS_HIDE "") |
| 59 | endif() |
| 60 | elseif(MSVC) |
| 61 | set(SUPPORTS_SYMBOL_HIDING TRUE) |
| 62 | endif() |
| 63 | |
| 64 | set(HIDES_CURL_PRIVATE_SYMBOLS ${SUPPORTS_SYMBOL_HIDING}) |
| 65 | elseif(MSVC) |
| 66 | if(NOT CMAKE_VERSION VERSION_LESS 3.7) |
| 67 | set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) #present since 3.4.3 but broken |
| 68 | set(HIDES_CURL_PRIVATE_SYMBOLS FALSE) |
| 69 | else() |
| 70 | message(WARNING "Hiding private symbols regardless CURL_HIDDEN_SYMBOLS being disabled.") |
| 71 | set(HIDES_CURL_PRIVATE_SYMBOLS TRUE) |
| 72 | endif() |
| 73 | else() |
| 74 | set(HIDES_CURL_PRIVATE_SYMBOLS FALSE) |
| 75 | endif() |
| 76 | |
| 77 | set(CURL_CFLAG_SYMBOLS_HIDE ${_CFLAG_SYMBOLS_HIDE}) |
| 78 | set(CURL_EXTERN_SYMBOL ${_SYMBOL_EXTERN}) |