From 51dbf068a647a6bf50fd21af1a10feaf1dc9288f Mon Sep 17 00:00:00 2001 From: "matthias@arch" Date: Wed, 22 Nov 2023 12:50:35 +0100 Subject: [PATCH] add thumbnail build support --- Makefile | 45 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index dc0446f..f3ea96c 100644 --- a/Makefile +++ b/Makefile @@ -30,11 +30,13 @@ OUT_DIR = build SRC_DIRS = de en script style SRC_FLS = -# SOURCE FILES: +# RESOURCE FILES: # all RESOURCE_FLS and all files in the RESOURCE_DIRS will be copied to OUT_DIR RESOURCE_DIRS = resources RESOURCE_FLS = - +# THUMBNAILS: +# if set, thumbnails for all resource files will be generated and placed in THUMB_OUT_DIR (relative to OUT_DIR) +THUMB_OUT_DIR = thumbs # MULTI-LANG SOURCE FILES: # the files in COMMON_DIR will be built for all LANGS: @@ -103,6 +105,15 @@ ML_OUT_DIRS = $(foreach lang, $(LANGS), $(patsubst $(_COMMON_DIR)/%, $(ML_OUT_D ML_OUT_FLS = $(foreach lang, $(LANGS), $(patsubst $(_COMMON_DIR)/%, $(ML_OUT_DIR)/$(lang)/%, $(_ML_SRC_FLS))) endif +ifdef THUMB_OUT_DIR +_THUMB_FOR_TYPES = png gif jpg jpeg webp pdf +_THUMB_TYPE = jpg +# files for which to generate thumbnails +_THUMB_FLS = $(filter $(foreach type, $(_THUMB_FOR_TYPES), %.$(type)), $(_RES_FLS)) +THUMB_OUT_FLS = $(addsuffix .jpg, $(basename $(patsubst $(PROJECT_DIR)/%, $(OUT_DIR)/$(THUMB_OUT_DIR)/%, $(_THUMB_FLS)))) +THUMB_OUT_DIRS = $(sort $(dir $(THUMB_OUT_FLS))) # sort for removing duplicates +endif + # needed for creating them _DEP_DIRS = $(sort $(patsubst $(OUT_DIR)/%, $(DEP_DIR)/%, $(OUT_DIRS) $(ML_OUT_DIRS))) # needed for reading @@ -112,7 +123,8 @@ _DEP_FLS = $(shell find $(DEP_DIR) -type f -name '*.d' 2>/dev/null) FMT_VAR_SRC ="Variable '\e[1;34m%s\e[0m': \e[0;33m%s\e[0m\n" FMT_VAR_OUT ="Variable '\e[1;34m%s\e[0m': \e[0;35m%s\e[0m\n" FMT_DIR ="\e[1;34mMaking directory\e[0m: \e[0;35m%s\e[0m\n" -FMT_OUT_HTML ="\e[1;34mBuilding html\e[0m \e[1;33m%s\e[0m at \e[1;35m%s\e[0m\n" +FMT_OUT_HTML ="\e[1;34mBuilding html\e[0m: \e[1;33m%s\e[0m at \e[1;35m%s\e[0m\n" +FMT_OUT_THUMB ="\e[1;34mBuilding thumbnail\e[0m: \e[1;33m%s\e[0m at \e[1;35m%s\e[0m\n" FMT_OUT_OTHER ="\e[1;34mBuilding\e[0m: \e[1;33m%s\e[0m at \e[1;35m%s\e[0m\n" FMT_OUT_ML_HTML="\e[1;34mBuilding html\e[0m in lang \e[1;34m%s\e[0m: \e[1;33m%s\e[0m at \e[1;35m%s\e[0m\n" @@ -127,10 +139,11 @@ FMT_OUT_ML_OTHER="\e[1;34mBuilding\e[0m in lang \e[1;34m%s\e[0m: \e[1;33m%s\e[0m # include all the dependency makefiles include $(_DEP_FLS) -all: normal multilang resources +all: normal multilang resources thumbnails normal: $(OUT_FLS) multilang: $(ML_OUT_FLS) resources: $(RES_OUT_FLS) +thumbnails: $(THUMB_OUT_FLS) print: @printf $(FMT_VAR_SRC) "PROJECT_DIR" "$(PROJECT_DIR)" @@ -145,10 +158,16 @@ ifdef COMMON_DIR @printf $(FMT_VAR_OUT) "ML_OUT_FLS" "$(ML_OUT_FLS)" endif @printf $(FMT_VAR_SRC) "_DEP_FLS" "$(_DEP_FLS)" +ifdef THUMB_OUT_DIR + @printf $(FMT_VAR_SRC) "THUMB_OUT_DIR" "$(THUMB_OUT_DIR)" + @printf $(FMT_VAR_OUT) "_THUMB_FLS" "$(_THUMB_FLS)" + @printf $(FMT_VAR_OUT) "THUMB_OUT_FLS" "$(THUMB_OUT_FLS)" + @printf $(FMT_VAR_OUT) "THUMB_OUT_DIRS" "$(THUMB_OUT_DIRS)" +endif @# @printf $(FMT_VAR_SRC) "y" "$(y)" # DIRECTORIES -$(sort $(ML_OUT_DIRS) $(_DEP_DIRS) $(RES_OUT_DIRS) $(OUT_DIRS)): +$(sort $(ML_OUT_DIRS) $(_DEP_DIRS) $(RES_OUT_DIRS) $(OUT_DIRS) $(THUMB_OUT_DIRS)): @printf $(FMT_DIR) "$@" @mkdir -p $@ @@ -171,6 +190,22 @@ $(foreach out_dir, $(ML_OUT_LANG_DIRS), $(out_dir)/%): $(_COMMON_DIR)/% | $(ML_O cp $< $@ endif +# THUMBNAILS +$(OUT_DIR)/$(THUMB_OUT_DIR)/%.jpg: | $(THUMB_OUT_DIRS) + @fulltarget="$@"; \ + target="$(patsubst $(OUT_DIR)/$(THUMB_OUT_DIR)/%.jpg,%,$@)"; \ + sources=($(_THUMB_FLS)); \ + source=$$(printf "%s\n" $${sources[@]} | grep "$$target"'\.'); \ + printf $(FMT_OUT_THUMB) "$$source" "$$fulltarget"; \ + if [ "$${source##*.}" = "pdf" ]; then \ + pdftoppm -f 1 -singlefile -jpeg -r 50 "$$source" "$${fulltarget%.*}"; \ + else \ + magick "$$source" -thumbnail '100x100>' "$@"; \ + fi; \ + + + + # # (NORMAL/RE-)SOURCE RULES #