From c9669410adc52c2e21b95d7312910e3c6f9ee6d0 Mon Sep 17 00:00:00 2001 From: Francesco Abbate Date: Thu, 19 Aug 2021 14:30:44 -0700 Subject: [PATCH] Fix macOS build issue with recent commit Add objc_args in meson when compiling to pass C defines also to bundle_open.m. Default "bundle" option to false to have by default a unix-like build and install. In the run-local script always expect that "bundle" option is to false to have a unix-like install. In the build-package script pass the -Dbundle=true option when building on macos. When setting the resouce path revert to original method using [[NSBundle mainBundle] resourcePath] to have the real resource path when the bundle option will be activated. With the recent commit the function set_macos_bundle_resources will be called only if the "bundle" option is activate and is not used in unix-like mode. --- build-packages.sh | 6 +++++- meson_options.txt | 2 +- scripts/run-local | 5 +---- src/bundle_open.m | 21 ++------------------- src/meson.build | 1 + 5 files changed, 10 insertions(+), 25 deletions(-) diff --git a/build-packages.sh b/build-packages.sh index 2c735320..f30b1112 100755 --- a/build-packages.sh +++ b/build-packages.sh @@ -32,7 +32,11 @@ lite_build () { local build="$1" build_dir_is_usable "$build" || exit 1 rm -fr "$build" - meson setup --buildtype=release "$build" || exit 1 + setup_options=() + if [[ "$OSTYPE" == "darwin"* ]]; then + setup_options+=(-Dbundle=true) + fi + meson setup "${setup_options[@]}" "$build" || exit 1 ninja -C "$build" || exit 1 } diff --git a/meson_options.txt b/meson_options.txt index 9621ff64..ce7eca98 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -1,3 +1,3 @@ -option('bundle', type : 'boolean', value : true, description: 'Build a macOS bundle') +option('bundle', type : 'boolean', value : false, description: 'Build a macOS bundle') option('portable', type : 'boolean', value : false, description: 'Portable install') option('renderer', type : 'boolean', value : false, description: 'Use SDL renderer') diff --git a/scripts/run-local b/scripts/run-local index cef53ab1..8a32e7fa 100755 --- a/scripts/run-local +++ b/scripts/run-local @@ -47,10 +47,7 @@ if [[ "$OSTYPE" == "msys"* || "$OSTYPE" == "mingw"* ]]; then fi rundir=".run" -if [[ "$OSTYPE" == "darwin"* ]]; then - bindir="$rundir" - datadir="$rundir" -elif [ "$option_portable" == on ]; then +if [ "$option_portable" == on ]; then bindir="$rundir" datadir="$rundir/data" else diff --git a/src/bundle_open.m b/src/bundle_open.m index 08685d08..2ba10da7 100644 --- a/src/bundle_open.m +++ b/src/bundle_open.m @@ -5,25 +5,8 @@ void set_macos_bundle_resources(lua_State *L) { @autoreleasepool { - /* Use resolved executablePath instead of resourcePath to allow lanching - the lite-xl binary via a symlink, like typically done by Homebrew: - - /usr/local/bin/lite-xl -> /Applications/lite-xl.app/Contents/MacOS/lite-xl - - The resourcePath returns /usr/local in this case instead of - /Applications/lite-xl.app/Contents/Resources, which makes later - access to the resource files fail. Resolving the symlink to the - executable and then the relative path to the expected directory - Resources is a workaround for starting the application from both - the launcher directly and the command line via the symlink. - */ - NSString* executable_path = [[NSBundle mainBundle] executablePath]; - char resolved_path[PATH_MAX + 16 + 1]; - realpath([executable_path UTF8String], resolved_path); - strcat(resolved_path, "/../../Resources"); - char resource_path[PATH_MAX + 1]; - realpath(resolved_path, resource_path); - lua_pushstring(L, resource_path); + NSString* resource_path = [[NSBundle mainBundle] resourcePath]; + lua_pushstring(L, [resource_path UTF8String]); lua_setglobal(L, "MACOS_RESOURCES"); }} #endif diff --git a/src/meson.build b/src/meson.build index 2f3943fb..707e04e9 100644 --- a/src/meson.build +++ b/src/meson.build @@ -28,6 +28,7 @@ executable('lite-xl', include_directories: [lite_include, font_renderer_include], dependencies: lite_deps, c_args: lite_cargs, + objc_args: lite_cargs, link_with: libfontrenderer, link_args: lite_link_args, install_dir: lite_bindir,