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