diff --git a/Doxyfile.codec.in b/Doxyfile.codec.in index 037ef7a42..307e3e148 100644 --- a/Doxyfile.codec.in +++ b/Doxyfile.codec.in @@ -1485,7 +1485,7 @@ SKIP_FUNCTION_MACROS = YES # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. -TAGFILES = doc/libosmocore.tag=../../core/html +TAGFILES = doc/libosmocore.tag=../../core/html doc/libosmogsm.tag=../../gsm/html doc/libosmovty.tag=../../vty/html doc/libosmocoding.tag=../../coding/html doc/libosmoctrl.tag=../../ctrl/html doc/libosmogb.tag=../../gb/html # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. diff --git a/Doxyfile.coding.in b/Doxyfile.coding.in index 43c4f8227..d0e994255 100644 --- a/Doxyfile.coding.in +++ b/Doxyfile.coding.in @@ -1485,7 +1485,7 @@ SKIP_FUNCTION_MACROS = YES # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. -TAGFILES = doc/libosmocore.tag=../../core/html +TAGFILES = doc/libosmocore.tag=../../core/html doc/libosmogsm.tag=../../gsm/html doc/libosmovty.tag=../../vty/html doc/libosmocodec.tag=../../codec/html doc/libosmoctrl.tag=../../ctrl/html doc/libosmogb.tag=../../gb/html # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. diff --git a/Doxyfile.core.in b/Doxyfile.core.in index 7a3cce598..f83205ac2 100644 --- a/Doxyfile.core.in +++ b/Doxyfile.core.in @@ -1485,7 +1485,7 @@ SKIP_FUNCTION_MACROS = YES # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. -TAGFILES = +TAGFILES = doc/libosmogsm.tag=../../gsm/html doc/libosmovty.tag=../../vty/html doc/libosmocodec.tag=../../codec/html doc/libosmocoding.tag=../../coding/html doc/libosmoctrl.tag=../../ctrl/html doc/libosmogb.tag=../../gb/html # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. diff --git a/Doxyfile.ctrl.in b/Doxyfile.ctrl.in index eb363bb4f..5612a7410 100644 --- a/Doxyfile.ctrl.in +++ b/Doxyfile.ctrl.in @@ -1485,7 +1485,7 @@ SKIP_FUNCTION_MACROS = YES # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. -TAGFILES = doc/libosmocore.tag=../../core/html +TAGFILES = doc/libosmocore.tag=../../core/html doc/libosmogsm.tag=../../gsm/html doc/libosmovty.tag=../../vty/html doc/libosmocodec.tag=../../codec/html doc/libosmocoding.tag=../../coding/html doc/libosmogb.tag=../../gb/html # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. diff --git a/Doxyfile.gb.in b/Doxyfile.gb.in index e6b78263e..b3b2128d5 100644 --- a/Doxyfile.gb.in +++ b/Doxyfile.gb.in @@ -1485,7 +1485,7 @@ SKIP_FUNCTION_MACROS = YES # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. -TAGFILES = doc/libosmocore.tag=../../core/html +TAGFILES = doc/libosmocore.tag=../../core/html doc/libosmogsm.tag=../../gsm/html doc/libosmovty.tag=../../vty/html doc/libosmocodec.tag=../../codec/html doc/libosmocoding.tag=../../coding/html doc/libosmoctrl.tag=../../ctrl/html # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. diff --git a/Doxyfile.gsm.in b/Doxyfile.gsm.in index 27d14cc89..aae0e8970 100644 --- a/Doxyfile.gsm.in +++ b/Doxyfile.gsm.in @@ -1485,7 +1485,7 @@ SKIP_FUNCTION_MACROS = YES # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. -TAGFILES = doc/libosmocore.tag=../../core/html +TAGFILES = doc/libosmocore.tag=../../core/html doc/libosmovty.tag=../../vty/html doc/libosmocodec.tag=../../codec/html doc/libosmocoding.tag=../../coding/html doc/libosmoctrl.tag=../../ctrl/html doc/libosmogb.tag=../../gb/html # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. diff --git a/Doxyfile.vty.in b/Doxyfile.vty.in index 0e138eee6..fb1cabfc6 100644 --- a/Doxyfile.vty.in +++ b/Doxyfile.vty.in @@ -1485,7 +1485,7 @@ SKIP_FUNCTION_MACROS = YES # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. -TAGFILES = doc/libosmocore.tag=../../core/html +TAGFILES = doc/libosmocore.tag=../../core/html doc/libosmogsm.tag=../../gsm/html doc/libosmocodec.tag=../../codec/html doc/libosmocoding.tag=../../coding/html doc/libosmoctrl.tag=../../ctrl/html doc/libosmogb.tag=../../gb/html # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. diff --git a/Makefile.am b/Makefile.am index de5eb35d4..9e0888f59 100644 --- a/Makefile.am +++ b/Makefile.am @@ -39,38 +39,140 @@ $(html_DATA): $(top_builddir)/doc/core/html/index.html \ $(top_builddir)/doc/gb/html/index.html cd $(top_builddir)/doc && tar cf html.tar */html -$(top_builddir)/doc/core/html/index.html: $(SOURCES) Doxyfile.core - @rm -rf doc/core - mkdir -p doc/core +# Support doxygen cross references from each library to each other library: +# First generate the docs to make sure all .tag files are in place. +# In a second run, generate the content with proper referencing. +# For example, libosmocore references tags from libosmovty and vice versa, +# so both need to generate tag files first, and then do another run. +# +# Generate each docs tree, and touch a libosmofoo.tag.prep file when done. +# It means that a libosmofoo.tag file is up-to-date. +# Touch a separate "*.prep" target: libosmofoo.tag as target would create +# circular dependency: we would rebuild all every time 'make' is invoked. +# The .prep file also depends on all the source files for that library. + +$(top_builddir)/doc/libosmocore.tag.prep: $(top_builddir)/Doxyfile.core + rm -rf $(top_builddir)/doc/core; mkdir -p $(top_builddir)/doc/core + rm -rf $(top_builddir)/doc/libosmocore.map + -$(DOXYGEN) $(top_builddir)/Doxyfile.core + touch "$@" + +$(top_builddir)/doc/libosmogsm.tag.prep: $(top_builddir)/Doxyfile.gsm + rm -rf $(top_builddir)/doc/gsm; mkdir -p $(top_builddir)/doc/gsm + rm -rf $(top_builddir)/doc/libosmogsm.map + -$(DOXYGEN) $(top_builddir)/Doxyfile.gsm + touch "$@" + +$(top_builddir)/doc/libosmovty.tag.prep: $(top_builddir)/Doxyfile.vty + rm -rf $(top_builddir)/doc/vty; mkdir -p $(top_builddir)/doc/vty + rm -rf $(top_builddir)/doc/libosmovty.map + -$(DOXYGEN) $(top_builddir)/Doxyfile.vty + touch "$@" + +$(top_builddir)/doc/libosmocodec.tag.prep: $(top_builddir)/Doxyfile.codec + rm -rf $(top_builddir)/doc/codec; mkdir -p $(top_builddir)/doc/codec + rm -rf $(top_builddir)/doc/libosmocodec.map + -$(DOXYGEN) $(top_builddir)/Doxyfile.codec + touch "$@" + +$(top_builddir)/doc/libosmocoding.tag.prep: $(top_builddir)/Doxyfile.coding + rm -rf $(top_builddir)/doc/coding; mkdir -p $(top_builddir)/doc/coding + rm -rf $(top_builddir)/doc/libosmocoding.map + -$(DOXYGEN) $(top_builddir)/Doxyfile.coding + touch "$@" + +$(top_builddir)/doc/libosmoctrl.tag.prep: $(top_builddir)/Doxyfile.ctrl + rm -rf $(top_builddir)/doc/ctrl; mkdir -p $(top_builddir)/doc/ctrl + rm -rf $(top_builddir)/doc/libosmoctrl.map + -$(DOXYGEN) $(top_builddir)/Doxyfile.ctrl + touch "$@" + +$(top_builddir)/doc/libosmogb.tag.prep: $(top_builddir)/Doxyfile.gb + rm -rf $(top_builddir)/doc/gb; mkdir -p $(top_builddir)/doc/gb + rm -rf $(top_builddir)/doc/libosmogb.map + -$(DOXYGEN) $(top_builddir)/Doxyfile.gb + touch "$@" + +# Build for real once all depending .tag files are in place. +# Depend on the own .tag.prep file to avoid concurrent builds of the same doc +# tree, and to also depend on all the source files listed above. +# +# Each library should depend on all the tag.prep files of which it lists .tag +# files in Doxyfile under TAGFILES. +# +# In turn, include all .tag files in TAGFILES of libraries to which "\ref" +# references point. +# +# Easiest is to just depend on all tag.prep files all across everywhere. + +$(top_builddir)/doc/core/html/index.html: $(top_builddir)/doc/libosmocore.tag.prep \ + $(top_builddir)/doc/libosmogsm.tag.prep \ + $(top_builddir)/doc/libosmovty.tag.prep \ + $(top_builddir)/doc/libosmocodec.tag.prep \ + $(top_builddir)/doc/libosmocoding.tag.prep \ + $(top_builddir)/doc/libosmoctrl.tag.prep \ + $(top_builddir)/doc/libosmogb.tag.prep + rm -rf $(top_builddir)/doc/core; mkdir -p $(top_builddir)/doc/core $(DOXYGEN) Doxyfile.core -$(top_builddir)/doc/gsm/html/index.html: $(SOURCES) Doxyfile.gsm - @rm -rf doc/gsm - mkdir -p doc/gsm +$(top_builddir)/doc/gsm/html/index.html: $(top_builddir)/doc/libosmogsm.tag.prep \ + $(top_builddir)/doc/libosmocore.tag.prep \ + $(top_builddir)/doc/libosmovty.tag.prep \ + $(top_builddir)/doc/libosmocodec.tag.prep \ + $(top_builddir)/doc/libosmocoding.tag.prep \ + $(top_builddir)/doc/libosmoctrl.tag.prep \ + $(top_builddir)/doc/libosmogb.tag.prep + rm -rf $(top_builddir)/doc/gsm; mkdir -p $(top_builddir)/doc/gsm $(DOXYGEN) Doxyfile.gsm -$(top_builddir)/doc/vty/html/index.html: $(SOURCES) Doxyfile.vty - @rm -rf doc/vty/{html,latex} +$(top_builddir)/doc/vty/html/index.html: $(top_builddir)/doc/libosmovty.tag.prep \ + $(top_builddir)/doc/libosmocore.tag.prep \ + $(top_builddir)/doc/libosmogsm.tag.prep \ + $(top_builddir)/doc/libosmocodec.tag.prep \ + $(top_builddir)/doc/libosmocoding.tag.prep \ + $(top_builddir)/doc/libosmoctrl.tag.prep \ + $(top_builddir)/doc/libosmogb.tag.prep + rm -rf $(top_builddir)/doc/vty; mkdir -p $(top_builddir)/doc/vty $(DOXYGEN) Doxyfile.vty -$(top_builddir)/doc/codec/html/index.html: $(SOURCES) Doxyfile.codec - @rm -rf doc/codec - mkdir -p doc/codec +$(top_builddir)/doc/codec/html/index.html: $(top_builddir)/doc/libosmocodec.tag.prep \ + $(top_builddir)/doc/libosmocore.tag.prep \ + $(top_builddir)/doc/libosmogsm.tag.prep \ + $(top_builddir)/doc/libosmovty.tag.prep \ + $(top_builddir)/doc/libosmocoding.tag.prep \ + $(top_builddir)/doc/libosmoctrl.tag.prep \ + $(top_builddir)/doc/libosmogb.tag.prep + rm -rf $(top_builddir)/doc/codec; mkdir -p $(top_builddir)/doc/codec $(DOXYGEN) Doxyfile.codec -$(top_builddir)/doc/coding/html/index.html: Doxyfile.coding - @rm -rf doc/coding - mkdir -p doc/coding +$(top_builddir)/doc/coding/html/index.html: $(top_builddir)/doc/libosmocoding.tag.prep \ + $(top_builddir)/doc/libosmocore.tag.prep \ + $(top_builddir)/doc/libosmogsm.tag.prep \ + $(top_builddir)/doc/libosmovty.tag.prep \ + $(top_builddir)/doc/libosmocodec.tag.prep \ + $(top_builddir)/doc/libosmoctrl.tag.prep \ + $(top_builddir)/doc/libosmogb.tag.prep + rm -rf $(top_builddir)/doc/coding; mkdir -p $(top_builddir)/doc/coding $(DOXYGEN) Doxyfile.coding -$(top_builddir)/doc/ctrl/html/index.html: $(SOURCES) Doxyfile.ctrl - @rm -rf doc/ctrl - mkdir -p doc/ctrl +$(top_builddir)/doc/ctrl/html/index.html: $(top_builddir)/doc/libosmoctrl.tag.prep \ + $(top_builddir)/doc/libosmocore.tag.prep \ + $(top_builddir)/doc/libosmogsm.tag.prep \ + $(top_builddir)/doc/libosmovty.tag.prep \ + $(top_builddir)/doc/libosmocodec.tag.prep \ + $(top_builddir)/doc/libosmocoding.tag.prep \ + $(top_builddir)/doc/libosmogb.tag.prep + rm -rf $(top_builddir)/doc/ctrl; mkdir -p $(top_builddir)/doc/ctrl $(DOXYGEN) Doxyfile.ctrl -$(top_builddir)/doc/gb/html/index.html: $(SOURCES) Doxyfile.gb - @rm -rf doc/gb - mkdir -p doc/gb +$(top_builddir)/doc/gb/html/index.html: $(top_builddir)/doc/libosmogb.tag.prep \ + $(top_builddir)/doc/libosmocore.tag.prep \ + $(top_builddir)/doc/libosmogsm.tag.prep \ + $(top_builddir)/doc/libosmovty.tag.prep \ + $(top_builddir)/doc/libosmocodec.tag.prep \ + $(top_builddir)/doc/libosmocoding.tag.prep \ + $(top_builddir)/doc/libosmoctrl.tag.prep + rm -rf $(top_builddir)/doc/gb; mkdir -p $(top_builddir)/doc/gb $(DOXYGEN) Doxyfile.gb install-data-hook: @@ -79,7 +181,7 @@ install-data-hook: uninstall-hook: cd $(DESTDIR)$(htmldir) && rm -rf {core,gsm,vty,codec,coding,ctrl,gb} -DX_CLEAN = doc/{core,gsm,vty,codec,coding,ctrl,gb}/html/search/* doc/{core,gsm,vty,codec,coding,ctrl,gb}/{html,latex}/* doc/html.tar doc/{core,gsm,vty,codec,coding,ctrl,gb}/doxygen_sqlite3.db doc/*.tag +DX_CLEAN = doc/{core,gsm,vty,codec,coding,ctrl,gb}/html/search/* doc/{core,gsm,vty,codec,coding,ctrl,gb}/{html,latex}/* doc/html.tar doc/{core,gsm,vty,codec,coding,ctrl,gb}/doxygen_sqlite3.db doc/*.tag doc/*.tag.prep endif MOSTLYCLEANFILES = $(DX_CLEAN)