#
# Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#

default: all

include $(SPEC)
include MakeBase.gmk
include ProcessMarkdown.gmk

################################################################################
# This makefile updates the generated build html documentation.
#
################################################################################

ifeq ($(ENABLE_PANDOC), false)
  $(info No pandoc executable was detected by configure)
  $(error Cannot continue)
endif

GLOBAL_SPECS_DEFAULT_CSS_FILE := $(TOPDIR)/make/data/docs-resources/resources/jdk-default.css

################################################################################

DOCS_DIR := $(TOPDIR)/doc

$(eval $(call SetupProcessMarkdown, building, \
  FILES := $(DOCS_DIR)/building.md, \
  DEST := $(DOCS_DIR), \
  CSS := $(GLOBAL_SPECS_DEFAULT_CSS_FILE), \
  OPTIONS := --toc, \
))
TARGETS += $(building)

$(eval $(call SetupProcessMarkdown, testing, \
  FILES := $(DOCS_DIR)/testing.md, \
  DEST := $(DOCS_DIR), \
  CSS := $(GLOBAL_SPECS_DEFAULT_CSS_FILE), \
  OPTIONS := --toc, \
))
TARGETS += $(testing)

$(eval $(call SetupProcessMarkdown, ide, \
  FILES := $(DOCS_DIR)/ide.md, \
  DEST := $(DOCS_DIR), \
  CSS := $(GLOBAL_SPECS_DEFAULT_CSS_FILE), \
  OPTIONS := --toc, \
))
TARGETS += $(ide)

################################################################################

$(eval $(call IncludeCustomExtension, UpdateBuildDocs.gmk))

################################################################################

all: $(TARGETS)

.PHONY: all default
