2021-08-09 19:32:53 +02:00
|
|
|
project('lite-xl',
|
2021-09-11 07:17:55 +02:00
|
|
|
['c'],
|
2024-11-30 15:44:52 +01:00
|
|
|
version : '2.1.6',
|
2021-08-09 19:32:53 +02:00
|
|
|
license : 'MIT',
|
2022-11-14 17:56:15 +01:00
|
|
|
meson_version : '>= 0.56',
|
2022-01-15 00:53:46 +01:00
|
|
|
default_options : [
|
2023-08-25 04:33:39 +02:00
|
|
|
'c_std=gnu11'
|
2022-01-15 00:53:46 +01:00
|
|
|
]
|
2021-08-09 19:32:53 +02:00
|
|
|
)
|
2021-04-19 08:12:55 +02:00
|
|
|
|
2022-03-02 08:53:04 +01:00
|
|
|
#===============================================================================
|
|
|
|
# Project version including git commit if possible
|
|
|
|
#===============================================================================
|
|
|
|
version = meson.project_version()
|
|
|
|
|
|
|
|
if get_option('buildtype') != 'release'
|
|
|
|
git_command = find_program('git', required : false)
|
|
|
|
|
|
|
|
if git_command.found()
|
|
|
|
git_commit = run_command(
|
2022-03-06 01:15:48 +01:00
|
|
|
[git_command, 'rev-parse', 'HEAD'],
|
|
|
|
check : false
|
2022-03-02 08:53:04 +01:00
|
|
|
).stdout().strip()
|
|
|
|
|
|
|
|
if git_commit != ''
|
|
|
|
version += ' (git-' + git_commit.substring(0, 8) + ')'
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2021-08-09 19:32:53 +02:00
|
|
|
#===============================================================================
|
|
|
|
# Configuration
|
|
|
|
#===============================================================================
|
2021-06-23 16:43:58 +02:00
|
|
|
conf_data = configuration_data()
|
2021-08-09 19:32:53 +02:00
|
|
|
conf_data.set('PROJECT_BUILD_DIR', meson.current_build_dir())
|
|
|
|
conf_data.set('PROJECT_SOURCE_DIR', meson.current_source_dir())
|
2022-03-02 08:53:04 +01:00
|
|
|
conf_data.set('PROJECT_VERSION', version)
|
2023-03-03 15:07:45 +01:00
|
|
|
conf_data.set('PROJECT_ASSEMBLY_VERSION', meson.project_version() + '.0')
|
2021-06-23 16:43:58 +02:00
|
|
|
|
2021-08-09 19:32:53 +02:00
|
|
|
#===============================================================================
|
|
|
|
# Compiler Settings
|
|
|
|
#===============================================================================
|
2021-04-19 08:12:55 +02:00
|
|
|
if host_machine.system() == 'darwin'
|
|
|
|
add_languages('objc')
|
|
|
|
endif
|
2020-05-25 12:21:43 +02:00
|
|
|
|
|
|
|
cc = meson.get_compiler('c')
|
2021-08-09 19:32:53 +02:00
|
|
|
|
2021-10-08 22:10:17 +02:00
|
|
|
lite_includes = []
|
2022-01-15 00:53:46 +01:00
|
|
|
lite_cargs = ['-DSDL_MAIN_HANDLED', '-DPCRE2_STATIC']
|
2021-08-09 19:32:53 +02:00
|
|
|
# On macos we need to use the SDL renderer to support retina displays
|
|
|
|
if get_option('renderer') or host_machine.system() == 'darwin'
|
|
|
|
lite_cargs += '-DLITE_USE_SDL_RENDERER'
|
|
|
|
endif
|
2022-10-13 00:33:10 +02:00
|
|
|
if get_option('arch_tuple') != ''
|
2022-12-22 16:24:13 +01:00
|
|
|
arch_tuple = get_option('arch_tuple')
|
|
|
|
else
|
|
|
|
arch_tuple = '@0@-@1@'.format(target_machine.cpu_family(), target_machine.system())
|
2022-10-13 00:33:10 +02:00
|
|
|
endif
|
2022-12-22 16:24:13 +01:00
|
|
|
lite_cargs += '-DLITE_ARCH_TUPLE="@0@"'.format(arch_tuple)
|
|
|
|
|
2021-08-09 19:32:53 +02:00
|
|
|
#===============================================================================
|
|
|
|
# Linker Settings
|
|
|
|
#===============================================================================
|
|
|
|
lite_link_args = []
|
|
|
|
if host_machine.system() == 'darwin'
|
|
|
|
lite_link_args += ['-framework', 'CoreServices', '-framework', 'Foundation']
|
|
|
|
endif
|
|
|
|
#===============================================================================
|
|
|
|
# Dependencies
|
|
|
|
#===============================================================================
|
2021-08-29 10:15:55 +02:00
|
|
|
if not get_option('source-only')
|
|
|
|
libm = cc.find_library('m', required : false)
|
|
|
|
libdl = cc.find_library('dl', required : false)
|
2022-01-15 01:00:51 +01:00
|
|
|
|
2022-04-15 17:34:46 +02:00
|
|
|
default_fallback_options = ['warning_level=0', 'werror=false']
|
|
|
|
|
|
|
|
# Lua has no official .pc file
|
|
|
|
# so distros come up with their own names
|
|
|
|
lua_names = [
|
|
|
|
'lua5.4', # Debian
|
|
|
|
'lua-5.4', # FreeBSD
|
|
|
|
'lua', # Fedora
|
|
|
|
]
|
|
|
|
|
2023-08-25 04:33:39 +02:00
|
|
|
if get_option('use_system_lua')
|
|
|
|
foreach lua : lua_names
|
|
|
|
last_lua = (lua == lua_names[-1] or get_option('wrap_mode') == 'forcefallback')
|
|
|
|
lua_dep = dependency(lua, required : false,
|
|
|
|
)
|
|
|
|
if lua_dep.found()
|
|
|
|
break
|
|
|
|
endif
|
|
|
|
|
|
|
|
if last_lua
|
|
|
|
# If we could not find lua on the system and fallbacks are disabled
|
|
|
|
# try the compiler as a last ditch effort, since Lua has no official
|
|
|
|
# pkg-config support.
|
|
|
|
lua_dep = cc.find_library('lua', required : true)
|
|
|
|
endif
|
|
|
|
endforeach
|
|
|
|
else
|
|
|
|
lua_dep = dependency('', fallback: ['lua', 'lua_dep'], required : true,
|
2022-04-15 17:34:46 +02:00
|
|
|
default_options: default_fallback_options + ['default_library=static', 'line_editing=false', 'interpreter=false']
|
2021-12-31 13:53:01 +01:00
|
|
|
)
|
2023-08-25 04:33:39 +02:00
|
|
|
endif
|
2022-01-15 00:53:46 +01:00
|
|
|
|
|
|
|
pcre2_dep = dependency('libpcre2-8', fallback: ['pcre2', 'libpcre2_8'],
|
2022-04-15 17:34:46 +02:00
|
|
|
default_options: default_fallback_options + ['default_library=static', 'grep=false', 'test=false']
|
2022-01-15 00:53:46 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
freetype_dep = dependency('freetype2', fallback: ['freetype2', 'freetype_dep'],
|
2022-04-15 17:34:46 +02:00
|
|
|
default_options: default_fallback_options + ['default_library=static', 'zlib=disabled', 'bzip2=disabled', 'png=disabled', 'harfbuzz=disabled', 'brotli=disabled']
|
2022-01-15 00:53:46 +01:00
|
|
|
)
|
|
|
|
|
2022-04-20 22:30:41 +02:00
|
|
|
|
|
|
|
sdl_options = ['default_library=static']
|
|
|
|
|
|
|
|
# we explicitly need these
|
|
|
|
sdl_options += 'use_loadso=enabled'
|
|
|
|
sdl_options += 'prefer_dlopen=true'
|
|
|
|
sdl_options += 'use_video=enabled'
|
|
|
|
sdl_options += 'use_atomic=enabled'
|
|
|
|
sdl_options += 'use_threads=enabled'
|
2022-08-03 17:27:33 +02:00
|
|
|
sdl_options += 'use_timers=enabled'
|
2022-04-20 22:30:41 +02:00
|
|
|
# investigate if this is truly needed
|
|
|
|
# Do not remove before https://github.com/libsdl-org/SDL/issues/5413 is released
|
|
|
|
sdl_options += 'use_events=enabled'
|
|
|
|
|
2022-08-23 06:14:38 +02:00
|
|
|
if host_machine.system() == 'darwin' or host_machine.system() == 'windows'
|
|
|
|
sdl_options += 'use_video_x11=disabled'
|
|
|
|
sdl_options += 'use_video_wayland=disabled'
|
|
|
|
else
|
|
|
|
sdl_options += 'use_render=enabled'
|
|
|
|
sdl_options += 'use_video_x11=auto'
|
|
|
|
sdl_options += 'use_video_wayland=auto'
|
|
|
|
endif
|
|
|
|
|
|
|
|
# we leave this up to what the host system has except on windows
|
|
|
|
if host_machine.system() != 'windows'
|
|
|
|
sdl_options += 'use_video_opengl=auto'
|
|
|
|
sdl_options += 'use_video_openglesv2=auto'
|
|
|
|
else
|
|
|
|
sdl_options += 'use_video_opengl=disabled'
|
|
|
|
sdl_options += 'use_video_openglesv2=disabled'
|
|
|
|
endif
|
2022-04-20 22:30:41 +02:00
|
|
|
|
|
|
|
# we don't need these
|
2022-08-23 06:14:38 +02:00
|
|
|
sdl_options += 'test=false'
|
2022-04-20 22:30:41 +02:00
|
|
|
sdl_options += 'use_sensor=disabled'
|
|
|
|
sdl_options += 'use_haptic=disabled'
|
2024-11-30 15:44:52 +01:00
|
|
|
sdl_options += 'use_hidapi=disabled'
|
2022-04-20 22:30:41 +02:00
|
|
|
sdl_options += 'use_audio=disabled'
|
|
|
|
sdl_options += 'use_cpuinfo=disabled'
|
|
|
|
sdl_options += 'use_joystick=disabled'
|
2024-11-30 15:44:52 +01:00
|
|
|
sdl_options += 'use_joystick_xinput=disabled'
|
2022-04-20 22:30:41 +02:00
|
|
|
sdl_options += 'use_video_vulkan=disabled'
|
|
|
|
sdl_options += 'use_video_offscreen=disabled'
|
|
|
|
sdl_options += 'use_power=disabled'
|
2023-11-30 02:53:25 +01:00
|
|
|
sdl_options += 'system_iconv=disabled'
|
2022-04-20 22:30:41 +02:00
|
|
|
|
2022-01-15 00:53:46 +01:00
|
|
|
sdl_dep = dependency('sdl2', fallback: ['sdl2', 'sdl2_dep'],
|
2022-04-20 22:30:41 +02:00
|
|
|
default_options: default_fallback_options + sdl_options
|
2022-01-15 00:53:46 +01:00
|
|
|
)
|
|
|
|
|
2023-11-30 02:53:25 +01:00
|
|
|
if host_machine.system() == 'windows'
|
|
|
|
if sdl_dep.type_name() == 'internal'
|
|
|
|
sdlmain_dep = dependency('sdl2main', fallback: ['sdl2main_dep'])
|
|
|
|
else
|
|
|
|
sdlmain_dep = cc.find_library('SDL2main')
|
|
|
|
endif
|
|
|
|
else
|
|
|
|
sdlmain_dep = dependency('', required: false)
|
|
|
|
assert(not sdlmain_dep.found(), 'checking if fake dependency has been found')
|
|
|
|
endif
|
|
|
|
|
|
|
|
lite_deps = [lua_dep, sdl_dep, sdlmain_dep, freetype_dep, pcre2_dep, libm, libdl]
|
2021-06-18 20:19:09 +02:00
|
|
|
endif
|
2021-08-09 19:32:53 +02:00
|
|
|
#===============================================================================
|
|
|
|
# Install Configuration
|
|
|
|
#===============================================================================
|
|
|
|
if get_option('portable') or host_machine.system() == 'windows'
|
|
|
|
lite_bindir = '/'
|
|
|
|
lite_docdir = '/doc'
|
|
|
|
lite_datadir = '/data'
|
2023-03-03 15:07:45 +01:00
|
|
|
configure_file(
|
2024-11-30 15:44:52 +01:00
|
|
|
input: 'resources' / 'windows' / 'lite-xl.exe.manifest.in',
|
2023-03-03 15:07:45 +01:00
|
|
|
output: 'lite-xl.exe.manifest',
|
|
|
|
configuration: conf_data
|
|
|
|
)
|
2021-08-18 14:26:51 +02:00
|
|
|
elif get_option('bundle') and host_machine.system() == 'darwin'
|
|
|
|
lite_cargs += '-DMACOS_USE_BUNDLE'
|
2024-11-30 15:44:52 +01:00
|
|
|
lite_bindir = 'Contents' / 'MacOS'
|
|
|
|
lite_docdir = 'Contents' / 'Resources'
|
|
|
|
lite_datadir = 'Contents' / 'Resources'
|
|
|
|
conf_data.set(
|
|
|
|
'CURRENT_YEAR',
|
|
|
|
run_command('date', '+%Y', capture: true).stdout().strip()
|
|
|
|
)
|
|
|
|
install_data('resources' / 'icons' / 'icon.icns', install_dir : 'Contents' / 'Resources')
|
2021-09-03 13:50:44 +02:00
|
|
|
configure_file(
|
2024-11-30 15:44:52 +01:00
|
|
|
input : 'resources' / 'macos' / 'Info.plist.in',
|
2021-09-03 13:50:44 +02:00
|
|
|
output : 'Info.plist',
|
|
|
|
configuration : conf_data,
|
|
|
|
install : true,
|
|
|
|
install_dir : 'Contents'
|
|
|
|
)
|
2020-12-16 18:03:36 +01:00
|
|
|
else
|
2024-11-30 15:44:52 +01:00
|
|
|
message()
|
2021-08-09 19:32:53 +02:00
|
|
|
lite_bindir = 'bin'
|
2024-11-30 15:44:52 +01:00
|
|
|
lite_docdir = get_option('datadir') / 'doc' / 'lite-xl'
|
|
|
|
lite_datadir = get_option('datadir') / 'lite-xl'
|
2021-08-09 19:32:53 +02:00
|
|
|
if host_machine.system() == 'linux'
|
2024-11-30 15:44:52 +01:00
|
|
|
install_data('resources' / 'icons' / 'lite-xl.svg',
|
|
|
|
install_dir : get_option('datadir') / 'icons' / 'hicolor' / 'scalable' / 'apps'
|
2021-08-09 19:32:53 +02:00
|
|
|
)
|
2024-11-30 15:44:52 +01:00
|
|
|
install_data('resources' / 'linux' / 'org.lite_xl.lite_xl.desktop',
|
|
|
|
install_dir : get_option('datadir') / 'applications'
|
2021-08-09 19:32:53 +02:00
|
|
|
)
|
2024-11-30 15:44:52 +01:00
|
|
|
install_data('resources' / 'linux' / 'org.lite_xl.lite_xl.appdata.xml',
|
|
|
|
install_dir : get_option('datadir') / 'metainfo'
|
2021-08-09 19:32:53 +02:00
|
|
|
)
|
|
|
|
endif
|
2020-12-02 00:23:15 +01:00
|
|
|
endif
|
|
|
|
|
2024-11-30 15:44:52 +01:00
|
|
|
install_data('licenses' / 'licenses.md', install_dir : lite_docdir)
|
2021-08-09 19:32:53 +02:00
|
|
|
|
2024-11-30 15:44:52 +01:00
|
|
|
install_subdir('docs' / 'api' , install_dir : lite_datadir, strip_directory: true)
|
|
|
|
install_subdir('data' / 'core' , install_dir : lite_datadir, exclude_files : 'start.lua')
|
2021-08-12 09:03:57 +02:00
|
|
|
foreach data_module : ['fonts', 'plugins', 'colors']
|
2021-12-28 23:20:23 +01:00
|
|
|
install_subdir(join_paths('data', data_module), install_dir : lite_datadir)
|
2020-12-02 16:03:31 +01:00
|
|
|
endforeach
|
2020-05-25 12:21:43 +02:00
|
|
|
|
2021-08-12 09:03:57 +02:00
|
|
|
configure_file(
|
2024-11-30 15:44:52 +01:00
|
|
|
input : 'data' / 'core' / 'start.lua',
|
2021-08-12 09:03:57 +02:00
|
|
|
output : 'start.lua',
|
|
|
|
configuration : conf_data,
|
2021-12-28 23:20:23 +01:00
|
|
|
install_dir : join_paths(lite_datadir, 'core'),
|
2021-08-09 19:32:53 +02:00
|
|
|
)
|
2021-08-12 09:03:57 +02:00
|
|
|
|
2021-08-29 10:15:55 +02:00
|
|
|
if not get_option('source-only')
|
|
|
|
subdir('src')
|
|
|
|
subdir('scripts')
|
|
|
|
endif
|