diff --git a/CMakeLists.txt b/CMakeLists.txt index c87127be8..3113b3f52 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -770,6 +770,50 @@ FUNCTION(SETUP_CURL_DEPENDENCIES TARGET_NAME) ENDIF() ENDFUNCTION() +# Ugly (but functional) way to include "Makefile.inc" by transforming it (= regenerate it). +FUNCTION(TRANSFORM_MAKEFILE_INC INPUT_FILE OUTPUT_FILE) + FILE(READ ${INPUT_FILE} MAKEFILE_INC_TEXT) + STRING(REPLACE "$(top_srcdir)" "\${CURL_SOURCE_DIR}" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) + STRING(REGEX REPLACE "\\\\\n" "§!§" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) + STRING(REGEX REPLACE "([a-zA-Z_][a-zA-Z0-9_]*)[\t ]*=[\t ]*([^\n]*\n)" "SET(\\1 \\2)\n" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) + STRING(REPLACE "§!§" "\n" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) + STRING(REGEX REPLACE "\\$\\(([a-zA-Z_][a-zA-Z0-9_]*)\\)" "\${\\1}" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) + FILE(WRITE ${OUTPUT_FILE} ${MAKEFILE_INC_TEXT}) + + ### BUGGY METHOD 1 + # FILE(STRINGS Makefile.inc MAKEFILE_INC_TEXT) + # STRING(REPLACE "# ./lib/Makefile.inc" "" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) + # STRING(REPLACE " " " " MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) # Replace tabs with spaces + + # #STRING(REGEX MATCH "CSOURCES *=" AAA ${MAKEFILE_INC_TEXT}) + # #MESSAGE(STATUS ${AAA}) + + # STRING(REPLACE "CSOURCES =" "" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) + # STRING(REPLACE "HHEADERS =" "" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) + + # STRING(REGEX REPLACE "[^ ]+\\.c" "" ${HEADERS_VAR} ${MAKEFILE_INC_TEXT}) # Remove source files and store into headers var + # STRING(REGEX REPLACE " +" " " ${HEADERS_VAR} ${${HEADERS_VAR}}) + # STRING(REGEX REPLACE " " ";" ${HEADERS_VAR} ${${HEADERS_VAR}}) + + # STRING(REGEX REPLACE "[^ ]+\\.h" "" ${SOURCES_VAR} ${MAKEFILE_INC_TEXT}) # Remove headers and store into source files var + # STRING(REGEX REPLACE " +" " " ${SOURCES_VAR} ${${SOURCES_VAR}}) + # STRING(REGEX REPLACE " " ";" ${SOURCES_VAR} ${${SOURCES_VAR}}) + + # SET(${HEADERS_VAR} ${${HEADERS_VAR}} PARENT_SCOPE) + # SET(${SOURCES_VAR} ${${SOURCES_VAR}} PARENT_SCOPE) + + ### BUGGY METHOD 2 + # FILE(READ Makefile.inc MAKEFILE_INC_TEXT) + # #STRING(REPLACE "\t" " " MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) # Replace tabs with spaces + # #STRING(REGEX REPLACE "\n+" "\n" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) # Remove empty lines (allow a simplification in the script) + # STRING(REGEX REPLACE "([A-Z]+)[\t ]*=[\t ]*" "SET(\\1 " MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) + # #STRING(REGEX REPLACE "^(.*)[\t ]*[^\\]$" ")" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) + # STRING(REGEX REPLACE "([^\\])\n" "\\1)\n" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) + # # STRING(REGEX REPLACE "CSOURCES *=" "SET(libCurl_SRCS " MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) + # # STRING(REGEX REPLACE "HHEADERS *=" "SET(libCurl_HEADERS " MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) + # FILE(WRITE Makefile.inc.cmake ${MAKEFILE_INC_TEXT}) +ENDFUNCTION() + ADD_SUBDIRECTORY(lib) IF(BUILD_CURL_EXE) ADD_SUBDIRECTORY(src) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 7e55c7d79..f166945a1 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -5,110 +5,49 @@ CONFIGURE_FILE(${CURL_SOURCE_DIR}/include/curl/curlbuild.h.cmake CONFIGURE_FILE(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h) -SET(libCurl_HEADERS + +TRANSFORM_MAKEFILE_INC("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake") +INCLUDE(${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake) + +LIST(APPEND HHEADERS ${CMAKE_CURRENT_BINARY_DIR}/config.h ${CURL_BINARY_DIR}/include/curl/curlbuild.h - arpa_telnet.h netrc.h file.h timeval.h qssl.h hostip.h - progress.h formdata.h cookie.h http.h sendf.h ftp.h url.h dict.h - if2ip.h speedcheck.h urldata.h curl_ldap.h ssluse.h escape.h telnet.h - getinfo.h strequal.h krb4.h memdebug.h http_chunks.h - strtok.h connect.h llist.h hash.h content_encoding.h share.h - curl_md5.h http_digest.h http_negotiate.h http_ntlm.h inet_pton.h - strtoofft.h strerror.h inet_ntop.h curlx.h memory.h setup.h - transfer.h select.h easyif.h multiif.h parsedate.h sslgen.h gtls.h - tftp.h sockaddr.h splay.h strdup.h setup_once.h socks.h ssh.h nssg.h - curl_base64.h rawstr.h curl_addrinfo.h curl_sspi.h slist.h -) - -SET(libCurl_SRCS - # amigaos.c - does not build on AmigaOS - base64.c - connect.c - content_encoding.c - cookie.c - curl_addrinfo.c - curl_sspi.c - dict.c - easy.c - escape.c - file.c - formdata.c - ftp.c - getenv.c - getinfo.c - gtls.c - hash.c - hostares.c - hostasyn.c - hostip4.c - hostip6.c - hostip.c - hostsyn.c - hostthre.c - http.c - http_chunks.c - http_digest.c - http_negotiate.c - http_ntlm.c - if2ip.c - inet_ntop.c - inet_pton.c - krb4.c - ldap.c - llist.c - md5.c -# memdebug.c -not used - mprintf.c - multi.c - netrc.c - # nwlib.c - Not used - parsedate.c - progress.c - rawstr.c - security.c - select.c - sendf.c - slist.c - share.c - socks.c - speedcheck.c - splay.c - ssh.c - sslgen.c - ssluse.c - strdup.c - strequal.c - strerror.c - # strtok.c - specify later - # strtoofft.c - specify later - telnet.c - tftp.c - timeval.c - transfer.c - url.c - version.c ) IF(MSVC) - LIST(APPEND libCurl_SRCS libcurl.rc) + LIST(APPEND CSOURCES libcurl.rc) ENDIF() -# if we have Kerberos 4, right now this is never on -#OPTION(CURL_KRB4 "Use Kerberos 4" OFF) -IF(CURL_KRB4) - SET(libCurl_SRCS ${libCurl_SRCS} - krb4.c - security.c - ) -ENDIF(CURL_KRB4) +# SET(CSOURCES + # # memdebug.c -not used + # # nwlib.c - Not used + # # strtok.c - specify later + # # strtoofft.c - specify later +# ) -#OPTION(CURL_MALLOC_DEBUG "Debug mallocs in Curl" OFF) -MARK_AS_ADVANCED(CURL_MALLOC_DEBUG) -IF(CURL_MALLOC_DEBUG) - SET(libCurl_SRCS ${libCurl_SRCS} - memdebug.c - ) -ENDIF(CURL_MALLOC_DEBUG) +# # if we have Kerberos 4, right now this is never on +# #OPTION(CURL_KRB4 "Use Kerberos 4" OFF) +# IF(CURL_KRB4) + # SET(CSOURCES ${CSOURCES} + # krb4.c + # security.c + # ) +# ENDIF(CURL_KRB4) + +# #OPTION(CURL_MALLOC_DEBUG "Debug mallocs in Curl" OFF) +# MARK_AS_ADVANCED(CURL_MALLOC_DEBUG) +# IF(CURL_MALLOC_DEBUG) + # SET(CSOURCES ${CSOURCES} + # memdebug.c + # ) +# ENDIF(CURL_MALLOC_DEBUG) + +# # only build compat strtoofft if we need to +# IF(NOT HAVE_STRTOLL AND NOT HAVE__STRTOI64) + # SET(CSOURCES ${CSOURCES} + # strtoofft.c + # ) +# ENDIF(NOT HAVE_STRTOLL AND NOT HAVE__STRTOI64) IF(HAVE_FEATURES_H) SET_SOURCE_FILES_PROPERTIES( @@ -128,56 +67,6 @@ IF(HAVE_FEATURES_H) COMPILE_FLAGS -D_BSD_SOURCE) ENDIF(HAVE_FEATURES_H) -#strtoll \ -#socket \ -#select \ -#strdup \ -#strstr \ -#strtok_r \ -#uname \ -#strcasecmp \ -#stricmp \ -#strcmpi \ -#gethostbyaddr \ -#gettimeofday \ -#inet_addr \ -#inet_ntoa \ -#inet_pton \ -#perror \ -#closesocket \ -#siginterrupt \ -#sigaction \ -#signal \ -#getpass_r \ -#strlcat \ -#getpwuid \ -#geteuid \ -#dlopen \ -#utime \ -#sigsetjmp \ -#basename \ -#setlocale \ -#ftruncate \ -#pipe \ -#poll \ -#getprotobyname \ -#getrlimit \ -#setrlimit \ -#fork - -# only build compat strtok if we need to -IF (NOT HAVE_STRTOK_R) - SET(libCurl_SRCS ${libCurl_SRCS} - strtok.c - ) -ENDIF (NOT HAVE_STRTOK_R) - -# only build compat strtoofft if we need to -IF(NOT HAVE_STRTOLL AND NOT HAVE__STRTOI64) - SET(libCurl_SRCS ${libCurl_SRCS} - strtoofft.c - ) -ENDIF(NOT HAVE_STRTOLL AND NOT HAVE__STRTOI64) # The rest of the build @@ -199,7 +88,7 @@ ENDIF() ADD_LIBRARY( ${LIB_NAME} ${CURL_USER_DEFINED_DYNAMIC_OR_STATIC} - ${libCurl_HEADERS} ${libCurl_SRCS} + ${HHEADERS} ${CSOURCES} ) TARGET_LINK_LIBRARIES(${LIB_NAME} ${CURL_LIBS}) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e0e7a7855..8688e56d5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -8,22 +8,8 @@ IF (NOT HUGEHELP_C_FILE) FILE(WRITE hugehelp.c "/* built-in manual is disabled, blank function */\n#include \"hugehelp.h\"\nvoid hugehelp(void) {}") ENDIF() -SET(CURLX_SOURCE - ${CURL_SOURCE_DIR}/lib/strtoofft.c - ${CURL_SOURCE_DIR}/lib/strdup.c - ${CURL_SOURCE_DIR}/lib/rawstr.c -) - -SET(CURL_SOURCE - main.c hugehelp.c urlglob.c writeout.c writeenv.c - getpass.c homedir.c curlutil.c -) - -SET(CURL_HEADERS - hugehelp.h setup.h config-win32.h config-mac.h - config-riscos.h urlglob.h version.h - writeout.h writeenv.h getpass.h homedir.h curlutil.h -) +TRANSFORM_MAKEFILE_INC("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake") +INCLUDE(${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake) IF(MSVC) LIST(APPEND CURL_SOURCE curl.rc) @@ -31,13 +17,12 @@ ENDIF() ADD_EXECUTABLE( ${EXE_NAME} - ${CURL_HEADERS} - ${CURL_SOURCE} ${CURLX_SOURCE} + ${curl_SOURCES} ) -SOURCE_GROUP("cURLX source files" FILES ${CURLX_SOURCE}) -SOURCE_GROUP("cURL source files" FILES ${CURL_SOURCE}) -SOURCE_GROUP("cURL header files" FILES ${CURL_HEADERS}) +SOURCE_GROUP("cURLX source files" FILES ${CURLX_ONES}) +SOURCE_GROUP("cURL source files" FILES ${CURL_SOURCES}) +SOURCE_GROUP("cURL header files" FILES ${CURL_HFILES}) INCLUDE_DIRECTORIES( ${CURL_SOURCE_DIR}/lib # To be able to reach "setup_once.h"