Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: Makefile

Issue 5986495445860352: 1377-Blacklist_dependencies (Closed)
Patch Set: Created Sept. 29, 2014, 11:41 a.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « .travis.yml ('k') | ensure_dependencies.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Makefile
diff --git a/Makefile b/Makefile
new file mode 100755
index 0000000000000000000000000000000000000000..0849055de807f0e8c9f92fba9383c39be3d8ab41
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,130 @@
+#!/usr/bin/make -f
+# -------------------------------------------------------------------------
+# This Makefile is destined to ease the work with the infrastructure repo,
+# especially when working with Vagrant: It contains wildcard targets for the
+# most common Vagrant commands ($box.$operation) that ensure each operation
+# is logged properly. This eases reporting, reproducing and debugging any
+# issues that may arise.
+# In addition, there are a set of additional targets that perform actions
+# specific to the repo, such as invocation of the ensure_dependencies.py
+# script and the creation of the modules/private resource when necessary.
+# -------------------------------------------------------------------------
+
+# Phony targets are always considered out-of-date.
+.PHONY: ensure_dependencies.py prepare clean distclean
+
+# The first target is also the default one.
+.DEFAULT_GOAL = prepare
+
+# -------------------------------------------------------------------------
+# Recognized environment variables and their defaults
+# -------------------------------------------------------------------------
+
+# The python(1) executable to use. Note that it must be Python version 2!
+PYTHON ?= python
+
+# The Vagrant executable to use.
+VAGRANT ?= vagrant
+
+# -------------------------------------------------------------------------
+# Common targets or "commands"
+# -------------------------------------------------------------------------
+
+# The prepare target is also the default goal. It ensures all prerequisites
+# for development and testing are fulfilled.
+prepare: \
+ ensure_dependencies.py \
+ modules/private
+
+##
+# The clean target removes any logs written so far.
+clean:
+ rm -rf "$(VAGRANT_LOG_PATH)"
+
+##
+# The obligatoric distclean target implies clean and, in addition, removes
+# all submodules as well as the modules/private stub, if any.
+distclean: clean
+ $(MAKE) list-dependencies | while read module; do rm -rf "$$module"; done
+ if [ -L "modules/private" ]; then rm "modules/private"; fi
+
+# -------------------------------------------------------------------------
+# Vagrant-specific utilities
+# -------------------------------------------------------------------------
+
+# The following variables are local to the Makefile and meant to decrease
+# the amount of code being repeated in the %.command targets.
+VAGRANT_LOG_PATH = .vagrant/logs
+VAGRANT_LOG_APPEND = tee -a "$(VAGRANT_LOG_PATH)/$*.log"
+VAGRANT_LOG_STANZA = echo "[`date` $@]" | $(VAGRANT_LOG_APPEND)
+
+%.back: $(VAGRANT_LOG_PATH)
+ @$(VAGRANT_LOG_STANZA)
+ @$(VAGRANT) snapshot back "$*" 2>&1 | $(VAGRANT_LOG_APPEND)
+
+%.destroy: $(VAGRANT_LOG_PATH)
+ @$(VAGRANT_LOG_STANZA)
+ @$(VAGRANT) destroy -f "$*" 2>&1 | $(VAGRANT_LOG_APPEND)
+
+%.halt: $(VAGRANT_LOG_PATH)
+ @$(VAGRANT_LOG_STANZA)
+ @$(VAGRANT) halt "$*" 2>&1 | $(VAGRANT_LOG_APPEND)
+
+%.provision: $(VAGRANT_LOG_PATH)
+ @$(VAGRANT_LOG_STANZA)
+ @$(VAGRANT) provision "$*" 2>&1 | $(VAGRANT_LOG_APPEND)
+
+%.snapshot: $(VAGRANT_LOG_PATH)
+ @$(VAGRANT_LOG_STANZA)
+ @$(VAGRANT) snapshot take "$*" 2>&1 | $(VAGRANT_LOG_APPEND)
+
+%.ssh: $(VAGRANT_LOG_PATH)
+ @$(VAGRANT_LOG_STANZA)
+ @$(VAGRANT) ssh "$*"
+
+%.up: $(VAGRANT_LOG_PATH)
+ @$(VAGRANT_LOG_STANZA)
+ @$(VAGRANT) up "$*" 2>&1 | $(VAGRANT_LOG_APPEND)
+
+# -------------------------------------------------------------------------
+# Fragmental dependencies of other targets
+# -------------------------------------------------------------------------
+
+##
+# The list-dependencies target is used internally to accumulate a newline-
+# separated list of all external modules referenced in the dependencies file.
+list-dependencies:
+ @sed -n 's/^\s*\([a-z0-9][^ ]\+\)\s*=.*/\1/p' dependencies
+
+# The ensure_dependencies.py target invokes the accompanying $(PYTHON)
+# script of the same name for each dependency module not found in the local
+# repository clone.
+ensure_dependencies.py:
+ $(MAKE) list-dependencies \
+ | while read line; do \
+ if [ ! -e "$$line" ]; then \
+ $(PYTHON) "$@"; \
+ break; \
+ fi; \
+ done
+
+# The modules/private target ensures the private setup module being present.
+# By default, it's using the development stub that ships with the repository.
+# Please refer to the accompanying README.md file for more information.
+modules/private:
+ if [ ! -e "$@" ]; then ln -s private-stub "$@"; fi
+
+# The $(VAGRANT_LOG_PATH) target ensures the destination for log files
+# being present.
+$(VAGRANT_LOG_PATH):
+ mkdir -p "$@"
+
+# -------------------------------------------------------------------------
+# Miscellaneous targets
+# -------------------------------------------------------------------------
+
+# The Makefile target is an empty stub required when the Makefile is invoked
+# as an executable script in another directory (see also the #!shebang line
+# at the top).
+Makefile:
+
« no previous file with comments | « .travis.yml ('k') | ensure_dependencies.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld