Skip to content

Commit 8dadfb4

Browse files
committed
Added sys_openfile console command(and menu option) to web and flatpak(via cmake+dbus) builds, to 'install' packages on sandboxed systems a bit more easily.
Cmake: Add FTE_WERROR option, defaults to true in debug builds and off in release builds (in case future compilers have issues). Cmake: Pull in libXscreensaver so we don't get interrupted by screensavers when playing demos. Make: Added `make webcl-rel` for a web build without server bloat (eg for sites focused on demo playback. Yes, this means you XantoM). fteqcc: Include the decompiler in fteqcc (non-gui) builds ('-d' arg). fteqcc: Decompiler can now mostly handle hexen2 mods without any unknown opcodes. Allow ezHud and OpenSSL to be compiled as in-engine plugins, potentially for web and windows ports respectively. Web: Fix support for ogg vorbis. Add support for voip. Web: Added basic support for WebXR. QTV: Don't try seeking on unseekable qtv streams. Don't spam when developer 1 is set. QTV: add support for some eztv extensions. MVD: added hack to use ktx's vweps in mvd where mvdsv doesn't bother to record the info. qwfwd: hack around a hack in qwfwd, allowing it to work again. recording: favour qwd in single player, instead of mvd. Protocol: reduce client memory used for precache names. Bump maximum precache counts - some people are just abusive, yes you Orl. hexen2: add enough clientside protocol compat to play the demo included with h2mp. lacks effects. in_xflip: restored this setting. fs_hidesyspaths: new cvar, defaults to enabled so you won't find your username or whatever turning up in screenshots or the like. change it to 0 before debuging stuff eg via 'path'. gl_overbright_models: Added cvar to match QS. netchan: Added MTU determination, we'll no longer fail to connect when routers stupidly drop icmp packets. Win: try a few other versions of xinput too. CSQC: Added a CSQC_GenerateMaterial function, to give the csqc a chance to generate custom materials. MenuQC: Added support for the skeletal objects API.
1 parent ea05098 commit 8dadfb4

File tree

199 files changed

+10050
-3754
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

199 files changed

+10050
-3754
lines changed

CMakeLists.txt

Lines changed: 84 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,19 @@ IF(JPEG_FOUND)
174174
ELSE()
175175
MESSAGE(WARNING "libjpeg library NOT available. Who cares?")
176176
SET(FTE_LIB_DEFINES ${FTE_LIB_DEFINES};NO_JPEG)
177+
SET(JPEG_LIBRARIES)
178+
ENDIF()
179+
180+
SET(FTE_DEP_DBUS true CACHE BOOL "Link against libdbus.")
181+
IF(FTE_DEP_DBUS)
182+
FIND_PACKAGE(DBus1)
183+
ENDIF()
184+
IF(DBUS1_FOUND)
185+
INCLUDE_DIRECTORIES( ${DBus1_INCLUDE_DIRS} )
186+
SET(FTE_LIB_DEFINES ${FTE_LIB_DEFINES};HAVE_DBUS)
187+
SET(FTE_LIBS ${FTE_LIBS} ${DBus1_LIBRARIES})
188+
ELSE()
189+
MESSAGE(WARNING "libdbus-1 library NOT available. Who cares?")
177190
ENDIF()
178191

179192
SET(FTE_DEP_PNG true CACHE BOOL "Link against libpng.")
@@ -187,6 +200,7 @@ IF(PNG_FOUND)
187200
ELSE()
188201
MESSAGE(WARNING "libpng library NOT available. Good luck with screenshots.")
189202
SET(FTE_LIB_DEFINES ${FTE_LIB_DEFINES};NO_PNG)
203+
SET(PNG_LIBRARIES)
190204
ENDIF()
191205

192206
SET(FTE_DEP_FREETYPE true CACHE BOOL "Link against libfreetype.")
@@ -221,7 +235,7 @@ ELSE()
221235
ENDIF()
222236

223237
SET(FTE_DEP_VORBISFILE true CACHE BOOL "Link against libvorbisfile.")
224-
IF(FTE_DEP_VROBISFILE)
238+
IF(FTE_DEP_VORBISFILE)
225239
FIND_LIBRARY(VORBISFILE_LIBRARY NAMES vorbisfile)
226240
ENDIF()
227241
IF(NOT VORBISFILE_LIBRARY)
@@ -230,18 +244,30 @@ IF(NOT VORBISFILE_LIBRARY)
230244
SET(FTE_LIB_DEFINES ${FTE_LIB_DEFINES};NO_OGG)
231245
ENDIF()
232246

247+
IF(CMAKE_BUILD_TYPE MATCHES "Debug")
248+
SET(FTE_WERROR true CACHE BOOL "Warnings as errors.")
249+
ELSE()
250+
SET(FTE_WERROR false CACHE BOOL "Warnings as errors.")
251+
ENDIF()
252+
IF(FTE_WERROR)
253+
SET(FTE_WERROR_ARG "-Werror")
254+
ELSE()
255+
SET(FTE_WERROR_ARG "")
256+
ENDIF()
257+
233258
IF(CMAKE_C_COMPILER_ID MATCHES "Clang")
234259
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-pointer-sign")
235260

236261
IF(CMAKE_BUILD_TYPE MATCHES "Debug")
237-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror -Wno-pointer-sign -Wno-unknown-pragmas -Wno-format-zero-length -Wno-strict-aliasing -Wno-error=cpp")
262+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall ${FTE_WERROR_ARG} -Wno-pointer-sign -Wno-unknown-pragmas -Wno-format-zero-length -Wno-strict-aliasing -Wno-error=cpp")
238263
ELSE()
239-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3")
264+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3 ${FTE_WERROR_ARG}")
240265
ENDIF()
241266
endif()
242267
IF(CMAKE_C_COMPILER_ID MATCHES "GNU")
243268
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wstrict-prototypes") #
244269
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wold-style-definition") #k&r c is weird and can't cope with 64bit types.
270+
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-parameter-type") #k&r c is weird and can't cope with 64bit types.
245271
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wold-style-declaration") #
246272
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wpointer-arith") #void* stuff
247273
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wvla") #msvc doesn't support vla
@@ -254,9 +280,9 @@ IF(CMAKE_C_COMPILER_ID MATCHES "GNU")
254280
#might as well do this, public builds use the regular Makefile.
255281
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native")
256282
IF(CMAKE_BUILD_TYPE MATCHES "Debug")
257-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror -Wno-pointer-sign -Wno-unknown-pragmas -Wno-format-zero-length -Wno-strict-aliasing -Wno-error=cpp")
283+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall ${FTE_WERROR_} -Wno-pointer-sign -Wno-unknown-pragmas -Wno-format-zero-length -Wno-strict-aliasing -Wno-error=cpp")
258284
ELSE()
259-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3")
285+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3 ${FTE_WERROR_}")
260286
ENDIF()
261287
IF (NOT FTE_USE_SDL)
262288
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,--warn-common")
@@ -266,8 +292,8 @@ ENDIF()
266292
IF(CMAKE_BUILD_TYPE MATCHES "Debug")
267293
IF(NOT ${WIN32})
268294
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector-strong")
295+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu89")
269296
ENDIF()
270-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu89")
271297
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_DEBUG")
272298
ENDIF()
273299
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_FILE_OFFSET_BITS=64")
@@ -289,6 +315,32 @@ FUNCTION(EMBED_PLUGIN_META PLUGNAME PLUGTITLE PLUGDESC)
289315
VERBATIM)
290316
ENDFUNCTION()
291317

318+
SET(FTE_DEP_GNUTLS true CACHE BOOL "Link against gnutls")
319+
IF(FTE_DEP_GNUTLS)
320+
FIND_PACKAGE(GnuTLS)
321+
IF(NOT GNUTLS_FOUND)
322+
MESSAGE(WARNING "gnutls library NOT available. HTTPS/DTLS will not be available.")
323+
SET(FTE_LIB_DEFINES ${FTE_LIB_DEFINES};NO_GNUTLS)
324+
ELSE()
325+
IF(WIN32)
326+
SET(GNUTLS_STATIC true CACHE BOOL "Link gnutls statically.") #usually as an .so though. :/
327+
ELSE()
328+
SET(GNUTLS_STATIC false CACHE BOOL "Link gnutls statically.") #usually as an .so though. :/
329+
ENDIF()
330+
IF(GNUTLS_STATIC)
331+
SET(FTE_LIB_DEFINES ${FTE_LIB_DEFINES};GNUTLS_STATIC)
332+
SET(FTE_LIBS ${FTE_LIBS} ${GNUTLS_LIBRARY})
333+
SET(FTESV_LIBS ${FTESV_LIBS} ${GNUTLS_LIBRARY})
334+
ENDIF()
335+
ENDIF()
336+
ENDIF()
337+
IF(WIN32)
338+
SET(FTE_DEP_WINSSPI true CACHE BOOL "Link against winsspi(schannel)")
339+
IF(NOT FTE_DEP_WINSSPI)
340+
SET(FTE_DEFINES ${FTE_DEFINES};NO_WINSSPI)
341+
ENDIF()
342+
ENDIF()
343+
292344
IF(${ANDROID})
293345
# FIND_PACKAGE(Freetype REQUIRED)
294346

