view OrthancFramework/Resources/CMake/OpenSslConfigurationStatic.cmake @ 7191:3f2967fe5baa default tip

typo
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 22 Oct 2026 17:11:46 +0200
parents f4db01502048
children
line wrap: on
line source

# Orthanc - A Lightweight, RESTful DICOM Store
# Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
# Department, University Hospital of Liege, Belgium
# Copyright (C) 2017-2023 Osimis S.A., Belgium
# Copyright (C) 2024-2026 Orthanc Team SRL, Belgium
# Copyright (C) 2021-2026 Sebastien Jodogne, ICTEAM UCLouvain, Belgium
#
# This program is free software: you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public License
# as published by the Free Software Foundation, either version 3 of
# the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this program. If not, see
# <http://www.gnu.org/licenses/>.


find_package(Perl REQUIRED)

set(OPENSSL_VERSION_MAJOR 3)
set(OPENSSL_VERSION_MINOR 5)
set(OPENSSL_VERSION_PATCH 9)
set(OPENSSL_VERSION_PRE_RELEASE "")
set(OPENSSL_VERSION_FULL "${OPENSSL_VERSION_MAJOR}.${OPENSSL_VERSION_MINOR}.${OPENSSL_VERSION_PATCH}${OPENSSL_VERSION_PRE_RELEASE}")
SET(OPENSSL_SOURCES_DIR ${CMAKE_BINARY_DIR}/openssl-${OPENSSL_VERSION_FULL})
SET(OPENSSL_URL "${THIRD_PARTY_DOWNLOADS_ROOT_URL}/openssl-${OPENSSL_VERSION_FULL}.tar.gz")
SET(OPENSSL_MD5 "382c33039018809e6351539e9bdcd509")

if (IS_DIRECTORY "${OPENSSL_SOURCES_DIR}")
  set(FirstRun OFF)
else()
  set(FirstRun ON)
endif()

DownloadPackage(${OPENSSL_MD5} ${OPENSSL_URL} "${OPENSSL_SOURCES_DIR}")


