include(GNUInstallDirs)
include(ExternalProject)

set(FMT_INSTALL_DIR             ${CMAKE_CURRENT_BINARY_DIR}/fmt)
set(FMT_INCLUDE_DIR             ${FMT_INSTALL_DIR}/include)
set(FMT_INSTALLED_LIBRARY       ${FMT_INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}fmt${CMAKE_STATIC_LIBRARY_SUFFIX})
set(FMT_INSTALLED_LIBRARY_DEBUG ${FMT_INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}fmtd${CMAKE_STATIC_LIBRARY_SUFFIX})
set(FMT_LIBRARY                 ${FMT_INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}pog_fmt${CMAKE_STATIC_LIBRARY_SUFFIX})

if(MSVC)
	set(FMT_BUILD_COMMAND ${CMAKE_COMMAND} --build . --config $<CONFIG> -- -m)
	set(FMT_INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config $<CONFIG>)
else()
	set(FMT_BUILD_COMMAND ${CMAKE_COMMAND} --build . -- -j)
	set(FMT_INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install)
endif()

ExternalProject_Add(
	fmt-dep
	PREFIX "fmt"
	SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/fmt"
	CMAKE_ARGS
		-DCMAKE_INSTALL_PREFIX=${FMT_INSTALL_DIR}
		-DCMAKE_BUILD_TYPE=Release
		-DCMAKE_POSITION_INDEPENDENT_CODE=${POG_PIC}
		-DFMT_TEST=OFF
		-DFMT_DOC=OFF
	BUILD_COMMAND
		${FMT_BUILD_COMMAND}
	INSTALL_COMMAND
		${FMT_INSTALL_COMMAND}
)

ExternalProject_Add_Step(
	fmt-dep rename
	DEPENDEES install
	COMMAND ${CMAKE_COMMAND} -E rename $<IF:$<CONFIG:Debug>,${FMT_INSTALLED_LIBRARY_DEBUG},${FMT_INSTALLED_LIBRARY}> ${FMT_LIBRARY}
)

add_library(fmt::fmt STATIC IMPORTED GLOBAL)
set_target_properties(fmt::fmt PROPERTIES
	INTERFACE_INCLUDE_DIRECTORIES "${FMT_INCLUDE_DIR}"
	IMPORTED_LOCATION "${FMT_LIBRARY}"
)
add_dependencies(fmt::fmt fmt-dep)

install(
	FILES ${FMT_LIBRARY}
	DESTINATION ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}
)
install(
	DIRECTORY ${FMT_INCLUDE_DIR}/fmt/
	DESTINATION ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}/pog/fmt
)
