1build('awk', '$outdir/version.h', {'$srcdir/VERSION', '|', '$dir/version.awk'}, {
2 expr='-f $dir/version.awk',
3})
4
5sub('tools.ninja', function()
6 toolchain(config.host)
7 set('srcdir', '$dir')
8 exe('file2string', {'file2string.c'})
9end)
10
11cflags{
12 '-D _GNU_SOURCE',
13 '-I $dir',
14 '-I $outdir',
15 '-I $srcdir',
16 '-isystem $basedir/pkg/ffmpeg/src',
17 '-isystem $builddir/pkg/ffmpeg/include',
18 '-isystem $builddir/pkg/libplacebo/include',
19 '-isystem $builddir/pkg/linux-headers/include',
20 '-isystem $builddir/pkg/zlib/include',
21}
22local libs = {
23 'ffmpeg/libavcodec.a.d',
24 'ffmpeg/libavdevice.a.d',
25 'ffmpeg/libavfilter.a.d',
26 'ffmpeg/libavformat.a.d',
27 'ffmpeg/libavutil.a',
28 'ffmpeg/libswresample.a.d',
29 'ffmpeg/libswscale.a.d',
30 'libplacebo/libplacebo.a',
31 'zlib/libz.a',
32}
33pkg.deps = {
34 '$outdir/version.h',
35 'pkg/ffmpeg/headers',
36 'pkg/ffmpeg/fetch',
37 'pkg/libplacebo/headers',
38 'pkg/linux-headers/headers',
39 'pkg/zlib/headers',
40}
41
42build('copy', '$outdir/content-type-v1.h', '$builddir/pkg/wayland-protocols/include/content-type-v1-client-protocol.h')
43build('copy', '$outdir/fractional-scale-v1.h', '$builddir/pkg/wayland-protocols/include/fractional-scale-v1-client-protocol.h')
44build('copy', '$outdir/idle-inhibit-unstable-v1.h', '$builddir/pkg/wayland-protocols/include/idle-inhibit-unstable-v1-client-protocol.h')
45build('copy', '$outdir/linux-dmabuf-unstable-v1.h', '$builddir/pkg/wayland-protocols/include/linux-dmabuf-unstable-v1-client-protocol.h')
46build('copy', '$outdir/presentation-time.h', '$builddir/pkg/wayland-protocols/include/presentation-time-client-protocol.h')
47build('copy', '$outdir/single-pixel-buffer-v1.h', '$builddir/pkg/wayland-protocols/include/single-pixel-buffer-v1-client-protocol.h')
48build('copy', '$outdir/viewporter.h', '$builddir/pkg/wayland-protocols/include/viewporter-client-protocol.h')
49build('copy', '$outdir/xdg-decoration-unstable-v1.h', '$builddir/pkg/wayland-protocols/include/xdg-decoration-unstable-v1-client-protocol.h')
50build('copy', '$outdir/xdg-shell.h', '$builddir/pkg/wayland-protocols/include/xdg-shell-client-protocol.h')
51
52rule('file2string', '$outdir/file2string $in >$out')
53local function file2string(src)
54 local out = '$outdir/'..src..'.inc'
55 build('file2string', out, {'$srcdir/'..src, '|', '$outdir/file2string'})
56 table.insert(pkg.deps, out)
57end
58
59file2string('etc/input.conf')
60file2string('etc/builtin.conf')
61file2string('sub/osd_font.otf')
62local lua = {
63 'defaults.lua', 'assdraw.lua', 'options.lua', 'osc.lua',
64 'ytdl_hook.lua', 'stats.lua', 'console.lua', 'auto_profiles.lua',
65 'input.lua',
66}
67for _, f in ipairs(lua) do
68 file2string('player/lua/'..f)
69end
70
71local options = {}
72for line in iterlines('config.h', 1) do
73 local var, val = line:match('^#define ([^ ]+) ([^ ]+)')
74 if var and val == '1' then
75 options[var] = true
76 end
77end
78table.insert(pkg.inputs.gen, '$dir/config.h')
79
80local srcs = {
81 -- src/meson.build:/^sources =/
82 'audio/aframe.c',
83 'audio/chmap.c',
84 'audio/chmap_sel.c',
85 'audio/decode/ad_lavc.c',
86 'audio/decode/ad_spdif.c',
87 'audio/filter/af_drop.c',
88 'audio/filter/af_format.c',
89 'audio/filter/af_lavcac3enc.c',
90 'audio/filter/af_scaletempo.c',
91 'audio/filter/af_scaletempo2.c',
92 'audio/filter/af_scaletempo2_internals.c',
93 'audio/fmt-conversion.c',
94 'audio/format.c',
95 'audio/out/ao.c',
96 'audio/out/ao_lavc.c',
97 'audio/out/ao_null.c',
98 'audio/out/ao_pcm.c',
99 'audio/out/buffer.c',
100
101 'common/av_common.c',
102 'common/av_log.c',
103 'common/codecs.c',
104 'common/common.c',
105 'common/encode_lavc.c',
106 'common/msg.c',
107 'common/playlist.c',
108 'common/recorder.c',
109 'common/stats.c',
110 'common/tags.c',
111 'common/version.c',
112
113 'demux/codec_tags.c',
114 'demux/cue.c',
115 'demux/cache.c',
116 'demux/demux.c',
117 'demux/demux_cue.c',
118 'demux/demux_disc.c',
119 'demux/demux_edl.c',
120 'demux/demux_lavf.c',
121 'demux/demux_mf.c',
122 'demux/demux_mkv.c',
123 'demux/demux_mkv_timeline.c',
124 'demux/demux_null.c',
125 'demux/demux_playlist.c',
126 'demux/demux_raw.c',
127 'demux/demux_timeline.c',
128 'demux/ebml.c',
129 'demux/packet.c',
130 'demux/timeline.c',
131
132 'filters/f_async_queue.c',
133 'filters/f_autoconvert.c',
134 'filters/f_auto_filters.c',
135 'filters/f_decoder_wrapper.c',
136 'filters/f_demux_in.c',
137 'filters/f_hwtransfer.c',
138 'filters/f_lavfi.c',
139 'filters/f_output_chain.c',
140 'filters/f_swresample.c',
141 'filters/f_swscale.c',
142 'filters/f_utils.c',
143 'filters/filter.c',
144 'filters/frame.c',
145 'filters/user_filters.c',
146
147 'input/cmd.c',
148 'input/event.c',
149 'input/input.c',
150 'input/ipc.c',
151 'input/keycodes.c',
152
153 'misc/bstr.c',
154 'misc/charset_conv.c',
155 'misc/dispatch.c',
156 'misc/io_utils.c',
157 'misc/json.c',
158 'misc/language.c',
159 'misc/natural_sort.c',
160 'misc/node.c',
161 'misc/path_utils.c',
162 'misc/random.c',
163 'misc/rendezvous.c',
164 'misc/thread_pool.c',
165 'misc/thread_tools.c',
166
167 'options/m_config_core.c',
168 'options/m_config_frontend.c',
169 'options/m_option.c',
170 'options/m_property.c',
171 'options/options.c',
172 'options/parse_commandline.c',
173 'options/parse_configfile.c',
174 'options/path.c',
175
176 'player/audio.c',
177 'player/client.c',
178 'player/command.c',
179 'player/configfiles.c',
180 'player/external_files.c',
181 'player/loadfile.c',
182 'player/main.c',
183 'player/misc.c',
184 'player/osd.c',
185 'player/playloop.c',
186 'player/screenshot.c',
187 'player/scripting.c',
188 'player/sub.c',
189 'player/video.c',
190
191 'stream/cookies.c',
192 'stream/stream.c',
193 'stream/stream_avdevice.c',
194 'stream/stream_cb.c',
195 'stream/stream_concat.c',
196 'stream/stream_edl.c',
197 'stream/stream_file.c',
198 'stream/stream_lavf.c',
199 'stream/stream_memory.c',
200 'stream/stream_mf.c',
201 'stream/stream_null.c',
202 'stream/stream_slice.c',
203
204 'sub/ass_mp.c',
205 'sub/dec_sub.c',
206 'sub/draw_bmp.c',
207 'sub/filter_sdh.c',
208 'sub/img_convert.c',
209 'sub/lavc_conv.c',
210 'sub/osd.c',
211 'sub/osd_libass.c',
212 'sub/sd_ass.c',
213 'sub/sd_lavc.c',
214
215 'video/csputils.c',
216 'video/decode/vd_lavc.c',
217 'video/filter/refqueue.c',
218 'video/filter/vf_format.c',
219 'video/filter/vf_sub.c',
220 'video/fmt-conversion.c',
221 'video/hwdec.c',
222 'video/image_loader.c',
223 'video/image_writer.c',
224 'video/img_format.c',
225 'video/mp_image.c',
226 'video/mp_image_pool.c',
227 'video/out/aspect.c',
228 'video/out/bitmap_packer.c',
229 'video/out/dither.c',
230 'video/out/dr_helper.c',
231 'video/out/filter_kernels.c',
232 --'video/out/gpu/context.c',
233 --'video/out/gpu/error_diffusion.c',
234 'video/out/gpu/hwdec.c',
235 --'video/out/gpu/lcms.c',
236 --'video/out/gpu/libmpv_gpu.c',
237 --'video/out/gpu/osd.c',
238 'video/out/gpu/ra.c',
239 --'video/out/gpu/shader_cache.c',
240 --'video/out/gpu/spirv.c',
241 --'video/out/gpu/user_shaders.c',
242 --'video/out/gpu/utils.c',
243 --'video/out/gpu/video.c',
244 --'video/out/gpu/video_shaders.c',
245 'video/out/libmpv_sw.c',
246 'video/out/vo.c',
247 --'video/out/vo_gpu.c',
248 'video/out/vo_image.c',
249 'video/out/vo_lavc.c',
250 'video/out/vo_libmpv.c',
251 'video/out/vo_null.c',
252 'video/out/vo_tct.c',
253 'video/out/vo_kitty.c',
254 'video/out/win_state.c',
255 'video/repack.c',
256 'video/sws_utils.c',
257
258 --'video/out/placebo/ra_pl.c',
259 --'video/out/placebo/utils.c',
260 --'video/out/vo_gpu_next.c',
261 --'video/out/gpu_next/context.c',
262
263 'osdep/io.c',
264 'osdep/semaphore-mac.c',
265 'osdep/subprocess.c',
266 'osdep/timer.c',
267
268 'ta/ta.c',
269 'ta/ta_talloc.c',
270 'ta/ta_utils.c',
271
272 'osdep/language-posix.c',
273 'osdep/subprocess-posix.c',
274 'osdep/threads-posix.c',
275 'osdep/path-unix.c',
276 'osdep/terminal-unix.c',
277 'osdep/timer-linux.c',
278 'input/ipc-unix.c',
279 'osdep/poll_wrapper.c',
280
281 'sub/filter_regex.c',
282}
283if options.HAVE_AV_CHANNEL_LAYOUT then
284 table.insert(srcs, 'audio/chmap_avchannel.c')
285end
286if options.HAVE_ALSA then
287 cflags{'-isystem $builddir/pkg/alsa-lib/include'}
288 table.insert(srcs, 'audio/out/ao_alsa.c')
289 table.insert(libs, 'alsa-lib/libasound.a')
290 table.insert(pkg.deps, 'pkg/alsa-lib/headers')
291end
292if options.HAVE_SNDIO then
293 cflags{'-isystem $builddir/pkg/sndio/include'}
294 table.insert(srcs, 'audio/out/ao_sndio.c')
295 table.insert(libs, 'sndio/libsndio.a')
296 table.insert(pkg.deps, 'pkg/sndio/headers')
297end
298if options.HAVE_DRM then
299 cflags{'-isystem $builddir/pkg/libdrm/include'}
300 table.insert(srcs, {
301 'video/drmprime.c',
302 'video/out/drm_atomic.c',
303 'video/out/drm_common.c',
304 'video/out/drm_prime.c',
305 'video/out/hwdec/hwdec_drmprime.c',
306 'video/out/hwdec/hwdec_drmprime_overlay.c',
307 'video/out/vo_drm.c',
308 })
309 table.insert(libs, 'libdrm/libdrm.a')
310 table.insert(pkg.deps, 'pkg/libdrm/headers')
311end
312if options.HAVE_LIBASS then
313 cflags{'-isystem $builddir/pkg/libass/include'}
314 table.insert(libs, 'libass/libass.a.d')
315 table.insert(pkg.deps, 'pkg/libass/headers')
316end
317if options.HAVE_LUA then
318 cflags{'-isystem $builddir/pkg/lua/include'}
319 table.insert(srcs, 'player/lua.c')
320 table.insert(libs, 'lua/liblua.a')
321 table.insert(pkg.deps, 'pkg/lua/headers')
322end
323if options.HAVE_WAYLAND or options.HAVE_DRM then
324 table.insert(srcs, 'video/out/present_sync.c')
325end
326if options.HAVE_WAYLAND then
327 cflags{
328 '-isystem $builddir/pkg/libxkbcommon/include',
329 '-isystem $builddir/pkg/wayland/include',
330 }
331 table.insert(srcs, {
332 'video/out/vo_wlshm.c',
333 'video/out/wayland_common.c',
334 '$builddir/pkg/wayland-protocols/content-type-v1-protocol.c.o',
335 '$builddir/pkg/wayland-protocols/fractional-scale-v1-protocol.c.o',
336 '$builddir/pkg/wayland-protocols/idle-inhibit-unstable-v1-protocol.c.o',
337 '$builddir/pkg/wayland-protocols/linux-dmabuf-unstable-v1-protocol.c.o',
338 '$builddir/pkg/wayland-protocols/single-pixel-buffer-v1-protocol.c.o',
339 '$builddir/pkg/wayland-protocols/presentation-time-protocol.c.o',
340 '$builddir/pkg/wayland-protocols/viewporter-protocol.c.o',
341 '$builddir/pkg/wayland-protocols/xdg-decoration-unstable-v1-protocol.c.o',
342 '$builddir/pkg/wayland-protocols/xdg-shell-protocol.c.o',
343 })
344 table.insert(libs, {
345 'wayland/libwayland-client.a.d',
346 'wayland/libwayland-cursor.a.d',
347 'libxkbcommon/libxkbcommon.a',
348 })
349 table.insert(pkg.deps, {
350 '$outdir/content-type-v1.h',
351 '$outdir/fractional-scale-v1.h',
352 '$outdir/idle-inhibit-unstable-v1.h',
353 '$outdir/linux-dmabuf-unstable-v1.h',
354 '$outdir/single-pixel-buffer-v1.h',
355 '$outdir/presentation-time.h',
356 '$outdir/viewporter.h',
357 '$outdir/xdg-decoration-unstable-v1.h',
358 '$outdir/xdg-shell.h',
359 'pkg/libxkbcommon/headers',
360 'pkg/wayland/headers',
361 })
362end
363
364exe('mpv', {'osdep/main-fn-unix.c', srcs, expand{'$builddir/pkg/', libs}})
365file('bin/mpv', '755', '$outdir/mpv')
366man{'$dir/mpv.1'}
367
368fetch 'git'