# Doxygen documentation will not be generated with default configuration,
# unless '--enable-doxygen-doc' is configured.
# The following targets are all about doxygen:
# make                # 'make doxygen' would be auto executed
# make doxygen        # generating doxygen documentation
# make doxygen-doc    # same as 'make doxygen'
# make clean          # clean docs generated by doxygen
# make install        # install doxygen documentation
# make uninstall      # uninstall doxygen documentation

if ENABLE_DOXYGEN

# Add all needed rules defined in ax_prog_doxygen.m4
@DX_RULES@

# Use 'make clean' to clean docs generated by doxygen.
clean-local:
	-rm -rf $(DX_CLEANFILES)

# integrate doxygen with automake targets
man3_MANS = @DX_DOCDIR@/man/man3/*
$(man3_MANS): doxygen-doc

# Docs will be installed. It may be one or more docs supported
# by doxygen, but does not include 'man'.
docdirs = $(DX_INSTALL_DOCS)

# Rules for installing docs generated by doxygen into $(htmldir),
# The typical value of $(htmldir) is '/usr/local/share/doc/$(PACKAGE)'
install-data-local:
	@if ! test -d "$(DESTDIR)$(htmldir)"; then \
	  echo "$(mkinstalldirs) '$(DESTDIR)$(htmldir)'"; \
	  $(mkinstalldirs) '$(DESTDIR)$(htmldir)'; \
	fi
	@for d in $(docdirs); do \
	  echo "cp -pR $$d '$(DESTDIR)$(htmldir)/'"; \
	  cp -pR $$d '$(DESTDIR)$(htmldir)/'; \
	done

# Rules for uninstalling docs generated by doxygen from $(htmldir)
uninstall-local:
	@for d in $(docdirs); do \
	  d=`basename $$d`; \
	  echo "test ! -d '$(DESTDIR)$(htmldir)/'$$d || \
	  { find '$(DESTDIR)$(htmldir)/'$$d -type d ! -perm -200 -exec chmod u+w '{}' ';' && \
	  rm -rf '$(DESTDIR)$(htmldir)/'$$d; }"; \
	  test ! -d '$(DESTDIR)$(htmldir)/'$$d || \
	  { find '$(DESTDIR)$(htmldir)/'$$d -type d ! -perm -200 -exec chmod u+w '{}' ';' && \
	  rm -rf '$(DESTDIR)$(htmldir)/'$$d; }; \
	done
	rmdir "$(DESTDIR)$(htmldir)/" || true

doxygen: doxygen-doc

endif ENABLE_DOXYGEN