@@ -315,6 +367,7 @@ ELSEIF(WIN32 AND NOT FTE_USE_SDL)
315367
engine/client/winquake.rc
316368
engine/common/sys_win_threads.c
317369
engine/common/net_ssl_winsspi.c
370+
engine/common/net_ssl_gnutls.c
318371
engine/common/fs_win32.c
319372
engine/client/cd_win.c
320373
engine/client/in_win.c
@@ -345,25 +398,13 @@ ELSEIF(WIN32 AND NOT FTE_USE_SDL)
345398
engine/client/winquake.rc
346399
engine/common/sys_win_threads.c
347400
engine/common/net_ssl_winsspi.c
401+
engine/common/net_ssl_gnutls.c
348402
engine/common/fs_win32.c
349403
engine/server/sv_sys_win.c
350404
)
351405
ELSEIF(UNIX AND NOT FTE_USE_SDL) #linux(ish)
352406
#openbsd will have issues with snd_linux.c
353407

354-
FIND_PACKAGE(GnuTLS)
355-
IF(NOT GNUTLS_FOUND)
356-
MESSAGE(WARNING "gnutls library NOT available. HTTPS/DTLS will not be available.")
357-
SET(FTE_LIB_DEFINES ${FTE_LIB_DEFINES};NO_GNUTLS)
358-
ELSE()
359-
SET(GNUTLS_STATIC false CACHE BOOL "Link gnutls statically.") #usually as an .so though. :/
360-
IF(GNUTLS_STATIC)
361-
SET(FTE_LIB_DEFINES ${FTE_LIB_DEFINES};GNUTLS_STATIC)
362-
SET(FTE_LIBS ${FTE_LIBS} ${GNUTLS_LIBRARY})
363-
SET(FTESV_LIBS ${FTESV_LIBS} ${GNUTLS_LIBRARY})
364-
ENDIF()
365-
ENDIF()
366-
367408
#linux-only packages
368409
FIND_PACKAGE(ALSA)
369410
IF(ALSA_FOUND)
@@ -382,6 +423,10 @@ ELSEIF(UNIX AND NOT FTE_USE_SDL) #linux(ish)
382423
SET(FTE_LIB_DEFINES ${FTE_LIB_DEFINES};NO_X11_RANDR)
383424
MESSAGE(WARNING "Xrandr library NOT available.")
384425
ENDIF()
426+
IF (NOT X11_Xscreensaver_FOUND)
427+
SET(FTE_LIB_DEFINES ${FTE_LIB_DEFINES};NO_X11_XSS)
428+
MESSAGE(WARNING "Xss library NOT available.")
429+
ENDIF()
385430
ELSE()
386431
MESSAGE(WARNING "x11 library NOT available.")
387432
SET(FTE_LIB_DEFINES ${FTE_LIB_DEFINES};NO_X11)
@@ -450,7 +495,7 @@ ELSEIF(UNIX AND NOT FTE_USE_SDL) #linux(ish)
450495
ENDIF()
451496
ENDIF()
452497

453-
SET(FTESV_DEFINES MULTITHREAD)
498+
SET(FTESV_DEFINES ${FTESV_DEFINES};MULTITHREAD)
454499
SET(FTESV_ARCH_FILES ${FTESV_ARCH_FILES}
455500
engine/server/sv_sys_unix.c
456501
engine/common/sys_linux_threads.c
@@ -481,7 +526,7 @@ ELSEIF(1) #SDL
481526
engine/gl/gl_vidsdl.c
482527
)
483528

484-
SET(FTESV_DEFINES FTE_SDL)
529+
SET(FTESV_DEFINES ${FTESV_DEFINES};MULTITHREAD)
485530
SET(FTESV_LIBS ${FTESV_LIBS} ${SYS_LIBS} ${CMAKE_DL_LIBS} ${SDL2_LIBRARIES})
486531

487532
IF(WIN32)
@@ -505,6 +550,7 @@ ELSEIF(1) #SDL
505550
engine/common/sys_linux_threads.c
506551
engine/server/sv_sys_unix.c
507552
)
553+
SET(FTESV_LIBS ${FTESV_LIBS} pthread)
508554
ENDIF()
509555
ELSE()
510556
# engine/common/sys_linux_threads.c
@@ -862,7 +908,7 @@ SET(FTE_Q3_FILES
862908
)
863909

