find_package(Doxygen)

# 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)
	# 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}
			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)

	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.8.11")
		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})
	do_doc(man3 ${OUTPUT_DIRECTORY}/man/man3elektra/ kdb.3elektra
		"${TARGET_DOCUMENTATION_MAN_FOLDER};PATTERN;_*;EXCLUDE")
	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})
		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}/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)
	#API.md
	install (FILES BIGPICTURE.md DESTINATION ${TARGET_DOCUMENTATION_TEXT_FOLDER})
	#code_of_conduct.md
	#COMPILE.md
	install (FILES GOALS.md DESTINATION ${TARGET_DOCUMENTATION_TEXT_FOLDER})
	install (FILES METADATA.ini DESTINATION ${TARGET_DOCUMENTATION_TEXT_FOLDER})
	install (FILES SECURITY.md DESTINATION ${TARGET_DOCUMENTATION_TEXT_FOLDER})
	#TESTING.md
	#VERSION.md
	install (FILES AUTHORS.md DESTINATION ${TARGET_DOCUMENTATION_TEXT_FOLDER})
	#CODING.md
	install (FILES CONTRACT.ini DESTINATION ${TARGET_DOCUMENTATION_TEXT_FOLDER})
	#DESIGN.md
	#GIT.md
	#INSTALL.md
	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})
	install (FILES WHY.md DESTINATION ${TARGET_DOCUMENTATION_TEXT_FOLDER})

endif ()

add_subdirectory(help)
