LogoopenSUSE Build Service > Projects
Sign Up | Log In

View File 0242-erl_docgen-Add-ghlink-step-for-all-non-generated-doc.patch of Package erlang (Project home:Ledest:erlang:20)

From a91f4640bc4554f9a746afa65bacda0e1a60afc0 Mon Sep 17 00:00:00 2001
From: Lukas Larsson <lukas@erlang.org>
Date: Fri, 6 Apr 2018 16:40:56 +0200
Subject: [PATCH 2/8] erl_docgen: Add ghlink step for all non-generated doc xml
 files

In order to get line numbers into the ghlink we have to add a post
processing step for all xml files.
---
 .gitignore                                    | 31 ++--------
 erts/doc/src/Makefile                         |  2 +-
 lib/.gitignore                                | 87 ---------------------------
 lib/asn1/doc/src/Makefile                     |  8 ++-
 lib/edoc/doc/src/Makefile                     | 15 ++---
 lib/erl_docgen/priv/bin/github_link.escript   | 51 ++++++++++++++++
 lib/erl_docgen/priv/bin/xml_from_edoc.escript |  7 ++-
 lib/erl_docgen/priv/dtd/chapter.dtd           |  1 +
 lib/erl_docgen/priv/dtd/common.refs.dtd       |  4 ++
 lib/et/doc/src/Makefile                       |  5 +-
 lib/et/doc/src/files.mk                       |  7 ++-
 lib/eunit/doc/src/Makefile                    | 13 ++--
 lib/kernel/doc/src/Makefile                   |  8 +--
 lib/mnesia/doc/src/Makefile                   | 10 ++-
 lib/runtime_tools/doc/src/Makefile            |  7 ++-
 lib/stdlib/doc/src/Makefile                   |  2 +-
 lib/syntax_tools/doc/src/Makefile             | 15 +++--
 lib/wx/doc/src/Makefile                       | 38 +++++++-----
 lib/xmerl/doc/src/Makefile                    | 14 +++--
 make/emd2exml.in                              |  2 +-
 make/otp.mk.in                                | 55 ++++++-----------
 make/otp_release_targets.mk                   | 62 +++++++++++++------
 system/doc/design_principles/Makefile         |  3 +
 system/doc/efficiency_guide/Makefile          |  1 +
 system/doc/embedded/Makefile                  |  1 +
 system/doc/getting_started/Makefile           |  1 +
 system/doc/installation_guide/Makefile        | 19 +++---
 system/doc/installation_guide/xmlfiles.mk     |  4 +-
 system/doc/oam/Makefile                       |  1 +
 system/doc/programming_examples/Makefile      |  8 ++-
 system/doc/programming_examples/xmlfiles.mk   |  4 +-
 system/doc/reference_manual/Makefile          |  1 +
 system/doc/system_architecture_intro/Makefile |  1 +
 system/doc/system_principles/Makefile         |  6 ++
 system/doc/system_principles/xmlfiles.mk      |  4 +-
 system/doc/top/Makefile                       | 61 +++++++++++--------
 system/doc/top/book.xml                       | 20 +++---
 system/doc/tutorial/Makefile                  |  7 +++
 system/doc/tutorial/xmlfiles.mk               |  5 +-
 39 files changed, 312 insertions(+), 279 deletions(-)
 create mode 100755 lib/erl_docgen/priv/bin/github_link.escript

diff --git a/erts/doc/src/Makefile b/erts/doc/src/Makefile
index c4f1baf89e..5fa8b0673a 100644
--- a/erts/doc/src/Makefile
+++ b/erts/doc/src/Makefile
@@ -155,7 +155,7 @@ clean:
 	rm -f errs core *~
 
 $(SPECDIR)/specs_%.xml:
-	escript $(SPECS_EXTRACTOR) $(SPECS_FLAGS) \
+	$(gen_verbose)escript $(SPECS_EXTRACTOR) $(SPECS_FLAGS) \
                 -o$(dir $@) -module $(patsubst $(SPECDIR)/specs_%.xml,%,$@)
 
 # ----------------------------------------------------
diff --git a/lib/asn1/doc/src/Makefile b/lib/asn1/doc/src/Makefile
index 9a388e4e8a..2b5d9467d9 100644
--- a/lib/asn1/doc/src/Makefile
+++ b/lib/asn1/doc/src/Makefile
@@ -51,13 +51,14 @@ XML_CHAPTER_FILES = \
 	asn1_introduction.xml \
 	asn1_getting_started.xml \
 	asn1_overview.xml \
-	asn1_spec.xml \
 	notes.xml
 
 BOOK_FILES = book.xml
 
 XML_FILES = $(BOOK_FILES) $(XML_APPLICATION_FILES) $(XML_REF3_FILES) \
-            $(GEN_XML) $(XML_PART_FILES) $(XML_CHAPTER_FILES)
+            $(XML_PART_FILES) $(XML_CHAPTER_FILES)
+
+XML_GEN_FILES = $(GEN_XML:%=$(XMLDIR)/%)
 
 GIF_FILES = \
 	exclusive_Win_But.gif \
@@ -75,7 +76,8 @@ EXTRA_FILES = \
 	$(DEFAULT_HTML_FILES) \
 	$(ASN1_FILES) \
 	$(XML_REF3_FILES:%.xml=$(HTMLDIR)/%.html) \
-	$(XML_CHAPTER_FILES:%.xml=$(HTMLDIR)/%.html)
+	$(XML_CHAPTER_FILES:%.xml=$(HTMLDIR)/%.html) \
+	$(GEN_XML:%.xml=$(HTMLDIR)/%.html) \
 
 MAN3_FILES = $(XML_REF3_FILES:%.xml=$(MAN3DIR)/%.3)
 
diff --git a/lib/edoc/doc/src/Makefile b/lib/edoc/doc/src/Makefile
index ca9ea66e3c..71de42795a 100644
--- a/lib/edoc/doc/src/Makefile
+++ b/lib/edoc/doc/src/Makefile
@@ -54,9 +54,10 @@ XML_NOTES_FILES = notes.xml
 BOOK_FILES = book.xml
 
 XML_FILES=\
-	$(BOOK_FILES) $(XML_CHAPTER_FILES) \
-	$(XML_PART_FILES) $(XML_REF3_FILES) $(XML_APPLICATION_FILES) \
-	$(XML_NOTES_FILES)
+	$(BOOK_FILES) $(XML_APPLICATION_FILES) \
+	$(XML_PART_FILES) $(XML_NOTES_FILES)
+
+XML_GEN_FILES=$(XML_REF3_FILES:%=$(XMLDIR)/%) $(XML_CHAPTER_FILES:%=$(XMLDIR)/%)
 
 # ----------------------------------------------------
 INFO_FILE = ../../info
@@ -101,11 +102,11 @@ html: gifs $(HTML_REF_MAN_FILE)
 
 man: $(MAN3_FILES)
 
-$(XML_REF3_FILES):
-	escript $(DOCGEN)/priv/bin/xml_from_edoc.escript -def vsn $(EDOC_VSN) -i $(ERL_TOP)/lib/edoc/include $(SRC_DIR)/$(@:%.xml=%.erl)
+$(XML_REF3_FILES:%=$(XMLDIR)/%):
+	$(gen_verbose)escript $(DOCGEN)/priv/bin/xml_from_edoc.escript -def vsn $(EDOC_VSN) -i $(ERL_TOP)/lib/edoc/include -dir $(XMLDIR) $(SRC_DIR)/$(@:$(XMLDIR)/%.xml=%.erl)
 
-$(XML_CHAPTER_FILES): ../overview.edoc
-	escript $(DOCGEN)/priv/bin/xml_from_edoc.escript -def vsn $(EDOC_VSN) -chapter ../overview.edoc
+$(XML_CHAPTER_FILES:%=$(XMLDIR)/%): ../overview.edoc
+	$(gen_verbose)escript $(DOCGEN)/priv/bin/xml_from_edoc.escript -def vsn $(EDOC_VSN) -chapter -dir $(XMLDIR) $<
 
 gifs: $(GIF_FILES:%=$(HTMLDIR)/%)
 
