project('lite-xl', ['c'], version : '2.1.5', license : 'MIT', meson_version : '>= 0.63', default_options : [ 'c_std=gnu11' ] ) #=============================================================================== # 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( [git_command, 'rev-parse', 'HEAD'], check : false ).stdout().strip() if git_commit != '' version += ' (git-' + git_commit.substring(0, 8) + ')' endif endif endif #=============================================================================== # Configuration #=============================================================================== conf_data = configuration_data() conf_data.set('PROJECT_BUILD_DIR', meson.current_build_dir()) conf_data.set('PROJECT_SOURCE_DIR', meson.current_source_dir()) conf_data.set('PROJECT_VERSION', version) conf_data.set('PROJECT_ASSEMBLY_VERSION', meson.project_version() + '.0') #=============================================================================== # Compiler Settings #=============================================================================== if host_machine.system() == 'darwin' add_languages('objc') endif cc = meson.get_compiler('c') lite_includes = [] lite_cargs = ['-DSDL_MAIN_HANDLED', '-DPCRE2_STATIC'] # 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 if get_option('arch_tuple') != '' arch_tuple = get_option('arch_tuple') else arch_tuple = '@0@-@1@'.format(target_machine.cpu_family(), target_machine.system()) endif lite_cargs += '-DLITE_ARCH_TUPLE="@0@"'.format(arch_tuple) #=============================================================================== # Linker Settings #=============================================================================== lite_link_args = [] if host_machine.system() == 'darwin' lite_link_args += ['-framework', 'CoreServices', '-framework', 'Foundation'] endif #=============================================================================== # Dependencies #=============================================================================== if not get_option('source-only') libm = cc.find_library('m', required : false) libdl = cc.find_library('dl', required : false) 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 ] 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, default_options: default_fallback_options + ['default_library=static', 'line_editing=disabled', 'interpreter=false'] ) endif pcre2_dep = dependency('libpcre2-8', fallback: ['pcre2', 'libpcre2_8'], default_options: default_fallback_options + ['default_library=static', 'grep=false', 'test=false'] ) freetype_dep = dependency('freetype2', fallback: ['freetype2', 'freetype_dep'], default_options: default_fallback_options + ['default_library=static', 'zlib=disabled', 'bzip2=disabled', 'png=disabled', 'harfbuzz=disabled', 'brotli=disabled'] ) 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' sdl_options += 'use_timers=enabled' # 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' 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 # we don't need these sdl_options += 'test=false' sdl_options += 'use_sensor=disabled' sdl_options += 'use_haptic=disabled' sdl_options += 'use_hidapi=disabled' sdl_options += 'use_audio=disabled' sdl_options += 'use_cpuinfo=disabled' sdl_options += 'use_joystick=disabled' sdl_options += 'use_joystick_xinput=disabled' sdl_options += 'use_video_vulkan=disabled' sdl_options += 'use_video_offscreen=disabled' sdl_options += 'use_power=disabled' sdl_options += 'system_iconv=disabled' sdl_dep = dependency('sdl2', fallback: ['sdl2', 'sdl2_dep'], default_options: default_fallback_options + sdl_options ) 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] endif #=============================================================================== # Install Configuration #=============================================================================== if get_option('portable') or host_machine.system() == 'windows' lite_bindir = '/' lite_docdir = '/doc' lite_datadir = '/data' lpm_userdir = 'data' lpm_install_dir = '/' configure_file( input: 'resources' / 'windows' / 'lite-xl.exe.manifest.in', output: 'lite-xl.exe.manifest', configuration: conf_data ) elif get_option('bundle') and host_machine.system() == 'darwin' lite_cargs += '-DMACOS_USE_BUNDLE' lite_bindir = 'Contents' / 'MacOS' lite_docdir = 'Contents' / 'Resources' lite_datadir = 'Contents' / 'Resources' lpm_userdir = 'Resources' lpm_install_dir = 'Contents' conf_data.set( 'CURRENT_YEAR', run_command('date', '+%Y', capture: true).stdout().strip() ) install_data('resources' / 'icons' / 'icon.icns', install_dir : 'Contents' / 'Resources') configure_file( input : 'resources' / 'macos' / 'Info.plist.in', output : 'Info.plist', configuration : conf_data, install : true, install_dir : 'Contents' ) else lite_bindir = 'bin' lite_docdir = get_option('datadir') / 'doc' / 'lite-xl' lite_datadir = get_option('datadir') / 'lite-xl' lpm_userdir = 'lite-xl' lpm_install_dir = get_option('datadir') if host_machine.system() == 'linux' git_command = find_program('git', required : false) if git_command.found() git_tags = run_command( [git_command, 'tag', '-l', '--sort=-version:refname', '--format=%(refname:strip=2) %(creatordate:short)'], check : false ).stdout().split('\n') releases = [] foreach tag : git_tags taga = tag.split(' ') if taga.length() != 2 continue endif ref = taga[0] date = taga[1] if not ref.startswith('v') or ref.contains('-') continue endif if ref.startswith('v1.0') # releases 1.01 to 1.09 used an invalid versioning scheme so we ignore them continue endif releases += ''.format(ref, date) endforeach releases_tag = '' if releases.length() > 0 releases_tag = '\n@0@\n'.format('\n'.join(releases)) endif conf_data.set('METAINFO_RELEASES', releases_tag) else conf_data.set('METAINFO_RELEASES', '') endif install_data('resources' / 'icons' / 'lite-xl.svg', install_dir : get_option('datadir') / 'icons' / 'hicolor' / 'scalable' / 'apps' ) install_data('resources' / 'linux' / 'com.lite_xl.LiteXL.desktop', install_dir : get_option('datadir') / 'applications' ) configure_file( input : 'resources' / 'linux' / 'com.lite_xl.LiteXL.metainfo.xml.in', output : 'com.lite_xl.LiteXL.metainfo.xml', configuration : conf_data, install : true, install_dir : 'share/metainfo' ) endif endif install_data('licenses' / 'licenses.md', install_dir : lite_docdir) install_subdir('docs' / 'api' , install_dir : lite_datadir, strip_directory: true) install_subdir('data' / 'core' , install_dir : lite_datadir, exclude_files : 'start.lua') foreach data_module : ['fonts', 'plugins', 'colors'] install_subdir(join_paths('data', data_module), install_dir : lite_datadir) endforeach configure_file( input : 'data' / 'core' / 'start.lua', output : 'start.lua', configuration : conf_data, install_dir : join_paths(lite_datadir, 'core'), ) if not get_option('source-only') subdir('src') subdir('scripts') subdir('data') endif