# -*- 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 unimportant generated files. This includes all files # which may be recreated by calling 'init' # # shorthelp:: # Called to provide an overview of important target (this is the default target) # # fullhelp:: # Called to create the list of supplementary targets. # # varhelp:: # Called to create the list of Makefile variables. # ########################################################################### 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="$(BASEDIR)/$(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 (default target)" @echo " help" @echo " Summary of important targets / complete help." @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 " init-nonet" @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 (init target) or from an up-to-date" @echo " download cache (init-nonet). The download cache normaly resides in" @echo " './dlcache'" @echo @echo " update" @echo " update-nonet" @echo " Update the buildout. Calls './bin/buildout' (update target) or " @echo " './bin/buildout -No (update-nonet target)." @echo @echo " shell" @echo " Spawn an interactive subshell with the environment set up correctly" @echo " for the local buildout." @echo @echo " clean" @echo " Remove all unimportant (!) generated files (the remaining files are" @echo " those which may be changed and should be managed as part of the" @echo " project source-code). calling 'make init' or 'make init-nonet' will" @echo " rebuild the development environment." @echo .PHONY: shorthelp fullhelp:: @echo @echo "SUPPLEMENTARY TARGETS" @echo @echo " cleancache" @echo " purge the download cache" @echo @echo " upgrade" @echo " Reinitializes the buildout. This is like calling" @echo " 'make clean cleancache init'. Use this target to upgrade to a new" @echo " python or extension (e.g. PIL) version (after changing the version" @echo " in the project Makefile) or to upgrade the component eggs. This" @echo " target purges the download cache to ensure, no obsolete files are" @echo " left." @echo .PHONY: fullhelp varhelp:: @echo @echo "MAKEFILE VARIABLES" @echo @echo " DLCACHE ($(DLCACHE))" @echo " Name of the download-cache subdirectory. This directory may be" @echo " persisted e.g. by checking into version control (together with" @echo " the source code or into as a separate repository or by saving into" @echo " an archive. A persistent cache allows the setup to be completely" @echo " reproducible and network independent." @echo .PHONY: varhelp 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 .PHONY: update define gitignore _gitignore () { \ [ -r .gitignore ] || touch .gitignore; \ grep -qxF "$$1" .gitignore || echo "$$1" >>.gitignore; \ }; \ _gitignore endef .gitignore:: @echo "Updating .gitignore." @$(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 .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 shell: @eval "`cat .env`"; $$SHELL .PHONY: shell update-nonet: update .PHONY: update-nonet cleancache: rm -rf $(DLCACHE)/* .PHONY: cleancache upgrade: clean cleancache init .PHONY: upgrade help: @[ -n `which less` ] && $(MAKE) -s shorthelp fullhelp varhelp | less \ || $(MAKE) -s shorthelp fullhelp varhelp .PHONY: help