aboutsummaryrefslogtreecommitdiff
path: root/meson.build
blob: cab46ad179552fda33a11693a0a7817b6d4de7b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# vim: noet ts=4 sts=4 sw=4:
project('fiv', 'c',
	default_options : ['c_std=gnu99', 'warning_level=2'],
	version : '0.1.0')
add_project_arguments(
	meson.get_compiler('c').get_supported_arguments('-Wno-cast-function-type'),
	language : 'c',
)

# This, annoyingly, enables the leak sanitizer by default,
# which requires some tuning to not stand in the way.
# Use -Db_sanitize=address,undefined and adjust LSAN_OPTIONS yourself.
#if get_option('buildtype').startswith('debug')
#	flags = meson.get_compiler('c').get_supported_arguments(
#		'-fsanitize=address,undefined')
#	add_project_arguments(flags, language : ['c'])
#	add_project_link_arguments(flags, language : ['c'])
#endif

lcms2 = dependency('lcms2', required : get_option('lcms2'))
# Note that only libraw_r is thread-safe, but we'll just run it out-of process.
libraw = dependency('libraw', required : get_option('libraw'))
librsvg = dependency('librsvg-2.0', required : get_option('librsvg'))
xcursor = dependency('xcursor', required : get_option('xcursor'))
libheif = dependency('libheif', required : get_option('libheif'))
libtiff = dependency('libtiff-4', required : get_option('libtiff'))
gdkpixbuf = dependency('gdk-pixbuf-2.0', required : get_option('gdk-pixbuf'))
dependencies = [
	dependency('gtk+-3.0'),
	dependency('pixman-1'),

	dependency('libturbojpeg'),
	dependency('libjpeg', required : get_option('jpeg-qs')),
	dependency('libwebp'),
	dependency('libwebpdemux'),
	dependency('libwebpdecoder', required : false),
	dependency('libwebpmux'),
	# https://github.com/google/wuffs/issues/58
	dependency('spng', version : '>=0.7.0',
		default_options: 'default_library=static',
		# fallback : ['spng', 'spng_dep'],
	),

	lcms2,
	libraw,
	librsvg,
	xcursor,
	libheif,
	libtiff,
	gdkpixbuf,
	meson.get_compiler('c').find_library('m', required : false),
]

conf = configuration_data()
conf.set_quoted('PROJECT_NAME', meson.project_name())
conf.set_quoted('PROJECT_VERSION', meson.project_version())
# TODO(p): Wrap it in a Meson subproject, try to enable SIMD.
conf.set('HAVE_JPEG_QS', get_option('jpeg-qs').enabled())
conf.set('HAVE_LCMS2', lcms2.found())
conf.set('HAVE_LIBRAW', libraw.found())
conf.set('HAVE_LIBRSVG', librsvg.found())
conf.set('HAVE_XCURSOR', xcursor.found())
conf.set('HAVE_LIBHEIF', libheif.found())
conf.set('HAVE_LIBTIFF', libtiff.found())
conf.set('HAVE_GDKPIXBUF', gdkpixbuf.found())
configure_file(
	output : 'config.h',
	configuration : conf,
)

gnome = import('gnome')
resources = gnome.compile_resources('resources',
	'resources/resources.gresource.xml',
	source_dir : 'resources',
	c_name : 'resources',
)

exe = executable('fiv', 'fiv.c', 'fiv-view.c', 'fiv-io.c',
	'fiv-browser.c', 'fiv-sidebar.c', 'fiv-thumbnail.c', 'xdg.c', resources,
	install : true,
	dependencies : [dependencies])

if gdkpixbuf.found()
	executable('io-benchmark', 'fiv-io-benchmark.c', 'fiv-io.c', 'xdg.c',
		build_by_default : false,
		dependencies : [dependencies, gdkpixbuf])
endif

# XXX: With gdk-pixbuf, this even depends on currently installed modules.
if meson.is_cross_build()
	install_data('fiv.desktop',
		install_dir : get_option('datadir') + '/applications')
else
	# XXX: The exe path may not contain spaces--quoting is a bitch in Meson.
	desktop = custom_target('desktop',
		output : 'fiv.desktop',
		input : 'fiv.desktop',
		command : ['sh', '-c', '''awk '/^MimeType=/ { $0 = "MimeType=";
			while (((exe " --list-supported-media-types") | getline type) > 0)
				$0 = $0 type ";" } 1' "exe=$1" "$2"''', 'sh', exe, '@INPUT@'],
		capture : true,
		install : true,
		install_dir : get_option('datadir') + '/applications',
	)
endif

install_data('fiv-browse.desktop',
	install_dir : get_option('datadir') + '/applications')
install_data('fiv.svg',
	install_dir : get_option('datadir') + '/icons/hicolor/scalable/apps')