File: meson.build

package info (click to toggle)
picom 13-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 2,432 kB
  • sloc: ansic: 25,725; python: 685; sh: 365; makefile: 11
file content (133 lines) | stat: -rw-r--r-- 4,897 bytes parent folder | download
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
project('picom', 'c', version: '13',
        default_options: ['c_std=c11', 'warning_level=1'])

cc = meson.get_compiler('c')

# use git describe if that's available
git = find_program('git', required: false)
if git.found()
	gitv = run_command('git', 'rev-parse', '--short=7', 'HEAD', check: false)
	if gitv.returncode() == 0
		commit_hash_short = gitv.stdout().strip()
	endif
	git_upstream = run_command('git', 'rev-parse', '--abbrev-ref', '--symbolic-full-name', '@{upstream}', check: false)
	if git_upstream.returncode() == 0
		remote = git_upstream.stdout().strip().split('/')[0]
	else
		remote = 'origin'
	endif
	git_repository = run_command('git', 'remote', 'get-url', remote, check: false)
	if git_repository.returncode() == 0
		repository = git_repository.stdout().strip()
	endif
endif

add_global_arguments('-DPICOM_VERSION="v'+meson.project_version()+'"', language: 'c')
if is_variable('repository')
	add_global_arguments('-DPICOM_FULL_VERSION="v'+meson.project_version()+' ('+repository+' revision '+commit_hash_short+')"', language: 'c')
elif is_variable('commit_hash_short')
	add_global_arguments('-DPICOM_FULL_VERSION="v'+meson.project_version()+' (revision '+commit_hash_short+')"', language: 'c')
else
	add_global_arguments('-DPICOM_FULL_VERSION="v'+meson.project_version()+'"', language: 'c')
endif

if get_option('buildtype') == 'release'
	add_global_arguments('-DNDEBUG', language: 'c')
endif

if get_option('sanitize')
	sanitizers = ['address', 'undefined']
	if cc.has_argument('-fsanitize=integer')
		sanitizers += ['integer']
	endif
	if cc.has_argument('-fsanitize=nullability')
		sanitizers += ['nullability']
	endif
	add_global_arguments('-fsanitize='+','.join(sanitizers), language: 'c')
	add_global_link_arguments('-fsanitize='+','.join(sanitizers), language: 'c')
	if cc.has_argument('-fno-sanitize=unsigned-integer-overflow')
		add_global_arguments('-fno-sanitize=unsigned-integer-overflow', language: 'c')
	endif
	if cc.has_argument('-fno-sanitize=unsigned-shift-base')
		# uthash does a lot of this
		add_global_arguments('-fno-sanitize=unsigned-shift-base', language: 'c')
	endif
endif

if get_option('llvm_coverage')
	if cc.get_id() != 'clang'
		error('option \'llvm_coverage\' requires clang')
	endif
	coverage_flags = ['-fprofile-instr-generate', '-fcoverage-mapping']
	add_global_arguments(coverage_flags, language: 'c')
	add_global_link_arguments(coverage_flags, language: 'c')
endif

if get_option('modularize')
	if not cc.has_argument('-fmodules')
		error('option \'modularize\' requires clang')
	endif
	add_global_arguments(['-fmodules',
	                      '-fmodule-map-file='+
	                      meson.current_source_dir()+
	                      '/src/picom.modulemap'],
	                     language: 'c')
endif

add_global_arguments('-D_GNU_SOURCE', language: 'c')

if cc.has_header('stdc-predef.h')
	add_global_arguments('-DHAS_STDC_PREDEF_H', language: 'c')
endif

if get_option('warning_level') != '0'
  warns = [ 'cast-function-type', 'ignored-qualifiers', 'missing-parameter-type',
            'nonnull', 'shadow', 'no-type-limits', 'old-style-declaration', 'override-init',
            'sign-compare', 'type-limits', 'uninitialized', 'shift-negative-value',
            'unused-but-set-parameter', 'unused-parameter', 'implicit-fallthrough=2',
            'no-unknown-warning-option', 'no-missing-braces', 'conversion', 'empty-body',
            'no-c2x-extensions' ]
  bad_warns_ubsan = [
    'no-format-overflow' # see gcc bug 87884, enabling UBSAN makes gcc spit out spurious warnings
                         # (if you saw this comment, went and checked gcc bugzilla, and found out
                         # bug has been fixed, please open a PR to remove this).
  ]
  if get_option('b_sanitize').contains('undefined') and cc.get_id() == 'gcc'
    warns = warns + bad_warns_ubsan
  endif
  foreach w : warns
          if cc.has_argument('-W'+w)
                  add_global_arguments('-W'+w, language: 'c')
          endif
  endforeach
endif

test_h_dep = subproject('test.h').get_variable('test_h_dep')

subdir('src')
subdir('man')
subdir('tools')
subdir('include')

install_data('bin/picom-trans', install_dir: get_option('bindir'))
install_data('picom.desktop', install_dir: 'share/applications')
install_data('picom.desktop', install_dir: get_option('sysconfdir') / 'xdg' / 'autostart')

pkgconf = import('pkgconfig')

picom_pc = pkgconf.generate(
  name: 'picom-api',
  description: 'picom API headers',
  requires: [ 'pixman-1', 'xcb' ],
  subdirs: 'picom',
)

if get_option('compton')
	install_data('compton.desktop', install_dir: 'share/applications')
	install_data('media/icons/48x48/compton.png',
                     install_dir: 'share/icons/hicolor/48x48/apps')
	install_data('media/compton.svg',
                     install_dir: 'share/icons/hicolor/scalable/apps')

	meson.add_install_script('meson/install.sh')
endif