project (cpp-utils)

set(SOURCES
        crypto/symmetric/ciphers.cpp
        crypto/symmetric/testutils/FakeAuthenticatedCipher.cpp
        crypto/kdf/Scrypt.cpp
        crypto/kdf/SCryptParameters.cpp
        crypto/kdf/PasswordBasedKDF.cpp
        crypto/RandomPadding.cpp
        crypto/symmetric/EncryptionKey.cpp
        crypto/hash/Hash.cpp
        process/daemonize.cpp
        process/subprocess.cpp
        process/SignalCatcher.cpp
        process/SignalHandler.cpp
        tempfile/TempFile.cpp
        tempfile/TempDir.cpp
        network/HttpClient.cpp
        network/CurlHttpClient.cpp
        network/FakeHttpClient.cpp
        io/Console.cpp
        io/DontEchoStdinToStdoutRAII.cpp
        io/IOStreamConsole.cpp
        io/NoninteractiveConsole.cpp
        io/pipestream.cpp
        io/ProgressBar.cpp
        thread/LoopThread.cpp
        thread/ThreadSystem.cpp
        thread/debugging_nonwindows.cpp
        thread/debugging_windows.cpp
        thread/LeftRight.cpp
        random/Random.cpp
        random/RandomGeneratorThread.cpp
        random/OSRandomGenerator.cpp
        random/PseudoRandomPool.cpp
        random/RandomDataBuffer.cpp
        random/RandomGenerator.cpp
        lock/LockPool.cpp
        data/SerializationHelper.cpp
        data/Serializer.cpp
        data/Deserializer.cpp
        data/DataFixture.cpp
        data/DataUtils.cpp
        data/Data.cpp
        assert/assert.cpp
        assert/backtrace_nonwindows.cpp
        assert/backtrace_windows.cpp
        assert/AssertFailed.cpp
        system/get_total_memory.cpp
        system/homedir.cpp
        system/memory_nonwindows.cpp
        system/memory_windows.cpp
        system/time.cpp
		system/diskspace.cpp
		system/filetime_nonwindows.cpp
		system/filetime_windows.cpp
		system/env.cpp
        value_type/ValueType.cpp
)

add_library(${PROJECT_NAME} STATIC ${SOURCES})

if(MSVC)
    target_link_libraries(${PROJECT_NAME} PUBLIC DbgHelp)
elseif (APPLE)
    target_compile_definitions(${PROJECT_NAME} PRIVATE BOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED)
endif()

find_package(Threads REQUIRED)
target_link_libraries(${PROJECT_NAME} PUBLIC ${CMAKE_THREAD_LIBS_INIT})

target_link_libraries(${PROJECT_NAME} PUBLIC ${CMAKE_DL_LIBS})

target_link_libraries(${PROJECT_NAME} PUBLIC CryfsDependencies_spdlog cryfs_vendor_cryptopp CryfsDependencies_range-v3)
if(CRYFS_UPDATE_CHECKS)
    target_compile_definitions(${PROJECT_NAME} PUBLIC -DCRYFS_UPDATE_CHECKS)
    target_link_libraries(${PROJECT_NAME} PUBLIC CryfsDependencies_libcurl)
endif()

target_add_boost(${PROJECT_NAME})
target_enable_style_warnings(${PROJECT_NAME})
target_activate_cpp14(${PROJECT_NAME})

if(MSVC)
    # Required by range-v3, see its README.md
    target_compile_options(${PROJECT_NAME} PUBLIC /Zc:preprocessor /permissive-)
endif()
