mirror of
https://github.com/neovim/neovim.git
synced 2025-09-06 03:18:16 +00:00
Merge pull request #35129 from bfredl/nopreproc
refactor(build): don't use the preprocessor when generating headers
This commit is contained in:
@@ -232,8 +232,8 @@ pub fn build(b: *std.Build) !void {
|
||||
\\
|
||||
, .{medium}));
|
||||
|
||||
// TODO(zig): using getEmittedIncludeTree() is ugly af. we want run_preprocessor()
|
||||
// to use the std.build.Module include_path thing
|
||||
// TODO(zig): using getEmittedIncludeTree() is ugly af. we want unittests
|
||||
// to reuse the std.build.Module include_path thing
|
||||
const include_path = [_]LazyPath{
|
||||
b.path("src/"),
|
||||
gen_config.getDirectory(),
|
||||
@@ -245,7 +245,7 @@ pub fn build(b: *std.Build) !void {
|
||||
treesitter.artifact("tree-sitter").getEmittedIncludeTree(),
|
||||
};
|
||||
|
||||
const gen_headers, const funcs_data = try gen.nvim_gen_sources(b, nlua0, &nvim_sources, &nvim_headers, &api_headers, &include_path, target, versiondef_git, version_lua);
|
||||
const gen_headers, const funcs_data = try gen.nvim_gen_sources(b, nlua0, &nvim_sources, &nvim_headers, &api_headers, versiondef_git, version_lua);
|
||||
|
||||
const test_config_step = b.addWriteFiles();
|
||||
_ = test_config_step.add("test/cmakeconfig/paths.lua", try test_config(b));
|
||||
|
@@ -160,6 +160,8 @@ local typed_container = P({
|
||||
)
|
||||
+ Cg(opt(P('*')) * P('Dict')) * paren(C(id))
|
||||
+ Cg(opt(P('*')) * P('DictAs')) * paren(C(id))
|
||||
+ Cg(opt(P('*')) * P('Set')) * paren(C(id))
|
||||
+ Cg(opt(P('*')) * P('PMap')) * paren(C(id))
|
||||
),
|
||||
-- Remove captures here (with / 0 ) as api_types will recursively run parse the type.
|
||||
TY = Cg(V('S') / 0 + V('ID')),
|
||||
|
@@ -71,17 +71,13 @@ end
|
||||
--- @return string[] static
|
||||
--- @return string[] non_static
|
||||
--- @return boolean any_static
|
||||
local function gen_declarations(fname, text)
|
||||
local function gen_declarations(text)
|
||||
local non_static = {} --- @type string[]
|
||||
local static = {} --- @type string[]
|
||||
|
||||
local neededfile = fname:match('[^/]+$')
|
||||
local curfile = nil
|
||||
local any_static = false
|
||||
for _, node in ipairs(grammar:match(text)) do
|
||||
if node[1] == 'preproc' then
|
||||
curfile = node.content:match('^%a* %d+ "[^"]-/?([^"/]+)"') or curfile
|
||||
elseif node[1] == 'proto' and curfile == neededfile then
|
||||
if node[1] == 'proto' then
|
||||
local node_text = text:sub(node.pos, node.endpos - 1)
|
||||
local declaration = process_decl(node_text)
|
||||
|
||||
@@ -102,31 +98,27 @@ end
|
||||
local usage = [[
|
||||
Usage:
|
||||
|
||||
gen_declarations.lua definitions.c static.h non-static.h definitions.i
|
||||
gen_declarations.lua definitions.c static.h non-static.h
|
||||
|
||||
Generates declarations for a C file definitions.c, putting declarations for
|
||||
static functions into static.h and declarations for non-static functions into
|
||||
non-static.h. File `definitions.i' should contain an already preprocessed
|
||||
version of definitions.c and it is the only one which is actually parsed,
|
||||
definitions.c is needed only to determine functions from which file out of all
|
||||
functions found in definitions.i are needed and to generate an IWYU comment.
|
||||
non-static.h. Also generate an IWYU comment.
|
||||
]]
|
||||
|
||||
local function main()
|
||||
local fname = arg[1]
|
||||
local static_fname = arg[2]
|
||||
local non_static_fname = arg[3]
|
||||
local preproc_fname = arg[4]
|
||||
local static_basename = arg[5]
|
||||
local static_basename = arg[4]
|
||||
|
||||
if fname == '--help' or #arg < 5 then
|
||||
if fname == '--help' or #arg < 4 then
|
||||
print(usage)
|
||||
os.exit()
|
||||
end
|
||||
|
||||
local text = assert(read_file(preproc_fname))
|
||||
local text = assert(read_file(fname))
|
||||
|
||||
local static_decls, non_static_decls, any_static = gen_declarations(fname, text)
|
||||
local static_decls, non_static_decls, any_static = gen_declarations(text)
|
||||
|
||||
local static = {} --- @type string[]
|
||||
if fname:find('.*/src/nvim/.*%.h$') then
|
||||
|
@@ -9,8 +9,6 @@ pub fn nvim_gen_sources(
|
||||
nvim_sources: *std.ArrayList(SourceItem),
|
||||
nvim_headers: *std.ArrayList([]u8),
|
||||
api_headers: *std.ArrayList(LazyPath),
|
||||
include_path: []const LazyPath,
|
||||
target: std.Build.ResolvedTarget,
|
||||
versiondef_git: LazyPath,
|
||||
version_lua: LazyPath,
|
||||
) !struct { *std.Build.Step.WriteFile, LazyPath } {
|
||||
@@ -19,12 +17,12 @@ pub fn nvim_gen_sources(
|
||||
for (nvim_sources.items) |s| {
|
||||
const api_export = if (s.api_export) api_headers else null;
|
||||
const input_file = b.path(b.fmt("src/nvim/{s}", .{s.name}));
|
||||
_ = try generate_header_for(b, s.name, input_file, api_export, nlua0, include_path, target, gen_headers, false);
|
||||
_ = try generate_header_for(b, s.name, input_file, api_export, nlua0, gen_headers, false);
|
||||
}
|
||||
|
||||
for (nvim_headers.items) |s| {
|
||||
const input_file = b.path(b.fmt("src/nvim/{s}", .{s}));
|
||||
_ = try generate_header_for(b, s, input_file, null, nlua0, include_path, target, gen_headers, true);
|
||||
_ = try generate_header_for(b, s, input_file, null, nlua0, gen_headers, true);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -95,17 +93,17 @@ pub fn nvim_gen_sources(
|
||||
const gen_step = b.addRunArtifact(nlua0);
|
||||
gen_step.addFileArg(b.path("src/gen/gen_api_ui_events.lua"));
|
||||
gen_step.addFileArg(b.path("src/nvim/api/ui_events.in.h"));
|
||||
_ = try gen_header_with_header(b, gen_step, "ui_events_call.generated.h", nlua0, include_path, target, gen_headers);
|
||||
_ = try gen_header_with_header(b, gen_step, "ui_events_remote.generated.h", nlua0, include_path, target, gen_headers);
|
||||
_ = try gen_header_with_header(b, gen_step, "ui_events_call.generated.h", nlua0, gen_headers);
|
||||
_ = try gen_header_with_header(b, gen_step, "ui_events_remote.generated.h", nlua0, gen_headers);
|
||||
const ui_metadata = gen_step.addOutputFileArg("ui_metadata.mpack");
|
||||
_ = try gen_header_with_header(b, gen_step, "ui_events_client.generated.h", nlua0, include_path, target, gen_headers);
|
||||
_ = try gen_header_with_header(b, gen_step, "ui_events_client.generated.h", nlua0, gen_headers);
|
||||
break :ui_step ui_metadata;
|
||||
};
|
||||
|
||||
const funcs_metadata = api_step: {
|
||||
const gen_step = b.addRunArtifact(nlua0);
|
||||
gen_step.addFileArg(b.path("src/gen/gen_api_dispatch.lua"));
|
||||
_ = try gen_header_with_header(b, gen_step, "api/private/dispatch_wrappers.generated.h", nlua0, include_path, target, gen_headers);
|
||||
_ = try gen_header_with_header(b, gen_step, "api/private/dispatch_wrappers.generated.h", nlua0, gen_headers);
|
||||
_ = gen_header(b, gen_step, "api/private/api_metadata.generated.h", gen_headers);
|
||||
const funcs_metadata = gen_step.addOutputFileArg("funcs_metadata.mpack");
|
||||
_ = gen_header(b, gen_step, "lua_api_c_bindings.generated.h", gen_headers);
|
||||
@@ -153,13 +151,11 @@ fn gen_header_with_header(
|
||||
gen_step: *std.Build.Step.Run,
|
||||
name: []const u8,
|
||||
nlua0: *std.Build.Step.Compile,
|
||||
include_path: []const LazyPath,
|
||||
target: ?std.Build.ResolvedTarget,
|
||||
gen_headers: *std.Build.Step.WriteFile,
|
||||
) !std.Build.LazyPath {
|
||||
if (name.len < 12 or !std.mem.eql(u8, ".generated.h", name[name.len - 12 ..])) return error.InvalidBaseName;
|
||||
const h = gen_header(b, gen_step, name, gen_headers);
|
||||
_ = try generate_header_for(b, b.fmt("{s}.h", .{name[0 .. name.len - 12]}), h, null, nlua0, include_path, target, gen_headers, false);
|
||||
_ = try generate_header_for(b, b.fmt("{s}.h", .{name[0 .. name.len - 12]}), h, null, nlua0, gen_headers, false);
|
||||
return h;
|
||||
}
|
||||
|
||||
@@ -169,55 +165,17 @@ pub const PreprocessorOptions = struct {
|
||||
target: ?std.Build.ResolvedTarget = null,
|
||||
};
|
||||
|
||||
fn run_preprocessor(
|
||||
b: *std.Build,
|
||||
src: LazyPath,
|
||||
output_name: []const u8,
|
||||
options: PreprocessorOptions,
|
||||
) !LazyPath {
|
||||
const run_step = std.Build.Step.Run.create(b, b.fmt("preprocess to get {s}", .{output_name}));
|
||||
run_step.addArgs(&.{ b.graph.zig_exe, "cc", "-E" });
|
||||
run_step.addFileArg(src);
|
||||
run_step.addArg("-o");
|
||||
const output = run_step.addOutputFileArg(output_name);
|
||||
// upstream issue: include path logic for addCSourceFiles and TranslateC is _very_ different
|
||||
for (options.include_dirs) |include_dir| {
|
||||
run_step.addArg("-I");
|
||||
run_step.addDirectoryArg(include_dir);
|
||||
}
|
||||
for (options.c_macros) |c_macro| {
|
||||
run_step.addArg(b.fmt("-D{s}", .{c_macro}));
|
||||
}
|
||||
if (options.target) |t| {
|
||||
if (!t.query.isNative()) {
|
||||
run_step.addArgs(&.{
|
||||
"-target", try t.query.zigTriple(b.allocator),
|
||||
});
|
||||
}
|
||||
}
|
||||
run_step.addArgs(&.{ "-MMD", "-MF" });
|
||||
_ = run_step.addDepFileOutputArg(b.fmt("{s}.d", .{output_name}));
|
||||
return output;
|
||||
}
|
||||
|
||||
fn generate_header_for(
|
||||
b: *std.Build,
|
||||
name: []const u8,
|
||||
input_file: LazyPath,
|
||||
api_export: ?*std.ArrayList(LazyPath),
|
||||
nlua0: *std.Build.Step.Compile,
|
||||
include_path: []const LazyPath,
|
||||
target: ?std.Build.ResolvedTarget,
|
||||
gen_headers: *std.Build.Step.WriteFile,
|
||||
nvim_header: bool,
|
||||
) !*std.Build.Step.Run {
|
||||
if (name.len < 2 or !(std.mem.eql(u8, ".c", name[name.len - 2 ..]) or std.mem.eql(u8, ".h", name[name.len - 2 ..]))) return error.InvalidBaseName;
|
||||
const basename = name[0 .. name.len - 2];
|
||||
const i_file = try run_preprocessor(b, input_file, b.fmt("{s}.i", .{basename}), .{
|
||||
.include_dirs = include_path,
|
||||
.c_macros = &.{ "_GNU_SOURCE", "ZIG_BUILD" },
|
||||
.target = target,
|
||||
});
|
||||
const run_step = b.addRunArtifact(nlua0);
|
||||
run_step.addFileArg(b.path("src/gen/gen_declarations.lua"));
|
||||
run_step.addFileArg(input_file);
|
||||
@@ -232,7 +190,6 @@ fn generate_header_for(
|
||||
}
|
||||
}
|
||||
|
||||
run_step.addFileArg(i_file);
|
||||
run_step.addArg(gen_name);
|
||||
return run_step;
|
||||
}
|
||||
|
@@ -84,6 +84,7 @@ if(NOT MSVC)
|
||||
-Wmissing-noreturn
|
||||
-Wmissing-format-attribute
|
||||
-Wmissing-prototypes
|
||||
-Wno-unused-function # because #35129
|
||||
-fsigned-char)
|
||||
|
||||
# For O_CLOEXEC, O_DIRECTORY, and O_NOFOLLOW flags on older systems
|
||||
@@ -465,37 +466,19 @@ endif()
|
||||
# Header generation
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
get_target_property(prop main_lib INTERFACE_COMPILE_DEFINITIONS)
|
||||
if(NOT "${prop}" STREQUAL "prop-NOTFOUND")
|
||||
foreach(gen_cdef ${prop})
|
||||
if(NOT ${gen_cdef} MATCHES "INCLUDE_GENERATED_DECLARATIONS")
|
||||
list(APPEND gen_cflags "-D${gen_cdef}")
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
get_directory_property(targets BUILDSYSTEM_TARGETS)
|
||||
foreach(target ${targets})
|
||||
get_target_property(prop ${target} INTERFACE_INCLUDE_DIRECTORIES)
|
||||
if(NOT "${prop}" STREQUAL "prop-NOTFOUND")
|
||||
message(STATUS "${target} props '${prop}'")
|
||||
foreach(gen_include ${prop})
|
||||
list(APPEND gen_cflags "-I${gen_include}")
|
||||
list(APPEND TEST_INCLUDE_DIRS "${gen_include}")
|
||||
endforeach()
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
list(REMOVE_DUPLICATES gen_cflags)
|
||||
list(REMOVE_DUPLICATES TEST_INCLUDE_DIRS)
|
||||
|
||||
if(APPLE AND CMAKE_OSX_SYSROOT)
|
||||
list(APPEND gen_cflags "-isysroot" "${CMAKE_OSX_SYSROOT}")
|
||||
endif()
|
||||
if(MSVC)
|
||||
list(APPEND gen_cflags -wd4003)
|
||||
endif()
|
||||
|
||||
set(NVIM_VERSION_GIT_H ${PROJECT_BINARY_DIR}/cmake.config/auto/versiondef_git.h)
|
||||
add_custom_target(update_version_stamp
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
@@ -558,13 +541,6 @@ foreach(sfile ${NVIM_SOURCES}
|
||||
set(gf_h_h "${GENERATED_INCLUDES_DIR}/${r}.h.generated.h")
|
||||
set(gf_h_h_out "${gf_h_h}")
|
||||
endif()
|
||||
set(gf_i "${GENERATED_DIR}/${f}.i")
|
||||
|
||||
if(MSVC)
|
||||
set(PREPROC_OUTPUT /P /Fi${gf_i} /nologo)
|
||||
else()
|
||||
set(PREPROC_OUTPUT -w -E -o ${gf_i})
|
||||
endif()
|
||||
|
||||
set(depends "${HEADER_GENERATOR}" "${sfile}" "${LUA_GEN_DEPS}" "${GENERATOR_C_GRAMMAR}")
|
||||
if("${f}" STREQUAL "version.c")
|
||||
@@ -573,8 +549,7 @@ foreach(sfile ${NVIM_SOURCES}
|
||||
endif()
|
||||
add_custom_command(
|
||||
OUTPUT "${gf_c_h}" ${gf_h_h_out}
|
||||
COMMAND ${CMAKE_C_COMPILER} ${sfile} ${PREPROC_OUTPUT} ${gen_cflags}
|
||||
COMMAND ${LUA_GEN} "${HEADER_GENERATOR}" "${sfile}" "${gf_c_h}" "${gf_h_h}" "${gf_i}" "${gf_basename}"
|
||||
COMMAND ${LUA_GEN} "${HEADER_GENERATOR}" "${sfile}" "${gf_c_h}" "${gf_h_h}" "${gf_basename}"
|
||||
DEPENDS ${depends})
|
||||
list(APPEND NVIM_GENERATED_FOR_SOURCES "${gf_c_h}")
|
||||
if (NOT ${sfile} IN_LIST NVIM_HEADERS)
|
||||
|
@@ -1,5 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
#define ARABIC_CHAR(ch) (((ch) & 0xFF00) == 0x0600)
|
||||
|
||||
#ifdef INCLUDE_GENERATED_DECLARATIONS
|
||||
|
@@ -31,7 +31,7 @@ static const uint8_t char_to_index[256] = {
|
||||
};
|
||||
|
||||
#ifndef HAVE_BE64TOH
|
||||
static inline uint64_t htobe64(uint64_t host_64bits)
|
||||
static inline uint64_t vim_htobe64(uint64_t host_64bits)
|
||||
{
|
||||
# ifdef ORDER_BIG_ENDIAN
|
||||
return host_64bits;
|
||||
@@ -45,7 +45,7 @@ static inline uint64_t htobe64(uint64_t host_64bits)
|
||||
# endif
|
||||
}
|
||||
|
||||
static inline uint32_t htobe32(uint32_t host_32bits)
|
||||
static inline uint32_t vim_htobe32(uint32_t host_32bits)
|
||||
{
|
||||
# ifdef ORDER_BIG_ENDIAN
|
||||
return host_32bits;
|
||||
@@ -58,6 +58,8 @@ static inline uint32_t htobe32(uint32_t host_32bits)
|
||||
return ret;
|
||||
# endif
|
||||
}
|
||||
# define htobe64 vim_htobe64
|
||||
# define htobe32 vim_htobe32
|
||||
#endif
|
||||
|
||||
/// Encode a string using Base64.
|
||||
|
@@ -729,18 +729,11 @@ void nlua_push_Array(lua_State *lstate, const Array array, int flags)
|
||||
}
|
||||
}
|
||||
|
||||
#define GENERATE_INDEX_FUNCTION(type) \
|
||||
void nlua_push_##type(lua_State *lstate, const type item, int flags) \
|
||||
FUNC_ATTR_NONNULL_ALL \
|
||||
{ \
|
||||
lua_pushnumber(lstate, (lua_Number)(item)); \
|
||||
}
|
||||
|
||||
GENERATE_INDEX_FUNCTION(Buffer)
|
||||
GENERATE_INDEX_FUNCTION(Window)
|
||||
GENERATE_INDEX_FUNCTION(Tabpage)
|
||||
|
||||
#undef GENERATE_INDEX_FUNCTION
|
||||
void nlua_push_handle(lua_State *lstate, const handle_T item, int flags)
|
||||
FUNC_ATTR_NONNULL_ALL
|
||||
{
|
||||
lua_pushnumber(lstate, (lua_Number)(item));
|
||||
}
|
||||
|
||||
/// Convert given Object to Lua value
|
||||
///
|
||||
|
@@ -9,6 +9,10 @@
|
||||
#define nlua_pop_Window nlua_pop_handle
|
||||
#define nlua_pop_Tabpage nlua_pop_handle
|
||||
|
||||
#define nlua_push_Buffer nlua_push_handle
|
||||
#define nlua_push_Window nlua_push_handle
|
||||
#define nlua_push_Tabpage nlua_push_handle
|
||||
|
||||
/// Flags for nlua_push_*() functions.
|
||||
enum {
|
||||
kNluaPushSpecial = 0x01, ///< Use lua-special-tbl when necessary
|
||||
|
@@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <lua.h> // IWYU pragma: keep
|
||||
#include <stdbool.h>
|
||||
|
||||
#ifdef INCLUDE_GENERATED_DECLARATIONS
|
||||
# include "lua/stdlib.h.generated.h"
|
||||
|
@@ -47,6 +47,11 @@ typedef struct {
|
||||
bool had_stdin_file; // explicit - as a file to edit
|
||||
} mparm_T;
|
||||
|
||||
#if defined(MSWIN) && !defined(ENABLE_ASAN_UBSAN)
|
||||
# define __asan_default_options vim__asan_default_options
|
||||
# define __ubsan_default_options vim__ubsan_default_options
|
||||
#endif
|
||||
|
||||
#ifdef INCLUDE_GENERATED_DECLARATIONS
|
||||
# include "main.h.generated.h"
|
||||
#endif
|
||||
|
@@ -717,11 +717,7 @@ static void fname2fnum(xfmark_T *fm)
|
||||
|
||||
// First expand "~/" in the file name to the home directory.
|
||||
// Don't expand the whole name, it may contain other '~' chars.
|
||||
#ifdef BACKSLASH_IN_FILENAME
|
||||
if (fm->fname[0] == '~' && (fm->fname[1] == '/' || fm->fname[1] == '\\')) {
|
||||
#else
|
||||
if (fm->fname[0] == '~' && (fm->fname[1] == '/')) {
|
||||
#endif
|
||||
if (fm->fname[0] == '~' && vim_ispathsep_nocolon(fm->fname[1])) {
|
||||
size_t len = expand_env("~/", NameBuff, MAXPATHL);
|
||||
xstrlcpy(NameBuff + len, fm->fname + 2, MAXPATHL - len);
|
||||
} else {
|
||||
|
@@ -1174,7 +1174,7 @@ bool utf_printable(int c)
|
||||
|
||||
// Return true if "c" is in "table".
|
||||
static bool intable(const struct interval *table, size_t n_items, int c)
|
||||
FUNC_ATTR_PURE
|
||||
FUNC_ATTR_CONST
|
||||
{
|
||||
assert(n_items > 0);
|
||||
// first quick check for Latin1 etc. characters
|
||||
@@ -1202,11 +1202,11 @@ static bool intable(const struct interval *table, size_t n_items, int c)
|
||||
// Return true for characters that can be displayed in a normal way.
|
||||
// Only for characters of 0x100 and above!
|
||||
bool utf_printable(int c)
|
||||
FUNC_ATTR_PURE
|
||||
FUNC_ATTR_CONST
|
||||
{
|
||||
// Sorted list of non-overlapping intervals.
|
||||
// 0xd800-0xdfff is reserved for UTF-16, actually illegal.
|
||||
static struct interval nonprint[] = {
|
||||
static const struct interval nonprint[] = {
|
||||
{ 0x070f, 0x070f }, { 0x180b, 0x180e }, { 0x200b, 0x200f }, { 0x202a, 0x202e },
|
||||
{ 0x2060, 0x206f }, { 0xd800, 0xdfff }, { 0xfeff, 0xfeff }, { 0xfff9, 0xfffb },
|
||||
{ 0xfffe, 0xffff }
|
||||
|
@@ -33,6 +33,10 @@
|
||||
#include "nvim/ui.h"
|
||||
#include "nvim/ui_client.h"
|
||||
|
||||
#ifdef INCLUDE_GENERATED_DECLARATIONS
|
||||
# include "msgpack_rpc/channel.c.generated.h"
|
||||
#endif
|
||||
|
||||
#ifdef NVIM_LOG_DEBUG
|
||||
# define REQ "[request] "
|
||||
# define RES "[response] "
|
||||
@@ -66,10 +70,6 @@ static void log_notify(char *dir, uint64_t channel_id, const char *name)
|
||||
# define log_notify(...)
|
||||
#endif
|
||||
|
||||
#ifdef INCLUDE_GENERATED_DECLARATIONS
|
||||
# include "msgpack_rpc/channel.c.generated.h"
|
||||
#endif
|
||||
|
||||
void rpc_init(void)
|
||||
{
|
||||
ch_before_blocking_events = multiqueue_new_child(main_loop.events);
|
||||
|
@@ -1,5 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h> // IWYU pragma: keep
|
||||
|
||||
#ifdef INCLUDE_GENERATED_DECLARATIONS
|
||||
|
@@ -1,5 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
#ifdef INCLUDE_GENERATED_DECLARATIONS
|
||||
# include "os/dl.h.generated.h"
|
||||
#endif
|
||||
|
@@ -245,14 +245,12 @@ bool os_can_exe(const char *name, char **abspath, bool use_path)
|
||||
{
|
||||
if (!use_path || gettail_dir(name) != name) {
|
||||
#ifdef MSWIN
|
||||
if (is_executable_ext(name, abspath)) {
|
||||
return is_executable_ext(name, abspath);
|
||||
#else
|
||||
// Must have path separator, cannot execute files in the current directory.
|
||||
if ((use_path || gettail_dir(name) != name)
|
||||
&& is_executable(name, abspath)) {
|
||||
return ((use_path || gettail_dir(name) != name)
|
||||
&& is_executable(name, abspath));
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -339,6 +337,8 @@ static bool is_executable_ext(const char *name, char **abspath)
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#else
|
||||
# define is_executable_ext is_executable
|
||||
#endif
|
||||
|
||||
/// Checks if a file is in `$PATH` and is executable.
|
||||
@@ -384,11 +384,7 @@ static bool is_executable_in_path(const char *name, char **abspath)
|
||||
xmemcpyz(buf, p, (size_t)(e - p));
|
||||
(void)append_path(buf, name, bufsize);
|
||||
|
||||
#ifdef MSWIN
|
||||
if (is_executable_ext(buf, abspath)) {
|
||||
#else
|
||||
if (is_executable(buf, abspath)) {
|
||||
#endif
|
||||
rv = true;
|
||||
goto end;
|
||||
}
|
||||
|
@@ -48,7 +48,7 @@
|
||||
#endif
|
||||
|
||||
#ifdef MSWIN
|
||||
static bool os_proc_tree_kill_rec(HANDLE proc, int sig)
|
||||
static bool os_proc_tree_kill_rec(void *proc, int sig)
|
||||
{
|
||||
if (proc == NULL) {
|
||||
return false;
|
||||
|
@@ -2,9 +2,7 @@
|
||||
|
||||
#include <stddef.h> // IWYU pragma: keep
|
||||
|
||||
#ifdef MSWIN
|
||||
# include "nvim/api/private/defs.h" // IWYU pragma: keep
|
||||
#endif
|
||||
#include "nvim/api/private/defs.h" // IWYU pragma: keep
|
||||
|
||||
#ifdef INCLUDE_GENERATED_DECLARATIONS
|
||||
# include "os/proc.h.generated.h"
|
||||
|
@@ -56,8 +56,8 @@ int forkpty(int *, char *, const struct termios *, const struct winsize *);
|
||||
// inclusion of the header even though it gets include out of order.
|
||||
# include <sys/stropts.h>
|
||||
|
||||
static int openpty(int *amaster, int *aslave, char *name, struct termios *termp,
|
||||
struct winsize *winp)
|
||||
static int vim_openpty(int *amaster, int *aslave, char *name, struct termios *termp,
|
||||
struct winsize *winp)
|
||||
{
|
||||
int slave = -1;
|
||||
int master = open("/dev/ptmx", O_RDWR);
|
||||
@@ -117,7 +117,7 @@ error:
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int login_tty(int fd)
|
||||
static int vim_login_tty(int fd)
|
||||
{
|
||||
setsid();
|
||||
if (ioctl(fd, TIOCSCTTY, NULL) == -1) {
|
||||
@@ -134,10 +134,10 @@ static int login_tty(int fd)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static pid_t forkpty(int *amaster, char *name, struct termios *termp, struct winsize *winp)
|
||||
pid_t vim_forkpty(int *amaster, char *name, struct termios *termp, struct winsize *winp)
|
||||
{
|
||||
int master, slave;
|
||||
if (openpty(&master, &slave, name, termp, winp) == -1) {
|
||||
if (vim_openpty(&master, &slave, name, termp, winp) == -1) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -149,7 +149,7 @@ static pid_t forkpty(int *amaster, char *name, struct termios *termp, struct win
|
||||
return -1;
|
||||
case 0:
|
||||
close(master);
|
||||
login_tty(slave);
|
||||
vim_login_tty(slave);
|
||||
return 0;
|
||||
default:
|
||||
close(slave);
|
||||
@@ -157,7 +157,7 @@ static pid_t forkpty(int *amaster, char *name, struct termios *termp, struct win
|
||||
return pid;
|
||||
}
|
||||
}
|
||||
|
||||
# define forkpty vim_forkpty
|
||||
#endif
|
||||
|
||||
/// @returns zero on success, or negative error code
|
||||
|
@@ -1,5 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h> // IWYU pragma: keep
|
||||
#include <time.h> // IWYU pragma: keep
|
||||
|
||||
|
@@ -1,5 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h> // IWYU pragma: keep
|
||||
#include <stdint.h>
|
||||
|
||||
|
@@ -3003,7 +3003,7 @@ static void shada_free_shada_entry(ShadaEntry *const entry)
|
||||
}
|
||||
|
||||
#ifndef HAVE_BE64TOH
|
||||
static inline uint64_t be64toh(uint64_t big_endian_64_bits)
|
||||
static inline uint64_t vim_be64toh(uint64_t big_endian_64_bits)
|
||||
{
|
||||
# ifdef ORDER_BIG_ENDIAN
|
||||
return big_endian_64_bits;
|
||||
@@ -3019,6 +3019,7 @@ static inline uint64_t be64toh(uint64_t big_endian_64_bits)
|
||||
return ret;
|
||||
# endif
|
||||
}
|
||||
# define be64toh vim_be64toh
|
||||
#endif
|
||||
|
||||
/// Read given number of bytes into given buffer, display error if needed
|
||||
|
@@ -1,5 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
#include "nvim/garray_defs.h" // IWYU pragma: keep
|
||||
|
||||
#ifdef INCLUDE_GENERATED_DECLARATIONS
|
||||
|
Reference in New Issue
Block a user