### -*-makefile-*- all: clean::; rm -f $(CLEANFILES) force: .PHONY: all clean V ?= 0 V_AT = $(V_AT_$V) V_AT_0 = @ v-print = $(call v-print.$V,$1,$2) v-print.1 = : v-print.0 = printf " %-8s %s\n" "$1" "$2" v-tag = $(call v-tag.$V,$1) v-tag.0 = @$(call v-print.0,$1,$@); TARGETS = CLEANFILES += $(TARGETS) TARGETS += $(addsuffix .m3u8,$(PLAYLISTS)) define %declare-playlist PLAYLISTS += $1 $1_INITIAL = $2 $1_FULLNAME = $3 endef declare-playlist = $(eval $(call %declare-playlist,$1,$2,$3)) ARCHIVEROOT = ../archive $(call declare-playlist, 24, \#,24) $(call declare-playlist, agent-carter, A,Agent Carter) #$(call declare-playlist, agents-of-shield, A,Agents of SHIELD) #$(call declare-playlist, andromeda, A,Andromeda) #$(call declare-playlist, arrow, A,Arrow) #$(call declare-playlist, arrowverse, A,Arrowverse) #$(call declare-playlist, a-team, A,The A-Team) #$(call declare-playlist, the-americans, A,The Americans) $(call declare-playlist, allo-allo, A,'Allo 'Allo!) $(call declare-playlist, angel, A,Angel) $(call declare-playlist, babylon-5, B,Babylon 5) #$(call declare-playlist, batman-1966, B,Batman (1966 series)) $(call declare-playlist, bsg-1978, B,Battlestar Galactica (1978)) #$(call declare-playlist, bsg-1980, B,Battlestar Galactica 1980) #$(call declare-playlist, bsg-2003, B,Battlestar Galactica (2003)) #$(call declare-playlist, batwoman, B,Batwoman) $(call declare-playlist, between-the-lines, B,Between the Lines) #$(call declare-playlist, blackadder, B,Blackadder) $(call declare-playlist, blakes-7, B,Blake's 7) #' $(call declare-playlist, brass-eye, B,Brass Eye) $(call declare-playlist, the-bridge, B,The Bridge) $(call declare-playlist, btvs, B,Buffy the Vampire Slayer) #$(call declare-playlist, caprica, C,Caprica) #$(call declare-playlist, constantine, C,Constantine) #$(call declare-playlist, cracker, C,Cracker) #$(call declare-playlist, crow-stairway, C,The Crow—Stairway to Heaven) #$(call declare-playlist, danger-mouse, D,Danger Mouse) #$(call declare-playlist, dark-angel, D,Dark Angel) #$(call declare-playlist, the-day-today, D,The Day Today) #$(call declare-playlist, dexter, D,Dexter) $(call declare-playlist, dollhouse, D,Dollhouse) #$(call declare-playlist, engrenages, E,Engrenages) #$(call declare-playlist, equalizer, E,The Equalizer (1985)) $(call declare-playlist, fawlty-towers, F,Fawlty Towers) $(call declare-playlist, firefly, F,Firefly) #$(call declare-playlist, the-flash, F,The Flash) $(call declare-playlist, fry-and-laurie, F,A Bit of Fry and Laurie) $(call declare-playlist, game-of-thrones, G,Game of Thrones) #$(call declare-playlist, godfather-ii, G/The Godfather Trilogy,02. Part II) #$(call declare-playlist, gotham, G,Gotham) #$(call declare-playlist, hannibal, H,Hannibal) #$(call declare-playlist, hhgttg, H,The Hitchhiker's Guide to the Galaxy) #' $(call declare-playlist, sherlock-holmes, H,Sherlock Holmes (1984)) #$(call declare-playlist, house-of-cards, H,House of Cards) #$(call declare-playlist, into-the-labyrinth, I,Into the Labyrinth) #$(call declare-playlist, it-2017, I,It (2017)) #$(call declare-playlist, snyder-justice, J,Justice League (Snyder cut)) #$(call declare-playlist, kill-bill, K,Kill Bill) #$(call declare-playlist, the-killing, K,The Killing) #$(call declare-playlist, kingdom-of-heaven, K,Kingdom of Heaven (Definitive Edition)) #$(call declare-playlist, knight-rider, K,Knight Rider) #$(call declare-playlist, legends-of-tomrrow, L,Legends of Tomorrow) #$(call declare-playlist, lexx, L,Lexx) #$(call declare-playlist, lois-and-clark, L,Lois and Clark—The New Adventures of Superman) $(call declare-playlist, morse, M,Inspector Morse) $(call declare-playlist, macgyver, M,MacGyver) #$(call declare-playlist, metallica-s-and-m, M,Metallica—S&M) #$(call declare-playlist, the-night-manager, N,The Night Manager) #$(call declare-playlist, person-of-interest, P,Person of Interest) #$(call declare-playlist, harry-potter, P,Harry Potter) $(call declare-playlist, flying-circus, P,Monty Python's Flying Circus) #' $(call declare-playlist, robin-of-sherwood, R,Robin of Sherwood) $(call declare-playlist, rome, R,Rome) #$(call declare-playlist, sanctuary, S,Sanctuary) $(call declare-playlist, shark, S,Shark) #$(call declare-playlist, the-shield, S,The Shield) #$(call declare-playlist, smallville, S,Smallville) #$(call declare-playlist, george-smiley, S,George Smiley) $(call declare-playlist, spartacus, S,Spartacus) #$(call declare-playlist, spooks, S,Spooks) #$(call declare-playlist, star-wars, S,Star Wars) $(call declare-playlist, stargate-sg1, S,Stargate SG-1) #$(call declare-playlist, stargate-atlantis, S,Stargate Atlantis) #$(call declare-playlist, stargate-universe, S,Stargate Universe) #$(call declare-playlist, state-of-play, S,State of Play) #$(call declare-playlist, supergirl, S,Supergirl) $(call declare-playlist, terminator-scc, T,Terminator—The Sarah Connor Chronicles) #$(call declare-playlist, traffik, T,Traffik) #$(call declare-playlist, the-tripods, T,The Tripods) #$(call declare-playlist, tru-calling, T,Tru Calling) #$(call declare-playlist, ultraviolet, U,Ultraviolet) #$(call declare-playlist, v-1983, V,V (1983)) $(call declare-playlist, v-2009, V,V (2009)) $(call declare-playlist, the-wire, W,The Wire) $(call declare-playlist, waking-the-dead, W,Waking the Dead) #$(call declare-playlist, wonder-woman-1975, W,Wonder Woman (1975)) #$(call declare-playlist, yes-minister, Y,Yes Minister) #$(call declare-playlist, the-young-ones, Y,The Young Ones) $(call declare-playlist, drwho-marco-polo, D/Doctor Who,S01E04 D. Marco Polo) $(call declare-playlist, drwho-crusade, D/Doctor Who,S02E06 P. The Crusade) $(call declare-playlist, drwho-masterplan, D/Doctor Who,S03E04 V. The Daleks' Master Plan) #' $(call declare-playlist, drwho-massacre, D/Doctor Who,S03E05 W. The Massacre of St Bartholomew's Eve) #' $(call declare-playlist, drwho-toymaker, D/Doctor Who,S03E07 Y. The Celestial Toymaker) $(call declare-playlist, drwho-savages, D/Doctor Who,S03E09 AA. The Savages) $(call declare-playlist, drwho-smugglers, D/Doctor Who,S04E01 CC. The Smugglers) $(call declare-playlist, drwho-highlanders, D/Doctor Who,S04E04 FF. The Highlanders) $(call declare-playlist, drwho-snowmen, D/Doctor Who,S05E02 NN. The Abominable Snowmen) $(call declare-playlist, drwho-wheel, D/Doctor Who,S05E07 SS. The Wheel in Space) $(call declare-playlist, drwho-invasion, D/Doctor Who,S06E03 VV. The Invasion) $(call declare-playlist, drwho-pirates, D/Doctor Who,S06E06 YY. The Space Pirates) $(call declare-playlist, drwho-war-games, D/Doctor Who,S06E07 ZZ. The War Games) $(call declare-playlist, drwho-silurians, D/Doctor Who,S07E02 BBB. Doctor Who and the Silurians) all: $(TARGETS) %.m3u8: %.epls mkm3u $(call v-tag,MKM3U)./mkm3u "$<" >"$@.new" && mv "$@.new" "$@" CHECKS = $(foreach p,$(PLAYLISTS), check/$p) check: $(CHECKS) $(CHECKS): check/%: %.m3u8 $(V_AT)diff -u $< ref/$*.m3u8 .PHONY: check $(CHECKS) LINKS = $(foreach p,$(PLAYLISTS), link/$p) link: $(LINKS) $(LINKS): link/%: $(V_AT) \ ok=nil t="$(ARCHIVEROOT)/$($*_INITIAL)/$($*_FULLNAME).m3u8"; \ if [ -L "$$t" ]; then \ case $$(realpath "$$t") in \ "$(abspath $*.m3u8)") ok=t ;; \ esac; \ fi; \ case $$ok in \ t) ;; \ *) $(call v-print,LINK,$*); \ ln -frs $*.m3u8 "$$t.new" && mv "$$t.new" "$$t" ;; \ esac .PHONY: link $(LINKS) SAVE = $(foreach p,$(PLAYLISTS), save/$p) FORCE_SAVE = $(foreach p,$(PLAYLISTS), force-save/$p) save: $(SAVE) force-save: $(FORCE_SAVE) $(SAVE): save/%: %.m3u8 $(V_AT) \ ok=nil; \ if ! [ -f "ref/$*.m3u8" ]; then \ $(call v-print,SAVE,$*); \ cp $< ref/$*.m3u8.new && mv ref/$*.m3u8.new ref/$*.m3u8; \ fi .PHONY: save $(SAVE) $(FORCE_SAVE): force-save/%: %.m3u8 $(V_AT) \ ok=nil; \ if ! [ -f "ref/$*.m3u8" ] || ! cmp -s $< ref/$*.m3u8; then \ $(call v-print,SAVE,$*); \ cp $< ref/$*.m3u8.new && mv ref/$*.m3u8.new ref/$*.m3u8; \ fi .PHONY: save $(SAVE)