1
0
Fork 0
mirror of https://github.com/yshui/picom.git synced 2024-11-25 14:06:08 -05:00
picom/meson.build
Yuxuan Shui f3b2db1090
tools: add animgen
Add a tool to generate C function from a compiled animation script.
The generated function will reproduce the animation script when called.

The goal is to implement animation presets. Instead of creating strings
and then compile them into scripts, by using these generated function,
we can skip the parsing step and create compiled scripts directly.

Placeholders are supported in the preset script, so some configurability
still exists even when using presets.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-08-06 01:15:44 +01:00

118 lines
4 KiB
Meson

project('picom', 'c', version: '11',
default_options: ['c_std=c11', 'warning_level=1'])
cc = meson.get_compiler('c')
# use project version by default
version = 'v'+meson.project_version()
# use git describe if that's available
git = find_program('git', required: false)
if git.found()
gitv = run_command('git', 'rev-parse', '--short=5', 'HEAD', check: false)
if gitv.returncode() == 0
version = 'vgit-'+gitv.stdout().strip()
endif
endif
add_global_arguments('-DPICOM_VERSION="'+version+'"', language: 'c')
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')
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