864910
#For annoying compressed gltf2 files.
865-
SET(FTE_DEP_DRACO false CACHE BOOL "Link against libdraco.")
911+
SET(FTE_DEP_DRACO false CACHE BOOL "Link against libdraco (apache2).")
866912
IF(FTE_DEP_DRACO)
867913
FIND_LIBRARY(
868914
DRACO_LIBRARY
@@ -1052,8 +1098,8 @@ ELSE()
10521098
imgtool.c
10531099
iqm/iqm.h
10541100
)
1055-
SET_TARGET_PROPERTIES(iqmtool PROPERTIES COMPILE_DEFINITIONS "IQMTOOL;${DRACO_CFLAGS};${FTE_REVISON}")
1056-
TARGET_LINK_LIBRARIES(iqmtool ${CMAKE_DL_LIBS} ${DRACO_LIBRARY})
1101+
SET_TARGET_PROPERTIES(iqmtool PROPERTIES COMPILE_DEFINITIONS "IQMTOOL;${DRACO_CFLAGS};${FTE_LIB_DEFINES};${FTE_REVISON}")
1102+
TARGET_LINK_LIBRARIES(iqmtool ${CMAKE_DL_LIBS} ${DRACO_LIBRARY} ${JPEG_LIBRARIES} ${PNG_LIBRARIES})
10571103
SET(INSTALLTARGS ${INSTALLTARGS} iqmtool)
10581104
ENDIF()
10591105

@@ -1151,6 +1197,7 @@ ELSE()
11511197
engine/qclib/qcc_pr_lex.c
11521198
engine/qclib/qccmain.c
11531199
engine/qclib/qcd_main.c
1200+
engine/qclib/decomp.c
11541201
engine/qclib/packager.c
11551202
)
11561203
SET_TARGET_PROPERTIES(fteqcc PROPERTIES COMPILE_DEFINITIONS "${FTE_LIB_DEFINES};${FTE_REVISON}")
@@ -1260,6 +1307,8 @@ SET(FTE_PLUG_OPENSSL false CACHE BOOL "Compile OpenSSL.")
12601307
IF(FTE_PLUG_OPENSSL)
12611308
#the openssl license is incompatible with the GPL, so while we have code to use it distributing the binaries built with it is not a (legal) option.
12621309
#note that openssl 3.0.0 upwards are apache-2 licensed, which IS gpl-3 compatible (though not gpl-2). debian has not caught up with that yet, however.
1310+
#Crosscompile linux->win64: sudo ln -s ${pwd}/engine/libs-x86_64-w64-mingw32/openssl-openssl-3.0.1/ /usr/x86_64-w64-mingw32/OpenSSL
1311+
SET(OPENSSL_USE_STATIC_LIBS true CACHE BOOL "Link openssl statically.") #usually as an .so though. :/)
12631312
FIND_PACKAGE(OpenSSL)
12641313
IF(OPENSSL_VERSION_MAJOR LESS 3)
12651314
SET(FTE_PRIVATE_USE_ONLY false CACHE BOOL "Ignore license violations.")
@@ -1275,11 +1324,15 @@ IF(FTE_PLUG_OPENSSL)
12751324
MESSAGE(WARNING "Using openssl. Resulting plugin must be licensed as GPLv3.")
12761325
ENDIF()
12771326
SET(FTE_LIB_DEFINES ${FTE_LIB_DEFINES})
1327+
if (WIN32)
1328+
SET(OPENSSL_LIBRARIES ${OPENSSL_LIBRARIES} ws2_32)
1329+
ENDIF()
12781330

12791331
ADD_LIBRARY(plug_openssl MODULE
12801332
plugins/plugin.c
12811333
plugins/net_ssl_openssl.c
12821334
)
1335+
TARGET_INCLUDE_DIRECTORIES(plug_openssl PRIVATE ${OPENSSL_INCLUDE_DIR})
12831336
SET_TARGET_PROPERTIES(plug_openssl PROPERTIES COMPILE_DEFINITIONS "FTEPLUGIN;${FTE_LIB_DEFINES}")
12841337
TARGET_LINK_LIBRARIES(plug_openssl ${SYS_LIBS} ${OPENSSL_LIBRARIES})
12851338

