master hovercats/oakiss / pkg / mpv / gen.lua
  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'