# -*- makefile -*- # # The master makefile sets up the follosing customizable (double-colon) targtets. # # debdepends:: # This optional target may be used by the user to install the necessary # system requirements via 'aptitude'. Must be called as root # # setup:: # Called for basic setup. Executed before installing the basic eggs # # eggs:: # Called to install eggs # # buildout:: # Called to install the buildout (e.g. call paster create) # # init-hook:: # Called after the buildout is installed but BEFORE bootstraping # # update-hook:: # Called BEFORE updating the buildout (e.g. before calling bin/buildout) # # bootstrap:: # Called to bootstrap the buildout. Here you can add actions to be # performed AFTER bootstraping the project whenever a bootstrap is performed # # update:: # Called to update the buildout (calls bin/buildout). Here you can add # commands to call AFTER bin/buildout returns. # # .gitignore:: # Called to populate the .gitignore file. Use '@$(gitignore) ' to # add a pattern # # .env:: # Called to add environment variables to be set when executing a shell # Use @$(env) to add a variable settings. may be # PATH Add to PATH # PYTHONPATH Add to PYTHONPATH # Set variable to # # clean:: # Called to clean up all generated files # ########################################################################### BASEDIR=$(shell pwd) DLCACHE ?= dlcache default: shorthelp .PHONY: default # Usage: # @$(httpget) [] # # Download to . If is missing, defaults to # the last component of the . # # If the file exists in $(DLCACHE), it is retrieved from there instead. define httpget _httpget() { \ name="$${1##*/}"; \ target="$$2"; \ [ -n "$$target" ] || target="$$name"; \ cache="$(DLCACHE)/$$name"; \ if [ -r "$$cache" ]; then \ echo "Fetching '$$name' from cache."; \ else \ [ -z "$(HTTPGET_NONET)" ] || ( echo "Missing '$$1'."; exit 2 ); \ echo "Downloading '$$1'."; \ wget -O "$$cache" "$$1"; \ fi; \ cp "$$cache" "$$target"; \ }; \ _httpget endef ########################################################################### # Customization targets shorthelp:: @echo @echo "SUMMARY" @echo @echo " Makefile for bootstraping and maintaining a buildout. Most important" @echo " targets are:" @echo @echo " init" @echo " update-nonet" @echo @echo @echo "MAIN TARGETS" @echo @echo " shorthelp" @echo " Summary of important targets" @echo @echo " help" @echo " Complete list of user-targets" @echo @echo " debdepends" @echo " Install debian packages via 'aptitude' needed to satisy build" @echo " dependencies. MUST BE CALLED AS ROOT (e.g. with sudo)." @echo @echo " init" @echo " Initialize buildout. Call this to either bootstrap a new project" @echo " or to initialize a new working copy. Missing packages will be" @echo " downloaded from the internet." @echo @echo " init-nonet" @echo " Initialize buildout from cache. Like 'init' but does not download" @echo " any packages from the internet. Needs an up-to-date download cache." @echo @echo " update" @echo " Update the buildout (calls './bin/buildout'). This target may need" @echo " network access." @echo @echo " update-nonet" @echo " Update the buildout (calls './bin/buildout -No') with no network" @echo " access." @echo @echo " shell" @echo " Spawn an interactive subshell with the environment set up correctly" @echo " for the local buildout." @echo @echo " versions" @echo " Generate lines to be added to 'buildout.cfg' to pin all package" @echo " versions." @echo @echo " clean" @echo " Remove all generated files." @echo .PHONY: shorthelp help:: shorthelp @echo @echo "SECONDARY TARGETS" @echo debdepends:: .PHONY: debdepends setup:: mkdir -p $(DLCACHE) $(DLCACHE)/pip .PHONY: setup eggs:: .PHONY: eggs buildout:: .PHONY: buildout init-hook:: .PHONY: init-hook update-hook:: .PHONY: update-hook bootstrap:: .PHONY: bootstrap update:: update-hook bin/buildout $(BUILDOUT_OPTS) .PHONY: update define gitignore _gitignore () { \ [ -r .gitignore ] || touch .gitignore; \ grep -qxF "$$1" .gitignore || echo "$$1" >>.gitignore; \ }; \ _gitignore endef .gitignore:: @echo "Updating .gitignore." @$(gitignore) "*.pyc" @$(gitignore) "*.egg-info/" @$(gitignore) "/.env" define env _env () { \ [ -r .env ] || touch .env; \ case "$$1" in \ PATH|PYTHONPATH) line="export $$1=\"$$2:\$$$$1\"" ;; \ *) line="export $$1=\"$$2\"" ;; \ esac; \ grep -qxF "$$line" .env || echo "$$line" >>.env; \ }; \ _env endef .env:: @echo "Updating .env." clean:: rm -f .gitignore .env .PHONY: clean ########################################################################### # user targets init: setup eggs buildout init-hook update-hook bootstrap update .gitignore .env .PHONY: init init-nonet: HTTPGET_NONET=1 init-nonet: init .PHONY: init-nonet versions: @echo "# Add the following lines to [versions] in buildout.cfg to pin all packages" @bin/buildout -vvvvv | sed -ne 's/^Picked: //p' | sort | uniq .PHONY: versions shell: @eval "`cat .env`"; $$SHELL .PHONY: shell update-nonet: update .PHONY: update-nonet