find_package (Doxygen QUIET)

# ~~~
# do_doc
#
# builds and install documentation
#
# target  is man, html or latex
# folder  is the folder where it will be built
# file    is the file name to set a dependency to
# install is where it should be installed
# ~~~
macro (do_doc target folder file install)

	cmake_parse_arguments (
		ARG
		"" # optional keywords
		"COMPONENT" # one value keywords
		"" # multi value keywords
		${ARGN})

	if (ARG_COMPONENT)
		set (HAS_COMPONENT ${ARG_COMPONENT})
	else ()
		set (HAS_COMPONENT ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME})
	endif ()

	# sometimes doxygen is too slow and fails with "Could not create output directory .../doc/html"
	file (MAKE_DIRECTORY ${folder})

	# get_filename_component (name ${target} NAME_WE)

	add_custom_target (${target} ALL DEPENDS ${folder}/${file})

	if (INSTALL_DOCUMENTATION)
		install (
			DIRECTORY ${folder}
			COMPONENT "${HAS_COMPONENT}"
			DESTINATION ${install})
	endif (INSTALL_DOCUMENTATION)
endmacro (do_doc)

if (DOXYGEN_FOUND)
	set (OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})

	if (BUILD_PDF)
		find_package (LATEX)
		if (LATEX_COMPILER)
			set (WITH_LATEX YES)
		else (LATEX_COMPILER)
			set (WITH_LATEX NO)
			message (WARNING "Sorry, I cannot create the PDF Manual: I did not find Latex.")
		endif (LATEX_COMPILER)
	else (BUILD_PDF)
		set (WITH_LATEX NO)
	endif (BUILD_PDF)

	if (BUILD_DOCSET)
		execute_process (
			COMMAND make ARGS -v
			RESULT_VARIABLE MAKE_NOT_AVAILABLE
			OUTPUT_QUIET)
		if (MAKE_NOT_AVAILABLE)
			set (WITH_DOCSET NO)
			message (WARNING "Sorry, since Make is not available I can not build the DocSet.")
		else (MAKE_NOT_AVAILABLE)
			set (WITH_DOCSET YES)
		endif (MAKE_NOT_AVAILABLE)
	endif (BUILD_DOCSET)

	if (DOXYGEN_DOT_FOUND)
		set (WITH_DOT YES)
	else (DOXYGEN_DOT_FOUND)
		set (WITH_DOT NO)
	endif (DOXYGEN_DOT_FOUND)

	find_package (Perl QUIET)

	add_executable (markdownlinkconverter markdownlinkconverter/markdownlinkconverter.c)

	# fix usage with wine: https://github.com/ElektraInitiative/libelektra/pull/340#discussion_r44044444
	find_util (markdownlinkconverter MARKDOWN_LINK_CONVERTER "")
	if (DOXYGEN_VERSION VERSION_GREATER "1.9.0")
		set (MARKDOWN_LINK_CONVERTER "${MARKDOWN_LINK_CONVERTER}")
	endif ()

	configure_file ("${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile" "${CMAKE_CURRENT_BINARY_DIR}/Doxyfile" @ONLY)
	file (
		GENERATE
		OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
		INPUT ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)

	do_doc (html ${OUTPUT_DIRECTORY}/html/ index.html ${TARGET_DOCUMENTATION_HTML_FOLDER} COMPONENT elektra-doc)
	do_doc (man3 ${OUTPUT_DIRECTORY}/man/man3elektra/ kdb.3elektra "${TARGET_DOCUMENTATION_MAN_FOLDER};PATTERN;_*;EXCLUDE" COMPONENT
		elektra-doc)
	add_dependencies (man3 html)
	set (outputs ${OUTPUT_DIRECTORY}/html/index.html ${OUTPUT_DIRECTORY}/man/man3elektra/kdb.3elektra)

	if (WITH_LATEX)
		do_doc (latex ${OUTPUT_DIRECTORY}/latex/ refman.tex ${TARGET_DOCUMENTATION_LATEX_FOLDER} COMPONENT elektra-doc)
		add_dependencies (latex man3 html)
		list (APPEND outputs ${OUTPUT_DIRECTORY}/latex/refman.tex)

		file (COPY "${CMAKE_CURRENT_SOURCE_DIR}/markdownlinkconverter/elektraSpecialCharacters.sty"
		      DESTINATION "${OUTPUT_DIRECTORY}/latex/")

		add_custom_command (
			OUTPUT ${OUTPUT_DIRECTORY}/latex/refman.pdf
			COMMAND ${PDFLATEX_COMPILER} ARGS ${PDFLATEX_COMPILER_OPTIONS} ${OUTPUT_DIRECTORY}/latex/refman.tex
			COMMAND ${PDFLATEX_COMPILER} ARGS ${PDFLATEX_COMPILER_OPTIONS} ${OUTPUT_DIRECTORY}/latex/refman.tex
			COMMAND ${PDFLATEX_COMPILER} ARGS ${PDFLATEX_COMPILER_OPTIONS} ${OUTPUT_DIRECTORY}/latex/refman.tex
			DEPENDS ${OUTPUT_DIRECTORY}/latex/refman.tex markdownlinkconverter
			WORKING_DIRECTORY ${OUTPUT_DIRECTORY}/latex/)

		add_custom_target (pdf ALL DEPENDS ${OUTPUT_DIRECTORY}/latex/refman.pdf)
		add_dependencies (pdf latex)

	endif (WITH_LATEX)

	if (WITH_DOCSET)
		set (DOCSET_PATH ${OUTPUT_DIRECTORY}/html/org.libelektra.docset)
		add_custom_command (
			OUTPUT ${DOCSET_PATH}
			COMMAND make
			COMMAND ${CMAKE_COMMAND} ARGS -D DOCSET_PATH=${DOCSET_PATH} -D ICON_PATH=${CMAKE_SOURCE_DIR}/doc/images/icon.png -P
				${CMAKE_SOURCE_DIR}/scripts/cmake/ElektraDocSet.cmake
			DEPENDS ${OUTPUT_DIRECTORY}/html/index.html markdownlinkconverter
			WORKING_DIRECTORY ${OUTPUT_DIRECTORY}/html)
		add_custom_target (docset ALL DEPENDS ${DOCSET_PATH})
	endif (WITH_DOCSET)

	add_custom_command (
		OUTPUT ${outputs}
		COMMAND ${DOXYGEN_EXECUTABLE} ARGS ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
		DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile markdownlinkconverter
		WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
else (DOXYGEN_FOUND)
	message (WARNING "Sorry, I cannot create the reference manual: I could not find Doxygen")
endif (DOXYGEN_FOUND)

if (INSTALL_DOCUMENTATION)
	install (
		FILES BIGPICTURE.md
		DESTINATION ${TARGET_DOCUMENTATION_TEXT_FOLDER}
		COMPONENT libelektra${SO_VERSION})
	install (
		FILES GOALS.md
		DESTINATION ${TARGET_DOCUMENTATION_TEXT_FOLDER}
		COMPONENT libelektra${SO_VERSION})
	install (
		FILES METADATA.ini
		DESTINATION ${TARGET_DOCUMENTATION_TEXT_FOLDER}
		COMPONENT libelektra${SO_VERSION})
	install (
		FILES SECURITY.md
		DESTINATION ${TARGET_DOCUMENTATION_TEXT_FOLDER}
		COMPONENT libelektra${SO_VERSION})
	install (
		FILES AUTHORS.md
		DESTINATION ${TARGET_DOCUMENTATION_TEXT_FOLDER}
		COMPONENT libelektra${SO_VERSION})
	install (
		FILES CONTRACT.ini
		DESTINATION ${TARGET_DOCUMENTATION_TEXT_FOLDER}
		COMPONENT libelektra${SO_VERSION})
	set (news ${CMAKE_CURRENT_BINARY_DIR}/NEWS.md)
	file (GLOB files "news/*.md")
	file (REMOVE ${news})
	foreach (file ${files})
		file (READ ${file} content)
		file (APPEND ${news} "\n\n\n\n\n${content}")
	endforeach ()
	install (
		FILES ${news}
		DESTINATION ${TARGET_DOCUMENTATION_TEXT_FOLDER}
		COMPONENT libelektra${SO_VERSION})
	install (
		FILES WHY.md
		DESTINATION ${TARGET_DOCUMENTATION_TEXT_FOLDER}
		COMPONENT libelektra${SO_VERSION})

endif ()

add_subdirectory (help)