if (FirstRun)
  # Apply the patches
  execute_process(
    COMMAND ${PATCH_EXECUTABLE} -p0 -N -i
    ${CMAKE_CURRENT_LIST_DIR}/../Patches/openssl-${OPENSSL_VERSION_FULL}.patch
    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
    RESULT_VARIABLE Failure
    )

  if (Failure)
    message(FATAL_ERROR "Error while patching a file")
  endif()


  # Execute the "config" script from the OpenSSL source distribution
  if ("${CMAKE_SYSTEM_VERSION}" STREQUAL "LinuxStandardBase")
    set(Options no-asm --with-rand-seed=devrandom linux-x86_64)
  elseif (MSVC)
    # This is Visual Studio
    if (CMAKE_SIZEOF_VOID_P EQUAL 4)
      set(Options no-asm VC-WIN32)
    else()
      set(Options no-asm VC-WIN64A)
    endif()
  elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Windows" AND CMAKE_COMPILER_IS_GNUCXX)
    # This is MinGW
    if (CMAKE_SIZEOF_VOID_P EQUAL 4)
      set(Options no-asm mingw)
    else()
      set(Options no-asm mingw64)
    endif()
  else()
    # Generic system
    set(Options no-asm)
  endif()

  execute_process(
    COMMAND ${PERL_EXECUTABLE}
    Configure no-asm ${Options}
    WORKING_DIRECTORY ${OPENSSL_SOURCES_DIR}
    RESULT_VARIABLE Failure
    )

  if (Failure)
    message(FATAL_ERROR "Error while configuring OpenSSL using Perl")
  endif()


  # Create ${GENERATED_MANDATORY} targets from the Makefile of OpenSSL
  execute_process(
    COMMAND ${PERL_EXECUTABLE}
    util/mkbuildinf.pl "Orthanc static ${CMAKE_SYSTEM_NAME}" ""
    WORKING_DIRECTORY ${OPENSSL_SOURCES_DIR}
    OUTPUT_FILE crypto/buildinf.h
    RESULT_VARIABLE Failure
    ERROR_VARIABLE FailureOutput
    )

  if (NOT Failure EQUAL 0)
    message(FATAL_ERROR "Perl failed with exit code ${Failure}: ${FailureOutput}")
  endif()


  foreach(config_file
      crypto/params_idx.c
      include/internal/param_names.h
      include/openssl/core_names.h
      )
    execute_process(
      COMMAND ${PERL_EXECUTABLE} -I. -Iutil/perl -Mconfigdata -MOpenSSL::paramnames
      util/dofile.pl ${config_file}.in
      WORKING_DIRECTORY ${OPENSSL_SOURCES_DIR}
      OUTPUT_FILE ${config_file}
      RESULT_VARIABLE Failure
      ERROR_VARIABLE FailureOutput
      )

    if (NOT Failure EQUAL 0)
      message(FATAL_ERROR "Perl failed on ${config_file} with exit code ${Failure}: ${FailureOutput}")
    endif()
  endforeach()


  foreach(config_file
      include/crypto/bn_conf.h
      include/crypto/dso_conf.h
      include/openssl/asn1.h
      include/openssl/asn1t.h
      include/openssl/bio.h
      include/openssl/cmp.h
      include/openssl/cms.h
      include/openssl/comp.h
      include/openssl/conf.h
      include/openssl/crmf.h
      include/openssl/crypto.h
      include/openssl/ct.h
      include/openssl/err.h
      include/openssl/ess.h
      include/openssl/fipskey.h
      include/openssl/lhash.h
      include/openssl/ocsp.h
      include/openssl/opensslv.h
      include/openssl/pkcs12.h
      include/openssl/pkcs7.h
      include/openssl/safestack.h
      include/openssl/srp.h
      include/openssl/ssl.h
      include/openssl/ui.h
      include/openssl/x509.h
      include/openssl/x509_acert.h
      include/openssl/x509_vfy.h
      include/openssl/x509v3.h
      )
    execute_process(
      COMMAND ${PERL_EXECUTABLE} -I. -Mconfigdata
      util/dofile.pl ${config_file}.in
      WORKING_DIRECTORY ${OPENSSL_SOURCES_DIR}
      OUTPUT_FILE ${config_file}
      RESULT_VARIABLE Failure
      ERROR_VARIABLE FailureOutput
      )

    if (NOT Failure EQUAL 0)
      message(FATAL_ERROR "Perl failed on ${config_file} with exit code ${Failure}: ${FailureOutput}")
    endif()
  endforeach()


  foreach(config_file
      providers/common/der/der_digests_gen.c
      providers/common/der/der_dsa_gen.c
      providers/common/der/der_ec_gen.c
      providers/common/der/der_ecx_gen.c
      providers/common/der/der_ml_dsa_gen.c
      providers/common/der/der_rsa_gen.c
      providers/common/der/der_slh_dsa_gen.c
      providers/common/der/der_sm2_gen.c
      providers/common/der/der_wrap_gen.c
      providers/common/include/prov/der_digests.h
      providers/common/include/prov/der_dsa.h
      providers/common/include/prov/der_ec.h
      providers/common/include/prov/der_ecx.h
      providers/common/include/prov/der_ml_dsa.h
      providers/common/include/prov/der_rsa.h
      providers/common/include/prov/der_slh_dsa.h
      providers/common/include/prov/der_sm2.h
      providers/common/include/prov/der_wrap.h
      )
    execute_process(
      COMMAND ${PERL_EXECUTABLE} -I. -Iproviders/common/der -Mconfigdata -Moids_to_c
      util/dofile.pl ${config_file}.in
      WORKING_DIRECTORY ${OPENSSL_SOURCES_DIR}
      OUTPUT_FILE ${config_file}
      RESULT_VARIABLE Failure
      ERROR_VARIABLE FailureOutput
      )

    if (NOT Failure EQUAL 0)
      message(FATAL_ERROR "Perl failed on ${config_file} with exit code ${Failure}: ${FailureOutput}")
    endif()
  endforeach()

else()
  message("The patches for OpenSSL have already been applied")
endif()



add_definitions(
  -DENGINESDIR="/usr/local/lib64/engines-3"
  -DMODULESDIR="/usr/local/lib64/ossl-modules"
  -DOPENSSLDIR="/usr/local/ssl"
  -DOPENSSL_BUILDING_OPENSSL

  #-DL_ENDIAN
  #-DOPENSSL_PIC
  #-DOPENSSL_USE_NODELETE
  )


