ifeq ($(WEBSITE_ONLY_BUILD),1)
### for lilypond.org
- TOP_SRC_DIR=$(HOME)/lilypond/lilypond-git
+ TOP_SRC_DIR=$(LILYPOND_GIT)
TRUSTED_DIR=$(HOME)/lilypond/trusted-scripts
top-src-dir=$(TOP_SRC_DIR)
depth=.
texi2html-init-file=$(trusted-dir)/lilypond-texi2html.init
top-htaccess=$(trusted-dir)/lilypond.org.htaccess
dir-htaccess=$(trusted-dir)/website-dir.htaccess
- TEXI2HTML_PROGRAM=$(HOME)/usr/bin/texi2html
- EXAMPLES=$(HOME)/lilypond/media/ly-examples
- PICTURES=$(HOME)/lilypond/media/pictures
+ # grab it from PATH
+ TEXI2HTML_PROGRAM=texi2html
PYTHON=python
PYTHONPATH=$(TRUSTED_DIR)
else
top-htaccess=$(top-src-dir)/Documentation/web/server/lilypond.org.htaccess
dir-htaccess=$(top-src-dir)/Documentation/web/server/website-dir.htaccess
include $(config_make)
- # I assume this is run from top-build-dir
- EXAMPLES=Documentation/web/ly-examples/out-www
- PICTURES=Documentation/pictures/out-www
endif
+include $(top-src-dir)/VERSION
+
################################################################
#The 4 lines below present an option to force make website to run
# quietly only when it is run as make -s website. However, we've
WEB_LANGS := $(shell MAKEWEB=1 $(PYTHON) $(top-src-dir)/python/langdefs.py)
-TEXI2HTML=ONLY_WEB=1 TOP_SRC_DIR=$(top-src-dir) DEPTH=$(depth) PERL_UNICODE=SD \
+TEXI2HTML=ONLY_WEB_VERSION=v$(MAJOR_VERSION).$(MINOR_VERSION) TOP_SRC_DIR=$(top-src-dir) DEPTH=$(depth) PERL_UNICODE=SD \
$(TEXI2HTML_PROGRAM) -D web_version --prefix=index --split=section \
--init-file=$(texi2html-init-file) \
--I=$(dir $<) \
WEB_POST=python $(script-dir)/website_post.py
WEB_BIBS=python $(script-dir)/bib2texi.py
+EXAMPLES=$(LILYPOND_WEB_MEDIA_GIT)/ly-examples
+PICTURES=$(LILYPOND_WEB_MEDIA_GIT)/pictures
+PDFS=$(LILYPOND_WEB_MEDIA_GIT)/pdf
+
SERVER_FILES=$(top-src-dir)/Documentation/web/server
# don't include web
MANUALS_BASE = $(basename $(MANUALS) $(MANUALS_WEB))
+#######################
+### Dependency tracking
+
+# Find the file $(1) within the texinfo include dirs and return its path.
+# If not found, i.e. it is a generated file, then the file is ignored.
+find-texi = \
+$(firstword \
+ $(wildcard $(dir $<)$(1)) \
+ $(wildcard $(top-src-dir)/Documentation/$(1)) \
+)
+
+# Recursively scan the file $(1) for @include, search for included files
+# within the texinfo include dirs, and return all dependencies.
+scan-texi = \
+ $(foreach f, $(shell echo | sed -ne "/^@include[[:space:]]/s/@include//p" $(1)), \
+ $(call find-texi,$(f)) \
+ $(call scan-texi,$(call find-texi,$(f))) \
+)
+
+# Find dependencies for the target $@, based on the texinfo source file $<,
+# and write the dependencies to a .dep file.
+DO_TEXI_DEP = ( mkdir -p $(dir $@) && echo ./$@: $(call scan-texi,$<) > $@.dep ) &&
+
+# This is where we import the .dep files so that `make' knows about
+# the various dependencies.
+-include dummy.dep $(wildcard $(OUT)/*.dep) $(wildcard $(OUT)/*/*.dep)
+
+
###################
### Generated files
example-src-files := $(notdir $(wildcard $(EXAMPLES)/*))
example-files = $(example-src-files:%=$(OUT)/website/ly-examples/%)
-misc-files = $(OUT)/.htaccess \
- $(OUT)/website/.htaccess \
- $(OUT)/website/favicon.ico \
- $(OUT)/website/robots.txt
+misc-src-files := $(notdir $(wildcard $(top-src-dir)/Documentation/misc/*.*))
+misc-files += $(misc-src-files:%=$(OUT)/website/misc/%)
picture-src-files := $(notdir $(wildcard $(PICTURES)/*))
picture-files = $(picture-src-files:%=$(OUT)/website/pictures/%)
+pdf-src-files := $(notdir $(wildcard $(PDFS)/*))
+pdf-files = $(pdf-src-files:%=$(OUT)/website/pdf/%)
+
post-files = $(OUT)/website/index.html
+root-files = $(OUT)/.htaccess \
+ $(OUT)/website/.htaccess \
+ $(OUT)/website/favicon.ico \
+ $(OUT)/website/tweets.xml \
+ $(OUT)/website/tweets-es.xml \
+ $(OUT)/website/robots.txt
+
texinfo-files = $(OUT)/index.html $(WEB_LANGS:%=$(OUT)/%/index.html)
version-files = $(OUT)/version.itexi $(OUT)/weblinks.itexi
.PHONY: website website-bibs website-css website-examples website-misc \
website-pictures website-post website-test website-texinfo \
- website-version website-xrefs
+ website-version website-xrefs check-setup website-pdf
+
+check-setup:
+ifeq ($(LILYPOND_WEB_MEDIA_GIT),)
+ echo "Need a LILYPOND_WEB_MEDIA_GIT environment variable!"
+ exit 1
+endif
-website: website-post website-examples website-pictures website-css website-misc
+website: check-setup website-post website-examples website-pictures website-css website-misc website-pdf
website-bibs: website-version $(OUT) $(bib-files)
website-examples: $(OUT)/website/ly-examples $(example-files)
-website-misc: $(OUT)/website $(misc-files)
+website-misc: $(OUT)/website $(OUT)/website/misc $(misc-files) $(root-files)
website-pictures: $(OUT)/website/pictures $(OUT)/pictures $(picture-files)
+website-pdf: $(OUT)/website/pdf $(pdf-files)
+
website-post: website-texinfo $(post-files)
website-test:
### Rules
# Directories
-$(OUT) $(OUT)/website $(OUT)/website/css $(OUT)/website/ly-examples $(OUT)/website/pictures: %:
+$(OUT) $(OUT)/website $(OUT)/website/css $(OUT)/website/ly-examples $(OUT)/website/misc $(OUT)/website/pdf $(OUT)/website/pictures: %:
mkdir -p $@
$(OUT)/pictures: $(OUT)/website/pictures
ln -sf website/pictures $(OUT)/pictures
# Generated itexi files
-$(OUT)/version.itexi: #FIXME: add dependencies
+$(OUT)/version.itexi: $(top-src-dir)/VERSION
$(CREATE_VERSION) $(top-src-dir) > $(OUT)/version.itexi
-$(OUT)/weblinks.itexi: #FIXME: add dependencies
+$(OUT)/weblinks.itexi: $(top-src-dir)/VERSION
$(CREATE_WEBLINKS) $(top-src-dir) > $(OUT)/weblinks.itexi
$(bib-files): $(OUT)/%.itexi: $(top-src-dir)/Documentation/web/%.bib
$(DO_TEXI_DEP) $(EXTRACT_TEXI_FILENAMES) --split=node $<
# Build the English website
-$(OUT)/index.html: $(top-src-dir)/Documentation/web.texi
+$(OUT)/index.html: $(top-src-dir)/Documentation/web.texi $(xref-files)
$(DO_TEXI_DEP) $(TEXI2HTML) $<
# Build translated websites
$(eval $(foreach l,$(WEB_LANGS),\
-$(eval $(OUT)/$(l)/index.html: $(top-src-dir)/Documentation/$(l)/web.texi; \
+$(eval $(OUT)/$(l)/index.html: $(top-src-dir)/Documentation/$(l)/web.texi $(xref-files); \
$$(DO_TEXI_DEP) $$(TEXI2HTML) --lang="$(l)" $$<; ) \
))
$(example-files): $(OUT)/website/ly-examples/%: $(EXAMPLES)/%
cp $< $@
+$(misc-files): $(OUT)/website/misc/%: $(top-src-dir)/Documentation/misc/%
+ cp $< $@
+
$(picture-files): $(OUT)/website/pictures/%: $(PICTURES)/%
cp $< $@
+$(pdf-files): $(OUT)/website/pdf/%: $(PDFS)/%
+ cp $< $@
+
$(OUT)/website/favicon.ico: $(SERVER_FILES)/favicon.ico
cp $< $@
$(OUT)/website/robots.txt: $(SERVER_FILES)/robots.txt
cp $< $@
+$(OUT)/website/tweets.xml: $(SERVER_FILES)/tweets.xml
+ cp $< $@
+
+$(OUT)/website/tweets-es.xml: $(SERVER_FILES)/tweets-es.xml
+ cp $< $@
+
$(OUT)/.htaccess: $(top-htaccess)
cp $< $@