@@ -1291,7 +1344,7 @@ ENDIF()
12911344
#IF(FTE_PLUG_GNUTLS)
12921345
# FIND_PACKAGE(GnuTLS)
12931346
# IF(NOT GNUTLS_FOUND)
1294-
# MESSAGE(WARNING "openssl library NOT available. you'll have to use some other library.")
1347+
# MESSAGE(WARNING "gnutls library NOT available. you'll have to use some other library.")
12951348
# ELSE()
12961349
# SET(FTE_LIB_DEFINES ${FTE_LIB_DEFINES})
12971350
#
@@ -1628,7 +1681,8 @@ IF(FTE_MENU_SYS)
16281681
DEPENDS fteqcc
16291682
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/quakec/menusys/"
16301683
COMMAND fteqcc -srcfile "menu.src" -o "${CMAKE_CURRENT_BINARY_DIR}/menu.dat" -DREVISION="${SVNREVISION}" -DDATE="${FTE_DATE}" -DBRANCH="${FTE_BRANCH}"
1631-
BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/menu.dat" "${CMAKE_CURRENT_BINARY_DIR}/menu.lno"
1684+
COMMAND /bin/echo -e "{\\n package fte_menusys\\n ver \"${SVNREVISION}\"\\n category Plugins\\n title \"Replacement Menus\"\\n gamedir \"id1\"\\n desc \"Modern menus to replace the ancient quake ones\"\\n}" | zip -j -q -9 -fz- "${CMAKE_CURRENT_BINARY_DIR}/menusys.pk3" - "${CMAKE_CURRENT_BINARY_DIR}/menu.dat"
1685+
BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/menu.dat" "${CMAKE_CURRENT_BINARY_DIR}/menu.lno" "${CMAKE_CURRENT_BINARY_DIR}/menusys.pk3"
16321686
SOURCES
16331687
quakec/menusys/menu.src
16341688
quakec/menusys/fteextensions.qc
@@ -1665,12 +1719,8 @@ IF(FTE_MENU_SYS)
16651719
quakec/menusys/menu/quit.qc
16661720
)
16671721

1668-
ADD_CUSTOM_COMMAND(
1669-
TARGET menusys POST_BUILD
1670-
COMMAND /bin/echo -e "{\\n package fte_menusys\\n ver \"${SVNREVISION}\"\\n category Plugins\\n title \"Replacement Menus\"\\n gamedir \"id1\"\\n desc \"Modern menus to replace the ancient quake ones\"\\n}" | zip -q -9 -fz- menusys.pk3 - menu.dat
1671-
VERBATIM)
16721722
INSTALL(FILES
1673-
menusys.pk3
1723+
${CMAKE_CURRENT_BINARY_DIR}/menusys.pk3
16741724
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/games/quake/id1/")
16751725
ENDIF()
16761726

@@ -1681,7 +1731,8 @@ IF(FTE_CSADDON)
16811731
DEPENDS fteqcc
16821732
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/quakec/csaddon/src/"
16831733
COMMAND fteqcc -srcfile "csaddon.src" -o "${CMAKE_CURRENT_BINARY_DIR}/csaddon.dat"
1684-
BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/csaddon.dat" "${CMAKE_CURRENT_BINARY_DIR}/csaddon.lno"
1734+
COMMAND /bin/echo -e "{\\n package fte_csaddon\\n ver \"${SVNREVISION}\"\\n category Plugins\\n title \"${PLUGTITLE}\"\\n gamedir \"id1\"\\n desc \"${PLUGDESC}\"\\n}" | zip -j -q -9 -fz- "${CMAKE_CURRENT_BINARY_DIR}/csaddon.pk3" - "${CMAKE_CURRENT_BINARY_DIR}/csaddon.dat"
1735+
BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/csaddon.dat" "${CMAKE_CURRENT_BINARY_DIR}/csaddon.lno" "${CMAKE_CURRENT_BINARY_DIR}/csaddon.pk3"
16851736
SOURCES
16861737
quakec/csaddon/src/csaddon.src
16871738

@@ -1704,11 +1755,7 @@ IF(FTE_CSADDON)
17041755
quakec/csaddon/src/csaddon.qc
17051756
)
17061757

1707-
ADD_CUSTOM_COMMAND(
1708-
TARGET csaddon POST_BUILD
1709-
COMMAND /bin/echo -e "{\\n package fte_csaddon\\n ver \"${SVNREVISION}\"\\n category Plugins\\n title \"${PLUGTITLE}\"\\n gamedir \"id1\"\\n desc \"${PLUGDESC}\"\\n}" | zip -q -9 -fz- csaddon.pk3 - csaddon.dat
1710-
VERBATIM)
17111758
INSTALL(FILES
1712-
csaddon.pk3
1759+
${CMAKE_CURRENT_BINARY_DIR}/csaddon.pk3
17131760
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/games/quake/id1/")
17141761
ENDIF()

0 commit comments

Comments
 (0)