New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
tidy-up: delete unused build configuration settings #9044
Conversation
How did you find these? Can we create a script or test or something for this? |
@bagder It was a byproduct of an effort in syncing autotools-cmake-Makefile.m32 builds to produce the exact same binaries 1. I dumped command-line Some unused settings are still being generated by It's probably possible to automate this to some extent: The source for most of these settings is Footnotes |
Here's a rough attempt to automate it: #!/bin/sh
autoheader configure.ac # generate lib/curl_config.h.in
{
grep -o -E 'set\([A-Z][A-Z0-9_]{3,}' CMake/Platforms/WindowsCache.cmake | sed -E 's|set\(||g'
grep -o -E -h '#define +[A-Z][A-Z0-9_]{3,}' lib/config-*.h | sed -E 's|#define +||g'
grep -o -E '#cmakedefine +[A-Z][A-Z0-9_]{3,}' lib/curl_config.h.cmake | sed -E 's|#cmakedefine +||g'
grep -o -E '#undef +[A-Z][A-Z0-9_]{3,}' lib/curl_config.h.in | sed -E 's|#undef +||g'
} | sort -u | grep -v -F 'HEADER_CURL_' | while read -r def; do
c="$(git grep -w -F "${def}" | grep -v -E -c '(/libcurl\.tmpl|^lib/config-|^lib/curl_config\.h\.cmake|^CMakeLists\.txt|^CMake/Platforms/WindowsCache\.cmake|^packages/vms/config_h\.com|^m4/curl-functions\.m4|^acinclude\.m4|^configure\.ac)')"
if [ "${c}" = '0' ]; then
echo "${def}"
fi
done This misses some After a few tweaks the results are not so bad. It missed these few unique cases:
Some of these may be used by external headers (e.g. |
I think the HAVE_ ones at least should be ok. OPENSSL_NO_KRB5 is only defined by config-dos but I'm not sure why as I'd expect it to be defined by opensslconf.h. |
…skip] AppVeyor CI (Debian): real ------ Makefile.m32 40m53s (=2453s) 100% https://ci.appveyor.com/project/curlorg/curl-for-win/builds/44066230 CMake 50m11s (=3011s) 123% https://ci.appveyor.com/project/curlorg/curl-for-win/builds/44062838 Same on local machine (macOS): real user sys space ------ ------ ------ --------- Makefile.m32 29m40s (=1780s) 100% 34m50s 7m48s 909343242 bytes CMake (with PR 9044) 36m59s (=2219s) 125% 41m58s 9m26s 973999614 bytes CMake 37m18s (=2238s) 126% 42m12s 9m25s 973829216 bytes autotools (with PR 9044) 43m01s (=2581s) 145% 46m50s 11m18s 984571419 bytes autotools 44m06s (=2646s) 149% 48m11s 11m47s 984477038 bytes Ref: curl/curl#9044
Yeah, that feels like an overstep. We should leave openssl to define those things. |
No longer used since de71e68.
This is necessary only for MFC (Microsoft Foundation Class) DLLs to force linking MFC components statically to the DLL. libcurl.dll does not use MFC, so this define can be deleted. Ref: https://docs.microsoft.com/cpp/build/regular-dlls-statically-linked-to-mfc
There are more instances of this in autotools, but I did not dare to touch those. Looked like it is used to detect socket support.
FIXME: Possibly the related comment can also be deleted in packages/vms/generate_config_vms_h_curl.com
Rebased onto master. |
@bagder: At this point this is committable. The few FIXMEs are rather questions, that are beyond my insight to touch. Do you think I shall continue with this PR? |
Delete unused macros (most of them feature guards):
CURL_INCLUDES_SYS_UIO
[1]HAVE_ALLOCA_H
[2]HAVE_CRYPTO_CLEANUP_ALL_EX_DATA
(unused since de71e68)HAVE_DLFCN_H
HAVE_DLOPEN
HAVE_DOPRNT
HAVE_FCNTL
HAVE_GETHOSTBYNAME
[3]HAVE_GETOPT_H
HAVE_GETPASS
HAVE_GETPROTOBYNAME
HAVE_GETSERVBYNAME
HAVE_IDN_FREE*
HAVE_INET_ADDR
HAVE_IOCTL
HAVE_KRB4
HAVE_KRB_GET_OUR_IP_FOR_REALM
HAVE_KRB_H
HAVE_LDAPSSL_H
HAVE_LDAP_INIT_FD
HAVE_LIBDL
HAVE_LIBNSL
HAVE_LIBRESOLV*
HAVE_LIBUCB
HAVE_LL
HAVE_LOCALTIME_R
HAVE_MALLOC_H
HAVE_MEMCPY
HAVE_MEMORY_H
HAVE_NETINET_IF_ETHER_H
HAVE_NI_WITHSCOPEID
HAVE_OPENSSL_CRYPTO_H
HAVE_OPENSSL_ERR_H
HAVE_OPENSSL_PEM_H
HAVE_OPENSSL_PKCS12_H
HAVE_OPENSSL_RAND_H
HAVE_OPENSSL_RSA_H
HAVE_OPENSSL_SSL_H
HAVE_OPENSSL_X509_H
HAVE_PEM_H
HAVE_POLL
HAVE_RAND_SCREEN
HAVE_RAND_STATUS
HAVE_RECVFROM
HAVE_SETSOCKOPT
HAVE_SETVBUF
HAVE_SIZEOF_LONG_DOUBLE
HAVE_SOCKIO_H
HAVE_SOCK_OPTS
HAVE_STDIO_H
HAVE_STRCASESTR
HAVE_STRFTIME
HAVE_STRLCAT
HAVE_STRNCMPI
HAVE_STRNICMP
HAVE_STRSTR
HAVE_STRUCT_IN6_ADDR
HAVE_TLD_H
HAVE_TLD_STRERROR
HAVE_UNAME
HAVE_USLEEP
HAVE_WINBER_H
HAVE_WRITEV
HAVE_X509_H
LT_OBJDIR
NEED_BASENAME_PROTO
NOT_NEED_LIBNSL
OPENSSL_NO_KRB5
RECVFROM_TYPE*
SIZEOF_LONG_DOUBLE
STRERROR_R_TYPE_ARG3
USE_YASSLEMUL
_USRDLL
(from CMake) [4][1] Maybe some related parts in
m4/curl-functions.m4
andconfigure.ac
could also be deleted?[2] Maybe the related comment can also be deleted in
packages/vms/generate_config_vms_h_curl.com
[3] There are more instances of this in autotools, but I did not dare to
touch those. Looked like it is used to detect socket support.
[4] This is necessary for MFC (Microsoft Foundation Class) DLLs to
force linking MFC components statically to the DLL.
libcurl.dll
does not use MFC, so this define can be deleted.
Ref: https://docs.microsoft.com/cpp/build/regular-dlls-statically-linked-to-mfc
Closes #xxxx