cmake_minimum_required(VERSION 3.16)
project(neverhood_extractor_dependencies LANGUAGES C CXX)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -fexceptions")
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
set(BUILD_TESTING OFF CACHE BOOL "" FORCE)
set(ZLIB_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
add_subdirectory("${SOURCES}/zlib-1.3.1" zlib)
# Emscripten maps SHARED to STATIC; avoid colliding with zlibstatic's libz.a.
set_target_properties(zlib PROPERTIES OUTPUT_NAME z-unused)
set(ENABLE_NLS OFF CACHE BOOL "" FORCE)
set(ENABLE_THREADS OFF CACHE STRING "" FORCE)
add_subdirectory("${SOURCES}/xz-5.6.4" xz EXCLUDE_FROM_ALL)
add_custom_target(extractor_lzma ALL DEPENDS liblzma)
install(TARGETS liblzma ARCHIVE DESTINATION lib)
install(FILES "${SOURCES}/xz-5.6.4/src/liblzma/api/lzma.h" DESTINATION include)
install(DIRECTORY "${SOURCES}/xz-5.6.4/src/liblzma/api/lzma" DESTINATION include)

set(BZIP "${SOURCES}/bzip2-1.0.8")
add_library(bz2 STATIC ${BZIP}/blocksort.c ${BZIP}/huffman.c ${BZIP}/crctable.c
  ${BZIP}/randtable.c ${BZIP}/compress.c ${BZIP}/decompress.c ${BZIP}/bzlib.c)
target_include_directories(bz2 PUBLIC "${BZIP}")
install(TARGETS bz2 ARCHIVE DESTINATION lib)
install(FILES "${BZIP}/bzlib.h" DESTINATION include)

set(BOOST "${SOURCES}/boost_1_75_0")
foreach(component filesystem date_time iostreams program_options system)
  if(component STREQUAL "date_time")
    # Match Boost's Jamfile: date_time is header-only with this archive stub.
    set(sources "${BOOST}/libs/date_time/src/gregorian/greg_month.cpp")
  elseif(component STREQUAL "system")
    set(sources "${BOOST}/libs/system/src/error_code.cpp")
  else()
    file(GLOB sources "${BOOST}/libs/${component}/src/*.cpp")
    list(FILTER sources EXCLUDE REGEX "/zstd\\.cpp$")
  endif()
  add_library(boost_${component} STATIC ${sources})
  target_include_directories(boost_${component} PUBLIC "${BOOST}")
  target_compile_definitions(boost_${component} PRIVATE BOOST_ALL_NO_LIB BOOST_FILESYSTEM_NO_CXX20_ATOMIC_REF)
  install(TARGETS boost_${component} ARCHIVE DESTINATION lib)
endforeach()
target_include_directories(boost_iostreams PRIVATE "${SOURCES}/zlib-1.3.1" "${CMAKE_CURRENT_BINARY_DIR}/zlib" "${BZIP}" "${SOURCES}/xz-5.6.4/src/liblzma/api")
