aboutsummaryrefslogtreecommitdiff
path: root/Makefile
blob: c64c4c825041b44d5be02f383d0cac9eb3c1b9a1 (about) (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
SHELL := /usr/bin/env bash
.DEFAULT_GOAL := help
.RECIPEPREFIX +=

all: clean build publish
.PHONY: all

## Build full website.
build:
  nix-build
.PHONY: build

## Remove all files not tracked by git.
clean:
  git clean -fdx
.PHONY: clean

## Sync all static files to server with rsync.
publish:
  rsync --verbose --copy-links --progress --stats --update --recursive result/ root@euandre.org:/home/user-data/www/default
.PHONY: publish

# Taken from https://gist.github.com/klmr/575726c7e05d8780505a

# Inspired by <http://marmelab.com/blog/2016/02/29/auto-documented-makefile.html>
# sed script explained:
# /^##/:
#   * save line in hold space
#   * purge line
#   * Loop:
#     * append newline + line to hold space
#     * go to next line
#     * if line starts with doc comment, strip comment character off and loop
#   * remove target prerequisites
#   * append hold space (+ newline) to line
#   * replace newline plus comments by `---`
#   * print line
# Separate expressions are necessary because labels cannot be delimited by
# semicolon; see <http://stackoverflow.com/a/11799865/1968>
help:
  @echo "$$(tput bold)Available rules:$$(tput sgr0)"
  @echo
  @sed -n -e "/^## / { \
    h; \
    s/.*//; \
    :doc" \
    -e "H; \
    n; \
    s/^## //; \
    t doc" \
    -e "s/:.*//; \
    G; \
    s/\\n## /---/; \
    s/\\n/ /g; \
    p; \
  }" ${MAKEFILE_LIST} \
  | LC_ALL='C' sort --ignore-case \
  | awk -F '---' \
    -v ncol=$$(tput cols) \
    -v indent=19 \
    -v col_on="$$(tput setaf 6)" \
    -v col_off="$$(tput sgr0)" \
  '{ \
    printf "%s%*s%s ", col_on, -indent, $$1, col_off; \
    n = split($$2, words, " "); \
    line_length = ncol - indent; \
    for (i = 1; i <= n; i++) { \
      line_length -= length(words[i]) + 1; \
      if (line_length <= 0) { \
        line_length = ncol - indent - length(words[i]) - 1; \
        printf "\n%*s ", -indent, " "; \
      } \
      printf "%s ", words[i]; \
    } \
    printf "\n"; \
  }' \
| more $(shell test $(shell uname) == Darwin && echo '--no-init --raw-control-chars')