include_directories(
  BEFORE
  ${OPENSSL_SOURCES_DIR}
  ${OPENSSL_SOURCES_DIR}/include
  ${OPENSSL_SOURCES_DIR}/providers/common/include
  ${OPENSSL_SOURCES_DIR}/providers/fips/include
  ${OPENSSL_SOURCES_DIR}/providers/implementations/include
  )


set(OPENSSL_SOURCES_SUBDIRS
  ## Assembly is disabled
  # ${OPENSSL_SOURCES_DIR}/crypto/aes/asm
  # ${OPENSSL_SOURCES_DIR}/crypto/bf/asm
  # ${OPENSSL_SOURCES_DIR}/crypto/bn/asm
  # ${OPENSSL_SOURCES_DIR}/crypto/camellia/asm
  # ${OPENSSL_SOURCES_DIR}/crypto/cast/asm
  # ${OPENSSL_SOURCES_DIR}/crypto/chacha/asm
  # ${OPENSSL_SOURCES_DIR}/crypto/des/asm
  # ${OPENSSL_SOURCES_DIR}/crypto/ec/asm
  # ${OPENSSL_SOURCES_DIR}/crypto/md5/asm
  # ${OPENSSL_SOURCES_DIR}/crypto/modes/asm
  # ${OPENSSL_SOURCES_DIR}/crypto/perlasm
  # ${OPENSSL_SOURCES_DIR}/crypto/poly1305/asm
  # ${OPENSSL_SOURCES_DIR}/crypto/rc4/asm
  # ${OPENSSL_SOURCES_DIR}/crypto/rc5/asm
  # ${OPENSSL_SOURCES_DIR}/crypto/ripemd/asm
  # ${OPENSSL_SOURCES_DIR}/crypto/sha/asm
  # ${OPENSSL_SOURCES_DIR}/crypto/sm3/asm
  # ${OPENSSL_SOURCES_DIR}/crypto/sm4/asm
  # ${OPENSSL_SOURCES_DIR}/crypto/whrlpool/asm

  # ${OPENSSL_SOURCES_DIR}/crypto/md2
  ${OPENSSL_SOURCES_DIR}/crypto
  ${OPENSSL_SOURCES_DIR}/crypto/aes
  ${OPENSSL_SOURCES_DIR}/crypto/aria
  ${OPENSSL_SOURCES_DIR}/crypto/asn1
  ${OPENSSL_SOURCES_DIR}/crypto/async
  ${OPENSSL_SOURCES_DIR}/crypto/async/arch
  ${OPENSSL_SOURCES_DIR}/crypto/bf
  ${OPENSSL_SOURCES_DIR}/crypto/bio
  ${OPENSSL_SOURCES_DIR}/crypto/bn
  ${OPENSSL_SOURCES_DIR}/crypto/buffer
  ${OPENSSL_SOURCES_DIR}/crypto/camellia
  ${OPENSSL_SOURCES_DIR}/crypto/cast
  ${OPENSSL_SOURCES_DIR}/crypto/chacha
  ${OPENSSL_SOURCES_DIR}/crypto/cmac
  ${OPENSSL_SOURCES_DIR}/crypto/cmp
  ${OPENSSL_SOURCES_DIR}/crypto/cms
  ${OPENSSL_SOURCES_DIR}/crypto/comp
  ${OPENSSL_SOURCES_DIR}/crypto/conf
  ${OPENSSL_SOURCES_DIR}/crypto/crmf
  ${OPENSSL_SOURCES_DIR}/crypto/ct
  ${OPENSSL_SOURCES_DIR}/crypto/des
  ${OPENSSL_SOURCES_DIR}/crypto/dh
  ${OPENSSL_SOURCES_DIR}/crypto/dsa
  ${OPENSSL_SOURCES_DIR}/crypto/dso
  ${OPENSSL_SOURCES_DIR}/crypto/encode_decode
  ${OPENSSL_SOURCES_DIR}/crypto/err
  ${OPENSSL_SOURCES_DIR}/crypto/ess
  ${OPENSSL_SOURCES_DIR}/crypto/evp
  ${OPENSSL_SOURCES_DIR}/crypto/ffc
  ${OPENSSL_SOURCES_DIR}/crypto/hashtable
  ${OPENSSL_SOURCES_DIR}/crypto/hmac
  ${OPENSSL_SOURCES_DIR}/crypto/hpke
  ${OPENSSL_SOURCES_DIR}/crypto/http
  ${OPENSSL_SOURCES_DIR}/crypto/idea
  ${OPENSSL_SOURCES_DIR}/crypto/kdf
  ${OPENSSL_SOURCES_DIR}/crypto/lhash
  ${OPENSSL_SOURCES_DIR}/crypto/md4
  ${OPENSSL_SOURCES_DIR}/crypto/md5
  ${OPENSSL_SOURCES_DIR}/crypto/mdc2
  ${OPENSSL_SOURCES_DIR}/crypto/ml_dsa
  ${OPENSSL_SOURCES_DIR}/crypto/ml_kem
  ${OPENSSL_SOURCES_DIR}/crypto/modes
  ${OPENSSL_SOURCES_DIR}/crypto/objects
  ${OPENSSL_SOURCES_DIR}/crypto/ocsp
  ${OPENSSL_SOURCES_DIR}/crypto/pem
  ${OPENSSL_SOURCES_DIR}/crypto/pkcs12
  ${OPENSSL_SOURCES_DIR}/crypto/pkcs7
  ${OPENSSL_SOURCES_DIR}/crypto/poly1305
  ${OPENSSL_SOURCES_DIR}/crypto/property
  ${OPENSSL_SOURCES_DIR}/crypto/rand
  ${OPENSSL_SOURCES_DIR}/crypto/rbtree
  ${OPENSSL_SOURCES_DIR}/crypto/rc2
  ${OPENSSL_SOURCES_DIR}/crypto/rc4
  ${OPENSSL_SOURCES_DIR}/crypto/rc5
  ${OPENSSL_SOURCES_DIR}/crypto/ripemd
  ${OPENSSL_SOURCES_DIR}/crypto/rsa
  ${OPENSSL_SOURCES_DIR}/crypto/seed
  ${OPENSSL_SOURCES_DIR}/crypto/sha
  ${OPENSSL_SOURCES_DIR}/crypto/siphash
  ${OPENSSL_SOURCES_DIR}/crypto/slh_dsa
  ${OPENSSL_SOURCES_DIR}/crypto/sm2
  ${OPENSSL_SOURCES_DIR}/crypto/sm3
  ${OPENSSL_SOURCES_DIR}/crypto/sm4
  ${OPENSSL_SOURCES_DIR}/crypto/srp
  ${OPENSSL_SOURCES_DIR}/crypto/stack
  ${OPENSSL_SOURCES_DIR}/crypto/store
  ${OPENSSL_SOURCES_DIR}/crypto/thread
  ${OPENSSL_SOURCES_DIR}/crypto/thread/arch
  ${OPENSSL_SOURCES_DIR}/crypto/ts
  ${OPENSSL_SOURCES_DIR}/crypto/txt_db
  ${OPENSSL_SOURCES_DIR}/crypto/ui
  ${OPENSSL_SOURCES_DIR}/crypto/whrlpool
  ${OPENSSL_SOURCES_DIR}/crypto/x509

  # ${OPENSSL_SOURCES_DIR}/providers/implementations/rands/seeding  # OS-specific
  # ${OPENSSL_SOURCES_DIR}/providers/fips
  ${OPENSSL_SOURCES_DIR}/providers
  ${OPENSSL_SOURCES_DIR}/providers/common
  ${OPENSSL_SOURCES_DIR}/providers/common/der
  ${OPENSSL_SOURCES_DIR}/providers/implementations
  ${OPENSSL_SOURCES_DIR}/providers/implementations/asymciphers
  ${OPENSSL_SOURCES_DIR}/providers/implementations/ciphers
  ${OPENSSL_SOURCES_DIR}/providers/implementations/digests
  ${OPENSSL_SOURCES_DIR}/providers/implementations/encode_decode
  ${OPENSSL_SOURCES_DIR}/providers/implementations/exchange
  ${OPENSSL_SOURCES_DIR}/providers/implementations/include
  ${OPENSSL_SOURCES_DIR}/providers/implementations/include/prov
  ${OPENSSL_SOURCES_DIR}/providers/implementations/kdfs
  ${OPENSSL_SOURCES_DIR}/providers/implementations/kem
  ${OPENSSL_SOURCES_DIR}/providers/implementations/keymgmt
  ${OPENSSL_SOURCES_DIR}/providers/implementations/macs
  ${OPENSSL_SOURCES_DIR}/providers/implementations/rands
  ${OPENSSL_SOURCES_DIR}/providers/implementations/signature
  ${OPENSSL_SOURCES_DIR}/providers/implementations/skeymgmt
  ${OPENSSL_SOURCES_DIR}/providers/implementations/storemgmt

  ${OPENSSL_SOURCES_DIR}/ssl
  ${OPENSSL_SOURCES_DIR}/ssl/quic
  ${OPENSSL_SOURCES_DIR}/ssl/record
  ${OPENSSL_SOURCES_DIR}/ssl/record/methods
  ${OPENSSL_SOURCES_DIR}/ssl/rio
  ${OPENSSL_SOURCES_DIR}/ssl/statem
  )

