Un générateur de site statique - retour accueil
git clone git://bebou.netlib.re/catium
Log | Files | Refs | README |
makefile (2930B)
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 != find contents -type f -name '*.sh' 13 annexes != 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 = ${sources:contents/%.sh=public/%.html} 31 annexescibles = ${annexes:contents/%=public/%} 32 # Les "substitution references" semblent ne pas fonctionner avec gmake <3.8 33 # ce qui force les personnes sur macos à installer une version plus récente 34 # de gmake 35 # Il faudrait tester l'appel direct à patsubst 36 # TODO 37 38 ######## 39 # Règles 40 ######## 41 42 # Syntaxe générale d'une règle : 43 # cible : liste dépendances ; commandes 44 # ou 45 # cible : liste dépendances 46 # commandes 47 48 # On créer une "fausse" règle (phony en anglais) all pour qu'exécuter make sans 49 # argument construise tout le site. 50 # cette règle se nomme "all" mais elle pourrait s'appeler "toto". 51 all: exec ${pageshtml} ${annexescibles} 52 53 # Une autre "fausse" règle pour nettoyer le dossier public. Faire `make clean` 54 # pour l'appeler. 55 clean:; rm -r public/* 56 57 # Une troisième fausse règle pour rendre exécutable toutes les sources .sh 58 exec:; chmod +x ${sources} 59 60 # Règles pour générer les fichiers 61 62 # Ce que % match dans la cible sera substitué à la place de % dans les 63 # dépendances. 64 # $< = première dépendance 65 # $@ = cible 66 67 # Règle pour la génération des pages html 68 public/%.html : contents/%.sh page layouts/html 69 @mkdir -p $(shell dirname $@) 70 $< > $@ 71 72 # Pour les autres fichiers 73 public/% : contents/% 74 @mkdir -p $(shell dirname $@) 75 cp $< $@ 76 77 # Pour que make sache que all clean et exec sont officiellement de 78 # fausses règles. Lui permet d'ignorer l'existence de fichiers nommés 79 # all clean ou exec s'il en existe. 80 # Voir: https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html 81 .PHONY: all clean exec