From 2e51fb74bee6b4dfb983c57e13fcdb0db1aae4e1 Mon Sep 17 00:00:00 2001 From: Brad D <59133880+bedwardly-down@users.noreply.github.com> Date: Fri, 13 Sep 2024 13:15:15 -0500 Subject: [PATCH] Enhancement: Build Improvements (Unix + CoD Plugin) (#272) --- CMakeLists.txt | 49 +++++++++++++++- engine/client/cd_linux.c | 117 ++++++++++++++++++++++++++++++++++--- engine/client/quakedef.h | 65 +++++++++++---------- engine/client/snd_dma.c | 2 +- engine/client/sys_linux.c | 4 ++ engine/common/console.h | 7 +++ engine/common/net_wins.c | 6 +- engine/common/netinc.h | 2 +- engine/http/iweb.h | 3 + engine/qclib/decomp.c | 2 + engine/qclib/pr_exec.c | 16 ++--- engine/qclib/qcc_pr_comp.c | 2 + engine/qclib/qccguistuff.c | 2 + fteqtv/qtv.h | 2 +- plugins/plugin.c | 1 - plugins/plugin.h | 6 ++ 16 files changed, 235 insertions(+), 51 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c70192ab4..6ec421b2e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -113,6 +113,31 @@ ELSE() ENDIF() ENDIF() +# Added these to solve some build issues I ran into - Brad +IF(FTE_BIG_ENDIAN) + ADD_DEFINITIONS(-DFTE_BIG_ENDIAN) +ENDIF() + +IF(FTE_LITTLE_ENDIAN) + ADD_DEFINITIONS(-DFTE_LITTLE_ENDIAN) +ENDIF() + +# libepoll-shim needs to be installed on the BSDs and Mac OSX to get +# some of the server code to compile and work correctly on those platforms - Brad +IF(UNIX AND NOT LINUX AND NOT CYGWIN) + INCLUDE(FetchContent) + FetchContent_Declare( + epoll-shim + GIT_REPOSITORY https://github.com/jiixyj/epoll-shim.git + GIT_TAG master + ) + SET(epoll-shim BUILD_TESTS OFF CACHE INTERNAL "") + SET(epoll-shim BUILD_SHARED_LIBS OFF CACHE INTERNAL "") + FetchContent_MakeAvailable(epoll-shim) + + SET(EPOLL_INC_DIR "${epoll-shim_SOURCE_DIR}/include") +ENDIF() + SET(FTE_BUILD_CONFIG ${CMAKE_HOME_DIRECTORY}/engine/common/config_fteqw.h CACHE FILEPATH "Which build config file to use to control supported features.") SET(FTE_LIB_DEFINES ${FTE_LIB_DEFINES};CONFIG_FILE_NAME=${FTE_BUILD_CONFIG}) SET(FTE_USE_SDL false CACHE BOOL "Force the use of SDL instead of using native builds.") @@ -495,6 +520,12 @@ ELSEIF(UNIX AND NOT FTE_USE_SDL) #linux(ish) ENDIF() ENDIF() + IF(NOT LINUX AND NOT CYGWIN) + FIND_LIBRARY(epoll-shim REQUIRED) + INCLUDE_DIRECTORIES(${EPOLL_INC_DIR}) + SET(FTESV_LIBS ${FTESV_LIBS} epoll-shim) + ENDIF() + SET(FTESV_DEFINES ${FTESV_DEFINES};MULTITHREAD) SET(FTESV_ARCH_FILES ${FTESV_ARCH_FILES} engine/server/sv_sys_unix.c @@ -1056,6 +1087,11 @@ ELSE() ${FTE_CLIENT_FILES} ${FTE_SERVER_FILES} ) + IF(UNIX AND NOT LINUX AND NOT CYGWIN) + FIND_LIBRARY(epoll-shim REQUIRED) + SET(FTE_INCLUDES ${FTE_INCLUDES} "${EPOLL_INC_DIR}") + SET(FTE_LIBS ${FTE_LIBS} epoll-shim) + ENDIF() SET_TARGET_PROPERTIES(fteqw PROPERTIES COMPILE_DEFINITIONS "${FTE_LIB_DEFINES};${FTE_DEFINES};${FTE_REVISON}") TARGET_INCLUDE_DIRECTORIES(fteqw PUBLIC ${FTE_INCLUDES}) TARGET_LINK_LIBRARIES(fteqw ${FTE_LIBS}) @@ -1158,8 +1194,13 @@ ELSE() SET_TARGET_PROPERTIES(qtv PROPERTIES COMPILE_DEFINITIONS "${FTE_REVISON}") IF(WIN32) TARGET_LINK_LIBRARIES(qtv ws2_32 winmm ${SYS_LIBS} ${ZLIB_LIBRARIES}) - ELSE() + ELSEIF(LINUX) TARGET_LINK_LIBRARIES(qtv ${SYS_LIBS} ${ZLIB_LIBRARIES}) + # Add Epoll-shim for the Unixes here - Brad + ELSE() + FIND_LIBRARY(epoll-shim REQUIRED) + TARGET_INCLUDE_DIRECTORIES(qtv PUBLIC "${EPOLL_INC_DIR}") + TARGET_LINK_LIBRARIES(qtv epoll-shim ${SYS_LIBS} ${ZLIB_LIBRARIES}) ENDIF() SET(INSTALLTARGS ${INSTALLTARGS} qtv) ENDIF() @@ -1202,6 +1243,10 @@ ELSE() SET_TARGET_PROPERTIES(httpserver PROPERTIES COMPILE_DEFINITIONS "WEBSERVER;WEBSVONLY;${FTE_REVISON}") IF(WIN32) TARGET_LINK_LIBRARIES(httpserver ws2_32) + ELSEIF(UNIX AND NOT LINUX AND NOT CYGWIN) + FIND_LIBRARY(epoll-shim REQUIRED) + TARGET_INCLUDE_DIRECTORIES(httpserver PUBLIC "${EPOLL_INC_DIR}") + TARGET_LINK_LIBRARIES(httpserver epoll-shim) ENDIF() #SET(INSTALLTARGS ${INSTALLTARGS} httpserver) ENDIF() @@ -1676,7 +1721,7 @@ IF(FTE_PLUG_XMPP) ) SET_TARGET_PROPERTIES(plug_xmpp PROPERTIES COMPILE_DEFINITIONS "FTEPLUGIN;${FTE_LIB_DEFINES}") IF(${WIN32}) - ELSE() + ELSEIF(LINUX OR APPLE) TARGET_LINK_LIBRARIES(plug_xmpp ${SYS_LIBS} resolv) ENDIF() diff --git a/engine/client/cd_linux.c b/engine/client/cd_linux.c index 37e8ab8bd..6a7396770 100644 --- a/engine/client/cd_linux.c +++ b/engine/client/cd_linux.c @@ -20,6 +20,16 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // Quake is a trademark of Id Software, Inc., (c) 1996 Id Software, Inc. All // rights reserved. +/* + * All Unix porting was primarily focused on getting this to work on FreeBSD 14+ + * but hopefully will give others the ability to further improve upon it. + * Most information sourced from the following documentation: + * Linux CDROM ioctl: https://www.kernel.org/doc/html/latest/userspace-api/ioctl/cdrom.html + * FreeBSD 14.0 cd man page: https://man.freebsd.org/cgi/man.cgi?query=cd&sektion=4&apropos=0&manpath=FreeBSD+14.0-RELEASE+and+Ports + * The cdio header file found at /usr/include/sys/cdio.h (very well documented about what everything does) + * - Brad + */ + #include "quakedef.h" #ifndef HAVE_CDPLAYER @@ -40,10 +50,32 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include +#if defined(__linux__) #include +#elif defined(__unix__) && !defined(__CYGWIN__) +#include +#define CDROMEJECT CDDOEJECT +#define CDROMCLOSETRAY CDDOCLOSE +#define CDROMPAUSE CDDOPAUSE +#define CDROMRESUME CDDORESUME +#define CDROMRESET CDDORESET +#define CDROMSTOP CDDOSTOP +#define CDROMSTART CDDOSTART +#define CDROMREADTOCHDR CDREADHEADER +#define CDROMREADTOCENTRY CDIOREADTOCENTRY +#define CDROMSUBCHNL CDREADSUBQ +#define CDROM_MSF CD_MSF_FORMAT +#define CDROM_DATA_TRACK CD_SUBQ_DATA +#define CDROM_AUDIO_PAUSED CD_AS_PLAY_PAUSED +#define CDROM_AUDIO_PLAY CD_AS_PLAY_IN_PROGRESS +#endif static int cdfile = -1; +#if defined(__unix__) && !defined(__APPLE__) && !defined(__CYGWIN__) && !defined(__linux__) +static char cd_dev[64] = "/dev/cd0"; +#else static char cd_dev[64] = "/dev/cdrom"; +#endif static qboolean playing; void CDAudio_Eject(void) @@ -67,59 +99,109 @@ void CDAudio_CloseDoor(void) int CDAudio_GetAudioDiskInfo(void) { +#ifdef __linux__ struct cdrom_tochdr tochdr; +#elif defined(__unix__) && !defined(__CYGWIN__) + struct ioc_toc_header tochdr; + struct cd_sub_channel_track_info trk; +#endif if (cdfile == -1) return -1; if ( ioctl(cdfile, CDROMREADTOCHDR, &tochdr) == -1 ) - { + { Con_DPrintf("ioctl cdromreadtochdr failed\n"); return -1; - } + } - if (tochdr.cdth_trk0 < 1) +#ifdef __linux__ + if (tochdr.cdth_trk0 < 1) +#elif defined(__unix__) && !defined(__CYGWIN__) + if (trk.track_number < 0) // track_number may not work correctly here - Brad +#endif { Con_DPrintf("CDAudio: no music tracks\n"); return -1; } +#ifdef __linux__ return tochdr.cdth_trk1; +#elif defined(__unix__) && !defined(__CYGWIN__) + return tochdr.starting_track; +#else + Con_DPrintf("CDAudio: no music tracks\n"); + return -1; +#endif } void CDAudio_Play(int track) { +#ifdef __linux__ struct cdrom_tocentry entry; struct cdrom_ti ti; +#elif defined(__unix__) && !defined(__CYGWIN__) // This all may be wrong, but it should be close - Brad + struct ioc_toc_header tochdr; // cd drive header info (for getting start and end track info mostly) + struct ioc_read_toc_single_entry entry; // individual audio track's entry info + struct cd_sub_channel_info ti; // individual audio track's subchannel info (for indexing and whatnot) + struct ioc_play_track play; // cd drive audio indexing +#endif if (cdfile == -1) return; // don't try to play a non-audio track +#ifdef __linux__ entry.cdte_track = track; entry.cdte_format = CDROM_MSF; - if ( ioctl(cdfile, CDROMREADTOCENTRY, &entry) == -1 ) +#elif defined(__unix__) && !defined(__CYGWIN__) + entry.track = track; + entry.address_format = CDROM_MSF; +#endif + + if ( ioctl(cdfile, CDROMREADTOCENTRY, &entry) == -1 ) { Con_DPrintf("ioctl cdromreadtocentry failed\n"); return; } +#ifdef __linux__ if (entry.cdte_ctrl == CDROM_DATA_TRACK) +#elif defined(__unix__) && !defined(__CYGWIN__) + if (entry.entry.control == CDROM_DATA_TRACK) +#endif { Con_Printf("CDAudio: track %i is not audio\n", track); return; } +#ifdef __linux__ ti.cdti_trk0 = track; ti.cdti_trk1 = track; ti.cdti_ind0 = 1; ti.cdti_ind1 = 99; +#elif defined(__unix__) && !defined(__CYGWIN__) + if (ti.what.position.track_number == 0 || ti.what.position.track_number == 1) + { + entry.track = track; + } + if (ti.what.position.index_number == 0) + { + play.start_track = tochdr.starting_track; + } + if (ti.what.position.index_number == 1) + { + play.end_track = tochdr.ending_track; + } + +#define CDROMPLAYTRKIND ti.what.position.track_number +#endif if ( ioctl(cdfile, CDROMPLAYTRKIND, &ti) == -1 ) - { + { Con_DPrintf("ioctl cdromplaytrkind failed\n"); return; - } + } if ( ioctl(cdfile, CDROMRESUME) == -1 ) Con_DPrintf("ioctl cdromresume failed\n"); @@ -161,21 +243,42 @@ void CDAudio_Resume(void) void CDAudio_Update(void) { +#ifdef __linux__ struct cdrom_subchnl subchnl; static time_t lastchk; +#elif defined(__unix__) && !defined(__CYGWIN__) + struct cd_sub_channel_info subchnl; + struct ioc_read_subchannel cdsc; // subchn.cdsc_format workaround - Brad + // Note: there doesn't seem to be a way to check how much time is left for playing + // cd audio without doing some extra manual work, so I'll be omitting it from + // the unix checks for the time being - Brad +#endif - if (playing && lastchk < time(NULL)) + if (playing +#ifdef __linux__ + && lastchk < time(NULL) +#endif + ) { +#ifdef __linux__ lastchk = time(NULL) + 2; //two seconds between checks subchnl.cdsc_format = CDROM_MSF; +#elif defined(__unix__) && !defined(__CYGWIN__) + cdsc.address_format = CDROM_MSF; +#endif if (ioctl(cdfile, CDROMSUBCHNL, &subchnl) == -1 ) { Con_DPrintf("ioctl cdromsubchnl failed\n"); playing = false; return; } +#ifdef __linux__ if (subchnl.cdsc_audiostatus != CDROM_AUDIO_PLAY && subchnl.cdsc_audiostatus != CDROM_AUDIO_PAUSED) +#elif defined(__unix__) && !defined(__CYGWIN__) + if (subchnl.header.audio_status != CDROM_AUDIO_PLAY && + subchnl.header.audio_status != CDROM_AUDIO_PAUSED) +#endif { playing = false; Media_EndedTrack(); diff --git a/engine/client/quakedef.h b/engine/client/quakedef.h index 91f02f550..17769d9b6 100644 --- a/engine/client/quakedef.h +++ b/engine/client/quakedef.h @@ -26,7 +26,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. //for msvc #pragma message lines #if defined(_MSC_VER) -#define MSVC_LINE __FILE__"("STRINGIFY(__LINE__)"):" +#define MSVC_LINE __FILE__"("STRINGIFY(__LINE__)"):" #define warningmsg(s) message(MSVC_LINE s) #elif __GNUC__ >=4 #define warningmsg(s) message(s) @@ -50,37 +50,37 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #pragma warning( 2 : 4701) #pragma warning(2:4132 4268)// const object not initialized -#pragma warning(2:4032) // function arg has different type from declaration -#pragma warning(2:4092) // 'sizeof' value too big +#pragma warning(2:4032) // function arg has different type from declaration +#pragma warning(2:4092) // 'sizeof' value too big #pragma warning(2:4132 4268)// const object not initialized -//#pragma warning(2:4152) // pointer conversion between function and data -#pragma warning(2:4239) // standard doesn't allow this conversion -#pragma warning(2:4701) // local variable used without being initialized -//#pragma warning(2:4706) // if (a=b) instead of (if a==b) -#pragma warning(2:4709) // comma in array subscript -#pragma warning(3:4061) // not all enum values tested in switch statement -#pragma warning(3:4710) // inline function was not inlined -#pragma warning(3:4121) // space added for structure alignment -#pragma warning(3:4505) // unreferenced local function removed -#pragma warning(3:4019) // empty statement at global scope -//#pragma warning(3:4057) // pointers refer to different base types -#pragma warning(3:4125) // decimal digit terminates octal escape -#pragma warning(2:4131) // old-style function declarator -#pragma warning(3:4211) // extern redefined as static -//#pragma warning(3:4213) // cast on left side of = is non-standard -#pragma warning(3:4222) // member function at file scope shouldn't be static +//#pragma warning(2:4152) // pointer conversion between function and data +#pragma warning(2:4239) // standard doesn't allow this conversion +#pragma warning(2:4701) // local variable used without being initialized +//#pragma warning(2:4706) // if (a=b) instead of (if a==b) +#pragma warning(2:4709) // comma in array subscript +#pragma warning(3:4061) // not all enum values tested in switch statement +#pragma warning(3:4710) // inline function was not inlined +#pragma warning(3:4121) // space added for structure alignment +#pragma warning(3:4505) // unreferenced local function removed +#pragma warning(3:4019) // empty statement at global scope +//#pragma warning(3:4057) // pointers refer to different base types +#pragma warning(3:4125) // decimal digit terminates octal escape +#pragma warning(2:4131) // old-style function declarator +#pragma warning(3:4211) // extern redefined as static +//#pragma warning(3:4213) // cast on left side of = is non-standard +#pragma warning(3:4222) // member function at file scope shouldn't be static #pragma warning(3:4234 4235)// keyword not supported or reserved for future -#pragma warning(3:4504) // type ambiguous; simplify code -#pragma warning(3:4507) // explicit linkage specified after default linkage -#pragma warning(3:4515) // namespace uses itself +#pragma warning(3:4504) // type ambiguous; simplify code +#pragma warning(3:4507) // explicit linkage specified after default linkage +#pragma warning(3:4515) // namespace uses itself #pragma warning(3:4516 4517)// access declarations are deprecated -#pragma warning(3:4670) // base class of thrown object is inaccessible -#pragma warning(3:4671) // copy ctor of thrown object is inaccessible -#pragma warning(3:4673) // thrown object cannot be handled in catch block -#pragma warning(3:4674) // dtor of thrown object is inaccessible -#pragma warning(3:4705) // statement has no effect (example: a+1;) +#pragma warning(3:4670) // base class of thrown object is inaccessible +#pragma warning(3:4671) // copy ctor of thrown object is inaccessible +#pragma warning(3:4673) // thrown object cannot be handled in catch block +#pragma warning(3:4674) // dtor of thrown object is inaccessible +#pragma warning(3:4705) // statement has no effect (example: a+1;) -#pragma warning(3:4013) // function undefined, assuming extern returning int +#pragma warning(3:4013) // function undefined, assuming extern returning int #pragma warning( 4 : 4267) //truncation from const double to float @@ -96,7 +96,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #endif - #define QUAKEDEF_H__ #ifdef __linux__ @@ -133,12 +132,18 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #endif #include +#if defined(__unix__) && !defined(__CYGWIN__) +#include +#endif + #ifdef USE_MSVCRT_DEBUG #define _CRTDBG_MAP_ALLOC #include #endif #if defined(_WIN32) || defined(__DJGPP__) #include +#elif defined(__unix__) && !defined(__linux__) // quick hack for the bsds and other unix systems + #include #elif !defined(alloca) //alloca.h isn't present on bsd (stdlib.h should define it to __builtin_alloca, and we can check for that here). #include #endif @@ -403,7 +408,7 @@ void COM_AssertMainThread(const char *msg); #endif extern qboolean msg_suppress_1; // suppresses resolution and cache size console output - // an fullscreen DIB focus gain/loss + // an fullscreen DIB focus gain/loss #ifndef HAVE_CLIENT #define isDedicated true diff --git a/engine/client/snd_dma.c b/engine/client/snd_dma.c index eaa8bded7..4d24cf009 100644 --- a/engine/client/snd_dma.c +++ b/engine/client/snd_dma.c @@ -1841,7 +1841,7 @@ extern sounddriver_t XAUDIO2_Output; extern sounddriver_t DSOUND_Output; #endif sounddriver_t fte_weakstruct SDL_Output; -#ifdef __linux__ +#if defined(__unix__) && !defined(__APPLE__) // Alsa, OSS and PulseAudio can all be installed on most Unixes these days; They can fall back to OSS_Output if needed - Brad extern sounddriver_t ALSA_Output; extern sounddriver_t Pulse_Output; #endif diff --git a/engine/client/sys_linux.c b/engine/client/sys_linux.c index ab80954c3..2f3e28b0d 100644 --- a/engine/client/sys_linux.c +++ b/engine/client/sys_linux.c @@ -66,6 +66,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #undef malloc +#if defined(__unix__) && !defined(__CYGWIN__) +#include +#endif + static int noconinput = 0; static int nostdout = 0; diff --git a/engine/common/console.h b/engine/common/console.h index 7594fbdc5..324c2f495 100644 --- a/engine/common/console.h +++ b/engine/common/console.h @@ -21,6 +21,13 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // console // +// undefine this to solve build issues with epoll-shim - Brad +#if defined(__unix__) && !defined(__linux__) && !defined(__CYGWIN__) +#ifdef close +#undef close +#endif +#endif + #define MAXCONCOLOURS 16 typedef struct { float fr, fg, fb; diff --git a/engine/common/net_wins.c b/engine/common/net_wins.c index deba6a23c..6866015ea 100644 --- a/engine/common/net_wins.c +++ b/engine/common/net_wins.c @@ -26,6 +26,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include //to delete the file/socket. #endif +#if defined(__unix__) && !defined(__linux__) && !defined(__APPLE__) && !defined(__CYGWIN__) +#include +#endif + extern ftemanifest_t *fs_manifest; // Eww, eww. This is hacky but so is netinc.h, so bite me @@ -41,7 +45,7 @@ extern ftemanifest_t *fs_manifest; #define ntohl BigLong #endif -#if defined(_WIN32) || defined(__linux__) && !defined(ANDROID) +#if defined(_WIN32) || defined(__unix__) && !defined(ANDROID) #define USE_GETHOSTNAME_LOCALLISTING #endif diff --git a/engine/common/netinc.h b/engine/common/netinc.h index 8b606d954..d95aafa68 100644 --- a/engine/common/netinc.h +++ b/engine/common/netinc.h @@ -140,7 +140,7 @@ #include #endif - #ifdef __linux__ + #if defined(__unix__) && !defined(__CYGWIN__) //requires linux 2.6.27 up (and equivelent libc) //note that BSD does tend to support the api, but emulated. //this works around the select FD limit, and supposedly has better performance. diff --git a/engine/http/iweb.h b/engine/http/iweb.h index 00c900dbe..79709d94e 100644 --- a/engine/http/iweb.h +++ b/engine/http/iweb.h @@ -36,6 +36,9 @@ struct sockaddr; struct sockaddr_qstorage; int NetadrToSockadr (netadr_t *a, struct sockaddr_qstorage *s); +#if defined(__unix__) && !defined(__CYGWIN__) +#include +#endif typedef qboolean iwboolean; diff --git a/engine/qclib/decomp.c b/engine/qclib/decomp.c index d89826287..dbd11a9d8 100644 --- a/engine/qclib/decomp.c +++ b/engine/qclib/decomp.c @@ -9,6 +9,8 @@ #if defined(_WIN32) || defined(__DJGPP__) #include +#elif defined(__unix__) && !defined(__linux__) // quick hack for the bsds and other unix systems +#include #else #include #endif diff --git a/engine/qclib/pr_exec.c b/engine/qclib/pr_exec.c index 69451f43b..3b70e62d2 100644 --- a/engine/qclib/pr_exec.c +++ b/engine/qclib/pr_exec.c @@ -12,6 +12,8 @@ #if defined(_WIN32) || defined(__DJGPP__) #include +#elif defined(__unix__) && !defined(__linux__) // quick hack for the bsds and other unix systems + #include #elif !defined(alloca) //alloca.h isn't present on bsd (stdlib.h should define it to __builtin_alloca, and we can check for that here). #include #endif @@ -361,9 +363,9 @@ static void PDECL PR_PrintRelevantLocals(progfuncs_t *progfuncs) else fdef = ED_FieldAtOfs(progfuncs, ((eval_t *)&pr_globals[st16[st].b])->_int); if (fdef) - externs->Printf(" %s.%s: %s\n", PR_StringToNative(&progfuncs->funcs, ent->s_name), PR_StringToNative(&progfuncs->funcs, fld->s_name), PR_ValueString(progfuncs, fdef->type, ptr, false)); + externs->Printf(" %s.%s: %s\n", PR_StringToNative(&progfuncs->funcs, ent->s_name), PR_StringToNative(&progfuncs->funcs, fld->s_name), PR_ValueString(progfuncs, fdef->type, ptr, false)); else - externs->Printf(" %s.%s: BAD FIELD DEF - %#x\n", PR_StringToNative(&progfuncs->funcs, ent->s_name), PR_StringToNative(&progfuncs->funcs, fld->s_name), ptr->_int); + externs->Printf(" %s.%s: BAD FIELD DEF - %#x\n", PR_StringToNative(&progfuncs->funcs, ent->s_name), PR_StringToNative(&progfuncs->funcs, fld->s_name), ptr->_int); } } } @@ -452,20 +454,20 @@ void PDECL PR_StackTrace (pubprogfuncs_t *ppf, int showlocals) { if (f->parm_size[arg] == 3) { //looks like a vector. print it as such - externs->Printf(" arg%i(%i): [%g, %g, %g]\n", arg, f->parm_start+ofs, *(float *)(globalbase+ofs), *(float *)(globalbase+ofs+1), *(float *)(globalbase+ofs+2)); + externs->Printf(" arg%i(%i): [%g, %g, %g]\n", arg, f->parm_start+ofs, *(float *)(globalbase+ofs), *(float *)(globalbase+ofs+1), *(float *)(globalbase+ofs+2)); ofs += 2; } else - externs->Printf(" arg%i(%i): %g===%i\n", arg, f->parm_start+ofs, *(float *)(globalbase+ofs), *(int *)(globalbase+ofs) ); + externs->Printf(" arg%i(%i): %g===%i\n", arg, f->parm_start+ofs, *(float *)(globalbase+ofs), *(int *)(globalbase+ofs) ); } else { - externs->Printf(" unk(%i): %g===%i\n", f->parm_start+ofs, *(float *)(globalbase+ofs), *(int *)(globalbase+ofs) ); + externs->Printf(" unk(%i): %g===%i\n", f->parm_start+ofs, *(float *)(globalbase+ofs), *(int *)(globalbase+ofs) ); } } else { - externs->Printf(" %s: %s\n", PR_StringToNative(ppf, local->s_name), PR_ValueString(progfuncs, local->type, (eval_t*)(globalbase+ofs), false)); + externs->Printf(" %s: %s\n", PR_StringToNative(ppf, local->s_name), PR_ValueString(progfuncs, local->type, (eval_t*)(globalbase+ofs), false)); if (local->type == ev_vector) ofs+=2; } @@ -2136,4 +2138,4 @@ pbool PDECL PR_GetBuiltinCallInfo (pubprogfuncs_t *ppf, int *builtinnum, char *f return true; } return false; -} \ No newline at end of file +} diff --git a/engine/qclib/qcc_pr_comp.c b/engine/qclib/qcc_pr_comp.c index add8c6c8b..166a47842 100644 --- a/engine/qclib/qcc_pr_comp.c +++ b/engine/qclib/qcc_pr_comp.c @@ -5,6 +5,8 @@ #if defined(_WIN32) || defined(__DJGPP__) #include +#elif defined(__unix__) && !defined(__linux__) // quick hack for the bsds and other unix systems + #include #elif !defined(alloca) //alloca.h isn't present on bsd (stdlib.h should define it to __builtin_alloca, and we can check for that here). #include #endif diff --git a/engine/qclib/qccguistuff.c b/engine/qclib/qccguistuff.c index 5d99c2a0e..56fc57d4f 100644 --- a/engine/qclib/qccguistuff.c +++ b/engine/qclib/qccguistuff.c @@ -7,6 +7,8 @@ #if defined(_WIN32) || defined(__DJGPP__) #include +#elif defined(__unix__) && !defined(__linux__) // quick hack for the bsds and other unix systems +#include #else #include #endif diff --git a/fteqtv/qtv.h b/fteqtv/qtv.h index 68c8e3e76..ce3a500fd 100644 --- a/fteqtv/qtv.h +++ b/fteqtv/qtv.h @@ -157,7 +157,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define ioctlsocket ioctl #define closesocket close -#elif defined(linux) || defined(ixemul) || defined(MACOSX) // I hope by adding MACOSX here it doesnt stop it from being natively built on macosx +#elif (defined(unix) && !defined(__CYGWIN__)) || defined(ixemul) // I hope by adding MACOSX here it doesnt stop it from being natively built on macosx #include #include #include diff --git a/plugins/plugin.c b/plugins/plugin.c index 76266eaa9..f7966cc27 100644 --- a/plugins/plugin.c +++ b/plugins/plugin.c @@ -305,4 +305,3 @@ qboolean NATIVEEXPORT FTEPlug_Init(plugcorefuncs_t *corefuncs) return Plug_Init(); } - diff --git a/plugins/plugin.h b/plugins/plugin.h index 8af8cc2cb..970db9480 100644 --- a/plugins/plugin.h +++ b/plugins/plugin.h @@ -47,6 +47,12 @@ # define strnicmp strncasecmp #endif +// Define these mostly for cod but could apply to other game tech +// Used this for guidance: https://github.com/xtnded/codextended - Brad +extern long xtn_LittleLong( long l ); +extern short xtn_LittleShort( short s ); +extern float xtn_LittleFloat( float f ); + #include #include #include