diff --git a/README.md b/README.md index 334c1ad..e71befa 100644 --- a/README.md +++ b/README.md @@ -73,8 +73,8 @@ utilized in the outside native code. There are no dependencies (other than a suitable compiler and the standard library). -Libostd is built using Meson. Therefore, you need to install Meson and then -you can compile it as usual. Typically, this will be something like +Libcubescript is built using `meson`. After installing it, you can do +something like this: ~~~ mkdir build && cd build @@ -82,15 +82,22 @@ meson .. ninja all ~~~ -Link the libcubescript library together with your application and everything -should just work. It also builds the REPL. +Link the `libcubescript` library together with your application and everything +should just work. It also builds the REPL by default. -The project also bundles the linenoise line editing library which has been -modified to compile cleanly as C++ (with the same flags as libcubescript). +The project also bundles the `linenoise` line editing library which has been +modified to compile cleanly as C++ (with the same flags as `libcubescript`). It's used strictly for the REPL only (you don't need it to build libcubescript itself). The version in the repository tracks Git revision https://github.com/antirez/linenoise/commit/c894b9e59f02203dbe4e2be657572cf88c4230c3. +For the REPL (when not disabled with `-Drepl=disabled`) you have a choice of +two line editing libraries. The `readline` library can be used (but is always +disabled by default, so you need to enable it manually). On Unix-like systems, +`linenoise` can be used (and is fully featured) and is enabled by default; on +Windows it's disabled. There is also a fallback without any line editing, used +when you don't have either (but then there is no line editing or history). + ## Licensing See COPYING.md for licensing information. diff --git a/meson_options.txt b/meson_options.txt index 69ba062..64709bd 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -1,11 +1,17 @@ +option('repl', + type: 'feature', + value: 'auto', + description: 'Enable the REPL (command line tool)' +) + option('readline', - type: 'boolean', - value: false, + type: 'feature', + value: 'auto', description: 'Use GNU readline for the REPL' ) option('linenoise', - type: 'boolean', - value: true, + type: 'feature', + value: 'auto', description: 'Use linenoise for the REPL' ) diff --git a/tools/meson.build b/tools/meson.build index 68df9a7..369558b 100644 --- a/tools/meson.build +++ b/tools/meson.build @@ -5,18 +5,30 @@ repl_src = [ repl_deps = [libcubescript] repl_flags = [] -if get_option('readline') - repl_deps += [dependency('readline')] - repl_flags = ['-DCS_REPL_USE_READLINE'] -elif get_option('linenoise') - repl_src += ['linenoise.cc'] - repl_flags = ['-DCS_REPL_USE_LINENOISE'] +if get_option('readline').enabled() + use_readline = true + use_linenoise = false +elif get_option('linenoise').enabled() + use_readline = false + use_linenoise = true +elif get_option('linenoise').auto() + use_readline = false + use_linenoise = (host_machine.system() != 'windows') endif -executable('cubescript', - repl_src, - dependencies: repl_deps, - include_directories: libcubescript_includes + [include_directories('.')], - cpp_args: extra_cxxflags + repl_flags, - install: true -) +if not get_option('repl').disabled() + if use_readline + repl_deps += [dependency('readline')] + repl_flags = ['-DCS_REPL_USE_READLINE'] + elif use_linenoise + repl_src += ['linenoise.cc'] + repl_flags = ['-DCS_REPL_USE_LINENOISE'] + endif + executable('cubescript', + repl_src, + dependencies: repl_deps, + include_directories: libcubescript_includes + [include_directories('.')], + cpp_args: extra_cxxflags + repl_flags, + install: true + ) +endif