4 clean::; rm -f
$(CLEANFILES
)
5 realclean::; rm -f
$(REALCLEANFILES
)
7 .PHONY
: all clean force
8 .SECONDEXPANSION
: # not sorry
14 v-print
= $(call v-print.
$V,$1,$2)
16 v-print
.0 = printf
" %-8s %s\n" "$1" "$2"
17 v-tag
= $(call v-tag.
$V,$1)
18 v-tag
.0 = @
$(call v-print
.0,$1,$@
);
21 CLEANFILES
+= $(TARGETS
)
22 REALCLEANFILES
+= $(CLEANFILES
)
24 MKM3UFLAGS
= -dmkm3u.cache
25 REALCLEANFILES
+= mkm3u.cache
27 define %declare-playlist
32 define %declare-simple-playlist
37 define %declare-chapter-playlist
42 define %declare-filter-playlist
48 $(eval
$(call
%declare-playlist
,$1,$2)) \
49 $(eval
$(call
%declare-simple-playlist
,$1))
50 declare-chapters-only
= \
51 $(eval
$(call
%declare-playlist
,$1,$2)) \
52 $(eval
$(call
%declare-chapter-playlist
,$1,$1))
54 $(eval
$(call
%declare-playlist
,$1,$2)) \
55 $(eval
$(call
%declare-simple-playlist
,$1)) \
56 $(eval
$(call
%declare-playlist
,$1-chap
,$2 (chapters
))) \
57 $(eval
$(call
%declare-chapter-playlist
,$1-chap
,$1))
59 $(eval
$(call
%declare-playlist
,$1,$4)) \
60 $(eval
$(call
%declare-filter-playlist
,$1,$2,$3))
62 ARCHIVEROOT
= ..
/archive
64 $(call declare-playlist
, 24, \
#/24)
65 $(call declare-playlist
, agent-carter
, A
/Agent Carter
)
66 $(call declare-playlist
, agents-of-shield
, A
/Agents of SHIELD
)
67 $(call declare-playlist
, andromeda
, A
/Andromeda
)
68 $(call declare-playlist
, arrowverse
, A
/Arrowverse
)
69 $(call declare-filter
, arrow
, arrowverse
,arr
, A
/Arrow
)
70 $(call declare-filter
, the-flash
, arrowverse
,fls
, F
/The Flash
)
71 $(call declare-filter
, constantine
, arrowverse
,cns
, C
/Constantine
)
72 $(call declare-filter
, supergirl
, arrowverse
,spg
, S
/Supergirl
)
73 $(call declare-filter
, legends-of-tomorrow
, arrowverse
,lot
, L
/Legends of Tomorrow
)
74 $(call declare-filter
, batwoman
, arrowverse
,bwm
, B
/Batwoman
)
75 $(call declare-filter
, black-lightning
, arrowverse
,blt
, B
/Black Lightning
)
76 $(call declare-filter
, stargirl
, arrowverse
,stg
, S
/Stargirl
)
77 $(call declare-filter
, superman-and-lois
, arrowverse
,sal
, S
/Superman
& Lois
)
78 $(call declare-playlist
, a-team
, A
/The A-Team
)
79 $(call declare-playlist
, the-americans
, A
/The Americans
)
80 $(call declare-playlist
, allo-allo
, A
/'Allo 'Allo
!)
81 $(call declare-playlist
, babylon-5
, B
/Babylon
5)
82 $(call declare-playlist
, batman-1966
, B
/Batman
(1966))
83 $(call declare-playlist
, bsg-1978
, B
/Battlestar Galactica
(1978))
84 $(call declare-playlist
, bsg-1980
, B
/Battlestar Galactica
1980)
85 $(call declare-playlist
, bsg-2003
, B
/Battlestar Galactica
(2003))
86 $(call declare-playlist
, between-the-lines
, B
/Between the Lines
)
87 $(call declare-playlist
, blackadder
, B
/Blackadder
)
88 $(call declare-playlist
, blakes-7
, B
/Blake
's 7) #'
89 $(call declare-playlist
, brass-eye
, B
/Brass Eye
)
90 $(call declare-playlist
, the-bridge
, B
/The Bridge
)
91 $(call declare-playlist
, buffyverse
, B
/Buffyverse
)
92 $(call declare-filter
, btvs
, buffyverse
,b
, B
/Buffy the Vampire Slayer
)
93 $(call declare-filter
, angel
, buffyverse
,a
, A
/Angel
)
94 $(call declare-playlist
, caprica
, C
/Caprica
)
95 $(call declare-playlist
, cracker
, C
/Cracker
)
96 $(call declare-playlist
, crow-stairway
, C
/The Crow—Stairway to Heaven
)
97 $(call declare-playlist
, danger-mouse
, D
/Danger Mouse
)
98 $(call declare-playlist
, dark-angel
, D
/Dark Angel
)
99 $(call declare-playlist
, the-day-today
, D
/The Day Today
)
100 $(call declare-playlist
, dexter
, D
/Dexter
)
101 $(call declare-playlist
, drwho
, D
/Doctor Who
)
102 $(call declare-filter
, drwho-marco-polo
, drwho
,marco-polo
, D
/Doctor Who
/S01E04 D. Marco Polo
)
103 $(call declare-filter
, drwho-crusade
, drwho
,crusade
, D
/Doctor Who
/S02E06 P. The Crusade
)
104 $(call declare-filter
, drwho-myth-makers
, drwho
,myth-makers
, D
/Doctor Who
/S03E03 U. The Myth Makers
)
105 $(call declare-filter
, drwho-masterplan
, drwho
,masterplan
, D
/Doctor Who
/S03E04 V. The Daleks
' Master Plan) #'
106 $(call declare-filter
, drwho-massacre
, drwho
,massacre
, D
/Doctor Who
/S03E05 W. The Massacre of St Bartholomew
's Eve) #'
107 $(call declare-filter
, drwho-toymaker
, drwho
,toymaker
, D
/Doctor Who
/S03E07 Y. The Celestial Toymaker
)
108 $(call declare-filter
, drwho-savages
, drwho
,savages
, D
/Doctor Who
/S03E09 AA. The Savages
)
109 $(call declare-filter
, drwho-smugglers
, drwho
,smugglers
, D
/Doctor Who
/S04E01 CC. The Smugglers
)
110 $(call declare-filter
, drwho-highlanders
, drwho
,highlanders
, D
/Doctor Who
/S04E04 FF. The Highlanders
)
111 $(call declare-filter
, drwho-snowmen
, drwho
,snowmen
, D
/Doctor Who
/S05E02 NN. The Abominable Snowmen
)
112 $(call declare-filter
, drwho-wheel
, drwho
,wheel
, D
/Doctor Who
/S05E07 SS. The Wheel in Space
)
113 $(call declare-filter
, drwho-invasion
, drwho
,invasion
, D
/Doctor Who
/S06E03 VV. The Invasion
)
114 $(call declare-filter
, drwho-pirates
, drwho
,pirates
, D
/Doctor Who
/S06E06 YY. The Space Pirates
)
115 $(call declare-filter
, drwho-war-games
, drwho
,war-games
, D
/Doctor Who
/S06E07 ZZ. The War Games
)
116 $(call declare-filter
, drwho-silurians
, drwho
,silurians
, D
/Doctor Who
/S07E02 BBB. Doctor Who and the Silurians
)
117 $(call declare-playlist
, dollhouse
, D
/Dollhouse
)
118 $(call declare-playlist
, dune-2000
, D
/Dune
(2000))
119 $(call declare-playlist
, engrenages
, E
/Engrenages
)
120 $(call declare-playlist
, equalizer
, E
/The Equalizer
(1985))
121 $(call declare-playlist
, fawlty-towers
, F
/Fawlty Towers
)
122 $(call declare-playlist
, firefly
, F
/Firefly
)
123 $(call declare-chapters
, fry-and-laurie
, F
/A Bit of Fry
& Laurie
)
124 $(call declare-playlist
, game-of-thrones
, G
/Game of Thrones
)
125 $(call declare-playlist
, godfather-ii
, G
/The Godfather Trilogy
/02. Part II
)
126 $(call declare-playlist
, gotham
, G
/Gotham
)
127 $(call declare-playlist
, hannibal
, H
/Hannibal
)
128 $(call declare-playlist
, hhgttg
, H
/The Hitchhiker
's Guide to the Galaxy) #'
129 $(call declare-playlist
, sherlock-holmes
, H
/Sherlock Holmes
(1984))
130 $(call declare-playlist
, house-of-cards
, H
/House of Cards
)
131 $(call declare-playlist
, i-claudius
, I
/I Claudius
)
132 $(call declare-playlist
, into-the-labyrinth
, I
/Into the Labyrinth
)
133 $(call declare-playlist
, it-2017
, I
/It
(2017))
134 $(call declare-playlist
, snyder-justice
, J
/Justice League
(Snyder cut
))
135 $(call declare-playlist
, kill-bill
, K
/Kill Bill
)
136 $(call declare-playlist
, the-killing
, K
/The Killing
)
137 $(call declare-playlist
, kingdom-of-heaven
, K
/Kingdom of Heaven
(Definitive Edition
))
138 $(call declare-playlist
, knight-rider
, K
/Knight Rider
)
139 $(call declare-playlist
, lexx
, L
/Lexx
)
140 $(call declare-playlist
, lois-and-clark
, L
/Lois and Clark—The New Adventures of Superman
)
141 $(call declare-playlist
, morse
, M
/Inspector Morse
)
142 $(call declare-playlist
, macgyver
, M
/MacGyver
)
143 $(call declare-chapters
, metallica-s-and-m
, M
/Metallica—S
&M
)
144 $(call declare-playlist
, the-night-manager
, N
/The Night Manager
)
145 $(call declare-playlist
, person-of-interest
, P
/Person of Interest
)
146 $(call declare-playlist
, harry-potter
, P
/Harry Potter
)
147 $(call declare-playlist
, prime-suspect
, P
/Prime Suspect
)
148 $(call declare-playlist
, the-prisoner
, P
/The Prisoner
)
149 $(call declare-playlist
, flying-circus-restored
, P
/Monty Python
's Flying Circus (restored)) #'
150 $(call declare-chapters-only
, flying-circus-sketches
, P
/Monty Python
's Flying Circus (sketches)) #'
151 $(call declare-playlist
, robin-of-sherwood
, R
/Robin of Sherwood
)
152 $(call declare-playlist
, buck-rogers
, R
/Buck Rogers in the
25th Century
)
153 $(call declare-playlist
, rome
, R
/Rome
)
154 $(call declare-playlist
, sanctuary
, S
/Sanctuary
)
155 $(call declare-playlist
, sapphire-and-steel
, S
/Sapphire
& Steel
)
156 $(call declare-playlist
, shark
, S
/Shark
)
157 $(call declare-playlist
, sharpe
, S
/Sharpe
)
158 $(call declare-playlist
, the-shield
, S
/The Shield
)
159 $(call declare-playlist
, smallville
, S
/Smallville
)
160 $(call declare-playlist
, george-smiley
, S
/George Smiley
)
161 $(call declare-playlist
, spartacus
, S
/Spartacus
)
162 $(call declare-playlist
, spooks
, S
/Spooks
)
163 $(call declare-playlist
, star-wars
, S
/Star Wars
)
164 $(call declare-filter
, skywalker-saga
, star-wars
,sws
, S
/Star Wars—The Skywalker Saga
)
165 $(call declare-filter
, starwars-stories
, star-wars
,sty
, S
/Star Wars Stories
)
166 $(call declare-filter
, clone-wars
, star-wars
,tcw
, S
/Star Wars—The Clone Wars
)
167 $(call declare-filter
, rebels
, star-wars
,rbl
, S
/Star Wars—Rebels
)
168 $(call declare-playlist
, stargate
, S
/Stargate
)
169 $(call declare-filter
, stargate-sg1
, stargate
,sg1
, S
/Stargate SG-1
)
170 $(call declare-filter
, stargate-atlantis
, stargate
,sga
, S
/Stargate Atlantis
)
171 $(call declare-filter
, stargate-universe
, stargate
,sgu
, S
/Stargate Universe
)
172 $(call declare-playlist
, state-of-play
, S
/State of Play
)
173 $(call declare-playlist
, terminator-scc
, T
/Terminator—The Sarah Connor Chronicles
)
174 $(call declare-playlist
, traffik
, T
/Traffik
)
175 $(call declare-playlist
, the-tripods
, T
/The Tripods
)
176 $(call declare-playlist
, tru-calling
, T
/Tru Calling
)
177 $(call declare-playlist
, twin-peaks
, T
/Twin Peaks
)
178 $(call declare-playlist
, ultraviolet
, U
/Ultraviolet
)
179 $(call declare-playlist
, v-1983
, V
/V
(1983))
180 $(call declare-playlist
, v-2009
, V
/V
(2009))
181 $(call declare-playlist
, the-wire
, W
/The Wire
)
182 $(call declare-playlist
, waking-the-dead
, W
/Waking the Dead
)
183 $(call declare-playlist
, wonder-woman-1975
, W
/Wonder Woman
(1975))
184 $(call declare-playlist
, worricker
, W
/The Worricker trilogy
)
185 $(call declare-playlist
, yes-minister
, Y
/Yes Minister
)
186 $(call declare-playlist
, the-young-ones
, Y
/The Young Ones
)
188 M3US
= $(addsuffix .m3u8
,$(PLAYLISTS
))
189 DEPFILES
+= $(addsuffix .m3u-dep
,$(PLAYLISTS
))
191 CLEANFILES
+= $(DEPFILES
)
193 CLEANFILES
+= mkm3u.cache-stamp
195 if
[ ! -f mkm3u.cache
]; then \
196 .
/mkm3u
-i
-dmkm3u.cache.new
&& mv mkm3u.cache.new mkm3u.cache
; \
200 CLEANFILES
+= *.m3u8.new
201 $(M3US
): %.m3u8
: $$($$*_EPLS
) mkm3u mkm3u.cache-stamp
202 $(call v-tag
,MKM3U
).
/mkm3u
$(MKM3UFLAGS
) $($*_MKM3UFLAGS
) \
203 -M
$*.m3u-dep
-O
$@
-o
"$@.new" "$<" && mv
"$@.new" "$@"
205 PLS
= $(sort $(foreach p
,$(PLAYLISTS
), \
206 $($p_EPLS:.epls
=.pl
)))
207 DEPFILES
+= $(addsuffix -dep
,$(PLS
))
209 CLEANFILES
+= *.pl.new
210 $(PLS
): %.pl
: %.epls mkm3u mkm3u.cache-stamp
211 $(call v-tag
,MKPL
).
/mkm3u
-D
$(MKM3UFLAGS
) $($*_MKM3UFLAGS
) \
212 -M
$*.pl-dep
-O
$@
-o
"$@.new" "$<" && mv
"$@.new" "$@"
214 CHECKS
= $(foreach p
,$(PLAYLISTS
), check/$p)
216 $(CHECKS
): check/%: %.m3u8
217 $(V_AT
)diff
-u
$< ref
/$*.m3u8
218 .PHONY
: check $(CHECKS
)
220 LINKS
= $(foreach p
,$(PLAYLISTS
), link
/$p)
224 ok
=nil t
="$(ARCHIVEROOT)/$($*_FULLNAME).m3u8"; \
225 if
[ -L
"$$t" ]; then \
226 case
$$(realpath
"$$t") in \
227 "$(abspath $*.m3u8)") ok
=t
;; \
232 *) $(call v-print
,LINK
,$*); \
233 ln
-frs
$*.m3u8
"$$t.new" && mv
"$$t.new" "$$t" ;; \
235 .PHONY
: link
$(LINKS
)
237 SAVE
= $(foreach p
,$(PLAYLISTS
), save
/$p)
238 FORCE_SAVE
= $(foreach p
,$(PLAYLISTS
), force-save
/$p)
240 force-save
: $(FORCE_SAVE
)
241 $(SAVE
): save
/%: %.m3u8
244 if
! [ -f
"ref/$*.m3u8" ]; then \
245 $(call v-print
,SAVE
,$*); \
246 cp
$< ref
/$*.m3u8.new
&& mv ref
/$*.m3u8.new ref
/$*.m3u8
; \
249 $(FORCE_SAVE
): force-save
/%: %.m3u8
252 if
! [ -f
"ref/$*.m3u8" ] ||
! cmp
-s
$< ref
/$*.m3u8
; then \
253 $(call v-print
,SAVE
,$*); \
254 cp
$< ref
/$*.m3u8.new
&& mv ref
/$*.m3u8.new ref
/$*.m3u8
; \
259 check-deps
= $(shell if
[ -f
$1 ]; then for i in
$2; do \
260 if
! [ "$$i" -ot
$1 ]; then \