From 26a029d407be480d791972afb5975cf62c9360a6 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 02:47:55 +0200 Subject: Adding upstream version 124.0.1. Signed-off-by: Daniel Baumann --- third_party/python/gyp/test/module/src/lib1.c | 10 ++ third_party/python/gyp/test/module/src/lib2.c | 10 ++ third_party/python/gyp/test/module/src/module.gyp | 53 +++++++++++ third_party/python/gyp/test/module/src/program.c | 111 ++++++++++++++++++++++ 4 files changed, 184 insertions(+) create mode 100644 third_party/python/gyp/test/module/src/lib1.c create mode 100644 third_party/python/gyp/test/module/src/lib2.c create mode 100644 third_party/python/gyp/test/module/src/module.gyp create mode 100644 third_party/python/gyp/test/module/src/program.c (limited to 'third_party/python/gyp/test/module/src') diff --git a/third_party/python/gyp/test/module/src/lib1.c b/third_party/python/gyp/test/module/src/lib1.c new file mode 100644 index 0000000000..8de0e94bee --- /dev/null +++ b/third_party/python/gyp/test/module/src/lib1.c @@ -0,0 +1,10 @@ +#include + +#ifdef _WIN32 +__declspec(dllexport) +#endif +void module_main(void) +{ + fprintf(stdout, "Hello from lib1.c\n"); + fflush(stdout); +} diff --git a/third_party/python/gyp/test/module/src/lib2.c b/third_party/python/gyp/test/module/src/lib2.c new file mode 100644 index 0000000000..266396dc91 --- /dev/null +++ b/third_party/python/gyp/test/module/src/lib2.c @@ -0,0 +1,10 @@ +#include + +#ifdef _WIN32 +__declspec(dllexport) +#endif +void module_main(void) +{ + fprintf(stdout, "Hello from lib2.c\n"); + fflush(stdout); +} diff --git a/third_party/python/gyp/test/module/src/module.gyp b/third_party/python/gyp/test/module/src/module.gyp new file mode 100644 index 0000000000..2bc398bb3b --- /dev/null +++ b/third_party/python/gyp/test/module/src/module.gyp @@ -0,0 +1,53 @@ +# Copyright (c) 2009 Google Inc. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +{ + 'target_defaults': { + 'conditions': [ + ['OS=="win"', { + 'defines': ['PLATFORM_WIN'], + }], + ['OS=="mac" or OS=="ios"', { + 'defines': ['PLATFORM_MAC'], + }], + ['OS=="linux"', { + 'defines': ['PLATFORM_LINUX'], + # Support 64-bit shared libs (also works fine for 32-bit). + 'cflags': ['-fPIC'], + 'libraries': ['-ldl'], + }], + ], + }, + 'targets': [ + { + 'target_name': 'program', + 'type': 'executable', + 'dependencies': [ + 'lib1', + 'lib2', + ], + 'sources': [ + 'program.c', + ], + }, + { + 'target_name': 'lib1', + 'type': 'loadable_module', + 'product_name': 'lib1', + 'product_prefix': '', + 'sources': [ + 'lib1.c', + ], + }, + { + 'target_name': 'lib2', + 'product_name': 'lib2', + 'product_prefix': '', + 'type': 'loadable_module', + 'sources': [ + 'lib2.c', + ], + }, + ], +} diff --git a/third_party/python/gyp/test/module/src/program.c b/third_party/python/gyp/test/module/src/program.c new file mode 100644 index 0000000000..7cc3dd3466 --- /dev/null +++ b/third_party/python/gyp/test/module/src/program.c @@ -0,0 +1,111 @@ +#include +#include + +#if defined(PLATFORM_WIN) +#include +#elif defined(PLATFORM_MAC) || defined(PLATFORM_LINUX) +#include +#include +#include +#include +#define MAX_PATH PATH_MAX +#endif + +#if defined(PLATFORM_WIN) +#define MODULE_SUFFIX ".dll" +#elif defined(PLATFORM_MAC) +#define MODULE_SUFFIX ".so" +#elif defined(PLATFORM_LINUX) +#define MODULE_SUFFIX ".so" +#endif + +typedef void (*module_symbol)(void); +char bin_path[MAX_PATH + 1]; + + +void CallModule(const char* module) { + char module_path[MAX_PATH + 1]; + const char* module_function = "module_main"; + module_symbol funcptr; +#if defined(PLATFORM_WIN) + HMODULE dl; + char drive[_MAX_DRIVE]; + char dir[_MAX_DIR]; + + if (_splitpath_s(bin_path, drive, _MAX_DRIVE, dir, _MAX_DIR, + NULL, 0, NULL, 0)) { + fprintf(stderr, "Failed to split executable path.\n"); + return; + } + if (_makepath_s(module_path, MAX_PATH, drive, dir, module, MODULE_SUFFIX)) { + fprintf(stderr, "Failed to calculate module path.\n"); + return; + } + + dl = LoadLibrary(module_path); + if (!dl) { + fprintf(stderr, "Failed to open module: %s\n", module_path); + return; + } + + funcptr = (module_symbol) GetProcAddress(dl, module_function); + if (!funcptr) { + fprintf(stderr, "Failed to find symbol: %s\n", module_function); + return; + } + funcptr(); + + FreeLibrary(dl); +#elif defined(PLATFORM_MAC) || defined(PLATFORM_LINUX) + void* dl; + char* path_copy = strdup(bin_path); + char* bin_dir = dirname(path_copy); + int path_size = snprintf(module_path, MAX_PATH, "%s/%s%s", bin_dir, module, + MODULE_SUFFIX); + free(path_copy); + if (path_size < 0 || path_size > MAX_PATH) { + fprintf(stderr, "Failed to calculate module path.\n"); + return; + } + module_path[path_size] = 0; + + dl = dlopen(module_path, RTLD_LAZY); + if (!dl) { + fprintf(stderr, "Failed to open module: %s\n", module_path); + return; + } + + funcptr = dlsym(dl, module_function); + if (!funcptr) { + fprintf(stderr, "Failed to find symbol: %s\n", module_function); + return; + } + funcptr(); + + dlclose(dl); +#endif +} + +int main(int argc, char *argv[]) +{ + fprintf(stdout, "Hello from program.c\n"); + fflush(stdout); + +#if defined(PLATFORM_WIN) + if (!GetModuleFileName(NULL, bin_path, MAX_PATH)) { + fprintf(stderr, "Failed to determine executable path.\n"); + return 1; + } +#elif defined(PLATFORM_MAC) || defined(PLATFORM_LINUX) + // Using argv[0] should be OK here since we control how the tests run, and + // can avoid exec and such issues that make it unreliable. + if (!realpath(argv[0], bin_path)) { + fprintf(stderr, "Failed to determine executable path (%s).\n", argv[0]); + return 1; + } +#endif + + CallModule("lib1"); + CallModule("lib2"); + return 0; +} -- cgit v1.2.3