Makefile: improve install and clean targets
install:
Add install functionality for copying generated output into specified locations.
Theme and photos are two plugins available in this instance of pelican so add
dedicated install targets for them as well.
clean:
Distinguish between (navite) html and (added) plugins output, then make it possible
to selectively prune their own output files.
diff --git a/Makefile b/Makefile
index cc1ec0b..ead5917 100644
--- a/Makefile
+++ b/Makefile
@@ -5,6 +5,8 @@
BASEDIR=$(CURDIR)
INPUTDIR=$(BASEDIR)/content
OUTPUTDIR=$(BASEDIR)/output
+OUTPUTDIR_THEME=$(OUTPUTDIR)/theme
+OUTPUTDIR_PHOTOS=$(OUTPUTDIR)/photos
CONFFILE=$(BASEDIR)/pelicanconf.py
PUBLISHCONF=$(BASEDIR)/publishconf.py
@@ -27,10 +29,14 @@
GITHUB_PAGES_BRANCH=gh-pages
-INSTALLDIR=
-UID="www-data"
-GID="www-data"
-MOD="664"
+INSTALLSUDO ?= 0
+ifeq ($(INSTALLSUDO),1)
+ SUDO := sudo -E
+endif
+INSTALLFLAGS := $(INSTALLFLAGS) -rXaA
+INSTALLDIR ?=
+INSTALLDIR_THEME ?=
+INSTALLDIR_PHOTOS ?=
DEBUG ?= 0
ifeq ($(DEBUG), 1)
@@ -47,7 +53,10 @@
@echo ' '
@echo 'Usage: '
@echo ' make html (re)generate the web site '
- @echo ' make clean remove the generated files '
+ @echo ' make clean-html remove all html files and folders '
+ @echo ' make clean-theme remove output/theme '
+ @echo ' make clean-photos remove output/photos '
+ @echo ' make clean remove output folder '
@echo ' make regenerate regenerate files upon modification '
@echo ' make publish generate using production settings '
@echo ' make serve [PORT=8000] serve site at http://localhost:8000'
@@ -61,6 +70,10 @@
@echo ' make s3_upload upload the web site via S3 '
@echo ' make cf_upload upload the web site via Cloud Files'
@echo ' make github upload the web site via gh-pages '
+ @echo ' make install-html copy *.html, html folders locally '
+ @echo ' make install-theme copy output/theme locally '
+ @echo ' make install-photos copy output/photos locally '
+ @echo ' make install copy output/* locally '
@echo ' '
@echo 'Set the DEBUG variable to 1 to enable debugging, e.g. make DEBUG=1 html '
@echo 'Set the RELATIVE variable to 1 to enable relative urls '
@@ -69,8 +82,18 @@
html:
$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
+clean-html:
+ find "$(OUTPUTDIR)" -type f -name *.html -delete
+ find "$(OUTPUTDIR)" -type d -empty -delete
+
+clean-theme:
+ [ ! -d "$(OUTPUTDIR_THEME)" ] || rm -rf $(OUTPUTDIR_THEME)
+
+clean-photos:
+ [ ! -d "$(OUTPUTDIR_PHOTOS)" ] || rm -rf $(OUTPUTDIR_PHOTOS)
+
clean:
- [ ! -d $(OUTPUTDIR) ] || rm -rf $(OUTPUTDIR)
+ [ ! -d "$(OUTPUTDIR)" ] || rm -rf $(OUTPUTDIR)
regenerate:
$(PELICAN) -r $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
@@ -126,18 +149,20 @@
ghp-import -m "Generate Pelican site" -b $(GITHUB_PAGES_BRANCH) $(OUTPUTDIR)
git push origin $(GITHUB_PAGES_BRANCH)
-install:
- @command [ -z "$(INSTALLDIR)" ] && echo "INSTALLDIR unset. i.e. make install INSTALLDIR=\"/path/to/dir\"" && exit 1 ||:
- @command [ ! -d $(OUTPUTDIR) ] && echo "OUTPUTDIR unset. i.e. make html" && exit 1 ||:
- @echo "Copying $(OUTPUTDIR) to $(INSTALLDIR)"
- @command sudo cp -ra $(OUTPUTDIR)/* $(INSTALLDIR) ||:
- @echo "Setting chown to $(UID):$(GID)"
- @command sudo chown -R $(UID):$(GID) $(INSTALLDIR) ||:
- @echo "Setting chmod $(MOD) to files"
- @command find $(INSTALLDIR) -type f | sudo xargs -i{} chmod $(MOD) {} ||:
- @echo "Installed files:"
- @command find $(INSTALLDIR) -type f ||:
- @echo "Done."
+install-html:
+ [ -d "$(OUTPUTDIR)" ] && [ -d "$(INSTALLDIR)" ] && \
+ $(SUDO) rsync $(INSTALLFLAGS) --exclude=$(notdir $(OUTPUTDIR_THEME)) \
+ --exclude=$(notdir $(OUTPUTDIR_PHOTOS)) $(OUTPUTDIR)/* $(INSTALLDIR)
+
+install-theme:
+ [ -d "$(OUTPUTDIR_THEME)" ] && [ -d "$(INSTALLDIR_THEME)" ] && \
+ $(SUDO) rsync $(INSTALLFLAGS) $(OUTPUTDIR_THEME) $(INSTALLDIR_THEME)/
+
+install-photos:
+ [ -d "$(OUTPUTDIR_PHOTOS)" ] && [ -d "$(INSTALLDIR_PHOTOS)" ] && \
+ $(SUDO) rsync $(INSTALLFLAGS) $(OUTPUTDIR_PHOTOS) $(INSTALLDIR_PHOTOS)/
+
+install: install-html install-theme install-photos
-.PHONY: html help clean regenerate serve serve-global devserver stopserver publish ssh_upload rsync_upload dropbox_upload ftp_upload s3_upload cf_upload github install
+.PHONY: html help clean clean-html clean-theme clean-photos regenerate serve serve-global devserver stopserver publish ssh_upload rsync_upload dropbox_upload ftp_upload s3_upload cf_upload github install install-html install-theme install-photos