| ############################################################################### |
| ## |
| ## 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/)%$(EXEEXT) |
| $(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 = $(PROJECT_repo_branch) |
| |
| 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) $@ |