Makefile
author Oleksandr Gavenko <gavenkoa@gmail.com>
Fri, 08 Jan 2021 00:04:16 +0200
changeset 958 4fdd8bd3d0a4
parent 957 b491e9c375e7
child 959 25d27dfee90e
permissions -rw-r--r--
No need to detect old MC version, always install into ~/.config/mc.


################################################################
# Standard GNU Makefile settings.

SHELL = /bin/bash
.SHELLFLAGS = -xeuc
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:
# Delete target file if command fails.
.DELETE_ON_ERROR:
# Default target.
.DEFAULT_GOAL = help

################################################################
# Config.

CFG_FILE := Makefile.cfg
include $(CFG_FILE)

# Override defaults.
CFG_LOCAL_FILE := Makefile.cfg.override
-include $(CFG_LOCAL_FILE)

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

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

uname-s := $(shell uname -s)

host_os = linux
ifneq '' '$(filter CYGWIN%,$(uname-s))'
  host_os = cygwin
endif
ifeq 'SunOS' '$(uname-s)'
  host_os = solaris
endif

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

INSTALL_DATA := install -m 640 -D
ifeq '$(host_os)' 'solaris'
  INSTALL_DATA := ginstall -m 640 -D
endif

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

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

OVERRIDDEN_ITEMS := \
    .fvwm .xxkbrc .xmodmaprc .stalonetrayrc \
    .inputrc .Xdefaults .xinitrc .xserverrc \
    .screenrc .tmux.conf \
    .dircolors .colordiffrc \
    .env .bashrc .bash_completion .bash_completion.d .zshrc .vimrc .ssh \
    .pylintrc .pystartup .tclshrc .npmrc .guile \
    .gradle/init.d/springColorLogging.gradle \
    .sqshrc .psqlrc \
    .signature .muttrc .tidy \
    .dictrc \
    .hgrc .hgignore .hgstyle .bazaar .gitconfig .gitignore .cvsrc .quiltrc .quiltrc-dpkg \
    .gnupg \
    .ackrc .grc \
    .mplayer \
    .glhackrc
MANUALINSTALL_ITEMS = .mc
IFNONEXIST_ITEMS = .wgetrc .subversion

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

TARBALL_MINI := skel-mini.tar.gz

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

.PHONY: all
all:

.PHONY: dist-mini
dist-mini: $(TARBALL_MINI)

define TARBALL_MINI_DEPS
.bashrc .env .bash_completion \
.inputrc .dircolors \
.gitconfig .gitignore .hgrc .hgignore .hgstyle
endef

$(TARBALL_MINI): $(TARBALL_MINI_DEPS)
	tar zcf $(TARBALL_MINI) $(TARBALL_MINI_DEPS)

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

.PHONY: install
install:
	for item in $(OVERRIDDEN_ITEMS); do \
		if [[ -f $$item ]]; then \
			$(INSTALL_DATA) $$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_DATA) $$file $(HOME)/$$file; \
			done; \
		fi; \
	done
	chmod 700 ~/.gnupg/
	chmod a+x ~/.fvwm/FvwmKbdd.pl ~/.fvwm/xinit
	command -v fvwm || exit 0; \
	for f in /etc/xdg/menus/*.menu; do \
		[[ -f "$$f" ]] || continue; \
		fname=$${f%.menu}; \
		fname=$${fname##*/}; \
		python .fvwm/xdg2fvwm.py Menu-$$fname $$f >~/.fvwm/$$fname.hook; \
		echo "Read $$[HOME]/.fvwm/$$fname.hook" >>~/.fvwm/config; \
		echo "AddToMenu MenuMyRoot $$fname Popup Menu-$$fname" >>~/.fvwm/config; \
	done
	mkdir -p ~/.screenshot
	for item in $(IFNONEXIST_ITEMS); do \
		if [[ -f $$item ]] && ! [[ -f $(HOME)/$$item ]]; then \
			$(INSTALL_DATA) $$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_DATA) $$file $(HOME)/$$file; \
				fi; \
			done; \
		fi; \
	done
	chmod a+x ~/.xinitrc ~/.xserverrc
	rm -f ~/.xsession
	ln -s ~/.xinitrc ~/.xsession
	rm -f ~/.bash_profile
	cp ~/.bashrc ~/.bash_profile
	mkdir -p $(HOME)/.config/mc $(HOME)/.local/share/mc/; \
	umask 0117; \
	$(INSTALL_DATA) .local/share/mc/bashrc $(HOME)/.local/share/mc/; \
	cat .config/mc/mc.ext /etc/mc/mc.ext > $(HOME)/.config/mc/mc.ext; \
	{ \
		echo 'default/*'; \
		echo '    Open=file %f'; \
		echo '    Edit=[ `du -m %f | { read size rest; echo $$size; }` -le 4 ] && e %f || echo Too large file for Emacs...'; \
	} >>$(HOME)/.config/mc/mc.ext
ifneq '' '$(filter $(host_os),cygwin linux)'
	if command -v file 1>/dev/null; then \
		$(INSTALL_DATA) .magic $(HOME); \
		cd $(HOME); \
		file --compile -m .magic; \
	fi
endif
	mkdir -p $(HOME)/.local/share/applications/
	$(INSTALL_DATA) .local/share/applications/mimeapps.list $(HOME)/.local/share/applications/
	sed -e 's=@CFG_FONT_SIZE@=$(CFG_FONT_SIZE)=' <.minttyrc >$(HOME)/.minttyrc

.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) $(TARBALL)

.PHONY: distclean
distclean: clean

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

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