if (ENABLE_OPENSSL_ENGINES)
  list(APPEND OPENSSL_SOURCES_SUBDIRS
    # ${OPENSSL_SOURCES_DIR}/engines   # Removed in Orthanc 1.13.1
    ${OPENSSL_SOURCES_DIR}/crypto/engine
    )
else()
  add_definitions(-DOPENSSL_NO_ENGINE)
endif()

list(APPEND OPENSSL_SOURCES_SUBDIRS
  # EC, ECDH and ECDSA are necessary for PKCS11, and for contacting
  # HTTPS servers that use TLS certificate encrypted with ECDSA
  # (check the output of a recent version of the "sslscan"
  # command). Until Orthanc <= 1.4.1, these features were only
  # enabled if ENABLE_PKCS11 support was set to "ON".
  # https://groups.google.com/d/msg/orthanc-users/2l-bhYIMEWg/oMmK33bYBgAJ

  ${OPENSSL_SOURCES_DIR}/crypto/ec
  ${OPENSSL_SOURCES_DIR}/crypto/ec/curve448
  ${OPENSSL_SOURCES_DIR}/crypto/ec/curve448/arch_32
  ${OPENSSL_SOURCES_DIR}/crypto/ec/curve448/arch_64
  )

foreach(d ${OPENSSL_SOURCES_SUBDIRS})
  AUX_SOURCE_DIRECTORY(${d} OPENSSL_SOURCES)
