Makefile
author Oleksandr Gavenko <gavenkoa@gmail.com>
Tue, 10 Jan 2012 14:17:09 +0200
changeset 292 b19f6e8f2450
parent 287 fa17ae49bfff
child 293 a9ac4e2551a0
permissions -rw-r--r--
Fix '.cvsrc' file name.

SHELL = /bin/sh
export PATH := /bin:/usr/bin:${PATH}

# Disable built in pattern rules.
MAKEFLAGS += -r
# Disable built in variables.
MAKEFLAGS += -R
# Disable built in suffix rules.
.SUFFIXES:
# Default target.
.DEFAULT_GOAL = help

################################################################
# Platform definition.

ifeq '' '$(HOME)'
  $(error HOME env var not set!)
endif

host_os = linux
ifneq '' '$(COMSPEC)'
  host_os = cygwin
endif

################################################################
# Build tool definition/switches.

RST2HTML = rst2html
ifeq '$(host_os)' 'cygwin'
  RST2HTML = rst2html.py
endif

################################################################
# Project dirs/files.

OVERRIDDEN_ITEMS = \
    .inputrc .minttyrc .Xdefaults .xinitrc .xserverrc .screenrc .dircolors \
    .bashrc .bash_path .bash_completion .zshrc .vimrc .ssh .pystartup \
    .signature .muttrc .tidy \
    .dictrc \
    .hgrc .hgignore .hgstyle .bazaar .gitconfig .gitignore .cvsrc \
    .gnupg
MANUALINSTALL_ITEMS = .mc
IFNONEXIST_ITEMS = .wgetrc .subversion

RST_FILES = $(wildcard *.rst)
HTML_FILES = $(RST_FILES:.rst=.html)

################################################################
# Build targets.

.PHONY: all
all:

################################################################
# Install/uninstall targets.

.PHONY: install
install:
	for item in $(OVERRIDDEN_ITEMS); do \
		if [ -f $$item ]; then \
			install -m 640 $$item $(HOME)/$$item; \
		fi; \
		if [ -d $$item ]; then \
			for file in `find $$item`; do \
				if [ -d $$file ]; then \
					mkdir -p $(HOME)/$$file; \
					continue; \
				fi; \
				install -m 640 $$file $(HOME)/$$file; \
			done; \
		fi; \
	done
	for item in $(IFNONEXIST_ITEMS); do \
		if [ -f $$item -a ! -f $(HOME)/$$item ]; then \
			install -m 640 $$item $(HOME)/$$item; \
		fi; \
		if [ -d $$item ]; then \
			for file in `find $$item`; do \
				if [ -d $$file ]; then \
					mkdir -p $(HOME)/$$file; \
					continue; \
				fi; \
				if [ ! -f $(HOME)/$$file ]; then \
					install -m 640 $$file $(HOME)/$$file; \
				fi; \
			done; \
		fi; \
	done
	chmod a+x ~/.xinitrc ~/.xserverrc
	rm -f ~/.xsession
	ln -s ~/.xinitrc ~/.xsession
	mkdir -p $(HOME)/.mc
	install -m 640 .mc/bashrc $(HOME)/.mc
ifeq '$(host_os)' 'cygwin'
	install -m 640 .mc/bindings.cygwin $(HOME)/.mc/bindings
else
	install -m 640 .mc/bindings $(HOME)/.mc/bindings
endif

.PHONY: uninstall
uninstall:
	for item in $(OVERRIDDEN_ITEMS); do \
		if [ -f $$item ]; then \
			[ -f $(HOME)/$$file ] && rm -f $(HOME)/$$item; \
		fi; \
		if [ -d $$item ]; then \
			for file in `find $$item -depth`; do \
				if [ -d $$file ]; then \
					rmdir $(HOME)/$$file || :; \
					continue; \
				fi; \
				[ -f $(HOME)/$$file ] && rm $(HOME)/$$file; \
			done; \
		fi; \
	done
	rm -f $(HOME)/.mc/bashrc $(HOME)/.mc/ini $(HOME)/.mc/bindings
	rmdir $(HOME)/.mc || :

################################################################
# Docs targets.

.PHONY: html
html: $(HTML_FILES)

# --stylesheet=rst.css
$(HTML_FILES): %.html: %.rst
	$(RST2HTML) $*.rst $@

################################################################
# Clean targets.

.PHONY: clean
clean:
	rm -f $(HTML_FILES)

.PHONY: distclean
distclean: clean

################################################################
# Helper target.

.PHONY: help
help:
	@echo
	@echo Supported targets:
	@sed -n -e '/^[[:alnum:]_-]*:/{s=^\(.*\):.*=  \1=;p;}' $(MAKEFILE_LIST)