110 lines
3.1 KiB
Meson
110 lines
3.1 KiB
Meson
project('eventcore', 'd',
|
|
meson_version: '>=0.49',
|
|
version: '0.9.13',
|
|
)
|
|
|
|
project_soversion = '0'
|
|
project_version_suffix = ''
|
|
project_version = meson.project_version()
|
|
project_version_full = project_version + project_version_suffix
|
|
|
|
taggedalgebraic_dep = dependency('taggedalgebraic', version: ['>=0.10.12', '<0.12'])
|
|
|
|
eventcore_build_versions = []
|
|
eventcore_extra_deps = []
|
|
|
|
default_driver = 'select'
|
|
host_system = host_machine.system()
|
|
|
|
host_is_posix = false
|
|
host_is_osx = false
|
|
host_is_windows = false
|
|
host_is_bsd = false
|
|
host_is_linux = false
|
|
|
|
# Determine the default driver if 'driver' was not explicitly set
|
|
if host_system == 'linux'
|
|
host_is_linux = true
|
|
host_is_posix = true
|
|
elif host_system == 'windows'
|
|
host_is_windows = true
|
|
elif host_system == 'dragonfly' or host_system == 'freebsd' or host_system == 'netbsd' or host_system == 'openbsd'
|
|
host_is_bsd = true
|
|
host_is_posix = true
|
|
else
|
|
# What are we running on?
|
|
default_driver = 'generic'
|
|
endif
|
|
|
|
if host_is_linux
|
|
default_driver = 'epoll'
|
|
elif host_is_osx
|
|
default_driver = 'cfrunloop'
|
|
elif host_is_windows
|
|
default_driver = 'winapi'
|
|
elif host_is_bsd
|
|
default_driver = 'kqueue'
|
|
elif host_is_posix
|
|
default_driver = 'select'
|
|
endif
|
|
|
|
# Optional dependencies
|
|
libasync_dep = dependency('libasync', version: '~>0.8.2', required: false)
|
|
gaia_dep = dependency('anl', required: get_option('use_gaia'))
|
|
|
|
# Driver logic
|
|
driver_opt = get_option('driver')
|
|
if driver_opt == 'auto'
|
|
driver_opt = default_driver
|
|
endif
|
|
|
|
if driver_opt == 'epoll'
|
|
if not host_is_linux
|
|
error('epoll driver is only supported on Linux')
|
|
endif
|
|
eventcore_build_versions += ['EventcoreEpollDriver']
|
|
if gaia_dep.found()
|
|
eventcore_extra_deps += [gaia_dep]
|
|
eventcore_build_versions += ['EventcoreUseGAIA']
|
|
endif
|
|
elif driver_opt == 'cfrunloop'
|
|
if not host_is_osx
|
|
error('cfrunloop driver is only supported on OSX')
|
|
endif
|
|
eventcore_build_versions += ['EventcoreCFRunLoopDriver']
|
|
elif driver_opt == 'kqueue'
|
|
if not host_is_bsd
|
|
error('kqueue driver is only supported on BSD variants (including OSX)')
|
|
endif
|
|
eventcore_build_versions += ['EventcoreKqueueDriver']
|
|
elif driver_opt == 'winapi'
|
|
if not host_is_windows
|
|
error('winapi driver is only supported on Windows')
|
|
endif
|
|
eventcore_build_versions += ['EventcoreWinAPIDriver']
|
|
elif driver_opt == 'select'
|
|
if not (host_is_posix or host_is_windows)
|
|
error('select driver is only supported on POSIX-like systems and Windows')
|
|
endif
|
|
eventcore_build_versions += ['EventcoreSelectDriver']
|
|
elif driver_opt == 'libasync'
|
|
if not libasync_dep.found()
|
|
error('libasync could not be found, but is required for the libasync driver')
|
|
endif
|
|
eventcore_build_versions += ['EventcoreLibasyncDriver']
|
|
eventcore_extra_deps += [libasync_dep]
|
|
elif driver_opt == 'generic'
|
|
# Defines eventDriver as the generic EventDriver interface. Setup must be done manually.
|
|
else
|
|
error('No combination of driver and compatible host machine OS specified')
|
|
endif
|
|
|
|
source_root = meson.source_root()
|
|
build_root = meson.build_root()
|
|
subdir('source/eventcore')
|
|
|
|
eventcore_dep = declare_dependency(
|
|
include_directories: include_directories('source'),
|
|
link_with: eventcore_lib
|
|
)
|