endforeach()


list(REMOVE_ITEM OPENSSL_SOURCES
  # Files below are not part of the "libcrypto.a" and "libssl.a" that
  # are created by compiling OpenSSL from sources
  ${OPENSSL_SOURCES_DIR}/crypto/LPdir_nyi.c
  ${OPENSSL_SOURCES_DIR}/crypto/LPdir_unix.c
  ${OPENSSL_SOURCES_DIR}/crypto/LPdir_vms.c
  ${OPENSSL_SOURCES_DIR}/crypto/LPdir_win.c
  ${OPENSSL_SOURCES_DIR}/crypto/LPdir_win32.c
  ${OPENSSL_SOURCES_DIR}/crypto/LPdir_wince.c
  ${OPENSSL_SOURCES_DIR}/crypto/bn/bn_ppc.c
  ${OPENSSL_SOURCES_DIR}/crypto/bn/bn_sparc.c
  ${OPENSSL_SOURCES_DIR}/crypto/chacha/chacha_ppc.c
  ${OPENSSL_SOURCES_DIR}/crypto/chacha/chacha_riscv.c
  ${OPENSSL_SOURCES_DIR}/crypto/des/ncbc_enc.c
  ${OPENSSL_SOURCES_DIR}/crypto/ec/ecp_nistp224.c
  ${OPENSSL_SOURCES_DIR}/crypto/ec/ecp_nistp256.c
  ${OPENSSL_SOURCES_DIR}/crypto/ec/ecp_nistp384.c
  ${OPENSSL_SOURCES_DIR}/crypto/ec/ecp_nistp521.c
  ${OPENSSL_SOURCES_DIR}/crypto/ec/ecp_nistz256.c
  ${OPENSSL_SOURCES_DIR}/crypto/ec/ecp_nistz256_table.c
  ${OPENSSL_SOURCES_DIR}/crypto/ec/ecp_ppc.c
  ${OPENSSL_SOURCES_DIR}/crypto/ec/ecp_s390x_nistp.c
  ${OPENSSL_SOURCES_DIR}/crypto/ec/ecp_sm2p256.c
  ${OPENSSL_SOURCES_DIR}/crypto/ec/ecx_s390x.c
  ${OPENSSL_SOURCES_DIR}/crypto/evp/legacy_md2.c
  ${OPENSSL_SOURCES_DIR}/crypto/poly1305/poly1305_base2_44.c
  ${OPENSSL_SOURCES_DIR}/crypto/poly1305/poly1305_ppc.c
  ${OPENSSL_SOURCES_DIR}/crypto/rc5/rc5_ecb.c
  ${OPENSSL_SOURCES_DIR}/crypto/rc5/rc5_enc.c
  ${OPENSSL_SOURCES_DIR}/crypto/rc5/rc5_skey.c
  ${OPENSSL_SOURCES_DIR}/crypto/rc5/rc5cfb64.c
  ${OPENSSL_SOURCES_DIR}/crypto/rc5/rc5ofb64.c
  ${OPENSSL_SOURCES_DIR}/crypto/rsa/rsa_acvp_test_params.c
  ${OPENSSL_SOURCES_DIR}/crypto/sha/sha_ppc.c
  ${OPENSSL_SOURCES_DIR}/crypto/sm3/sm3_riscv.c
  ${OPENSSL_SOURCES_DIR}/providers/common/securitycheck_fips.c
  ${OPENSSL_SOURCES_DIR}/providers/implementations/ciphers/cipher_rc5.c
  ${OPENSSL_SOURCES_DIR}/providers/implementations/ciphers/cipher_rc5_hw.c
  ${OPENSSL_SOURCES_DIR}/providers/implementations/digests/md2_prov.c
  ${OPENSSL_SOURCES_DIR}/providers/implementations/macs/blake2_mac_impl.c
  ${OPENSSL_SOURCES_DIR}/ssl/record/methods/ktls_meth.c

  ${OPENSSL_SOURCES_DIR}/crypto/poly1305/poly1305_ieee754.c  # Fails on Visual Studio
  ${OPENSSL_SOURCES_DIR}/crypto/sha/sha_riscv.c  # Fails on LSB
  ${OPENSSL_SOURCES_DIR}/providers/legacyprov.c  # Fails on LSB

  # Disable CPUID for non-x86 platforms
  ${OPENSSL_SOURCES_DIR}/crypto/armcap.c
  ${OPENSSL_SOURCES_DIR}/crypto/loongarchcap.c
  ${OPENSSL_SOURCES_DIR}/crypto/ppccap.c
  ${OPENSSL_SOURCES_DIR}/crypto/riscvcap.c
  ${OPENSSL_SOURCES_DIR}/crypto/s390xcap.c
  ${OPENSSL_SOURCES_DIR}/crypto/sparcv9cap.c
  )



if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux" OR
    ${CMAKE_SYSTEM_NAME} STREQUAL "kFreeBSD" OR
    ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD" OR
    ${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD" OR
    APPLE)
  list(APPEND OPENSSL_SOURCES
    ${OPENSSL_SOURCES_DIR}/crypto/thread/arch/thread_posix.c
    ${OPENSSL_SOURCES_DIR}/providers/implementations/rands/seeding/rand_unix.c
    )
  list(REMOVE_ITEM OPENSSL_SOURCES
    ${OPENSSL_SOURCES_DIR}/providers/implementations/storemgmt/winstore_store.c
    )

  if ("${CMAKE_SYSTEM_VERSION}" STREQUAL "LinuxStandardBase")
    add_definitions(-DHAVE_MADVISE=0)
  endif()

elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")
  list(APPEND OPENSSL_SOURCES
    ${OPENSSL_SOURCES_DIR}/crypto/thread/arch/thread_win.c
    ${OPENSSL_SOURCES_DIR}/providers/implementations/rands/seeding/rand_win.c
    )
  link_libraries(crypt32)

endif()