diff options
Diffstat (limited to 'doc/GNUmakefile.mk')
-rw-r--r-- | doc/GNUmakefile.mk | 387 |
1 files changed, 387 insertions, 0 deletions
diff --git a/doc/GNUmakefile.mk b/doc/GNUmakefile.mk new file mode 100644 index 0000000..e3af64a --- /dev/null +++ b/doc/GNUmakefile.mk @@ -0,0 +1,387 @@ +############################################################################### +## +## makefile for documentation creation +## +## INTPUT FILES (SOURCE/doc) +## doc/ +## dox/ <-- generated API docs support files +## doxygen/ <-- generated API docs support files +## texi/ <-- hand-written project articles +## +## OUTPUT FILES (BUILD/doc) +## doc/ +## doc/ +## api/ +## html/ <-- API in html format +## xml/ <-- API in xml format +## articles/ +## html/ <-- articles in html format +## txt/ <-- articles in txt format +## wiki/ <-- articles in Google Code Wiki format +## xml/ <-- articles in xml-texinfo format +## man/ +## man1/ <-- man-pages for utilities +## +############################################################################### + +# Conventional VPATH directive breaks too many things so we use vpath and its +# pattern-spec feature. If new files or extensions are introduced they may need +# to be added here. + +VPATH = + +vpath COPYING $(top_srcdir) +vpath INSTALL $(top_srcdir) +vpath README $(top_srcdir) +vpath autoaux/% $(top_srcdir) +vpath %.1 $(top_srcdir) +vpath %.cpp $(top_srcdir) +vpath %.h $(top_srcdir) +vpath %.m4 $(top_srcdir) +vpath %.tcc $(top_srcdir) + +############################################################################### + +SOURCE/ = $(top_srcdir)/ +BUILD/ = $(top_builddir)/ + +DOC.in/ = $(SOURCE/)doc/ +DOC.out/ = $(BUILD/)doc/ + +DOC.out.api/ = $(DOC.out/)api/ +DOC.out.articles/ = $(DOC.out/)articles/ +DOC.out.site/ = $(DOC.out/)site/ + +############################################################################### + +M4 = m4 +M4.flags = -I$(BUILD/)project +M4.cmd = $(M4) $(M4.flags) $(1) > $(2) +M4.deps = $(BUILD/)project/project.m4 + +ifeq ($(FOUND_HELP2MAN),yes) +HELP2MAN = help2man +HELP2MAN.flags = -m "$(PROJECT_name) Utilities" -N +HELP2MAN.cmd = $(HELP2MAN) $(HELP2MAN.flags) ./$(1) -o $(2) +else +HELP2MAN.cmd = touch $(2) +endif + +MAKEINFO.flags = -I$(DOC.in/)texi -I$(DOC.out/)texi +MAKEINFO.flags.html = --html --no-headers --no-split +MAKEINFO.flags.txt = --plaintext --no-headers +MAKEINFO.flags.xml = --xml --output-indent=4 +MAKEINFO.cmd = makeinfo $(MAKEINFO.flags) $(MAKEINFO.flags.$(1)) $(2) -o $(3) + +HTMLCOMBINE = $(SOURCE/)project/htmlcombine.py +HTMLCOMBINE.cmd = $(HTMLCOMBINE) --header $(1) --footer $(2) --body $(3) > $(4) +HTMLCOMBINE.deps = $(HTMLCOMBINE) + +XML2WIKI = $(SOURCE/)project/xml2wiki.py +XML2WIKI.flags = --date --toc +XML2WIKI.cmd = $(XML2WIKI) $(XML2WIKI.flags) $(1) > $(2) +XML2WIKI.deps = $(XML2WIKI) + +DOXYGEN = doxygen +DOXYGEN.cmd = $(DOXYGEN) $(1) + +############################################################################### + +DOC.m4.out = \ + doc/texi/base/project.texi \ + doc/doxygen/Doxyfile \ + doc/doxygen/header.html \ + doc/doxygen/footer.html \ + doc/html/header.html \ + doc/html/footer.html + +DOC.man.utils = mp4art mp4file mp4subtitle mp4track +DOC.man.out = $(DOC.man.utils:%=$(DOC.out/)man/man1/%.1) + +DOC.texi.articles = $(wildcard $(DOC.in/)texi/*.texi $(DOC.out/)texi/*.texi) + +DOC.texi.includes = \ + doc/texi/base/project.texi \ + $(wildcard $(DOC.in/)texi/*/*.texi $(DOC.out/)texi/*/*.texi) + +DOC.texi2html.out = $(DOC.texi.articles:$(DOC.in/)texi/%.texi=$(DOC.out.articles/)html/%.html) +DOC.texi2txt.out = $(DOC.texi.articles:$(DOC.in/)texi/%.texi=$(DOC.out.articles/)txt/%.txt) +DOC.texi2xml.out = $(DOC.texi.articles:$(DOC.in/)texi/%.texi=$(DOC.out.articles/)xml/%.xml) + +DOC.xml2wiki.out = $(DOC.texi2xml.out:$(DOC.out.articles/)xml/%.xml=$(DOC.out.articles/)wiki/%.wiki) + +DOC.api.out = $(DOC.out.api/).stamp + +DOC.site.out = $(DOC.out.site/).stamp +DOC.site.out.copy = $(patsubst $(DOC.in/)html/%,$(DOC.out.site/)%, \ + $(filter-out %.in,$(wildcard $(DOC.in/)html/*))) +DOC.site.out.index = $(DOC.out.site/)index.html +DOC.site.out.html = $(patsubst $(DOC.out.articles/)html/%,$(DOC.out.site/)%, \ + $(filter-out %/Documentation.html,$(DOC.texi2html.out))) + +############################################################################### + +MKDIRS += $(dir $(DOC.m4.out)) +MKDIRS += $(DOC.out/)man/man1/ +MKDIRS += $(foreach n,html man texi txt wiki xml,$(DOC.out.articles/)$n) +MKDIRS += $(DOC.out.api/) +MKDIRS += $(DOC.out.site/) + +############################################################################### + +EXTRA_DIST += \ + $(SOURCE/)vstudio9.0/include/mp4v2/project.h \ + $(SOURCE/)vstudio9.0/mp4v2.sln \ + $(wildcard $(SOURCE/)vstudio9.0/*/*.vcproj) + +############################################################################### + +dist-hook: $(DOC.texi2txt.out) $(DOC.man.out) + rm -fr $(distdir)/doc + $(mkdir_p) $(distdir)/doc + $(INSTALL_DATA) $(DOC.in/)GNUmakefile.mk $(distdir)/doc/. +ifneq (,$(DOC.texi2txt.out)) + $(INSTALL_DATA) $(DOC.texi2txt.out) $(distdir)/doc/. +endif +ifneq (,$(DOC.man.out)) + $(mkdir_p) $(distdir)/doc/man/man1 + $(INSTALL_DATA) $(DOC.man.out) $(distdir)/doc/man/man1 +endif + +distclean-local: docclean + +############################################################################### + +$(DOC.m4.out): %: %.m4 $(M4.deps) | $(dir $(DOC.m4.out)) + $(call M4.cmd,$<,$@) + +############################################################################### + +.PHONY: articles doc +articles: html txt xml wiki +doc: man articles api site + +.PHONY: articlesclean apiclean docclean +articlesclean: htmlclean txtclean xmlclean wikiclean +docclean: manclean articlesclean apiclean siteclean + +.PHONY: man html txt xml wiki api +man: $(DOC.man.out) +html: $(DOC.texi2html.out) +txt: $(DOC.texi2txt.out) +xml: $(DOC.texi2xml.out) +wiki: $(DOC.xml2wiki.out) +api: $(DOC.api.out) +site: $(DOC.site.out) + +.PHONY: manclean htmlclean txtclean xmlclean wikiclean apiclean +manclean: + rm -f $(DOC.man.out) + +htmlclean: + rm -f $(DOC.texi2html.out) + +txtclean: + rm -f $(DOC.texi2txt.out) + +xmlclean: + rm -f $(DOC.texi2xml.out) + +wikiclean: + rm -f $(DOC.xml2wiki.out) + +apiclean: + rm -f $(DOC.api.out) + rm -fr $(DOC.out.api/)html/ $(DOC.out.api/)xml/ + +siteclean: + rm -fr $(DOC.out.site/) + +############################################################################### + +$(DOC.man.out): | $(dir $(DOC.man.out)) +$(DOC.man.out): $(DOC.out/)man/man1/%.1: $(BUILD/)% + $(call HELP2MAN.cmd,$<,$@) + +$(DOC.texi2html.out): $(DOC.texi.includes) | $(dir $(DOC.texi2html.out)) +$(DOC.texi2html.out): $(DOC.out.articles/)html/%.html: $(DOC.in/)texi/%.texi + $(call MAKEINFO.cmd,html,$<,$@) + +$(DOC.texi2txt.out): $(DOC.texi.includes) | $(dir $(DOC.texi2txt.out)) +$(DOC.texi2txt.out): $(DOC.out.articles/)txt/%.txt: $(DOC.in/)texi/%.texi + $(call MAKEINFO.cmd,txt,$<,$@) + +$(DOC.texi2xml.out): $(DOC.texi.includes) | $(dir $(DOC.texi2xml.out)) +$(DOC.texi2xml.out): $(DOC.out.articles/)xml/%.xml: $(DOC.in/)texi/%.texi + $(call MAKEINFO.cmd,xml,$<,$@) + +$(DOC.xml2wiki.out): $(XML2WIKI.deps) | $(dir $(DOC.xml2wiki.out)) +$(DOC.xml2wiki.out): $(DOC.out.articles/)wiki/%.wiki: $(DOC.out.articles/)xml/%.xml + $(call XML2WIKI.cmd,$<,$@) + +$(DOC.api.out): | $(dir $(DOC.api.out)) +$(DOC.api.out): $(DOC.in/)doxygen/banner.png +$(DOC.api.out): $(DOC.in/)doxygen/project.css +$(DOC.api.out): $(DOC.out/)doxygen/header.html +$(DOC.api.out): $(DOC.out/)doxygen/footer.html +$(DOC.api.out): $(DOC.out/)doxygen/Doxyfile + $(call DOXYGEN.cmd,$<) + $(INSTALL_DATA) $(DOC.in/)doxygen/banner.png $(DOC.out.api/)html/ + touch $@ + +############################################################################### + +$(DOC.site.out): | $(DOC.out.site/)articles +$(DOC.site.out): | $(DOC.out.site/)api +$(DOC.site.out): $(DOC.site.out.copy) +$(DOC.site.out): $(DOC.site.out.index) +$(DOC.site.out): $(DOC.site.out.html) + +$(DOC.out.site/)articles: | html $(DOC.out.site/) + rm -f $@ + ln -s ../articles/html $@ + +$(DOC.out.site/)api: | api $(DOC.out.site/) + rm -f $@ + ln -s ../api/html $@ + +$(DOC.site.out.copy): $(DOC.out.site/)%: $(DOC.in/)html/% + $(INSTALL_DATA) $^ $(@D)/. + +$(DOC.site.out.index): $(DOC.out/)html/header.html $(DOC.out/)html/footer.html +$(DOC.site.out.index): $(HTMLCOMBINE.deps) +$(DOC.site.out.index): $(DOC.out.articles/)html/Documentation.html + $(call HTMLCOMBINE.cmd,$(word 2,$^),$(word 3,$^),$<,$@) + +$(DOC.site.out.html): $(DOC.out/)html/header.html $(DOC.out/)html/footer.html +$(DOC.site.out.html): $(HTMLCOMBINE.deps) +$(DOC.site.out.html): $(DOC.out.site/)%: $(DOC.out.articles/)html/% + $(call HTMLCOMBINE.cmd,$(word 2,$^),$(word 3,$^),$<,$@) + +############################################################################### + +GOOGLE.out/ = $(top_builddir)/google/ +GOOGLE.repo.doc = $(if $(filter stable,$(PROJECT_repo_type)),$(PROJECT_version),trunk) + +google.clean: + rm -fr $(GOOGLE.out/) + +google.post: site wiki +google.post: | $(GOOGLE.out/) +google.post: google.rsync google.rm google.add google.propset + +$(GOOGLE.out/): + svn co --depth immediates $(PROJECT_repo_root) $(GOOGLE.out/) + svn update --set-depth immediates google/wiki + svn update --set-depth infinity google/doc/$(GOOGLE.repo.doc) + +google.rsync: + rsync -vrptPL --delete \ + --exclude=".svn/*" --exclude=".svn" \ + --exclude="*/.svn/*" --exclude="*/.svn" \ + --exclude=".stamp" --exclude="*/.stamp" \ + --exclude="*.m4" --exclude="*/*.m4" \ + $(DOC.out.site/). $(GOOGLE.out/)doc/$(GOOGLE.repo.doc)/. + $(INSTALL_DATA) $(DOC.out.articles/)wiki/BuildRepository.wiki $(GOOGLE.out/)wiki/. + $(INSTALL_DATA) $(DOC.out.articles/)wiki/BuildSource.wiki $(GOOGLE.out/)wiki/. + +google.rm: + @files=`svn status $(GOOGLE.out/) | grep '^!' | awk '{ print $$2 }'`; \ + if [ -n "$$files" ]; then \ + svn rm $$files; \ + fi + +google.add: + @files=`svn status $(GOOGLE.out/) | grep '^?' | awk '{ print $$2 }'`; \ + if [ -n "$$files" ]; then \ + svn add $$files; \ + fi + +google.propset: + find $(GOOGLE.out/)doc/$(GOOGLE.repo.doc) -type f -a \( -name "*.html" -o -name "*.css" \) -print0 \ + | xargs -0 svn propset svn:eol-style native + find $(GOOGLE.out/)doc/$(GOOGLE.repo.doc) -type f -a -name "*.html" -print0 \ + | xargs -0 svn propset svn:mime-type "text/html" + +############################################################################### + +dist-hb: distdir=lib$(PACKAGE) +dist-hb: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >lib$(PACKAGE)-$(VERSION).tar.gz + $(am__remove_distdir) + +############################################################################### + +## Precompiled header support is tricky given libtool's complexity and its +## historical aversion to supporting it. +## +## What we do is add rules to precompile. Unfortunately, we cannot +## automatically determine what flags libtool adds for compilation variants; +## ie: PIC or non-PIC compilation. So instead we will hardcode the flags +## to match. The reason for this is the precompiled-header will not be used if +## (relevent) compilation flags differ. + +CXX.gch.static.flags = $(X_GCH_STATIC_FLAGS) +CXX.gch.static.in = libplatform/impl.h src/impl.h libutil/impl.h +CXX.gch.static.out = $(CXX.gch.static.in:%=$(BUILD/)%.gch/static) + +CXX.gch.shared.flags = $(X_GCH_SHARED_FLAGS) +CXX.gch.shared.in = libplatform/impl.h src/impl.h libutil/impl.h +CXX.gch.shared.out = $(CXX.gch.shared.in:%=$(BUILD/)%.gch/shared) + +CXX.gch.exe.flags = $(X_GCH_FLAGS) +CXX.gch.exe.in = util/impl.h +CXX.gch.exe.out = $(CXX.gch.exe.in:%=$(BUILD/)%.gch/exe) + +CXX.gch.static.dependents = $(libmp4v2_la_OBJECTS) +CXX.gch.shared.dependents = $(libmp4v2_la_OBJECTS) + +CXX.gch.exe.dependents = \ + $(mp4art_OBJECTS) \ + $(mp4chaps_OBJECTS) \ + $(mp4extract_OBJECTS) \ + $(mp4file_OBJECTS) \ + $(mp4info_OBJECTS) \ + $(mp4subtitle_OBJECTS) \ + $(mp4syncfiles_OBJECTS) \ + $(mp4tags_OBJECTS) \ + $(mp4track_OBJECTS) \ + $(mp4trackdump_OBJECTS) + +ifeq ($(X_GCH_STATIC),1) +$(CXX.gch.static.dependents): $(CXX.gch.static.out) +endif + +ifeq ($(X_GCH_SHARED),1) +$(CXX.gch.shared.dependents): $(CXX.gch.shared.out) +endif + +ifeq ($(X_GCH),1) +$(CXX.gch.exe.dependents): $(CXX.gch.exe.out) +endif + +$(CXX.gch.static.out): | $(sort $(dir $(CXX.gch.static.out))) +$(CXX.gch.static.out): $(BUILD/)%.gch/static: % + $(CXXCOMPILE) $(CXX.gch.static.flags) -c $< -o $@ + +$(CXX.gch.shared.out): | $(sort $(dir $(CXX.gch.shared.out))) +$(CXX.gch.shared.out): $(BUILD/)%.gch/shared: % + $(CXXCOMPILE) $(CXX.gch.shared.flags) -c $< -o $@ + +$(CXX.gch.exe.out): | $(sort $(dir $(CXX.gch.exe.out))) +$(CXX.gch.exe.out): $(BUILD/)%.gch/exe: % + $(CXXCOMPILE) $(CXX.gch.exe.flags) -c $< -o $@ + +MKDIRS += $(dir $(CXX.gch.static.out)) +MKDIRS += $(dir $(CXX.gch.shared.out)) +MKDIRS += $(dir $(CXX.gch.exe.out)) + +clean-local: + rm -f $(CXX.gch.static.out) + rm -f $(CXX.gch.shared.out) + rm -f $(CXX.gch.exe.out) + +############################################################################### + +$(sort $(MKDIRS)): + $(mkdir_p) $@ |