mirror of
https://github.com/bearstonem/openmohaa-vr.git
synced 2026-10-17 18:00:20 +02:00
This makes it so the project doesn't link against the library. The project must be able to run without the presence of the library.
143 lines
5.3 KiB
C
143 lines
5.3 KiB
C
/*
|
|
===========================================================================
|
|
Copyright (C) 2025 the OpenMoHAA team
|
|
|
|
This file is part of OpenMoHAA source code.
|
|
|
|
OpenMoHAA source code is free software; you can redistribute it
|
|
and/or modify it under the terms of the GNU General Public License as
|
|
published by the Free Software Foundation; either version 2 of the License,
|
|
or (at your option) any later version.
|
|
|
|
OpenMoHAA source code is distributed in the hope that it will be
|
|
useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with OpenMoHAA source code; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
===========================================================================
|
|
*/
|
|
|
|
#include "sys_curl.h"
|
|
#include "sys_loadlib.h"
|
|
#include "../qcommon/qcommon.h"
|
|
|
|
curlImport_t curlImport;
|
|
|
|
static void *cURLLib = NULL;
|
|
static qboolean cURLValid;
|
|
cvar_t *sys_curllib = NULL;
|
|
|
|
#ifdef WIN32
|
|
# define DEFAULT_CURL_LIB "libcurl.dll"
|
|
# define ALTERNATE_CURL_LIB "libcurl-3.dll"
|
|
#elif defined(__APPLE__)
|
|
# define DEFAULT_CURL_LIB "libcurl.4.dylib"
|
|
# define ALTERNATE_CURL_LIB "libcurl.3.dylib"
|
|
#else
|
|
# define DEFAULT_CURL_LIB "libcurl.so.4"
|
|
# define ALTERNATE_CURL_LIB "libcurl.so.3"
|
|
#endif
|
|
|
|
/*
|
|
=================
|
|
GPA
|
|
=================
|
|
*/
|
|
static void *GPA(char *str)
|
|
{
|
|
void *rv;
|
|
|
|
rv = Sys_LoadFunction(cURLLib, str);
|
|
if (!rv) {
|
|
Com_Printf("Can't load symbol %s\n", str);
|
|
cURLValid = qfalse;
|
|
return NULL;
|
|
} else {
|
|
Com_DPrintf("Loaded symbol %s (0x%p)\n", str, rv);
|
|
return rv;
|
|
}
|
|
}
|
|
|
|
void Sys_InitCurl()
|
|
{
|
|
#ifdef HAS_LIBCURL
|
|
if (cURLLib) {
|
|
return;
|
|
}
|
|
|
|
sys_curllib = Cvar_Get("sys_curllib", DEFAULT_CURL_LIB, 0);
|
|
|
|
Com_Printf("Loading \"%s\"...\n", sys_curllib->string);
|
|
if (!(cURLLib = Sys_LoadDll(sys_curllib->string, qtrue))) {
|
|
#ifdef ALTERNATE_CURL_LIB
|
|
// On some linux distributions there is no libcurl.so.3, but only libcurl.so.4. That one works too.
|
|
if (!(cURLLib = Sys_LoadDll(ALTERNATE_CURL_LIB, qtrue)))
|
|
#endif
|
|
return;
|
|
}
|
|
|
|
cURLValid = qtrue;
|
|
|
|
curlImport.qcurl_version = GPA("curl_version");
|
|
|
|
curlImport.qcurl_getenv = GPA("curl_getenv");
|
|
curlImport.qcurl_free = GPA("curl_free");
|
|
curlImport.qcurl_slist_append = GPA("curl_slist_append");
|
|
curlImport.qcurl_slist_free_all = GPA("curl_slist_free_all");
|
|
curlImport.qcurl_version_info = GPA("curl_version_info");
|
|
curlImport.qcurl_easy_strerror = GPA("curl_easy_strerror");
|
|
curlImport.qcurl_share_strerror = GPA("curl_share_strerror");
|
|
curlImport.qcurl_easy_pause = GPA("curl_easy_pause");
|
|
curlImport.qcurl_easy_escape = GPA("curl_easy_escape");
|
|
curlImport.qcurl_easy_unescape = GPA("curl_easy_unescape");
|
|
curlImport.qcurl_easy_init = GPA("curl_easy_init");
|
|
curlImport.qcurl_easy_setopt = GPA("curl_easy_setopt");
|
|
curlImport.qcurl_easy_perform = GPA("curl_easy_perform");
|
|
curlImport.qcurl_easy_cleanup = GPA("curl_easy_cleanup");
|
|
curlImport.qcurl_easy_getinfo = GPA("curl_easy_getinfo");
|
|
curlImport.qcurl_easy_duphandle = GPA("curl_easy_duphandle");
|
|
curlImport.qcurl_easy_reset = GPA("curl_easy_reset");
|
|
curlImport.qcurl_easy_recv = GPA("curl_easy_recv");
|
|
curlImport.qcurl_easy_send = GPA("curl_easy_send");
|
|
curlImport.qcurl_easy_upkeep = GPA("curl_easy_upkeep");
|
|
curlImport.qcurl_multi_init = GPA("curl_multi_init");
|
|
curlImport.qcurl_multi_add_handle = GPA("curl_multi_add_handle");
|
|
curlImport.qcurl_multi_remove_handle = GPA("curl_multi_remove_handle");
|
|
curlImport.qcurl_multi_fdset = GPA("curl_multi_fdset");
|
|
curlImport.qcurl_multi_wait = GPA("curl_multi_wait");
|
|
curlImport.qcurl_multi_poll = GPA("curl_multi_poll");
|
|
curlImport.qcurl_multi_wakeup = GPA("curl_multi_wakeup");
|
|
curlImport.qcurl_multi_perform = GPA("curl_multi_perform");
|
|
curlImport.qcurl_multi_cleanup = GPA("curl_multi_cleanup");
|
|
curlImport.qcurl_multi_info_read = GPA("curl_multi_info_read");
|
|
curlImport.qcurl_multi_strerror = GPA("curl_multi_strerror");
|
|
curlImport.qcurl_multi_socket_action = GPA("curl_multi_socket_action");
|
|
curlImport.qcurl_multi_timeout = GPA("curl_multi_timeout");
|
|
curlImport.qcurl_multi_setopt = GPA("curl_multi_setopt");
|
|
curlImport.qcurl_multi_assign = GPA("curl_multi_assign");
|
|
//curlImport.qcurl_multi_get_handles = GPA("curl_multi_get_handles");
|
|
curlImport.qcurl_pushheader_bynum = GPA("curl_pushheader_bynum");
|
|
curlImport.qcurl_pushheader_byname = GPA("curl_pushheader_byname");
|
|
//curlImport.qcurl_multi_waitfds = GPA("curl_multi_waitfds");
|
|
|
|
if (!cURLValid) {
|
|
Sys_ShutdownCurl();
|
|
}
|
|
#endif
|
|
}
|
|
|
|
void Sys_ShutdownCurl()
|
|
{
|
|
if (cURLLib) {
|
|
Com_Printf("Unloading cURL...\n");
|
|
|
|
Sys_UnloadLibrary(cURLLib);
|
|
cURLLib = NULL;
|
|
cURLValid = qfalse;
|
|
memset(&curlImport, 0, sizeof(curlImport));
|
|
}
|
|
}
|