#############################################################
# Enable warnings and possibly treat them as errors
message(STATUS "${BoldYellow}Setting -Wall.${ColourReset}")
add_definitions(-Wall)
if(WARN_AS_ERROR)
    message(STATUS "${BoldYellow}Warnings treated as errors.${ColourReset}")
    add_definitions(-Werror)
endif()

find_package(ZLIB REQUIRED)


# BOOST
if(NOT Boost_FOUND)
    message(STATUS "Boost not yet found. Searching for it.")
    find_package(Boost COMPONENTS iostreams thread filesystem chrono REQUIRED) 
endif()
message(STATUS "Boost_LIBRARIES found ${Boost_LIB_VERSION}")
message(STATUS "Boost_INCLUDES: ${Boost_INCLUDE_DIRS}")
message(STATUS "Boost_LIB_DIRS: ${Boost_LIBRARY_DIRS}")


set(pwizlite_RCCS libpwizliteresources.qrc)

# File list
# find ./ -type f \( -iname "*.h" -o -iname "*.[ch]pp" -o -iname "*.inl" -o -iname "*.dk1" \) | grep \.cpp$ | sed 's/^\.\///'
set(pwizlite_SRCS
    #
    # PWIZ
    pwiz/utility/minimxml/XMLWriter.cpp
    pwiz/utility/minimxml/SAXParser.cpp
    pwiz/utility/misc/IterationListener.cpp
    pwiz/utility/misc/BinaryData.cpp
    pwiz/utility/misc/Base64.cpp
    pwiz/utility/misc/random_access_compressed_ifstream.cpp
    pwiz/utility/misc/Filesystem.cpp
    pwiz/utility/misc/IntegerSet.cpp
    pwiz/utility/misc/SHA1.cpp
    pwiz/utility/misc/SHA1Calculator.cpp
    pwiz/utility/misc/String.cpp
    pwiz/data/msdata/Serializer_MGF.cpp
    pwiz/data/msdata/MSNumpress.cpp
    pwiz/data/msdata/Serializer_MSn.cpp
    pwiz/data/msdata/SpectrumInfo.cpp
    pwiz/data/msdata/IO.cpp
    pwiz/data/msdata/SpectrumList_BTDX.cpp
    pwiz/data/msdata/ChromatogramList_mzML.cpp
    pwiz/data/msdata/SpectrumList_mzML.cpp
    pwiz/data/msdata/Version.cpp
    pwiz/data/msdata/MSDataFile.cpp
    pwiz/data/msdata/SpectrumListBase.cpp
    pwiz/data/msdata/BinaryDataEncoder.cpp
    pwiz/data/msdata/SpectrumList_mzXML.cpp
    pwiz/data/msdata/MSData.cpp
    pwiz/data/msdata/LegacyAdapter.cpp
    pwiz/data/msdata/Reader.cpp
    pwiz/data/msdata/SpectrumList_MSn.cpp
    pwiz/data/msdata/Serializer_mzML.cpp
    pwiz/data/msdata/Index_mzML.cpp
    pwiz/data/msdata/SpectrumWorkerThreads.cpp
    pwiz/data/msdata/References.cpp
    pwiz/data/msdata/SpectrumList_MGF.cpp
    pwiz/data/msdata/DefaultReaderList.cpp
    pwiz/data/msdata/Serializer_mzXML.cpp
    pwiz/data/common/ParamTypes.cpp
    pwiz/data/common/cv.cpp
    pwiz/data/common/CVTranslator.cpp
    pwiz/data/common/diff_std.cpp
    #
    # BOOST
    # Only header files, as of 20200603
    )

add_definitions(-DWITHOUT_MZ5)

# Build the static lib
add_library(pwizlite-static STATIC ${pwizlite_SRCS})

target_include_directories(pwizlite-static PUBLIC
    ${CMAKE_CURRENT_SOURCE_DIR}/boost
    )

set_target_properties(pwizlite-static
    PROPERTIES OUTPUT_NAME pwizlite
    CLEAN_DIRECT_OUTPUT 1
    )

target_link_libraries(pwizlite-static
    Boost::iostreams
    Boost::filesystem
    Boost::thread
    Boost::chrono
    ZLIB::ZLIB
    ${PLATFORM_SPECIFIC_LINK_LIBRARIES}
    )


add_library(pwizlite-shared SHARED ${pwizlite_SRCS} ${pwizlite_RCC_SRCS})
set_target_properties(pwizlite-shared
    PROPERTIES OUTPUT_NAME pwizlite
    CLEAN_DIRECT_OUTPUT 1
    VERSION ${PWIZLITE_VERSION}
    SOVERSION ${PWIZLITE_VERSION_MAJOR}
    )

target_include_directories(pwizlite-shared PUBLIC
    ${CMAKE_CURRENT_SOURCE_DIR}/boost
    )

target_link_libraries(pwizlite-shared 
    Boost::iostreams
    Boost::filesystem
    Boost::thread
    Boost::chrono
    ZLIB::ZLIB
    ${PLATFORM_SPECIFIC_LINK_LIBRARIES}
    )


# Install lib

install(TARGETS pwizlite-shared pwizlite-static
    LIBRARY NAMELINK_SKIP
    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    # This one is for WIN32
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
    )

if(MXE)
    target_compile_definitions(pwizlite-shared PUBLIC MXE)
    target_compile_definitions(pwizlite-static PUBLIC MXE)
endif(MXE)
