chiark / gitweb /
Consolidate `Buffyverse' series into a single master playlist.
[epls] / Makefile
1 ### -*-makefile-*-
2
3 all:
4 clean::; rm -f $(CLEANFILES)
5 force:
6 .PHONY: all clean
7 .SECONDEXPANSION: # not sorry
8
9 V                       ?= 0
10 V_AT                     = $(V_AT_$V)
11 V_AT_0                   = @
12 v-print                  = $(call v-print.$V,$1,$2)
13 v-print.1                = :
14 v-print.0                = printf "  %-8s %s\n" "$1" "$2"
15 v-tag                    = $(call v-tag.$V,$1)
16 v-tag.0                  = @$(call v-print.0,$1,$@);
17
18 TARGETS                  =
19 CLEANFILES              += $(TARGETS)
20
21 define %declare-playlist
22 PLAYLISTS               += $1
23 $1_FULLNAME              = $2
24 endef
25
26 define %declare-simple-playlist
27 $1_EPLS                  = $1.epls
28 $1_MKM3UFLAGS            =
29 endef
30
31 define %declare-chapter-playlist
32 $1_EPLS                  = $2.epls
33 $1_MKM3UFLAGS            = -c
34 endef
35
36 define %declare-filter-playlist
37 $1_EPLS                  = $2.epls
38 $1_MKM3UFLAGS            = -s$3
39 endef
40
41 declare-playlist         = \
42         $(eval $(call %declare-playlist,$1,$2)) \
43         $(eval $(call %declare-simple-playlist,$1))
44 declare-chapters-only    = \
45         $(eval $(call %declare-playlist,$1,$2)) \
46         $(eval $(call %declare-chapter-playlist,$1,$1))
47 declare-chapters         = \
48         $(eval $(call %declare-playlist,$1,$2)) \
49         $(eval $(call %declare-simple-playlist,$1)) \
50         $(eval $(call %declare-playlist,$1-chap,$2 (chapters))) \
51         $(eval $(call %declare-chapter-playlist,$1-chap,$1))
52 declare-filter           = \
53         $(eval $(call %declare-playlist,$1,$4)) \
54         $(eval $(call %declare-filter-playlist,$1,$2,$3))
55
56 ARCHIVEROOT              = ../archive
57
58 $(call declare-playlist, 24, \#/24)
59 $(call declare-playlist, agent-carter, A/Agent Carter)
60 #$(call declare-playlist, agents-of-shield, A/Agents of SHIELD)
61 #$(call declare-playlist, andromeda, A/Andromeda)
62 #$(call declare-playlist, arrow, A/Arrow)
63 #$(call declare-playlist, arrowverse, A/Arrowverse)
64 #$(call declare-playlist, a-team, A/The A-Team)
65 #$(call declare-playlist, the-americans, A/The Americans)
66 $(call declare-playlist, allo-allo, A/'Allo 'Allo!)
67 $(call declare-playlist, babylon-5, B/Babylon 5)
68 #$(call declare-playlist, batman-1966, B/Batman (1966 series))
69 $(call declare-playlist, bsg-1978, B/Battlestar Galactica (1978))
70 #$(call declare-playlist, bsg-1980, B/Battlestar Galactica 1980)
71 #$(call declare-playlist, bsg-2003, B/Battlestar Galactica (2003))
72 #$(call declare-playlist, batwoman, B/Batwoman)
73 $(call declare-playlist, between-the-lines, B/Between the Lines)
74 $(call declare-playlist, blackadder, B/Blackadder)
75 $(call declare-playlist, blakes-7, B/Blake's 7) #'
76 $(call declare-playlist, brass-eye, B/Brass Eye)
77 $(call declare-playlist, the-bridge, B/The Bridge)
78 $(call declare-playlist, buffyverse, B/Buffyverse)
79 $(call declare-filter, btvs, buffyverse,b, B/Buffy the Vampire Slayer)
80 $(call declare-filter, angel, buffyverse,a, A/Angel)
81 #$(call declare-playlist, caprica, C/Caprica)
82 #$(call declare-playlist, constantine, C/Constantine)
83 #$(call declare-playlist, cracker, C/Cracker)
84 #$(call declare-playlist, crow-stairway, C/The Crow—Stairway to Heaven)
85 #$(call declare-playlist, danger-mouse, D/Danger Mouse)
86 #$(call declare-playlist, dark-angel, D/Dark Angel)
87 #$(call declare-playlist, the-day-today, D/The Day Today)
88 #$(call declare-playlist, dexter, D/Dexter)
89 $(call declare-playlist, dollhouse, D/Dollhouse)
90 #$(call declare-playlist, engrenages, E/Engrenages)
91 $(call declare-playlist, equalizer, E/The Equalizer (1985))
92 $(call declare-playlist, fawlty-towers, F/Fawlty Towers)
93 $(call declare-playlist, firefly, F/Firefly)
94 #$(call declare-playlist, the-flash, F/The Flash)
95 $(call declare-chapters, fry-and-laurie, F/A Bit of Fry and Laurie)
96 $(call declare-playlist, game-of-thrones, G/Game of Thrones)
97 #$(call declare-playlist, godfather-ii, G/The Godfather Trilogy/02. Part II)
98 #$(call declare-playlist, gotham, G/Gotham)
99 #$(call declare-playlist, hannibal, H/Hannibal)
100 #$(call declare-playlist, hhgttg, H/The Hitchhiker's Guide to the Galaxy) #'
101 $(call declare-playlist, sherlock-holmes, H/Sherlock Holmes (1984))
102 #$(call declare-playlist, house-of-cards, H/House of Cards)
103 #$(call declare-playlist, into-the-labyrinth, I/Into the Labyrinth)
104 #$(call declare-playlist, it-2017, I/It (2017))
105 #$(call declare-playlist, snyder-justice, J/Justice League (Snyder cut))
106 #$(call declare-playlist, kill-bill, K/Kill Bill)
107 #$(call declare-playlist, the-killing, K/The Killing)
108 #$(call declare-playlist, kingdom-of-heaven, K/Kingdom of Heaven (Definitive Edition))
109 #$(call declare-playlist, knight-rider, K/Knight Rider)
110 #$(call declare-playlist, legends-of-tomrrow, L/Legends of Tomorrow)
111 #$(call declare-playlist, lexx, L/Lexx)
112 #$(call declare-playlist, lois-and-clark, L/Lois and Clark—The New Adventures of Superman)
113 $(call declare-playlist, morse, M/Inspector Morse)
114 $(call declare-playlist, macgyver, M/MacGyver)
115 #$(call declare-playlist, metallica-s-and-m, M/Metallica—S&M)
116 #$(call declare-playlist, the-night-manager, N/The Night Manager)
117 #$(call declare-playlist, person-of-interest, P/Person of Interest)
118 #$(call declare-playlist, harry-potter, P/Harry Potter)
119 $(call declare-chapters, flying-circus, P/Monty Python's Flying Circus) #'
120 $(call declare-playlist, robin-of-sherwood, R/Robin of Sherwood)
121 $(call declare-playlist, rome, R/Rome)
122 #$(call declare-playlist, sanctuary, S/Sanctuary)
123 $(call declare-playlist, shark, S/Shark)
124 #$(call declare-playlist, the-shield, S/The Shield)
125 #$(call declare-playlist, smallville, S/Smallville)
126 #$(call declare-playlist, george-smiley, S/George Smiley)
127 $(call declare-playlist, spartacus, S/Spartacus)
128 #$(call declare-playlist, spooks, S/Spooks)
129 #$(call declare-playlist, star-wars, S/Star Wars)
130 $(call declare-playlist, stargate, S/Stargate)
131 $(call declare-filter, stargate-sg1, stargate,sg1, S/Stargate SG-1)
132 $(call declare-filter, stargate-atlantis, stargate,sga, S/Stargate Atlantis)
133 $(call declare-filter, stargate-universe, stargate,sgu, S/Stargate Universe)
134 #$(call declare-playlist, state-of-play, S/State of Play)
135 #$(call declare-playlist, supergirl, S/Supergirl)
136 $(call declare-playlist, terminator-scc, T/Terminator—The Sarah Connor Chronicles)
137 #$(call declare-playlist, traffik, T/Traffik)
138 #$(call declare-playlist, the-tripods, T/The Tripods)
139 #$(call declare-playlist, tru-calling, T/Tru Calling)
140 #$(call declare-playlist, ultraviolet, U/Ultraviolet)
141 #$(call declare-playlist, v-1983, V/V (1983))
142 $(call declare-playlist, v-2009, V/V (2009))
143 $(call declare-playlist, the-wire, W/The Wire)
144 $(call declare-playlist, waking-the-dead, W/Waking the Dead)
145 #$(call declare-playlist, wonder-woman-1975, W/Wonder Woman (1975))
146 #$(call declare-playlist, yes-minister, Y/Yes Minister)
147 #$(call declare-playlist, the-young-ones, Y/The Young Ones)
148
149 $(call declare-playlist, drwho-marco-polo, D/Doctor Who/S01E04 D. Marco Polo)
150 $(call declare-playlist, drwho-crusade, D/Doctor Who/S02E06 P. The Crusade)
151 $(call declare-playlist, drwho-masterplan, D/Doctor Who/S03E04 V. The Daleks' Master Plan) #'
152 $(call declare-playlist, drwho-massacre, D/Doctor Who/S03E05 W. The Massacre of St Bartholomew's Eve) #'
153 $(call declare-playlist, drwho-toymaker, D/Doctor Who/S03E07 Y. The Celestial Toymaker)
154 $(call declare-playlist, drwho-savages, D/Doctor Who/S03E09 AA. The Savages)
155 $(call declare-playlist, drwho-smugglers, D/Doctor Who/S04E01 CC. The Smugglers)
156 $(call declare-playlist, drwho-highlanders, D/Doctor Who/S04E04 FF. The Highlanders)
157 $(call declare-playlist, drwho-snowmen, D/Doctor Who/S05E02 NN. The Abominable Snowmen)
158 $(call declare-playlist, drwho-wheel, D/Doctor Who/S05E07 SS. The Wheel in Space)
159 $(call declare-playlist, drwho-invasion, D/Doctor Who/S06E03 VV. The Invasion)
160 $(call declare-playlist, drwho-pirates, D/Doctor Who/S06E06 YY. The Space Pirates)
161 $(call declare-playlist, drwho-war-games, D/Doctor Who/S06E07 ZZ. The War Games)
162 $(call declare-playlist, drwho-silurians, D/Doctor Who/S07E02 BBB. Doctor Who and the Silurians)
163
164 M3US                     = $(addsuffix .m3u8,$(PLAYLISTS))
165 TARGETS                 += $(M3US)
166
167 $(M3US): %.m3u8: $$($$*_EPLS) mkm3u
168         $(call v-tag,MKM3U)./mkm3u $($*_MKM3UFLAGS) "$<" >"$@.new" && mv "$@.new" "$@"
169
170 CHECKS                   = $(foreach p,$(PLAYLISTS), check/$p)
171 check: $(CHECKS)
172 $(CHECKS): check/%: %.m3u8
173         $(V_AT)diff -u $< ref/$*.m3u8
174 .PHONY: check $(CHECKS)
175
176 LINKS                    = $(foreach p,$(PLAYLISTS), link/$p)
177 link: $(LINKS)
178 $(LINKS): link/%:
179         $(V_AT) \
180                 ok=nil t="$(ARCHIVEROOT)/$($*_FULLNAME).m3u8"; \
181                 if [ -L "$$t" ]; then \
182                   case $$(realpath "$$t") in \
183                     "$(abspath $*.m3u8)") ok=t ;; \
184                   esac; \
185                 fi; \
186                 case $$ok in \
187                   t) ;; \
188                   *) $(call v-print,LINK,$*); \
189                         ln -frs $*.m3u8 "$$t.new" && mv "$$t.new" "$$t" ;; \
190                 esac
191 .PHONY: link $(LINKS)
192
193 SAVE                     = $(foreach p,$(PLAYLISTS), save/$p)
194 FORCE_SAVE               = $(foreach p,$(PLAYLISTS), force-save/$p)
195 save: $(SAVE)
196 force-save: $(FORCE_SAVE)
197 $(SAVE): save/%: %.m3u8
198         $(V_AT) \
199                 ok=nil; \
200                 if ! [ -f "ref/$*.m3u8" ]; then \
201                   $(call v-print,SAVE,$*); \
202                   cp $< ref/$*.m3u8.new && mv ref/$*.m3u8.new ref/$*.m3u8; \
203                 fi
204 .PHONY: save $(SAVE)
205 $(FORCE_SAVE): force-save/%: %.m3u8
206         $(V_AT) \
207                 ok=nil; \
208                 if ! [ -f "ref/$*.m3u8" ] || ! cmp -s $< ref/$*.m3u8; then \
209                   $(call v-print,SAVE,$*); \
210                   cp $< ref/$*.m3u8.new && mv ref/$*.m3u8.new ref/$*.m3u8; \
211                 fi
212 .PHONY: save $(SAVE)
213
214 all: $(TARGETS)
215
216 p:; : $p