catium

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