catium

Un générateur de site statique - retour accueil

git clone git://bebou.netlib.re/catium

Log | Files | Refs | README |

makefile (2754B)


      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 $(shell dirname $@)
     65 	$< > $@
     66 
     67 # Pour les autres fichiers
     68 public/%      : contents/%
     69 	@mkdir -p $(shell dirname $@)
     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