# EDoc plugin. EDOC_TARGETS = $(call list_targets,edoc) .PHONY: edoc $(EDOC_TARGETS) edoc: $(EDOC_TARGETS) edoc-build: init $i "Bootstrap a new OTP application named $(APP)" $t mkdir $(APP)/ $t cp ../erlang.mk $(APP)/ $t $(MAKE) -C $(APP) -f erlang.mk bootstrap $v $i "Run EDoc" $t $(MAKE) -C $(APP) edoc $v $i "Check that documentation was generated" $t test -f $(APP)/doc/index.html $t test -f $(APP)/doc/$(APP)_app.html $t test -f $(APP)/doc/$(APP)_sup.html $i "Distclean the application" $t $(MAKE) -C $(APP) distclean $v $i "Check that the generated documentation was removed" $t test ! -e $(APP)/doc/index.html $t test ! -e $(APP)/doc/$(APP)_app.html $t test ! -e $(APP)/doc/$(APP)_sup.html $i "Generate a module with EDoc comments" $t printf "%s\n" \ "%% @doc erlang-mk-edoc-module" \ "-module($(APP))." \ "-export([ok/0])." \ "" \ "%% @doc erlang-mk-edoc-function" \ "ok() -> ok." > $(APP)/src/$(APP).erl $i "Run EDoc" $t $(MAKE) -C $(APP) edoc $v $i "Check that the new module's documentation was generated" $t test -f $(APP)/doc/$(APP).html $i "Check that the EDoc comments are in the generated documentation" $t grep -q erlang-mk-edoc-module $(APP)/doc/$(APP).html $t grep -q erlang-mk-edoc-function $(APP)/doc/$(APP).html $i "Generate a module with an invalid EDoc comment" $t printf "%s\n" \ "-module($(APP)_fail)." \ "-export([fail/0])." \ "%% @spec lol" \ "fail() -> fail." > $(APP)/src/$(APP)_fail.erl $i "Check that EDoc errors out" $t ! $(MAKE) -C $(APP) edoc $v edoc-docs: init $i "Bootstrap a new OTP application named $(APP)" $t mkdir $(APP)/ $t cp ../erlang.mk $(APP)/ $t $(MAKE) -C $(APP) -f erlang.mk bootstrap $v $i "Generate a doc/overview.edoc file" $t mkdir $(APP)/doc $t printf "%s\n" \ "@author R. J. Hacker " \ "@copyright 2007 R. J. Hacker" \ "@version 1.0.0" \ "@title Welcome to the 'frob' application!" \ "@doc 'frob' is a highly advanced frobnicator with low latency," > $(APP)/doc/overview.edoc $i "Check that EDoc runs on 'make docs'" $t $(MAKE) -C $(APP) docs $v $t test -f $(APP)/doc/index.html $i "Check that the overview.edoc file was used" $t grep -q frobnicator $(APP)/doc/overview-summary.html edoc-no-overview: init $i "Bootstrap a new OTP application named $(APP)" $t mkdir $(APP)/ $t cp ../erlang.mk $(APP)/ $t $(MAKE) -C $(APP) -f erlang.mk bootstrap $v $i "Check that EDoc doesn't run on 'make docs'" $t $(MAKE) -C $(APP) docs $v $t test ! -e $(APP)/doc/index.html edoc-opts: init $i "Bootstrap a new OTP application named $(APP)" $t mkdir $(APP)/ $t cp ../erlang.mk $(APP)/ $t $(MAKE) -C $(APP) -f erlang.mk bootstrap $v $i "Add edown doclet for EDoc" $t perl -ni.bak -e 'print;if ($$.==1) {print "DOC_DEPS = edown\nEDOC_OPTS = {doclet, edown_doclet}\n"}' $(APP)/Makefile $i "Run EDoc" $t $(MAKE) -C $(APP) edoc $v $i "Check that the Markdown documentation was generated" $t test -f $(APP)/doc/README.md $t test -f $(APP)/doc/$(APP)_app.md $t test -f $(APP)/doc/$(APP)_sup.md edoc-src-dirs: init $i "Create a multi application repository with a root application" $t mkdir $(APP)/ $t cp ../erlang.mk $(APP)/ $t $(MAKE) -C $(APP) -f erlang.mk bootstrap $v $i "Create a new application my_app" $t $(MAKE) -C $(APP) new-app in=my_app $v $i "Add apps directories to the list of EDoc source directories" $t echo 'EDOC_SRC_DIRS = $$(ALL_APPS_DIRS)' >> $(APP)/Makefile $i "Run EDoc" $t $(MAKE) -C $(APP) edoc $v $i "Check that the generated documentation includes modules from both apps" $t test -f $(APP)/doc/index.html $t test -f $(APP)/doc/$(APP)_app.html $t test -f $(APP)/doc/$(APP)_sup.html $t test -f $(APP)/doc/my_app_app.html $t test -f $(APP)/doc/my_app_sup.html edoc-src-subdirs: init $i "Bootstrap a new OTP application named $(APP)" $t mkdir $(APP)/ $t cp ../erlang.mk $(APP)/ $t $(MAKE) -C $(APP) -f erlang.mk bootstrap $v $i "Add current directory to the list of EDoc source directories" $t echo 'EDOC_SRC_DIRS = $$(CURDIR)' >> $(APP)/Makefile $i "Generate a module in a subdirectory with EDoc comments" $t mkdir $(APP)/src/subdir/ $t printf "%s\n" \ "%% @doc erlang-mk-edoc-subdir-module" \ "-module($(APP))." \ "-export([ok/0])." \ "" \ "%% @doc erlang-mk-edoc-subdir-function" \ "ok() -> ok." > $(APP)/src/subdir/$(APP).erl $i "Run EDoc" $t $(MAKE) -C $(APP) edoc $v $i "Check that the new module's documentation was generated" $t test -f $(APP)/doc/$(APP).html $i "Check that the EDoc comments are in the generated documentation" $t grep -q erlang-mk-edoc-subdir-module $(APP)/doc/$(APP).html $t grep -q erlang-mk-edoc-subdir-function $(APP)/doc/$(APP).html edoc-src-multiapp-subdirs: init $i "Bootstrap a multi application repository with a root application" $t mkdir $(APP)/ $t cp ../erlang.mk $(APP)/ $t $(MAKE) -C $(APP) -f erlang.mk bootstrap $v $i "Create a new application my_app" $t $(MAKE) -C $(APP) new-app in=my_app $v $i "Add apps directories to the list of EDoc source directories" $t echo 'EDOC_SRC_DIRS = $$(ALL_APPS_DIRS)' >> $(APP)/Makefile $i "Generate a module in a subdirectory with EDoc comments" $t mkdir $(APP)/apps/my_app/src/subdir/ $t printf "%s\n" \ "%% @doc erlang-mk-edoc-subdir-module" \ "-module($(APP))." \ "-export([ok/0])." \ "" \ "%% @doc erlang-mk-edoc-subdir-function" \ "ok() -> ok." > $(APP)/apps/my_app/src/subdir/$(APP).erl $i "Run EDoc" $t $(MAKE) -C $(APP) edoc $v $i "Check that the new module's documentation was generated" $t test -f $(APP)/doc/$(APP).html $i "Check that the EDoc comments are in the generated documentation" $t grep -q erlang-mk-edoc-subdir-module $(APP)/doc/$(APP).html $t grep -q erlang-mk-edoc-subdir-function $(APP)/doc/$(APP).html