mirror of
https://github.com/morgan9e/FreeRDP
synced 2026-04-15 00:44:19 +09:00
Merge pull request #10975 from akallabeth/freebsd-build-fix
Freebsd build fix
This commit is contained in:
4
.github/workflows/freebsd.yml
vendored
4
.github/workflows/freebsd.yml
vendored
@@ -21,9 +21,11 @@ jobs:
|
||||
libcjson fdk-aac libsoxr sdl2 sdl3 sdl2_ttf sdl2_image opus \
|
||||
png webp openjpeg libjpeg-turbo opensc v4l_compat libv4l uriparser \
|
||||
pkcs11-helper ffmpeg pulseaudio pcsc-lite cups opencl libressl openssl33 \
|
||||
gsm influxpkg-config icu fusefs-libs3
|
||||
gsm influxpkg-config icu fusefs-libs3 ccache opencl-clang-llvm15 faac faad2 \
|
||||
opus-tools openh264 alsa-lib cairo ocl-icd
|
||||
|
||||
run: |
|
||||
export LD_LIBRARY_PATH=/usr/lib/clang/18/lib/freebsd \
|
||||
cmake -GNinja \
|
||||
-C ci/cmake-preloads/config-freebsd.txt \
|
||||
-B ci-build \
|
||||
|
||||
@@ -313,6 +313,7 @@ if(CMAKE_COMPILER_IS_CLANG OR CMAKE_COMPILER_IS_GNUCC)
|
||||
file(REMOVE ${PROJECT_BINARY_DIR}/foo.txt)
|
||||
set(CMAKE_REQUIRED_LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS_SAVED})
|
||||
|
||||
option(WITH_NO_UNDEFINED "compile with -Wl,--no-undefined" OFF)
|
||||
if(WITH_NO_UNDEFINED)
|
||||
check_c_compiler_flag(-Wl,--no-undefined no-undefined)
|
||||
|
||||
|
||||
@@ -3,17 +3,26 @@ set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload")
|
||||
set(BUILD_TESTING_INTERNAL ON CACHE BOOL "preload")
|
||||
set(WITH_MANPAGES ON CACHE BOOL "preload")
|
||||
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "preload")
|
||||
set(WITH_CAIRO ON CACHE BOOL "preload")
|
||||
set(WITH_ALSA ON CACHE BOOL "preload")
|
||||
set(WITH_PULSE ON CACHE BOOL "preload")
|
||||
set(WITH_CHANNELS ON CACHE BOOL "preload")
|
||||
set(WITH_CUPS ON CACHE BOOL "preload")
|
||||
set(WITH_LIBRESSL OFF CACHE BOOL "preload")
|
||||
set(WITH_GSM OFF CACHE BOOL "preload")
|
||||
set(WITH_CLIENT_SDL3 OFF CACHE BOOL "preload")
|
||||
set(WITH_SDL_IMAGE_DIALOGS ON CACHE BOOL "preload")
|
||||
set(WITH_WAYLAND ON CACHE BOOL "preload")
|
||||
set(WITH_KRB5 ON CACHE BOOL "preload")
|
||||
set(WITH_PCSC ON CACHE BOOL "preload")
|
||||
set(WITH_JPEG ON CACHE BOOL "preload")
|
||||
set(WITH_GSM ON CACHE BOOL "preload")
|
||||
set(CHANNEL_SSHAGENT ON CACHE BOOL "preload")
|
||||
set(CHANNEL_RDPECAM ON CACHE BOOL "preload")
|
||||
set(CHANNEL_RDPECAM_CLIENT ON CACHE BOOL "preload")
|
||||
set(WINPR_UTILS_IMAGE_JPEG ON CACHE BOOL "preload")
|
||||
set(WINPR_UTILS_IMAGE_PNG ON CACHE BOOL "preload")
|
||||
set(WINPR_UTILS_IMAGE_WEBP ON CACHE BOOL "preload")
|
||||
set(CHANNEL_URBDRC ON CACHE BOOL "preload")
|
||||
set(CHANNEL_URBDRC_CLIENT ON CACHE BOOL "preload")
|
||||
set(WITH_SERVER ON CACHE BOOL "preload")
|
||||
@@ -48,8 +57,16 @@ set(WITH_DEBUG_X11 OFF CACHE BOOL "preload")
|
||||
set(WITH_DEBUG_X11_LOCAL_MOVESIZE OFF CACHE BOOL "preload")
|
||||
set(WITH_DEBUG_XV OFF CACHE BOOL "preload")
|
||||
set(WITH_SAMPLE ON CACHE BOOL "preload")
|
||||
set(WITH_NO_UNDEFINED ON CACHE BOOL "preload")
|
||||
set(WITH_SANITIZE_ADDRESS OFF CACHE BOOL "preload")
|
||||
set(WITH_FAAC ON CACHE BOOL "preload")
|
||||
set(WITH_FAAD ON CACHE BOOL "preload")
|
||||
set(WITH_LAME ON CACHE BOOL "preload")
|
||||
set(WITH_OPENCL ON CACHE BOOL "preload")
|
||||
set(WITH_OPUS ON CACHE BOOL "preload")
|
||||
set(WITH_SOXR ON CACHE BOOL "preload")
|
||||
set(WITH_OPENH264 ON CACHE BOOL "preload")
|
||||
set(WITH_FDK_AAC ON CACHE BOOL "preload")
|
||||
set(WITH_NO_UNDEFINED OFF CACHE BOOL "preload")
|
||||
set(WITH_SANITIZE_ADDRESS ON CACHE BOOL "preload")
|
||||
set(WITH_FFMPEG ON CACHE BOOL "preload")
|
||||
set(WITH_SWSCALE ON CACHE BOOL "preload")
|
||||
set(WITH_DSP_FFMPEG ON CACHE BOOL "preload")
|
||||
|
||||
@@ -299,65 +299,92 @@ static DWORD module_from_proc(const char* proc, LPSTR lpFilename, DWORD nSize)
|
||||
|
||||
DWORD GetModuleFileNameA(HMODULE hModule, LPSTR lpFilename, DWORD nSize)
|
||||
{
|
||||
if (hModule)
|
||||
{
|
||||
WLog_ERR(TAG, "is not implemented");
|
||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(__linux__)
|
||||
if (!hModule)
|
||||
return module_from_proc("/proc/self/exe", lpFilename, nSize);
|
||||
return module_from_proc("/proc/self/exe", lpFilename, nSize);
|
||||
#elif defined(__FreeBSD__)
|
||||
int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1 };
|
||||
size_t cb = nSize;
|
||||
|
||||
const int rc = sysctl(mib, ARRAYSIZE(mib), lpFilename, &cb, NULL, 0);
|
||||
if ((rc != 0) || (cb > nSize))
|
||||
{
|
||||
const int rc = sysctl(mib, ARRAYSIZE(mib), NULL, &cb, NULL, 0);
|
||||
if (rc != 0)
|
||||
{
|
||||
SetLastError(ERROR_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
char* fullname = calloc(cb + 1, sizeof(char));
|
||||
if (!fullname)
|
||||
{
|
||||
SetLastError(ERROR_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return (DWORD)cb;
|
||||
#elif defined(__NetBSD__)
|
||||
if (!hModule)
|
||||
return module_from_proc("/proc/curproc/exe", lpFilename, nSize);
|
||||
#elif defined(__DragonFly__)
|
||||
if (!hModule)
|
||||
return module_from_proc("/proc/curproc/file", lpFilename, nSize);
|
||||
#elif defined(__MACOSX__)
|
||||
int status;
|
||||
size_t length;
|
||||
|
||||
if (!hModule)
|
||||
{
|
||||
char path[4096];
|
||||
char buffer[4096];
|
||||
uint32_t size = sizeof(path);
|
||||
status = _NSGetExecutablePath(path, &size);
|
||||
|
||||
if (status != 0)
|
||||
size_t cb2 = cb;
|
||||
const int rc = sysctl(mib, ARRAYSIZE(mib), fullname, &cb2, NULL, 0);
|
||||
if ((rc != 0) || (cb2 != cb))
|
||||
{
|
||||
/* path too small */
|
||||
SetLastError(ERROR_INTERNAL_ERROR);
|
||||
free(fullname);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* _NSGetExecutablePath may not return the canonical path,
|
||||
* so use realpath to find the absolute, canonical path.
|
||||
*/
|
||||
realpath(path, buffer);
|
||||
length = strnlen(buffer, sizeof(buffer));
|
||||
|
||||
if (length < nSize)
|
||||
{
|
||||
CopyMemory(lpFilename, buffer, length);
|
||||
lpFilename[length] = '\0';
|
||||
return (DWORD)length;
|
||||
}
|
||||
|
||||
CopyMemory(lpFilename, buffer, nSize - 1);
|
||||
lpFilename[nSize - 1] = '\0';
|
||||
SetLastError(ERROR_INSUFFICIENT_BUFFER);
|
||||
return nSize;
|
||||
}
|
||||
|
||||
if (nSize > 0)
|
||||
{
|
||||
strncpy(lpFilename, fullname, nSize - 1);
|
||||
lpFilename[nSize - 1] = '\0';
|
||||
}
|
||||
free(fullname);
|
||||
|
||||
if (nSize < cb)
|
||||
SetLastError(ERROR_INSUFFICIENT_BUFFER);
|
||||
|
||||
return (DWORD)MIN(nSize, cb);
|
||||
#elif defined(__NetBSD__)
|
||||
return module_from_proc("/proc/curproc/exe", lpFilename, nSize);
|
||||
#elif defined(__DragonFly__)
|
||||
return module_from_proc("/proc/curproc/file", lpFilename, nSize);
|
||||
#elif defined(__MACOSX__)
|
||||
char path[4096] = { 0 };
|
||||
char buffer[4096] = { 0 };
|
||||
uint32_t size = sizeof(path);
|
||||
const int status = _NSGetExecutablePath(path, &size);
|
||||
|
||||
if (status != 0)
|
||||
{
|
||||
/* path too small */
|
||||
SetLastError(ERROR_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* _NSGetExecutablePath may not return the canonical path,
|
||||
* so use realpath to find the absolute, canonical path.
|
||||
*/
|
||||
realpath(path, buffer);
|
||||
const size_t length = strnlen(buffer, sizeof(buffer));
|
||||
|
||||
if (length < nSize)
|
||||
{
|
||||
CopyMemory(lpFilename, buffer, length);
|
||||
lpFilename[length] = '\0';
|
||||
return (DWORD)length;
|
||||
}
|
||||
|
||||
CopyMemory(lpFilename, buffer, nSize - 1);
|
||||
lpFilename[nSize - 1] = '\0';
|
||||
SetLastError(ERROR_INSUFFICIENT_BUFFER);
|
||||
return nSize;
|
||||
#endif
|
||||
WLog_ERR(TAG, "is not implemented");
|
||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
||||
|
||||
Reference in New Issue
Block a user