Un générateur de site statique - retour accueil
git clone git://bebou.netlib.re/catium
Log | Files | Refs | README |
makefile (2726B)
1 # Si une erreur survient dans l'exécution d'une règle alors le fichier concerné
2 # est supprimé
3 .DELETE_ON_ERROR:
4
5 #############################################################
6 # On liste les fichiers avec lesquels on veut faire des trucs
7 #############################################################
8
9 # On créé des variables contenant la liste des fichiers qui nous intéressent
10 # Dans sources les sh à transformer en html
11 # Dans annexes le reste des fichiers
12 sources = $(shell find contents -type f -name '*.sh')
13 annexes = $(shell find contents -type f -not -name '*.sh')
14
15 #########################
16 # Construction des cibles
17 #########################
18
19 # On construit les chemins des fichiers à produire correspondant
20 # aux fichiers listés dans sources et annexes
21 # On appelle les chemins créés ainsi des "cibles"
22 # On le fait à l'aide de la fonction patsubst invoquée via la
23 # syntaxe des "substitution references" (voir
24 # https://www.gnu.org/software/make/manual/html_node/Text-Functions.html#index-patsubst-1)
25 # Ex: Pour pageshtml on prend tous les chemins de fichiers récupérés dans sources puis
26 # contents/ devient public/ et .sh devient .html
27 # Le fichier source "contents/truc/bidule.sh" donnera donc la page html
28 # "public/truc/bidule.html"
29 # Même mécanique pour les fichiers annexes
30 pageshtml = $(patsubst contents/%.sh, public/%.html, $(sources))
31 annexescibles = $(patsubst contents/%, public/%, $(annexes))
32
33 ########
34 # Règles
35 ########
36
37 # Syntaxe générale d'une règle :
38 # cible : liste dépendances ; commandes
39 # ou
40 # cible : liste dépendances
41 # commandes
42
43 # On créer une "fausse" règle (phony en anglais) all pour qu'exécuter make sans
44 # argument construise tout le site.
45 # cette règle se nomme "all" mais elle pourrait s'appeler "toto".
46 all: exec ${pageshtml} ${annexescibles}
47
48 # Une autre "fausse" règle pour nettoyer le dossier public. Faire `make clean`
49 # pour l'appeler.
50 clean:; rm -r public/*
51
52 # Une troisième fausse règle pour rendre exécutable toutes les sources .sh
53 exec:; chmod +x ${sources}
54
55 # Règles pour générer les fichiers
56
57 # Ce que % match dans la cible sera substitué à la place de % dans les
58 # dépendances.
59 # $< = première dépendance
60 # $@ = cible
61
62 # Règle pour la génération des pages html
63 public/%.html : contents/%.sh page layouts/html
64 @mkdir -p $(@D)
65 $< > $@
66
67 # Pour les autres fichiers
68 public/% : contents/%
69 @mkdir -p $(@D)
70 cp $< $@
71
72 # Pour que make sache que all clean et exec sont officiellement de
73 # fausses règles. Lui permet d'ignorer l'existence de fichiers nommés
74 # all clean ou exec s'il en existe.
75 # Voir: https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html
76 .PHONY: all clean exec