diff --git a/lib/erl_docgen/priv/bin/github_link.escript b/lib/erl_docgen/priv/bin/github_link.escript
new file mode 100755
index 0000000000..1b36fca202
--- /dev/null
+++ b/lib/erl_docgen/priv/bin/github_link.escript
@@ -0,0 +1,51 @@
+#!/usr/bin/env escript
+%% -*- erlang -*-
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%%     http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%----------------------------------------------------------------------
+%% File    : github_link.escript
+%%
+%% Created : 12 Dec 2017 by Lukas Larsson
+%%----------------------------------------------------------------------
+
+main([In, Filename, Sha, Out]) ->
+    {ok, Bin} = file:read_file(In),
+
+    TagsToAnnotate = ["description", "func", "datatype", "section"],
+
+    Subs = subs(TagsToAnnotate, Filename, Sha, re:split(Bin,[$\n])),
+
+    file:write_file(Out, Subs).
+
+subs([], _, _, Bin) ->
+    lists:join("\n", Bin);
+subs([Pat|Pats], Fn, Sha, Bin) ->
+    subs(Pats, Fn, Sha, sub(Bin, Pat, Fn, Sha)).
+
+sub(Bin, Pat, Fn, Sha) ->
+    sub(Bin, Pat, Fn, Sha, 1).
+sub([], _Pat, _Fn, _Sha, _Cnt) ->
+    [];
+sub([H|T], Pat, Fn, Sha, Cnt) ->
+    %% We use the maint branch here, it is not as exact as the tag,
+    %% but it is the best we can do as github does not allow doing
+    %% pullrequests on anything but branches.
+    [re:replace(H,["<",Pat,">"],
+                    ["<",Pat," ghlink=\"maint/",Fn,"#L",
+                     integer_to_list(Cnt),"\">"],[{return,list}]) |
+     sub(T, Pat, Fn, Sha, Cnt+1)].
diff --git a/lib/erl_docgen/priv/bin/xml_from_edoc.escript b/lib/erl_docgen/priv/bin/xml_from_edoc.escript
index b930ae3818..b0e3764fae 100755
--- a/lib/erl_docgen/priv/bin/xml_from_edoc.escript
+++ b/lib/erl_docgen/priv/bin/xml_from_edoc.escript
@@ -28,6 +28,7 @@
 %% Records 
 %%======================================================================
 -record(args, {suffix=".xml",
+               dir=".",
 	       layout=docgen_edoc_xml_cb,
 	       def=[],
 	       includes=[],
@@ -85,7 +86,7 @@ module(File, Args) ->
 		    
 		    {app_default, "OTPROOT"},
 		    {file_suffix, Args#args.suffix},
-		    {dir,         "."},
+		    {dir,         Args#args.dir},
 		    {layout,      Args#args.layout}],
 	    edoc:file(File, Opts);
 	false ->
@@ -118,7 +119,7 @@ users_guide(File, Args) ->
 	    Text = edoc_lib:run_layout(F, Opts),
 	    
 	    OutFile = "chapter" ++ Args#args.suffix,
-	    edoc_lib:write_file(Text, ".", OutFile, Encoding);
+	    edoc_lib:write_file(Text, Args#args.dir, OutFile, Encoding);
 	false ->
 	    io:format("~s: not a regular file\n", [File]),
 	    usage()
@@ -139,6 +140,8 @@ parse(["-def", Key, Val |RawOpts], Type, Args) ->
 parse(["-i", Dir |RawOpts], Type, Args) ->
     Args2 = Args#args{includes=Args#args.includes++[Dir]},
     parse(RawOpts, Type, Args2);
+parse(["-dir", Dir |RawOpts], Type, Args) ->
+    parse(RawOpts, Type, Args#args{dir=Dir});
 parse(["-preprocess", Bool |RawOpts], Type, Args) when Bool == "true";
 						       Bool == "false" ->
     parse(RawOpts, Type, Args#args{preprocess=list_to_atom(Bool)});
diff --git a/lib/erl_docgen/priv/dtd/chapter.dtd b/lib/erl_docgen/priv/dtd/chapter.dtd
index 8d940b90f7..3e9113d798 100644
--- a/lib/erl_docgen/priv/dtd/chapter.dtd
+++ b/lib/erl_docgen/priv/dtd/chapter.dtd
@@ -35,3 +35,4 @@
 <!ELEMENT section             (marker*,title,
                                (%block;|quote|warning|note|dont|do|br|image|marker|
                                 table|section)*) >
+<!ATTLIST section              ghlink CDATA #IMPLIED>
diff --git a/lib/erl_docgen/priv/dtd/common.refs.dtd b/lib/erl_docgen/priv/dtd/common.refs.dtd
index 172cd16ad4..07c876a17f 100644
--- a/lib/erl_docgen/priv/dtd/common.refs.dtd
+++ b/lib/erl_docgen/priv/dtd/common.refs.dtd
@@ -26,8 +26,10 @@
 %common.header;
 
 <!ELEMENT description         (%block;|quote|br|marker|warning|note|dont|do)* >
+<!ATTLIST description          ghlink CDATA #IMPLIED>
 <!ELEMENT funcs               (func)+ >
 <!ELEMENT func                (name+,fsummary,(type|type_desc)*,desc?) >
+<!ATTLIST func                 ghlink CDATA #IMPLIED>
 <!-- ELEMENT name is defined in each ref dtd -->
 <!ELEMENT fsummary            (#PCDATA|c|i|em|anno)* >
 <!ELEMENT type                (v,d?)* >
@@ -42,9 +44,11 @@
 <!ELEMENT email               (#PCDATA) >
 <!ELEMENT section             (marker*,title,(%block;|quote|br|marker|
                                warning|note|dont|do|section)*) >
+<!ATTLIST section              ghlink CDATA #IMPLIED>
 <!ELEMENT datatypes           (datatype_title?,datatype)+ >
 <!ELEMENT datatype_title      (#PCDATA) >
 <!ELEMENT datatype            (name+,desc?) >
+<!ATTLIST datatype             ghlink CDATA #IMPLIED>
 <!ELEMENT type_desc           (#PCDATA|anno|c|seealso)* >
 <!ATTLIST type_desc            variable CDATA #IMPLIED
                                name CDATA #IMPLIED>
diff --git a/lib/et/doc/src/Makefile b/lib/et/doc/src/Makefile
index 0257a8f817..162d36e274 100644
--- a/lib/et/doc/src/Makefile
+++ b/lib/et/doc/src/Makefile
@@ -45,8 +45,11 @@ include files.mk
 XML_FILES = $(BOOK_FILES) $(XML_APPLICATION_FILES) $(XML_REF3_FILES) \
             $(XML_PART_FILES) $(XML_CHAPTER_FILES) 
 
+XML_GEN_FILES = $(GEN_XML:%=$(XMLDIR)/%)
+
 HTML_FILES = $(XML_APPLICATION_FILES:%.xml=$(HTMLDIR)/%.html) \
-	$(XML_PART_FILES:%.xml=$(HTMLDIR)/%.html)
+	$(XML_PART_FILES:%.xml=$(HTMLDIR)/%.html) \
+	$(GEN_XML:%.xml=$(HTMLDIR)/%.html)
 
 INFO_FILE = ../../info
 
diff --git a/lib/et/doc/src/files.mk b/lib/et/doc/src/files.mk
index e0ea9b0b76..7437da7ce3 100644
--- a/lib/et/doc/src/files.mk
+++ b/lib/et/doc/src/files.mk
@@ -31,10 +31,13 @@ XML_PART_FILES = \
 
 XML_CHAPTER_FILES = \
 	et_intro.xml \
+	notes.xml
+
+GEN_XML = \
 	et_tutorial.xml \
 	et_desc.xml \
-	et_examples.xml \
-	notes.xml
+	et_examples.xml
+
 
 BOOK_FILES = book.xml
 
diff --git a/lib/eunit/doc/src/Makefile b/lib/eunit/doc/src/Makefile
index 610e575af6..e91d947592 100644
--- a/lib/eunit/doc/src/Makefile
+++ b/lib/eunit/doc/src/Makefile
@@ -70,9 +70,10 @@ HTML_STYLESHEET_FILES = \
 BOOK_FILES = book.xml
 
 XML_FILES = \
-	$(BOOK_FILES) $(XML_CHAPTER_FILES)  $(XML_NOTES_FILES) \
-	$(XML_PART_FILES) $(XML_REF3_FILES) $(XML_APPLICATION_FILES)
+	$(BOOK_FILES) $(XML_NOTES_FILES) \
+	$(XML_PART_FILES) $(XML_APPLICATION_FILES)
 
+XML_GEN_FILES = $(XML_REF3_FILES:%=$(XMLDIR)/%) $(XML_CHAPTER_FILES:%=$(XMLDIR)/%)
 
 # ----------------------------------------------------
 INFO_FILE = ../../info
@@ -122,11 +123,11 @@ man: $(MAN3_FILES)
 
 gifs: $(GIF_FILES:%=$(HTMLDIR)/%)
 
-$(XML_REF3_FILES):
-	escript $(DOCGEN)/priv/bin/xml_from_edoc.escript -def vsn $(EUNIT_VSN) -i $(EUNIT_INC_DIR) $(EUNIT_DIR)/$(@:%.xml=%.erl)
+$(XML_REF3_FILES:%=$(XMLDIR)/%):
+	$(gen_verbose)escript $(DOCGEN)/priv/bin/xml_from_edoc.escript -def vsn $(EUNIT_VSN) -i $(EUNIT_INC_DIR) -dir $(XMLDIR) $(EUNIT_DIR)/$(@:$(XMLDIR)/%.xml=%.erl)
 
-$(XML_CHAPTER_FILES):
-	escript $(DOCGEN)/priv/bin/xml_from_edoc.escript -def vsn $(EUNIT_VSN) -chapter ../overview.edoc
+$(XML_CHAPTER_FILES:%=$(XMLDIR)/%):
+	$(gen_verbose)escript $(DOCGEN)/priv/bin/xml_from_edoc.escript -def vsn $(EUNIT_VSN) -chapter -dir $(XMLDIR) ../overview.edoc
 
 info:
 	@echo "XML_PART_FILES: $(XML_PART_FILES)"
diff --git a/lib/kernel/doc/src/Makefile b/lib/kernel/doc/src/Makefile
index 0759f362d4..2413541082 100644
--- a/lib/kernel/doc/src/Makefile
+++ b/lib/kernel/doc/src/Makefile
@@ -137,16 +137,16 @@ clean clean_docs:
 	rm -f errs core *~
 
 $(SPECDIR)/specs_erl_prim_loader_stub.xml:
-	escript $(SPECS_EXTRACTOR) $(SPECS_FLAGS) \
+	$(gen_verbose)escript $(SPECS_EXTRACTOR) $(SPECS_FLAGS) \
                 -o$(dir $@) -module erl_prim_loader_stub
 $(SPECDIR)/specs_erlang_stub.xml:
-	escript $(SPECS_EXTRACTOR) $(SPECS_FLAGS) \
+	$(gen_verbose)escript $(SPECS_EXTRACTOR) $(SPECS_FLAGS) \
                 -o$(dir $@) -module erlang_stub
 $(SPECDIR)/specs_init_stub.xml:
-	escript $(SPECS_EXTRACTOR) $(SPECS_FLAGS) \
+	$(gen_verbose)escript $(SPECS_EXTRACTOR) $(SPECS_FLAGS) \
                 -o$(dir $@) -module init_stub
 $(SPECDIR)/specs_zlib_stub.xml:
-	escript $(SPECS_EXTRACTOR) $(SPECS_FLAGS) \
+	$(gen_verbose)escript $(SPECS_EXTRACTOR) $(SPECS_FLAGS) \
                 -o$(dir $@) -module zlib_stub
 
 # ----------------------------------------------------
diff --git a/lib/mnesia/doc/src/Makefile b/lib/mnesia/doc/src/Makefile
index 82fcf66256..aed46d50db 100644
--- a/lib/mnesia/doc/src/Makefile
+++ b/lib/mnesia/doc/src/Makefile
@@ -49,16 +49,18 @@ XML_PART_FILES = \
 XML_CHAPTER_FILES = \
 	Mnesia_chap1.xml \
 	Mnesia_overview.xml \
+	Mnesia_chap8.xml \
+	notes.xml
+
+XML_CHAPTER_GEN_FILES = \
 	Mnesia_chap2.xml \
 	Mnesia_chap3.xml \
 	Mnesia_chap4.xml \
 	Mnesia_chap5.xml \
 	Mnesia_chap7.xml \
-	Mnesia_chap8.xml \
 	Mnesia_App_A.xml \
 	Mnesia_App_B.xml \
-	Mnesia_App_C.xml \
-	notes.xml
+	Mnesia_App_C.xml
 
 BOOK_FILES = book.xml
 
@@ -66,6 +68,8 @@ XML_FILES = \
 	$(BOOK_FILES) $(XML_CHAPTER_FILES) \
 	$(XML_PART_FILES) $(XML_REF3_FILES) $(XML_APPLICATION_FILES)
 
+XML_GEN_FILES = $(XML_CHAPTER_GEN_FILES:%=$(XMLDIR)/%)
+
 GIF_FILES = \
 	company.gif
 
diff --git a/lib/runtime_tools/doc/src/Makefile b/lib/runtime_tools/doc/src/Makefile
index a9b0056a93..11583406b7 100644
--- a/lib/runtime_tools/doc/src/Makefile
+++ b/lib/runtime_tools/doc/src/Makefile
@@ -60,8 +60,9 @@ BOOK_FILES = book.xml
 XML_FILES = \
 	$(BOOK_FILES) $(XML_CHAPTER_FILES) \
 	$(XML_PART_FILES) $(XML_REF3_FILES) \
-	$(XML_REF6_FILES) $(XML_APPLICATION_FILES) \
-	$(GENERATED_XML_FILES)
+	$(XML_REF6_FILES) $(XML_APPLICATION_FILES)
+
+XML_GEN_FILES = $(GENERATED_XML_FILES:%=$(XMLDIR)/%)
 
 GIF_FILES =
 
@@ -97,7 +98,7 @@ SPECS_FLAGS = -I../../include -I../../../kernel/src
 # Targets
 # ----------------------------------------------------
 
-%.xml: $(ERL_TOP)/HOWTO/%.md $(ERL_TOP)/make/emd2exml
+$(XMLDIR)/%.xml: $(ERL_TOP)/HOWTO/%.md $(ERL_TOP)/make/emd2exml
 	$(ERL_TOP)/make/emd2exml $< $@
 
 $(HTMLDIR)/%.gif: %.gif
diff --git a/lib/stdlib/doc/src/Makefile b/lib/stdlib/doc/src/Makefile
index af27efa6c1..508a4fa2de 100644
--- a/lib/stdlib/doc/src/Makefile
+++ b/lib/stdlib/doc/src/Makefile
@@ -163,7 +163,7 @@ clean clean_docs:
 	rm -f errs core *~
 
 $(SPECDIR)/specs_erl_id_trans.xml:
-	escript $(SPECS_EXTRACTOR) $(SPECS_FLAGS) \
+	$(gen_verbose)escript $(SPECS_EXTRACTOR) $(SPECS_FLAGS) \
 		-o$(dir $@) -module erl_id_trans
 
 # ----------------------------------------------------
diff --git a/lib/syntax_tools/doc/src/Makefile b/lib/syntax_tools/doc/src/Makefile
index 1ce620b3d6..a346b9a0bd 100644
--- a/lib/syntax_tools/doc/src/Makefile
+++ b/lib/syntax_tools/doc/src/Makefile
@@ -63,10 +63,11 @@ BOOK_FILES = book.xml
 
 
 XML_FILES=\
-	$(BOOK_FILES) $(XML_CHAPTER_FILES) \
-	$(XML_PART_FILES) $(XML_REF3_FILES) $(XML_APPLICATION_FILES) \
+	$(BOOK_FILES) $(XML_PART_FILES)  $(XML_APPLICATION_FILES) \
 	$(XML_NOTES_FILES)
 
+XML_GEN_FILES = $(XML_REF3_FILES:%=$(XMLDIR)/%) $(XML_CHAPTER_FILES:%=$(XMLDIR)/%)
+
 # ----------------------------------------------------
 INFO_FILE = ../../info
 
@@ -108,11 +109,13 @@ html: gifs $(HTML_REF_MAN_FILE)
 
 man: $(MAN3_FILES)
 
-$(XML_REF3_FILES):
-	escript $(DOCGEN)/priv/bin/xml_from_edoc.escript $(SRC_DIR)/$(@:%.xml=%.erl)
+$(XML_REF3_FILES:%=$(XMLDIR)/%):
+	$(gen_verbose)escript $(DOCGEN)/priv/bin/xml_from_edoc.escript \
+	-dir $(XMLDIR) $(SRC_DIR)/$(@:$(XMLDIR)/%.xml=%.erl)
 
-$(XML_CHAPTER_FILES):
-	escript $(DOCGEN)/priv/bin/xml_from_edoc.escript -def vsn $(VSN) -chapter ../overview.edoc
+$(XML_CHAPTER_FILES:%=$(XMLDIR)/%):
+	$(gen_verbose)escript $(DOCGEN)/priv/bin/xml_from_edoc.escript -def vsn $(VSN) \
+	-chapter -dir $(XMLDIR) ../overview.edoc
 
 gifs: $(GIF_FILES:%=$(HTMLDIR)/%)
 
diff --git a/lib/wx/doc/src/Makefile b/lib/wx/doc/src/Makefile
index a76740adf1..c132c628f7 100644
--- a/lib/wx/doc/src/Makefile
+++ b/lib/wx/doc/src/Makefile
@@ -46,9 +46,13 @@ XML_NOTES_FILES = notes.xml
 BOOK_FILES = book.xml
 
 XML_FILES = \
-	$(BOOK_FILES) $(XML_CHAPTER_FILES) \
-	$(XML_PART_FILES) $(XML_REF3_FILES) \
-	$(XML_NOTES_FILES) $(XML_APPLICATION_FILES)
+	$(BOOK_FILES) \
+	$(XML_PART_FILES) $(XML_NOTES_FILES)
+
+XML_GEN_FILES = \
+	$(XML_CHAPTER_FILES:%=$(XMLDIR)/%) \
+	$(XML_REF3_FILES:%=$(XMLDIR)/%) \
+	$(XML_APPLICATION_FILES:%=$(XMLDIR)/%)
 
 # ----------------------------------------------------
 INFO_FILE = ../../info
@@ -93,22 +97,26 @@ gifs: $(GIF_FILES:%=$(HTMLDIR)/%)
 xml: $(XML_REF3_FILES) $(XML_CHAPTER_FILES)
 
 ref_man.xml: ref_man.xml.src
-	@echo Preparing ref_man.xml
-	@cat ref_man.xml.src > ref_man.xml
+	@echo Preparing $@
+	@cat ref_man.xml.src > $@
 	@for d in $(ModsNoExt); do         \
-		echo "  <xi:include href=\"$$d.xml\"/>" >> ref_man.xml ; \
+		echo "  <xi:include href=\"$$d.xml\"/>" >> $@ ; \
 	done
-	@echo "</application>" >> ref_man.xml
-	@echo
+	@echo "</application>" >> $@
 
-$(ErlMods:%.erl=%.xml): ../../src/$(@:%.xml=%.erl)
-	escript $(DOCGEN)/priv/bin/xml_from_edoc.escript -def vsn $(VSN) -preprocess true -sort_functions false ../../src/$(@:%.xml=%.erl)
+$(ErlMods:%.erl=$(XMLDIR)/%.xml):
+	$(gen_verbose)escript $(DOCGEN)/priv/bin/xml_from_edoc.escript \
+	-def vsn $(VSN) -preprocess true -sort_functions false -dir $(XMLDIR) \
+	../../src/$(@:$(XMLDIR)/%.xml=%.erl)
 
-$(GenMods:%.erl=%.xml): ../../src/gen/$(@:%.xml=%.erl)
-	escript $(DOCGEN)/priv/bin/xml_from_edoc.escript -def vsn $(VSN) -i ../../src -preprocess true -sort_functions false ../../src/gen/$(@:%.xml=%.erl)
+$(GenMods:%.erl=$(XMLDIR)/%.xml):
+	$(gen_verbose)escript $(DOCGEN)/priv/bin/xml_from_edoc.escript \
+	-def vsn $(VSN) -i ../../src -preprocess true -sort_functions false -dir $(XMLDIR) \
+	../../src/gen/$(@:$(XMLDIR)/%.xml=%.erl)
 
-$(XML_CHAPTER_FILES): ../overview.edoc
-	escript $(DOCGEN)/priv/bin/xml_from_edoc.escript -def vsn $(VSN) -chapter ../overview.edoc
+$(XML_CHAPTER_FILES:%=$(XMLDIR)/%): ../overview.edoc
+	$(gen_verbose)escript $(DOCGEN)/priv/bin/xml_from_edoc.escript \
+	-def vsn $(VSN) -chapter -dir $(XMLDIR) $<
 
 debug opt:
 
@@ -118,7 +126,7 @@ clean clean_docs:
 	rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo)
 	rm -f $(SPECDIR)/*
 	rm -f errs core *~ ../html/edoc-info
-	rm -f $(XML_REF3_FILES) $(XML_CHAPTER_FILES) *.html
+	rm -f $(XML_GEN_FILES) *.html
 
 # ----------------------------------------------------
 # Release Target
diff --git a/lib/xmerl/doc/src/Makefile b/lib/xmerl/doc/src/Makefile
index 7d0b0b2392..94100910ef 100644
--- a/lib/xmerl/doc/src/Makefile
+++ b/lib/xmerl/doc/src/Makefile
@@ -54,10 +54,9 @@ XMERL_MODULES = \
 
 
 XML_APPLICATION_FILES = ref_man.xml
-XMERL_XML_FILES = $(XMERL_MODULES:=.xml)
+XMERL_XML_FILES = $(XMERL_MODULES:%=$(XMLDIR)/%.xml)
 
-XML_REF3_FILES = $(XMERL_XML_FILES) \
-	xmerl_sax_parser.xml
+XML_REF3_FILES = xmerl_sax_parser.xml
 
 XML_PART_FILES = \
 	part.xml
@@ -65,9 +64,10 @@ XML_PART_FILES = \
 XML_REF6_FILES =
 
 XML_CHAPTER_FILES =  \
-	xmerl_ug.xml \
 	notes.xml
 
+XML_CHAPTER_GEN_FILES = \
+	$(XMLDIR)/xmerl_ug.xml
 
 HTML_EXAMPLE_FILES =  \
 	xmerl_examples.html \
@@ -89,6 +89,8 @@ XML_FILES= \
 	$(BOOK_FILES) $(XML_CHAPTER_FILES) \
 	$(XML_PART_FILES) $(XML_REF3_FILES) $(XML_APPLICATION_FILES)
 
+XML_GEN_FILES = $(XMERL_XML_FILES) $(XML_CHAPTER_GEN_FILES)
+
 # ----------------------------------------------------
 INFO_FILE = ../../info
 
@@ -97,7 +99,7 @@ HTML_FILES = $(XML_REF_MAN:%.xml=$(HTMLDIR)/%.html) \
 	$(XML_PART_FILES:%.xml=$(HTMLDIR)/%.html)
 
 
-MAN3_FILES = $(XML_REF3_FILES:%.xml=$(MAN3DIR)/%.3)
+MAN3_FILES = $(XML_REF3_FILES:%.xml=$(MAN3DIR)/%.3) $(XMERL_MODULES:%=$(MAN3DIR)/%.3)
 MAN6_FILES = $(XML_REF6_FILES:%_app.xml=$(MAN6DIR)/%.6)
 
 HTML_REF_MAN_FILE = $(HTMLDIR)/index.html
@@ -126,7 +128,7 @@ pdf: $(TOP_PDF_FILE)
 html: gifs $(HTML_REF_MAN_FILE)
 
 $(XMERL_XML_FILES):
-	escript $(DOCGEN)/priv/bin/xml_from_edoc.escript $(XMERL_DIR)/$(@:%.xml=%.erl)
+	$(gen_verbose)escript $(DOCGEN)/priv/bin/xml_from_edoc.escript -dir $(XMLDIR) $(XMERL_DIR)/$(@:$(XMLDIR)/%.xml=%.erl)
 
 man: $(MAN3_FILES) $(MAN6_FILES)
 
diff --git a/make/emd2exml.in b/make/emd2exml.in
index 13bd6700d9..57bcaba24d 100755
--- a/make/emd2exml.in
+++ b/make/emd2exml.in
@@ -747,7 +747,7 @@ header(#state{ofile = {File, _}} = S0, Title) ->
 		    integer_to_list(Day),
 		    "</date>", nl(),
 		    "<rev>1</rev>", nl(),
-		    "<file>",File,"</file>", nl(),
+		    "<file>",filename:basename(File),"</file>", nl(),
 		    "</header>", nl()]),
     put_delayed(S3, ?DELAYED_TOC_IX).
 
diff --git a/make/otp.mk.in b/make/otp.mk.in
index 1d538fa528..6692b575ff 100644
--- a/make/otp.mk.in
+++ b/make/otp.mk.in
@@ -222,6 +222,7 @@ MAN9DIR = $(DOCDIR)/man9
 TEXDIR = .
 
 SPECDIR = $(DOCDIR)/specs
+XMLDIR = $(DOCDIR)/xml
 
 ifeq ($(CSS_FILE),)
 CSS_FILE = otp_doc.css
@@ -276,55 +277,35 @@ endif
 SPECS_EXTRACTOR=$(DOCGEN)/priv/bin/specs_gen.escript
 # Extract specifications and types from Erlang source files (-spec, -type)
 $(SPECDIR)/specs_%.xml: $(SPECS_ESRC)/%.erl
-	escript $(SPECS_EXTRACTOR) $(SPECS_FLAGS) -o$(dir $@) $<
+	$(gen_verbose)escript $(SPECS_EXTRACTOR) $(SPECS_FLAGS) -o$(dir $@) $<
 $(SPECDIR)/specs_%.xml: $(SPECS_ESRC)/gen/%.erl
-	escript $(SPECS_EXTRACTOR) $(SPECS_FLAGS) -o$(dir $@) $<
+	$(gen_verbose)escript $(SPECS_EXTRACTOR) $(SPECS_FLAGS) -o$(dir $@) $<
 
+MANXSLTARGS=--stringparam company "Ericsson AB" --stringparam docgen "$(DOCGEN)" --stringparam gendate "$$date" --stringparam appname "$(APPLICATION)" --stringparam appver "$(VSN)" --xinclude -path $(DOCGEN)/priv/dtd  -path $(DOCGEN)/priv/dtd_man_entities -path .
 
-$(MAN1DIR)/%.1: %.xml
-	date=`date +"%B %e, %Y"`; \
-	xsltproc --output "$@" --stringparam company "Ericsson AB" --stringparam docgen "$(DOCGEN)" --stringparam gendate "$$date" --stringparam appname "$(APPLICATION)" --stringparam appver "$(VSN)" --xinclude -path $(DOCGEN)/priv/dtd  -path $(DOCGEN)/priv/dtd_man_entities $(DOCGEN)/priv/xsl/db_man.xsl $<
-
-$(MAN2DIR)/%.2: %.xml
-	date=`date +"%B %e, %Y"`; \
-	xsltproc --output "$@" --stringparam company "Ericsson AB" --stringparam docgen "$(DOCGEN)" --stringparam gendate "$$date" --stringparam appname "$(APPLICATION)" --stringparam appver "$(VSN)" --xinclude -path $(DOCGEN)/priv/dtd  -path $(DOCGEN)/priv/dtd_man_entities $(DOCGEN)/priv/xsl/db_man.xsl $<
+$(MAN1DIR)/%.1 $(MAN2DIR)/%.2 $(MAN4DIR)/%.4 $(MAN4DIR)/%.5 $(MAN9DIR)/%.9: $(XMLDIR)/%.xml
+	$(gen_verbose)date=`date +"%B %e, %Y"`; \
+	xsltproc --output "$@" $(MANXSLTARGS) $(DOCGEN)/priv/xsl/db_man.xsl $<
 
 ifneq ($(wildcard $(SPECDIR)),)
-$(MAN3DIR)/%.3: %.xml $(SPECDIR)/specs_%.xml
-	date=`date +"%B %e, %Y"`; \
+$(MAN3DIR)/%.3: $(XMLDIR)/%.xml $(SPECDIR)/specs_%.xml
+	$(gen_verbose)date=`date +"%B %e, %Y"`; \
 	specs_file=`pwd`/$(SPECDIR)/specs_$*.xml; \
-	xsltproc --output "$@" --stringparam company "Ericsson AB" --stringparam docgen "$(DOCGEN)" --stringparam gendate "$$date" --stringparam appname "$(APPLICATION)" --stringparam appver "$(VSN)" --stringparam specs_file "$$specs_file" --xinclude -path $(DOCGEN)/priv/dtd  -path $(DOCGEN)/priv/dtd_man_entities $(DOCGEN)/priv/xsl/db_man.xsl $<
+	xsltproc --output "$@" $(MANXSLTARGS) --stringparam specs_file "$$specs_file" $(DOCGEN)/priv/xsl/db_man.xsl $<
 else
-$(MAN3DIR)/%.3: %.xml
-	date=`date +"%B %e, %Y"`; \
-	xsltproc --output "$@" --stringparam company "Ericsson AB" --stringparam docgen "$(DOCGEN)" --stringparam gendate "$$date" --stringparam appname "$(APPLICATION)" --stringparam appver "$(VSN)" --xinclude -path $(DOCGEN)/priv/dtd  -path $(DOCGEN)/priv/dtd_man_entities $(DOCGEN)/priv/xsl/db_man.xsl $<
+$(MAN3DIR)/%.3: $(XMLDIR)/%.xml
+	$(gen_verbose)date=`date +"%B %e, %Y"`; \
+	xsltproc --output "$@" $(MANXSLTARGS) $(DOCGEN)/priv/xsl/db_man.xsl $<
 endif
 
 # left for compatibility
-$(MAN4DIR)/%.4: %.xml
-	date=`date +"%B %e, %Y"`; \
-	xsltproc --output "$@" --stringparam company "Ericsson AB" --stringparam docgen "$(DOCGEN)" --stringparam gendate "$$date" --stringparam appname "$(APPLICATION)" --stringparam appver "$(VSN)" --xinclude -path $(DOCGEN)/priv/dtd  -path $(DOCGEN)/priv/dtd_man_entities $(DOCGEN)/priv/xsl/db_man.xsl $<
-
-$(MAN4DIR)/%.5: %.xml
-	date=`date +"%B %e, %Y"`; \
-	xsltproc --output "$@" --stringparam company "Ericsson AB" --stringparam docgen "$(DOCGEN)" --stringparam gendate "$$date" --stringparam appname "$(APPLICATION)" --stringparam appver "$(VSN)" --xinclude -path $(DOCGEN)/priv/dtd  -path $(DOCGEN)/priv/dtd_man_entities $(DOCGEN)/priv/xsl/db_man.xsl $<
-
-# left for compatibility
-$(MAN6DIR)/%.6: %_app.xml
-	date=`date +"%B %e, %Y"`; \
-	xsltproc --output "$@" --stringparam company "Ericsson AB" --stringparam docgen "$(DOCGEN)" --stringparam gendate "$$date" --stringparam appname "$(APPLICATION)" --stringparam appver "$(VSN)" --xinclude -path $(DOCGEN)/priv/dtd  -path $(DOCGEN)/priv/dtd_man_entities $(DOCGEN)/priv/xsl/db_man.xsl $<
-
-$(MAN6DIR)/%.7: %_app.xml
-	date=`date +"%B %e, %Y"`; \
-	xsltproc --output "$@" --stringparam company "Ericsson AB" --stringparam docgen "$(DOCGEN)" --stringparam gendate "$$date" --stringparam appname "$(APPLICATION)" --stringparam appver "$(VSN)" --xinclude -path $(DOCGEN)/priv/dtd  -path $(DOCGEN)/priv/dtd_man_entities $(DOCGEN)/priv/xsl/db_man.xsl $<
-
-$(MAN9DIR)/%.9: %.xml
-	date=`date +"%B %e, %Y"`; \
-	xsltproc --output "$@" --stringparam company "Ericsson AB" --stringparam docgen "$(DOCGEN)" --stringparam gendate "$$date" --stringparam appname "$(APPLICATION)" --stringparam appver "$(VSN)" --xinclude -path $(DOCGEN)/priv/dtd  -path $(DOCGEN)/priv/dtd_man_entities $(DOCGEN)/priv/xsl/db_man.xsl $<
+$(MAN6DIR)/%.6 $(MAN6DIR)/%.7: $(XMLDIR)/%_app.xml
+	$(gen_verbose)date=`date +"%B %e, %Y"`; \
+	xsltproc --output "$@" $(MANXSLTARGS) $(DOCGEN)/priv/xsl/db_man.xsl $<
 
 
-.xmlsrc.xml:
-	 escript $(DOCGEN)/priv/bin/codeline_preprocessing.escript $< $@
+$(XMLDIR)/%.xml: %.xmlsrc
+	$(gen_verbose)escript $(DOCGEN)/priv/bin/codeline_preprocessing.escript $< $@
 
 .fo.pdf:
 	$(FOP) -c $(FOP_CONFIG) -cache $(ERL_TOP)/make/$(TARGET)/fop-fonts.cache -fo $< -pdf $@
diff --git a/make/otp_release_targets.mk b/make/otp_release_targets.mk
index 23b4416963..9a6384af59 100644
--- a/make/otp_release_targets.mk
+++ b/make/otp_release_targets.mk
@@ -33,9 +33,20 @@ ifneq ($(wildcard $(MOD2APP)),)
 MOD2APP_PARAM = --stringparam mod2app_file "$(MOD2APP)"
 endif
 
+# -------------------------------------------------------
+# Take the XML files and add the github link info to them
+# -------------------------------------------------------
+_create_xml_dirs := $(shell mkdir -p $(XMLDIR))
+
+XML_GEN_FILES+=$(patsubst %.xml,$(XMLDIR)/%.xml,$(XML_FILES))
+$(XMLDIR)/%.xml: %.xml
+	$(gen_verbose)escript $(DOCGEN)/priv/bin/github_link.escript $^ \
+	"$(subst $(ERL_TOP)/,,$(CURDIR)/$^)" "$(shell git rev-parse HEAD)" $@
+
 ifeq ($(TOPDOC),)
-$(HTMLDIR)/index.html: $(XML_FILES) $(SPECS_FILES)
-	date=`date +"%B %e, %Y"`; \
+
+$(HTMLDIR)/index.html: $(XML_GEN_FILES) $(SPECS_FILES)
+	$(gen_verbose)date=`date +"%B %e, %Y"`; \
 	$(XSLTPROC) --noout \
           --stringparam outdir $(HTMLDIR) \
           --stringparam docgen "$(DOCGEN)" \
@@ -50,14 +61,15 @@ $(HTMLDIR)/index.html: $(XML_FILES) $(SPECS_FILES)
 	  --stringparam winprefix "$(WINPREFIX)" \
 	  --stringparam logo "$(HTMLLOGO_FILE)" \
 	  --stringparam pdfname "$(PDFNAME)" \
+          -path . \
           -path $(DOCGEN)/priv/dtd \
           -path $(DOCGEN)/priv/dtd_html_entities \
-            $(DOCGEN)/priv/xsl/db_html.xsl book.xml
+            $(DOCGEN)/priv/xsl/db_html.xsl $(XMLDIR)/book.xml
 
 endif
 
-$(HTMLDIR)/users_guide.html: $(XML_FILES)
-	date=`date +"%B %e, %Y"`; \
+$(HTMLDIR)/users_guide.html: $(XML_GEN_FILES)
+	$(gen_verbose)date=`date +"%B %e, %Y"`; \
 	$(XSLTPROC) --noout  \
 		--stringparam outdir  $(HTMLDIR)  \
 		--stringparam docgen "$(DOCGEN)"  \
@@ -72,12 +84,13 @@ $(HTMLDIR)/users_guide.html: $(XML_FILES)
 		--stringparam logo "$(HTMLLOGO_FILE)" \
 		--stringparam pdfname "$(PDFNAME)" \
 	        --xinclude  \
+		-path . \
 		-path $(DOCGEN)/priv/dtd \
 	        -path $(DOCGEN)/priv/dtd_html_entities \
-	        $(DOCGEN)/priv/xsl/db_html.xsl book.xml
+	        $(DOCGEN)/priv/xsl/db_html.xsl $(XMLDIR)/book.xml
 
-%.fo: $(XML_FILES) $(SPECS_FILES)
-	date=`date +"%B %e, %Y"`; \
+%.fo: $(XML_GEN_FILES) $(SPECS_FILES)
+	$(gen_verbose)date=`date +"%B %e, %Y"`; \
 	$(XSLTPROC) \
          --stringparam docgen "$(DOCGEN)" \
          --stringparam gendate "$$date" \
@@ -87,9 +100,10 @@ $(HTMLDIR)/users_guide.html: $(XML_FILES)
 	 --stringparam logo "$(PDFLOGO_FILE)" \
 	 --stringparam pdfcolor "$(PDFCOLOR)" \
          --xinclude $(TOP_SPECS_PARAM) \
+	 -path . \
          -path $(DOCGEN)/priv/dtd \
          -path $(DOCGEN)/priv/dtd_html_entities \
-           $(DOCGEN)/priv/xsl/db_pdf.xsl book.xml > $@
+           $(DOCGEN)/priv/xsl/db_pdf.xsl $(XMLDIR)/book.xml > $@
 
 # ------------------------------------------------------------------------
 # The following targets just exist in the documentation directory
@@ -101,16 +115,17 @@ ifneq ($(XML_FILES),)
 # ----------------------------------------------------
 # Generation of application index data
 # ----------------------------------------------------
-$(HTMLDIR)/$(APPLICATION).eix: $(XML_FILES) $(SPECS_FILES)
-	date=`date +"%B %e, %Y"`; \
+$(HTMLDIR)/$(APPLICATION).eix: $(XML_GEN_FILES) $(SPECS_FILES)
+	$(gen_verbose)date=`date +"%B %e, %Y"`; \
 	$(XSLTPROC) --stringparam docgen "$(DOCGEN)" \
 		--stringparam gendate "$$date" \
 	        --stringparam appname "$(APPLICATION)" \
 	        --stringparam appver "$(VSN)" \
 	        -xinclude $(TOP_SPECS_PARAM)  \
+	        -path . \
 		-path $(DOCGEN)/priv/dtd \
 	        -path $(DOCGEN)/priv/dtd_html_entities \
-	        $(DOCGEN)/priv/xsl/db_eix.xsl book.xml >  $@
+	        $(DOCGEN)/priv/xsl/db_eix.xsl $(XMLDIR)/book.xml >  $@
 
 docs: $(HTMLDIR)/$(APPLICATION).eix
 
@@ -118,30 +133,37 @@ docs: $(HTMLDIR)/$(APPLICATION).eix
 ## Then we look into all those files check for xi:includes
 BOOK_XI_INC_FILES:=$(foreach file,$(BOOK_FILES),$(shell awk -F\" '/xi:include/ {print $$2}' $(file))) $(BOOK_FILES)
 ALL_XI_INC_FILES:=$(foreach file,$(BOOK_XI_INC_FILES),$(shell awk -F\" '/xi:include/ {if ("$(dir $(file))" != "./") printf "$(dir $(file))"; print $$2}' $(file))) $(BOOK_XI_INC_FILES)
+ifeq ($(TOPDOC), true)
+ALL_XI_INC_GEN_FILES:=$(filter-out book.xml,$(ALL_XI_INC_FILES)) $(BOOK_FILES:%=$(XMLDIR)/%)
+else
+ALL_XI_INC_GEN_FILES:=$(ALL_XI_INC_FILES:%=$(XMLDIR)/%)
+endif
+
 
 ## These are the patterns of file names that xmllint cannot currently parse
 XI_INC_FILES:=%user_man.xml %usersguide.xml %refman.xml %ref_man.xml %part.xml %book.xml
 
 ## These are the files that we should run the xmllint on
 LINT_XI_INC_FILES := $(filter-out $(XI_INC_FILES), $(ALL_XI_INC_FILES))
+LINT_XI_INC_GEN_FILES := $(filter-out $(XI_INC_FILES), $(ALL_XI_INC_GEN_FILES))
 
 EMPTY :=
 SPACE := $(EMPTY) $(EMPTY)
 XMLLINT_SRCDIRS:=$(subst $(SPACE),:,$(sort $(foreach file,$(XML_FILES),$(dir $(file)))))
 
-xmllint: $(ALL_XI_INC_FILES)
-## We verify that the $(XML_FILES) variable in the Makefile have exactly
+xmllint: $(ALL_XI_INC_GEN_FILES)
+## We verify that the $(XML_GEN_FILES) variable in the Makefile have exactly
 ## the same files as we found out by following xi:include.
-ifneq ($(filter-out $(filter %.xml,$(XML_FILES)),$(ALL_XI_INC_FILES)),)
-	$(error "$(filter-out $(filter %.xml,$(XML_FILES)),$(ALL_XI_INC_FILES)) in $$ALL_XI_INC_FILES but not in $$XML_FILES");
+ifneq ($(filter-out $(filter %.xml,$(XML_GEN_FILES)),$(ALL_XI_INC_GEN_FILES)),)
+	$(error "$(filter-out $(filter %.xml,$(XML_GEN_FILES)),$(ALL_XI_INC_GEN_FILES)) in $$ALL_XI_INC_FILES but not in $$XML_GEN_FILES");
 endif
-ifneq ($(filter-out $(ALL_XI_INC_FILES),$(filter %.xml,$(XML_FILES))),)
-	$(error "$(filter-out $(ALL_XI_INC_FILES),$(filter %.xml,$(XML_FILES))) in $$XML_FILES but not in $$ALL_XI_INC_FILES");
+ifneq ($(filter-out $(ALL_XI_INC_GEN_FILES),$(filter %.xml,$(XML_GEN_FILES))),)
+	$(error "$(filter-out $(ALL_XI_INC_GEN_FILES),$(filter %.xml,$(XML_GEN_FILES))) in $$XML_GEN_FILES but not in $$ALL_XI_INC_FILES");
 endif
-	@echo "xmllint $(LINT_XI_INC_FILES)"
+	@echo "xmllint $(LINT_XI_INC_GEN_FILES)"
 	@xmllint --noout --valid --nodefdtd --loaddtd --path \
 	$(DOCGEN)/priv/dtd:$(DOCGEN)/priv/dtd_html_entities:$(XMLLINT_SRCDIRS) \
-	$(LINT_XI_INC_FILES)
+	$(LINT_XI_INC_GEN_FILES)
 
 # ----------------------------------------------------
 # Local documentation target for testing 
diff --git a/system/doc/design_principles/Makefile b/system/doc/design_principles/Makefile
index 5743a50b47..611ab6da99 100644
--- a/system/doc/design_principles/Makefile
+++ b/system/doc/design_principles/Makefile
@@ -18,6 +18,7 @@
 # %CopyrightEnd%
 #
 #
+
 include $(ERL_TOP)/make/target.mk
 include $(ERL_TOP)/make/$(TARGET)/otp.mk
 
@@ -27,6 +28,8 @@ include $(ERL_TOP)/make/$(TARGET)/otp.mk
 include $(ERL_TOP)/erts/vsn.mk
 
 APPLICATION=otp-system-documentation
+XMLDIR := $(XMLDIR)/design_principles
+
 # ----------------------------------------------------
 # Release directory specification
 # ----------------------------------------------------
diff --git a/system/doc/efficiency_guide/Makefile b/system/doc/efficiency_guide/Makefile
index 36e4cd00df..b1630a36e1 100644
--- a/system/doc/efficiency_guide/Makefile
+++ b/system/doc/efficiency_guide/Makefile
@@ -28,6 +28,7 @@ include $(ERL_TOP)/erts/vsn.mk
 #VSN=$(SYSTEM_VSN)
 
 APPLICATION=otp-system-documentation
+XMLDIR := $(XMLDIR)/efficiency_guide
 # ----------------------------------------------------
 # Release directory specification
 # ----------------------------------------------------
diff --git a/system/doc/embedded/Makefile b/system/doc/embedded/Makefile
index 40a1b1fb23..23d3168e34 100644
--- a/system/doc/embedded/Makefile
+++ b/system/doc/embedded/Makefile
@@ -28,6 +28,7 @@ include $(ERL_TOP)/erts/vsn.mk
 #VSN=$(SYSTEM_VSN)
 
 APPLICATION=otp-system-documentation
+XMLDIR := $(XMLDIR)/embedded
 # ----------------------------------------------------
 # Release directory specification
 # ----------------------------------------------------
diff --git a/system/doc/getting_started/Makefile b/system/doc/getting_started/Makefile
index 1fe3d39e4e..13d767daf5 100644
--- a/system/doc/getting_started/Makefile
+++ b/system/doc/getting_started/Makefile
@@ -28,6 +28,7 @@ include $(ERL_TOP)/erts/vsn.mk
 #VSN=$(SYSTEM_VSN)
 
 APPLICATION=otp-system-documentation
+XMLDIR := $(XMLDIR)/getting_started
 # ----------------------------------------------------
 # Release directory specification
 # ----------------------------------------------------
diff --git a/system/doc/installation_guide/Makefile b/system/doc/installation_guide/Makefile
index 673c203422..002c2a536a 100644
--- a/system/doc/installation_guide/Makefile
+++ b/system/doc/installation_guide/Makefile
@@ -28,6 +28,8 @@ include $(ERL_TOP)/erts/vsn.mk
 #VSN=$(SYSTEM_VSN)
 
 APPLICATION=otp-system-documentation
+XMLDIR := $(XMLDIR)/installation_guide
+
 # ----------------------------------------------------
 # Release directory specification
 # ----------------------------------------------------
@@ -43,6 +45,8 @@ include xmlfiles.mk
 
 XML_CHAPTER_FILES=$(INST_GUIDE_CHAPTER_FILES)
 
+# ----------------------------------------------------
+
 TOPDOCDIR=..
 
 BOOK_FILES = book.xml
@@ -55,12 +59,7 @@ XML_FILES = \
 	$(BOOK_FILES) $(XML_CHAPTER_FILES) \
 	$(XML_PART_FILES) 
 
-# ----------------------------------------------------
-GENERATED_XML_FILES = \
-	INSTALL.xml \
-	INSTALL-CROSS.xml \
-	INSTALL-WIN32.xml \
-	OTP-PATCH-APPLY.xml
+XML_GEN_FILES = $(INST_GUIDE_CHAPTER_GEN_FILES:%=$(XMLDIR)/%)
 
 # ----------------------------------------------------
 
@@ -88,7 +87,7 @@ DVIPS_FLAGS +=
 # Targets
 # ----------------------------------------------------
 
-%.xml: $(ERL_TOP)/HOWTO/%.md $(ERL_TOP)/make/emd2exml
+$(XMLDIR)/%.xml: $(ERL_TOP)/HOWTO/%.md $(ERL_TOP)/make/emd2exml
 	$(ERL_TOP)/make/emd2exml $< $@
 
 $(REDIRECT_HTML_DIR)/%.html: Makefile
@@ -102,12 +101,12 @@ $(REDIRECT_HTML_DIR)/%.html: Makefile
 	echo "This <a href=\"../"$(notdir $@)"\">link</a> will" >> $@
 	echo "take you there immediately.</p></body></html>" >> $@
 
-docs: $(GENERATED_XML_FILES) html
+docs: $(XML_GEN_FILES) html
 
 local_docs: PDFDIR=../../pdf
-local_docs: $(GENERATED_XML_FILES)
+local_docs: $(XML_GEN_FILES)
 
-html: $(REDIRECT_HTML_FILES) $(GENERATED_XML_FILES) $(GIF_FILES) $(HTML_UG_FILE)
+html: $(REDIRECT_HTML_FILES) $(XML_GEN_FILES) $(GIF_FILES) $(HTML_UG_FILE)
 
 debug opt:
 
diff --git a/system/doc/installation_guide/xmlfiles.mk b/system/doc/installation_guide/xmlfiles.mk
index 3f720e1ee5..37fbeca96b 100644
--- a/system/doc/installation_guide/xmlfiles.mk
+++ b/system/doc/installation_guide/xmlfiles.mk
@@ -18,7 +18,9 @@
 # %CopyrightEnd%
 #
 INST_GUIDE_CHAPTER_FILES = \
-	install-binary.xml \
+	install-binary.xml
+
+INST_GUIDE_CHAPTER_GEN_FILES = \
 	INSTALL.xml \
 	INSTALL-CROSS.xml \
 	INSTALL-WIN32.xml \
diff --git a/system/doc/oam/Makefile b/system/doc/oam/Makefile
index 9095744423..dfebc6aca0 100644
--- a/system/doc/oam/Makefile
+++ b/system/doc/oam/Makefile
@@ -27,6 +27,7 @@ include $(ERL_TOP)/erts/vsn.mk
 #VSN=$(SYSTEM_VSN)
 
 APPLICATION=otp-system-documentation
+XMLDIR := $(XMLDIR)/oam
 # ----------------------------------------------------
 # Release directory specification
 # ----------------------------------------------------
diff --git a/system/doc/programming_examples/Makefile b/system/doc/programming_examples/Makefile
index 237076d770..cb028b61df 100644
--- a/system/doc/programming_examples/Makefile
+++ b/system/doc/programming_examples/Makefile
@@ -28,6 +28,7 @@ include $(ERL_TOP)/erts/vsn.mk
 #VSN=$(SYSTEM_VSN)
 
 APPLICATION=otp-system-documentation
+XMLDIR := $(XMLDIR)/programming_examples
 # ----------------------------------------------------
 # Release directory specification
 # ----------------------------------------------------
@@ -52,7 +53,9 @@ PS_FILES =
 
 XML_FILES = \
 	$(BOOK_FILES) $(XML_CHAPTER_FILES) \
-	$(XML_PART_FILES) 
+	$(XML_PART_FILES)
+
+XML_GEN_FILES = $(PROG_EX_CHAPTER_GEN_FILES:%=$(XMLDIR)/%)
 # ----------------------------------------------------
 
 HTML_FILES = \
@@ -85,6 +88,9 @@ clean clean_docs:
 	rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo)
 	rm -f errs core *~ 
 
+$(XMLDIR)/%.xml: %.xmlsrc
+	 $(gen_verbose)escript $(DOCGEN)/priv/bin/codeline_preprocessing.escript $< $@
+
 # ----------------------------------------------------
 # Release Target
 # ---------------------------------------------------- 
diff --git a/system/doc/programming_examples/xmlfiles.mk b/system/doc/programming_examples/xmlfiles.mk
index 5129e488f4..20b08d8cd3 100644
--- a/system/doc/programming_examples/xmlfiles.mk
+++ b/system/doc/programming_examples/xmlfiles.mk
@@ -19,6 +19,8 @@
 #
 PROG_EX_CHAPTER_FILES = \
 	bit_syntax.xml \
-	funs.xml \
 	list_comprehensions.xml \
 	records.xml
+
+PROG_EX_CHAPTER_GEN_FILES = \
+	funs.xml
diff --git a/system/doc/reference_manual/Makefile b/system/doc/reference_manual/Makefile
index e14a056979..75c15e4b5f 100644
--- a/system/doc/reference_manual/Makefile
+++ b/system/doc/reference_manual/Makefile
@@ -28,6 +28,7 @@ include $(ERL_TOP)/erts/vsn.mk
 #VSN=$(SYSTEM_VSN)
 
 APPLICATION=otp-system-documentation
+XMLDIR := $(XMLDIR)/reference_manual
 # ----------------------------------------------------
 # Release directory specification
 # ----------------------------------------------------
diff --git a/system/doc/system_architecture_intro/Makefile b/system/doc/system_architecture_intro/Makefile
index 446e66205c..7a10f305ba 100644
--- a/system/doc/system_architecture_intro/Makefile
+++ b/system/doc/system_architecture_intro/Makefile
@@ -28,6 +28,7 @@ include $(ERL_TOP)/erts/vsn.mk
 #VSN=$(SYSTEM_VSN)
 
 APPLICATION=otp-system-documentation
+XMLDIR := $(XMLDIR)/system_architecture_intro
 # ----------------------------------------------------
 # Release directory specification
 # ----------------------------------------------------
diff --git a/system/doc/system_principles/Makefile b/system/doc/system_principles/Makefile
index 77edea8f58..927cd70985 100644
--- a/system/doc/system_principles/Makefile
+++ b/system/doc/system_principles/Makefile
@@ -28,6 +28,7 @@ include $(ERL_TOP)/erts/vsn.mk
 #VSN=$(SYSTEM_VSN)
 
 APPLICATION=otp-system-documentation
+XMLDIR := $(XMLDIR)/system_principles
 # ----------------------------------------------------
 # Release directory specification
 # ----------------------------------------------------
@@ -52,6 +53,8 @@ XML_FILES = \
 	$(BOOK_FILES) $(XML_CHAPTER_FILES) \
 	$(XML_PART_FILES) 
 
+XML_GEN_FILES = $(SYSTEM_PRINCIPLES_CHAPTER_GEN_FILES:%=$(XMLDIR)/%)
+
 # ----------------------------------------------------
 
 HTMLDIR = ../html/system_principles
@@ -82,6 +85,9 @@ clean clean_docs:
 	rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo)
 	rm -f errs core *~ 
 
+$(XMLDIR)/%.xml: %.xmlsrc
+	 $(gen_verbose)escript $(DOCGEN)/priv/bin/codeline_preprocessing.escript $< $@
+
 # ----------------------------------------------------
 # Release Target
 # ---------------------------------------------------- 
diff --git a/system/doc/system_principles/xmlfiles.mk b/system/doc/system_principles/xmlfiles.mk
index c3c3bb4731..f8972b24a7 100644
--- a/system/doc/system_principles/xmlfiles.mk
+++ b/system/doc/system_principles/xmlfiles.mk
@@ -20,6 +20,8 @@
 SYSTEM_PRINCIPLES_CHAPTER_FILES = \
 	system_principles.xml \
 	error_logging.xml \
-	create_target.xml \
 	upgrade.xml \
 	versions.xml
+
+SYSTEM_PRINCIPLES_CHAPTER_GEN_FILES = \
+	create_target.xml
diff --git a/system/doc/top/Makefile b/system/doc/top/Makefile
index b6a80aadf5..73c943caa1 100644
--- a/system/doc/top/Makefile
+++ b/system/doc/top/Makefile
@@ -53,30 +53,45 @@ include ../oam/xmlfiles.mk
 BOOK_FILES = book.xml
 
 XML_FILES = \
-	$(INST_GUIDE_CHAPTER_FILES:%=../installation_guide/%) \
-	$(SYSTEM_PRINCIPLES_CHAPTER_FILES:%=../system_principles/%) \
-	$(EMBEDDED_CHAPTER_FILES:%=../embedded/%) \
-	$(GETTING_STARTED_CHAPTER_FILES:%=../getting_started/%) \
-	$(REF_MAN_CHAPTER_FILES:%=../reference_manual/%) \
-	$(PROG_EX_CHAPTER_FILES:%=../programming_examples/%) \
-	$(EFF_GUIDE_CHAPTER_FILES:%=../efficiency_guide/%) \
-	$(TUTORIAL_CHAPTER_FILES:%=../tutorial/%) \
-	$(DESIGN_PRINCIPLES_CHAPTER_FILES:%=../design_principles/%) \
-	$(OAM_CHAPTER_FILES:%=../oam/%) \
-	../installation_guide/part.xml \
-	../system_principles/part.xml \
-	../embedded/part.xml \
-	../getting_started/part.xml \
-	../reference_manual/part.xml \
-	../programming_examples/part.xml \
-	../efficiency_guide/part.xml \
-	../tutorial/part.xml \
-	../design_principles/part.xml \
-	../oam/part.xml \
 	$(BOOK_FILES)
 
-
-XMLLINT_SRCDIRS= ../installation_guide:../system_principles:../embedded:../getting_started:../reference_manual:../programming_examples:../efficiency_guide:../tutorial:../design_principles:../oam
+XML_GUIDE_FILES = \
+	$(INST_GUIDE_CHAPTER_FILES:%=installation_guide/%) \
+	$(INST_GUIDE_CHAPTER_GEN_FILES:%=installation_guide/%) \
+	$(SYSTEM_PRINCIPLES_CHAPTER_FILES:%=system_principles/%) \
+	$(SYSTEM_PRINCIPLES_CHAPTER_GEN_FILES:%=system_principles/%) \
+	$(EMBEDDED_CHAPTER_FILES:%=embedded/%) \
+	$(EMBEDDED_CHAPTER_GEN_FILES:%=embedded/%) \
+	$(GETTING_STARTED_CHAPTER_FILES:%=getting_started/%) \
+	$(GETTING_STARTED_CHAPTER_GEN_FILES:%=getting_started/%) \
+	$(REF_MAN_CHAPTER_FILES:%=reference_manual/%) \
+	$(REF_MAN_CHAPTER_GEN_FILES:%=reference_manual/%) \
+	$(PROG_EX_CHAPTER_FILES:%=programming_examples/%) \
+	$(PROG_EX_CHAPTER_GEN_FILES:%=programming_examples/%) \
+	$(EFF_GUIDE_CHAPTER_FILES:%=efficiency_guide/%) \
+	$(EFF_GUIDE_CHAPTER_GEN_FILES:%=efficiency_guide/%) \
+	$(TUTORIAL_CHAPTER_FILES:%=tutorial/%) \
+	$(TUTORIAL_CHAPTER_GEN_FILES:%=tutorial/%) \
+	$(DESIGN_PRINCIPLES_CHAPTER_FILES:%=design_principles/%) \
+	$(DESIGN_PRINCIPLES_CHAPTER_GEN_FILES:%=design_principles/%) \
+	$(OAM_CHAPTER_FILES:%=oam/%) \
+	$(OAM_CHAPTER_GEN_FILES:%=oam/%)
+
+XML_GEN_FILES = \
+	$(XML_GUIDE_FILES:%=$(XMLDIR)/%) \
+	$(XMLDIR)/installation_guide/part.xml \
+	$(XMLDIR)/system_principles/part.xml \
+	$(XMLDIR)/embedded/part.xml \
+	$(XMLDIR)/getting_started/part.xml \
+	$(XMLDIR)/reference_manual/part.xml \
+	$(XMLDIR)/programming_examples/part.xml \
+	$(XMLDIR)/efficiency_guide/part.xml \
+	$(XMLDIR)/tutorial/part.xml \
+	$(XMLDIR)/design_principles/part.xml \
+	$(XMLDIR)/oam/part.xml
+
+
+XMLLINT_SRCDIRS= $(XMLDIR)/installation_guide:$(XMLDIR)/system_principles:$(XMLDIR)/embedded:$(XMLDIR)/getting_started:$(XMLDIR)/reference_manual:$(XMLDIR)/programming_examples:$(XMLDIR)/efficiency_guide:$(XMLDIR)/tutorial:$(XMLDIR)/design_principles:$(XMLDIR)/oam
 HTMLDIR= ../html
 PDFREFDIR= pdf
 
diff --git a/system/doc/top/book.xml b/system/doc/top/book.xml
index c94b0f24d6..540b6bfd24 100644
--- a/system/doc/top/book.xml
+++ b/system/doc/top/book.xml
@@ -36,16 +36,16 @@
     <contents level="2"></contents>
   </preamble>
   <parts lift="no">
-    <xi:include href="../installation_guide/part.xml"/>
-    <xi:include href="../system_principles/part.xml"/>
-    <xi:include href="../embedded/part.xml"/>
-    <xi:include href="../getting_started/part.xml"/>
-    <xi:include href="../reference_manual/part.xml"/>
-    <xi:include href="../programming_examples/part.xml"/>
-    <xi:include href="../efficiency_guide/part.xml"/>
-    <xi:include href="../tutorial/part.xml"/>
-    <xi:include href="../design_principles/part.xml"/>
-    <xi:include href="../oam/part.xml"/>
+    <xi:include href="../xml/installation_guide/part.xml"/>
+    <xi:include href="../xml/system_principles/part.xml"/>
+    <xi:include href="../xml/embedded/part.xml"/>
+    <xi:include href="../xml/getting_started/part.xml"/>
+    <xi:include href="../xml/reference_manual/part.xml"/>
+    <xi:include href="../xml/programming_examples/part.xml"/>
+    <xi:include href="../xml/efficiency_guide/part.xml"/>
+    <xi:include href="../xml/tutorial/part.xml"/>
+    <xi:include href="../xml/design_principles/part.xml"/>
+    <xi:include href="../xml/oam/part.xml"/>
   </parts>
   <listofterms></listofterms>
   <index></index>
diff --git a/system/doc/tutorial/Makefile b/system/doc/tutorial/Makefile
index 5deea41f0a..fbdb5e5a89 100644
--- a/system/doc/tutorial/Makefile
+++ b/system/doc/tutorial/Makefile
@@ -28,6 +28,7 @@ include $(ERL_TOP)/erts/vsn.mk
 #VSN=$(SYSTEM_VSN)
 
 APPLICATION=otp-system-documentation
+XMLDIR := $(XMLDIR)/tutorial
 # ----------------------------------------------------
 # Release directory specification
 # ----------------------------------------------------
@@ -53,6 +54,9 @@ XML_FILES = \
 	$(BOOK_FILES) $(XML_CHAPTER_FILES) \
 	$(XML_PART_FILES) 
 
+XML_GEN_FILES = \
+	$(TUTORIAL_CHAPTER_GEN_FILES:%=$(XMLDIR)/%)
+
 # ----------------------------------------------------
 
 C_FILES = \
@@ -109,6 +113,9 @@ clean clean_docs:
 	rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo)
 	rm -f errs core *~ 
 
+$(XMLDIR)/%.xml: %.xmlsrc
+	 $(gen_verbose)escript $(DOCGEN)/priv/bin/codeline_preprocessing.escript $< $@
+
 # ----------------------------------------------------
 # Release Target
 # ---------------------------------------------------- 
diff --git a/system/doc/tutorial/xmlfiles.mk b/system/doc/tutorial/xmlfiles.mk
index f8ed7be064..53f82c6475 100644
--- a/system/doc/tutorial/xmlfiles.mk
+++ b/system/doc/tutorial/xmlfiles.mk
@@ -19,13 +19,16 @@
 #
 TUTORIAL_CHAPTER_FILES = \
 	introduction.xml\
+	overview.xml
+
+TUTORIAL_CHAPTER_GEN_FILES = \
 	cnode.xml\
 	c_port.xml\
 	erl_interface.xml \
 	c_portdriver.xml \
 	example.xml\
-	overview.xml\
 	nif.xml
+
 #	appendix.xml
 #	distribution.xml  (to be part of tutorial later)
 
-- 
2.16.3