Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 28 additions & 10 deletions builtins/civetweb/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ if(WIN32)
endif()
# check if the patch has already been applied
if(NOT EXISTS "${ROOT_CIVETWEB_PREFIX}/src/BUILTIN_CIVETWEB/._patched")
set(ROOT_CIVETWEB_PATCH_COMMAND PATCH_COMMAND ${GIT_EXECUTABLE} init COMMAND ${GIT_EXECUTABLE} apply ${GIT_PATCH_ARGS}
set(ROOT_CIVETWEB_PATCH_COMMAND PATCH_COMMAND ${GIT_EXECUTABLE} init -b master COMMAND ${GIT_EXECUTABLE} apply ${GIT_PATCH_ARGS}
${CMAKE_CURRENT_SOURCE_DIR}/1385.patch # https://github.com/civetweb/civetweb/pull/1385
${CMAKE_CURRENT_SOURCE_DIR}/1389.patch # https://github.com/civetweb/civetweb/pull/1389
${CMAKE_CURRENT_SOURCE_DIR}/1423.patch # https://github.com/civetweb/civetweb/pull/1423 for OpenSSL4 compatibility
Expand Down Expand Up @@ -94,15 +94,32 @@ else()
set(ROOT_CIVETWEB_ASAN_CMD "-DCIVETWEB_ENABLE_ASAN=ON")
endif()


# use special separatore to avoid conflicts when provide complex variables

string(REGEX REPLACE "[ ;]" "|" OPENSSL_LIBRARIES_ALT "${OPENSSL_LIBRARIES}")
string(REGEX REPLACE "[ ;]" "|" ZLIB_LIBRARIES_ALT "${ZLIB_LIBRARIES}")
string(REGEX REPLACE "[ ;]" "|" ZLIB_INCLUDE_DIRS_ALT "${ZLIB_INCLUDE_DIRS}")


ExternalProject_Add(BUILTIN_CIVETWEB
PREFIX ${ROOT_CIVETWEB_PREFIX}
# URL ${lcgpackages}/civetweb-${ROOT_CIVETWEB_VERSION}.tar.gz
# URL_HASH SHA256=${ROOT_CIVETWEB_HASH}

# ------- tarball of 588860e3 commit, see Readme.md how to build it ------
DOWNLOAD_DIR ${ROOT_DOWNLOAD_DIR}
URL ${lcgpackages}/civetweb-588860e3.tar.gz
https://jsroot.gsi.de/packages/civetweb-588860e3.tar.gz
URL_HASH SHA256=8d5d809f36e94b67257c5d61156a9b9eae7ab34de769dc82330c31841ac21771
# while we extract directly repository, we need to patch it
${ROOT_CIVETWEB_PATCH_COMMAND}

# TODO: once 1.17 released, bump SearchInstalledSoftware find_package to 1.17 plus remove patches
# and potentially install civetweb in root-ci-images via homebrew and change builtin to OFF in ci-configs
GIT_REPOSITORY https://github.com/civetweb/civetweb.git
GIT_TAG 588860e30721bf5453b0440c390865a8e85dcae5 # v1.17.0 not yet released, v1.16.0 has missing CVE fixes
${ROOT_CIVETWEB_PATCH_COMMAND}

# ------- use next three lines when direct checkout from git repository required --------
# GIT_REPOSITORY https://github.com/civetweb/civetweb.git
# GIT_TAG 588860e30721bf5453b0440c390865a8e85dcae5 # v1.17.0 not yet released, v1.16.0 has missing CVE fixes
# ${ROOT_CIVETWEB_PATCH_COMMAND}
UPDATE_COMMAND ""
LOG_DOWNLOAD TRUE
LOG_CONFIGURE FALSE
Expand All @@ -116,6 +133,7 @@ ExternalProject_Add(BUILTIN_CIVETWEB
USES_TERMINAL_INSTALL true
USES_TERMINAL_TEST true
INSTALL_DIR ${ROOT_CIVETWEB_PREFIX}
LIST_SEPARATOR "|"
CMAKE_ARGS -G ${CMAKE_GENERATOR}
-DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
-DCMAKE_INSTALL_LIBDIR:PATH=<INSTALL_DIR>/lib
Expand All @@ -130,7 +148,7 @@ ExternalProject_Add(BUILTIN_CIVETWEB
-DBUILD_TESTING=FALSE
-DCIVETWEB_BUILD_TESTING=FALSE
-DCIVETWEB_ENABLE_ASAN=OFF # If set to ON, you need to set below link_library interface to UBSAN libs
-DCIVETWEB_ENABLE_CXX=ON
-DCIVETWEB_ENABLE_CXX=OFF # C++ interface is not used in the ROOT
# civetweb defines -DDEBUG for Debug builds, which activates its DEBUG_TRACE
# macro (~130 call sites) and floods stderr with per-request output.
# Note the same option also gates civetweb's assertions.
Expand All @@ -145,7 +163,7 @@ ExternalProject_Add(BUILTIN_CIVETWEB
-DOPENSSL_INCLUDE_DIR=${OPENSSL_INCLUDE_DIR}
-DOPENSSL_CRYPTO_LIBRARY=${OPENSSL_CRYPTO_LIBRARY}
-DOPENSSL_SSL_LIBRARY=${OPENSSL_SSL_LIBRARY}
-DOPENSSL_LIBRARIES=${OPENSSL_LIBRARIES}
-DOPENSSL_LIBRARIES=${OPENSSL_LIBRARIES_ALT}
#-DCMAKE_PREFIX_PATH:STRING=${OPENSSL_PREFIX}
-DOPENSSL_ROOT_DIR=${OPENSSL_ROOT_DIR}
#-DOPENSSL_FOUND=TRUE
Expand All @@ -154,8 +172,8 @@ ExternalProject_Add(BUILTIN_CIVETWEB
#-DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}
#-DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}
# -DCMAKE_INSTALL_RPATH:STRING=${rpath_origin}
-DZLIB_LIBRARY=${ZLIB_LIBRARIES}
-DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIRS}
-DZLIB_LIBRARY=${ZLIB_LIBRARIES_ALT}
-DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIRS_ALT}
${ZLIB_ROOT_OPTION}
BUILD_COMMAND ${CMAKE_COMMAND} --build . ${ROOT_CIVETWEB_BUILD_COMMAND_FLAGS}
INSTALL_COMMAND ${CMAKE_COMMAND} --build . ${ROOT_CIVETWEB_BUILD_COMMAND_FLAGS} --target install
Expand Down
26 changes: 26 additions & 0 deletions builtins/civetweb/Readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Patched version of civetweb master

Unfortunately last civetweb released version 1.16 does not include necessary changes,
therefore unreleased master version is used plus several patches.

One strategy to build civetweb is checkout github repository, patch it at place and then build.
Main disadvantege of such approach - any ROOT build will require checkout of full repository
which is about 100MB of files. This possibility is commented out in cmake file -
see `GIT_REPOSITORY` and `GIT_TAG` parameters.

Instead minimalistic tarball file is created and placed on LCG download site.
Such minimalistic tarball includes following files:

* `cmake/` - cmake files
* `include/` - headers
* `src/` - sources without `src/third_party`
* CMakeLists.txt - main cmake file
* CREDITS.md, LICENSE.md, README.md, RELEASE_NOTES.md, SECURITY.md - misc

Full command to create tarball is:

git clone https://github.com/civetweb/civetweb.git
cd civetweb
tar -czf civetweb-<githash>.tar.gz --exclude='src/third_party' cmake include src CMakeLists.txt CREDITS.md LICENSE.md README.md RELEASE_NOTES.md SECURITY.md


Loading