From 58103655c820ad691f1c7137eaaab6794ee1d4ea6b5fd7277b9c20a832784f87 Mon Sep 17 00:00:00 2001 From: Andreas Stieger Date: Mon, 4 Aug 2025 23:56:40 +0200 Subject: [PATCH 1/3] switch cpp-httplib requirement to cmake(httplib) as preferred and supported by upstream --- descent3.changes | 6 ++++++ descent3.spec | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/descent3.changes b/descent3.changes index 417f4c0..298a6a1 100644 --- a/descent3.changes +++ b/descent3.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Mon Aug 4 21:56:02 UTC 2025 - Andreas Stieger + +- switch cpp-httplib requirement to cmake(httplib) as preferred and + supported by upstream + ------------------------------------------------------------------- Wed May 28 22:57:52 UTC 2025 - Jan Engelhardt diff --git a/descent3.spec b/descent3.spec index 4c9771e..033c78f 100644 --- a/descent3.spec +++ b/descent3.spec @@ -37,7 +37,7 @@ BuildRequires: plog-devel %endif BuildRequires: cmake BuildRequires: libacm-devel -BuildRequires: pkgconfig(cpp-httplib) +BuildRequires: cmake(httplib) BuildRequires: pkgconfig(glm) BuildRequires: pkgconfig(sdl3) BuildRequires: pkgconfig(zlib) -- 2.51.1 From 95e2af918a0ed749fc960d4d5e7280fe1c73e1fa5b50cbc4edb6b1fc88aebbaa Mon Sep 17 00:00:00 2001 From: Jan Engelhardt Date: Sun, 15 Jun 2025 10:37:51 +0200 Subject: [PATCH 2/3] descent3 1.6.0~git632.c68f6b0 --- ...b029a006f3fd927ef4905ebe3e099c60322.tar.gz | 3 + ...7cfabb16b2b428d4827eedb26b8cc20a1ee.tar.gz | 3 - descent3.changes | 13 + descent3.spec | 43 +- fstream.patch | 34 -- static-order.patch | 373 ++++++++++++++++++ 6 files changed, 414 insertions(+), 55 deletions(-) create mode 100644 c68f6b029a006f3fd927ef4905ebe3e099c60322.tar.gz delete mode 100644 c99e57cfabb16b2b428d4827eedb26b8cc20a1ee.tar.gz delete mode 100644 fstream.patch create mode 100644 static-order.patch diff --git a/c68f6b029a006f3fd927ef4905ebe3e099c60322.tar.gz b/c68f6b029a006f3fd927ef4905ebe3e099c60322.tar.gz new file mode 100644 index 0000000..cc8fbaa --- /dev/null +++ b/c68f6b029a006f3fd927ef4905ebe3e099c60322.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6394e339fa02b8eec784fcf18bd7d6e57819688e3d2a5cc52fa0760894c59712 +size 14329436 diff --git a/c99e57cfabb16b2b428d4827eedb26b8cc20a1ee.tar.gz b/c99e57cfabb16b2b428d4827eedb26b8cc20a1ee.tar.gz deleted file mode 100644 index 42d9485..0000000 --- a/c99e57cfabb16b2b428d4827eedb26b8cc20a1ee.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b2ca5a6afda932b4cc2ccfb0755385bb58ff156109f086faa3fd6f4de56cb43e -size 14325578 diff --git a/descent3.changes b/descent3.changes index 298a6a1..7156f5e 100644 --- a/descent3.changes +++ b/descent3.changes @@ -1,3 +1,16 @@ +------------------------------------------------------------------- +Tue Aug 5 08:22:43 UTC 2025 - Jan Engelhardt + +- Update to snapshot 1.6.0~git632.c68f6b0 + * Add higher resolutions, fullscreen toggle and FOV settings + * XDG specification is heeded; configuration now lives in + ~/.local/share/Outrage Entertainment/Descent3 (instead of + ~/.config/descent3). Data files are read from either the XDG + dir or from /usr/share/descent3 (can be used for global + installs). +- Add static-order.patch +- Delete fstream.patch (merged) + ------------------------------------------------------------------- Mon Aug 4 21:56:02 UTC 2025 - Andreas Stieger diff --git a/descent3.spec b/descent3.spec index 033c78f..50a55a3 100644 --- a/descent3.spec +++ b/descent3.spec @@ -17,8 +17,8 @@ Name: descent3 -%define commit c99e57cfabb16b2b428d4827eedb26b8cc20a1ee -Version: 1.6.0~git533.c99e57c +%define commit c68f6b029a006f3fd927ef4905ebe3e099c60322 +Version: 1.6.0~git632.c68f6b0 Release: 0 Summary: Tunnel–terrain-hybrid ship-based shooter fighting robots License: GPL-3.0-or-later @@ -27,7 +27,7 @@ URL: https://github.com/DescentDevelopers/Descent3 Source: https://github.com/jengelh/descent3/archive/%commit.tar.gz Source2: https://github.com/SergiusTheBest/plog/archive/e21baecd4753f14da64ede979c5a19302618b752.tar.gz Patch1: system-libacm.patch -Patch2: fstream.patch +Patch2: static-order.patch %if 0%{?suse_version} && 0%{?suse_version} < 1600 BuildRequires: gcc13-c++ Provides: bundled(plog) @@ -67,8 +67,7 @@ mv plog-* third_party/plog %if 0%{?suse_version} && 0%{?suse_version} < 1600 export CXX=g++-13 %endif -%cmake -DCMAKE_INSTALL_BINDIR="%_libexecdir/%name" \ - -DCMAKE_INSTALL_DATADIR="%_datadir/%name" \ +%cmake \ -DCMAKE_INSTALL_DOCDIR:PATH="share/doc/packages/%name" \ -DFORCE_PORTABLE_INSTALL=OFF \ %if 0%{?suse_version} >= 1600 @@ -81,30 +80,38 @@ export CXX=g++-13 %install %cmake_install b="%buildroot" + +mv -v "$b/%_datadir/Descent3" "$b/%_datadir/descent3" +ln -sv descent3 "$b/%_datadir/Descent3" + # packaged separately rm -fv "$b/%_defaultdocdir/%name/LICENSE" -mkdir -p "$b/%_bindir" + +# add config wrapper +mkdir -p "$b/%_libexecdir/%name" +mv -v "$b/%_bindir/Descent3" "$b/%_libexecdir/%name/" + cat >"$b/%_bindir/descent3" <<-EOF #!/bin/sh -e - progdir="%_libexecdir/descent3" - datadir="%_datadir/descent3" + progdir="%_libexecdir/%name" + datadir="%_datadir/%name" - userdir="\$HOME/.config/descent3" + olduserdir="\$HOME/.config/descent3" + userdir="\$HOME/.local/share/Outrage Entertainment/Descent 3" + if [ -d "\$olduserdir" ] && [ ! -L "\$olduserdir" ] && [ ! -e "\$userdir" ]; then + echo "INFO: Trying to mv \$olduserdir to \$userdir" + mkdir -p "\${userdir%/*}" + mv -v "\$olduserdir" "\$userdir" + fi mkdir -p "\$userdir/missions" cd "\$userdir" - if [ ! -e d3-linux.hog ]; then - ln -s "\$datadir/d3-linux.hog" . - fi - if [ ! -e online ]; then - ln -s "\$datadir/online" . - fi if [ ! -e d3.hog ]; then echo "ERROR: Copy d3.hog to \$userdir, then relaunch." echo "INFO: You may find this file on the D3 Linux ISO." exit 1 fi if [ ! -e extra.hog ] || [ ! -e extra13.hog ]; then - echo "NOTE: Copy extra.hog and extra13.hog to \$userdir, then relaunch." + echo "NOTE: Copy extra.hog and extra13.hog to \$userdir or /usr/share/descent3, then relaunch." echo "INFO: You may find these files on the D3 Linux ISO in data.tar.gz." echo "INFO: tar -C \$userdir -xf /path/to/data.tar.gz extra.hog extra13.hog" exit 1 @@ -127,9 +134,9 @@ chmod a+x "%buildroot/%_bindir/descent3" %license LICENSE %_bindir/descent3 %_datadir/descent3/ -%_defaultdocdir/%name/ +%_datadir/Descent3 %_libexecdir/%name/ -# these are .so-like files %_libdir/netgames/ +%_defaultdocdir/%name/ %changelog diff --git a/fstream.patch b/fstream.patch deleted file mode 100644 index 3c1c82f..0000000 --- a/fstream.patch +++ /dev/null @@ -1,34 +0,0 @@ -From e1a907bd64d700308e3a1625f0e0a5ddb1c22ef0 Mon Sep 17 00:00:00 2001 -From: Jon Daniel -Date: Thu, 8 May 2025 12:36:35 -0700 -Subject: [PATCH] build: add missing #include to cure compile error -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit -References: https://github.com/DescentDevelopers/Descent3/pull/715 - -[g++-14 complains: - -mission_download.cpp:402:19: error: variable ‘std::fstream in’ has initializer but incomplete type - 402 | std::fstream in(qualfile, std::ios::binary | std::ios::trunc | std::ios::out); - -–jengelh] ---- - Descent3/mission_download.cpp | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/Descent3/mission_download.cpp b/Descent3/mission_download.cpp -index 52e408e4..7343ee8d 100644 ---- a/Descent3/mission_download.cpp -+++ b/Descent3/mission_download.cpp -@@ -120,6 +120,7 @@ - - #include - #include -+#include - - #include "mem.h" - #include "args.h" --- -2.49.0 - diff --git a/static-order.patch b/static-order.patch new file mode 100644 index 0000000..c8f3d54 --- /dev/null +++ b/static-order.patch @@ -0,0 +1,373 @@ +References: https://github.com/DescentDevelopers/Descent3/pull/719 + +diff --git a/Descent3/config.cpp a/Descent3/config.cpp +index 900f03aa..fe854719 100644 +--- a/Descent3/config.cpp ++++ a/Descent3/config.cpp +@@ -353,7 +353,7 @@ void ConfigureDisplayResolutions() { + return; + } + +- std::set resolutions; ++ std::set resolutions; + for (int d = 0; d < display_count; d++) { + SDL_DisplayID display_id = displays[d]; + +@@ -417,7 +417,7 @@ void ConfigureDisplayResolutions() { + if (resolutions_vec.empty()) { + return; + } +- std::swap(resolutions_vec, Video_res_list); ++ Video_res_list = std::move(resolutions_vec); + SDL_free(displays); + + // Find the index of the current screen resolution in the list +diff --git a/Descent3/config.h a/Descent3/config.h +index 3ffe50de..5a35ab8c 100644 +--- a/Descent3/config.h ++++ a/Descent3/config.h +@@ -145,21 +145,14 @@ struct tVideoResolution + return ss.str(); + } + +- bool operator==(const tVideoResolution& other) { ++ bool operator==(const tVideoResolution& other) const { + return other.width == this->width && other.height == this->height; + } + +- struct tVideoResolutionCompare ++ bool operator<(const tVideoResolution& other) const + { +- bool operator()(const tVideoResolution &lres, const tVideoResolution &rres) const +- { +- if (lres.width != rres.width) +- { +- return lres.width < rres.width; +- } +- return lres.height < rres.height; +- } +- }; ++ return width != other.width ? width < other.width : height < other.height; ++ } + }; + + extern std::vector Video_res_list; +diff --git a/Descent3/init.cpp a/Descent3/init.cpp +index 65573807..23f912da 100644 +--- a/Descent3/init.cpp ++++ a/Descent3/init.cpp +@@ -2061,12 +2061,9 @@ void DeleteTempFiles() { + * + */ + +-static int Init_old_screen_mode; + static void (*Init_old_ui_callback)() = NULL; + static bool Init_old_control_mode; +-static bool Init_ui_cursor_visible; + static bool Init_was_game_paused = false; +-static pilot Init_old_pilot; + + // TODO: MTS: Unused in project + void ShutdownD3() { +@@ -2096,81 +2093,14 @@ void ShutdownD3() { + Sound_system.PauseSounds(); + } + +- SaveControlConfig(&Init_old_pilot); + CloseControls(); + + // shutdown cinematics. + + // shutdown screen. +- Init_ui_cursor_visible = ui_IsCursorVisible(); +- Init_old_screen_mode = GetScreenMode(); + Init_old_ui_callback = GetUICallback(); + SetScreenMode(SM_NULL); + + // shutdown IO + ddio_Close(); + } +- +-// TODO: MTS: unused in project +-// This function restarts all game systems +-void RestartD3() { +- ddio_init_info io_info; +- +- if (!Init_systems_init) +- return; +- +- LOG_INFO << "Restarting D3..."; +- +- if (!FindArg("-windowed")) { +- if (Dedicated_server) { +- ddio_MouseMode(MOUSE_STANDARD_MODE); +- } else { +- ddio_MouseMode(MOUSE_EXCLUSIVE_MODE); +- } +- } +- +- // startup io +- io_info.obj = Descent; +- if (!ddio_Init(&io_info)) { +- Error("I/O initialization failed."); +- } +- +- // startup screen. +- ddio_KeyFlush(); +- SetScreenMode(Init_old_screen_mode); +- SetUICallback(Init_old_ui_callback); +- if (Init_ui_cursor_visible) +- ui_ShowCursor(); +- +- // startup game systems +- InitControls(); +- LoadControlConfig(&Init_old_pilot); +- +- // resume game sounds and time as needed +- if (GetFunctionMode() == GAME_MODE) { +- if (!(Game_mode & GM_MULTI)) { +- if (!Init_was_game_paused) { +- ResumeGame(); +- } else { +- D3MusicResume(); +- } +- } +- } else { +- Sound_system.ResumeSounds(); +- D3MusicResume(); +- } +- +- // resume controller if it was active before alt-tabbing out. +- if (Init_old_control_mode) { +- ResumeControls(); +- } +- +- // Restart Force Feedback +- ForceRestart(); +- +- // startup cinematics. +- +- // startup sound. +- // Sound_system.ResumeSounds(); +- // Sound_system.InitSoundLib(Descent, Sound_mixer, Sound_quality, false); +-} +diff --git a/Descent3/pilot.cpp a/Descent3/pilot.cpp +index 2a0448b5..201cb703 100644 +--- a/Descent3/pilot.cpp ++++ a/Descent3/pilot.cpp +@@ -682,7 +682,6 @@ void ShipSelectDeleteLogo(newuiListBox *lb); + void ShowPilotPicDialog(pilot *Pilot); + + UITextItem *pilot_items = nullptr; // array of UITextItems for use in Pilot listbox +-pilot temp; // pilot in use by the listbox + static std::vector filelist; // list of pilot filenames + static int filecount; // number of pilot filenames found + void PilotListSelectChangeCallback(int index); +@@ -825,7 +824,7 @@ struct { + bool initial_call; + bool all_setup; + } PilotChooseDialogInfo; +-pilot working_pilot; ++static pilot working_pilot; + + void PilotListSelectChangeCallback(int index) { + if (!filecount || !PilotChooseDialogInfo.all_setup) +diff --git a/Descent3/pilot_class.cpp a/Descent3/pilot_class.cpp +index 59f101a3..dee8a99b 100644 +--- a/Descent3/pilot_class.cpp ++++ a/Descent3/pilot_class.cpp +@@ -172,48 +172,22 @@ extern float Key_ramp_speed; + + pilot::~pilot() { clean(false); } + +-pilot::pilot() { +- write_pending = false; +- initialize(); ++pilot::pilot() : ++ difficulty{DIFFICULTY_ROOKIE}, ++ hud_mode{HUD_COCKPIT}, ++ hud_graphical_stat{STAT_STANDARD} ++{ + } + +-pilot::pilot(pilot *copy) { +- write_pending = true; +- initialize(); +-} +- +-pilot::pilot(char *fname) { +- write_pending = true; +- initialize(); +-} +- +-// initializes all the data (for constructors) ++// Two-stage construction (because it references global vars) + void pilot::initialize(void) { + int i; + + filename.clear(); +- name = NULL; + ship_model = mem_strdup("Pyro-GL"); +- ship_logo = NULL; +- audio1_file = NULL; +- audio2_file = NULL; +- audio3_file = NULL; +- audio4_file = NULL; + guidebot_name = mem_strdup("GB"); +- picture_id = PPIC_INVALID_ID; +- difficulty = DIFFICULTY_ROOKIE; +- hud_mode = (uint8_t)HUD_COCKPIT; +- hud_stat = 0; +- hud_graphical_stat = STAT_STANDARD; + game_window_w = Video_res_list[Current_video_resolution_id].width; + game_window_h = Video_res_list[Current_video_resolution_id].height; +- num_missions_flown = 0; +- mission_data = NULL; +- mouselook_control = false; +- key_ramping = 0.35f; +- lrearview_enabled = false; +- rrearview_enabled = false; +- + bool kiddie_settings = true; + + if (Database) { +@@ -237,8 +211,6 @@ void pilot::initialize(void) { + strcpy(taunts[i], TXT(TXT_TAUNT_TEXT + i)); + } + +- read_controller = READF_MOUSE + READF_JOY; +- + if (Controller) { + for (i = 0; i < NUM_CONTROLLER_FUNCTIONS; i++) { + Controller->get_controller_function(Controller_needs[i].id, controls[i].type, &controls[i].value, +diff --git a/Descent3/pilot_class.h a/Descent3/pilot_class.h +index a9c180cc..11c094ed 100644 +--- a/Descent3/pilot_class.h ++++ a/Descent3/pilot_class.h +@@ -170,8 +170,6 @@ class pilot { + public: + ~pilot(); + pilot(); +- pilot(pilot *copy); +- pilot(char *fname); + + // This function guts the data so it's virgin (fresh for reading) + // frees any memory that needs to be freed, etc. +@@ -235,9 +233,9 @@ public: + void get_mission_data(int index, tMissionData *data); + int find_mission_data(const char *mission_name); + +-private: + void initialize(void); // initializes all the data (for constructors) +- bool write_pending; // data has changed and pilot data is out of sync with file ++private: ++ bool write_pending = false; // data has changed and pilot data is out of sync with file + private: + // internal file access functions + void write_name(CFILE *file); +@@ -256,7 +254,7 @@ private: + + // for the read functions, skip is true if the data should actually + // just be skipped and not processed +- int file_version; ++ int file_version = 0; + void read_name(CFILE *file, bool skip); + void read_ship_info(CFILE *file, bool skip); + void read_custom_multiplayer_data(CFILE *file, bool skip); +@@ -275,46 +273,46 @@ private: + //--- Pilot data ---// + //--- Try to preserve alignment ---// + std::string filename;// filename location of this pilot +- char *name; // name of the pilot (used in the game) +- char *ship_logo; // ship logo for multiplayer play (filename) +- char *ship_model; // what ship does this pilot fly +- char *audio1_file; // audio taunt #1 (filename) +- char *audio2_file; // audio taunt #2 (filename) +- char *audio3_file; // audio taunt #1 (filename) +- char *audio4_file; // audio taunt #2 (filename) +- char *guidebot_name; // guidebot name +- +- uint16_t picture_id; // pilot picture image id ++ char *name = nullptr; // name of the pilot (used in the game) ++ char *ship_logo = nullptr; // ship logo for multiplayer play (filename) ++ char *ship_model = nullptr; // what ship does this pilot fly ++ char *audio1_file = nullptr; // audio taunt #1 (filename) ++ char *audio2_file = nullptr; // audio taunt #2 (filename) ++ char *audio3_file = nullptr; // audio taunt #1 (filename) ++ char *audio4_file = nullptr; // audio taunt #2 (filename) ++ char *guidebot_name = nullptr; // guidebot name ++ ++ uint16_t picture_id = PPIC_INVALID_ID; // pilot picture image id + uint8_t difficulty; // difficulty setting for this pilot (DIFFICULTY_*) + uint8_t hud_mode; // hud display mode +- bool profanity_filter_on, audiotaunts; ++ bool profanity_filter_on = false, audiotaunts = true; + +- uint16_t hud_stat; // hud layout using the STAT mask ++ uint16_t hud_stat = 0; // hud layout using the STAT mask + uint16_t hud_graphical_stat; + +- int game_window_w, game_window_h; // game window size ++ int game_window_w = 0, game_window_h = 0; // game window size + +- int num_missions_flown; // number of mission's flown +- tMissionData *mission_data; // mission data ++ int num_missions_flown = 0; // number of mission's flown ++ tMissionData *mission_data = nullptr; // mission data + +- uint16_t PrimarySelectList[MAX_PRIMARY_WEAPONS]; +- uint16_t SecondarySelectList[MAX_SECONDARY_WEAPONS]; ++ uint16_t PrimarySelectList[MAX_PRIMARY_WEAPONS]{}; ++ uint16_t SecondarySelectList[MAX_SECONDARY_WEAPONS]{}; + +- tGameToggles gameplay_toggles; // special options in config menu. ++ tGameToggles gameplay_toggles{}; // special options in config menu. + + public: +- char taunts[MAX_PILOT_TAUNTS][PILOT_TAUNT_SIZE]; // taunt macros +- +- cntrldata controls[NUM_CONTROLLER_FUNCTIONS]; // controller settings +- float mouse_sensitivity[N_MOUSE_AXIS]; // axis sensitivities +- float joy_sensitivity[N_JOY_AXIS]; // axis sensitivities +- float key_ramping; +- char read_controller; // do we read the controller port also (beyond keyboard/mouse) +- bool mouselook_control; // mouselook control. +- bool lrearview_enabled; +- bool rrearview_enabled; // are these small views enabled? +- +- uint8_t ingame_difficulty; // DAJ for optimization ++ char taunts[MAX_PILOT_TAUNTS][PILOT_TAUNT_SIZE]{}; // taunt macros ++ ++ cntrldata controls[NUM_CONTROLLER_FUNCTIONS]{}; // controller settings ++ float mouse_sensitivity[N_MOUSE_AXIS]{}; // axis sensitivities ++ float joy_sensitivity[N_JOY_AXIS]{}; // axis sensitivities ++ float key_ramping = 0.35; ++ char read_controller = READF_MOUSE + READF_JOY; // do we read the controller port also (beyond keyboard/mouse) ++ bool mouselook_control = false; // mouselook control. ++ bool lrearview_enabled = false; ++ bool rrearview_enabled = false; // are these small views enabled? ++ ++ uint8_t ingame_difficulty = 0; // DAJ for optimization + }; + + #endif +diff --git a/Descent3/sdlmain.cpp a/Descent3/sdlmain.cpp +index 92974f5d..c6138297 100644 +--- a/Descent3/sdlmain.cpp ++++ a/Descent3/sdlmain.cpp +@@ -45,6 +45,7 @@ + #include "init.h" + #include "log.h" + #include "config.h" ++#include "pilot.h" + + #ifdef WIN32 + #include "debug.h" +@@ -222,6 +223,7 @@ int main(int argc, char *argv[]) { + GatherArgs(argv); + bool enable_winconsole = true; + #endif ++ Current_pilot.initialize(); + + orig_pwd = std::filesystem::current_path(); + -- 2.51.1 From 6ebe8a43e24c7b537037336fd6a7820d97a499fa92e44ee9d70994d620abe6bb Mon Sep 17 00:00:00 2001 From: Jan Engelhardt Date: Sun, 24 Aug 2025 08:48:22 +0200 Subject: [PATCH 3/3] Add httplib0_23.patch --- descent3.changes | 5 ++ descent3.spec | 6 ++- httplib0_23.patch | 113 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 httplib0_23.patch diff --git a/descent3.changes b/descent3.changes index 7156f5e..6565f3c 100644 --- a/descent3.changes +++ b/descent3.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Sat Aug 23 11:06:06 UTC 2025 - Jan Engelhardt + +- Add httplib0_23.patch + ------------------------------------------------------------------- Tue Aug 5 08:22:43 UTC 2025 - Jan Engelhardt diff --git a/descent3.spec b/descent3.spec index 50a55a3..1bad9c2 100644 --- a/descent3.spec +++ b/descent3.spec @@ -1,7 +1,7 @@ # # spec file for package descent3 # -# Copyright (c) 2025 SUSE LLC +# Copyright (c) 2025 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -28,6 +28,7 @@ Source: https://github.com/jengelh/descent3/archive/%commit.tar.gz Source2: https://github.com/SergiusTheBest/plog/archive/e21baecd4753f14da64ede979c5a19302618b752.tar.gz Patch1: system-libacm.patch Patch2: static-order.patch +Patch3: httplib0_23.patch %if 0%{?suse_version} && 0%{?suse_version} < 1600 BuildRequires: gcc13-c++ Provides: bundled(plog) @@ -60,6 +61,9 @@ different game types. %prep %autosetup -p1 -n descent3-%commit -a2 +%if %{pkg_vcmp cmake(httplib) < 0.23} +%patch -P 3 -R -p1 +%endif rm -Rf third_party/plog mv plog-* third_party/plog diff --git a/httplib0_23.patch b/httplib0_23.patch new file mode 100644 index 0000000..0ed2a02 --- /dev/null +++ b/httplib0_23.patch @@ -0,0 +1,113 @@ +From 951bf416f403bff550102b4f16dc17c4432d391c Mon Sep 17 00:00:00 2001 +From: Jan Engelhardt +Date: Sat, 23 Aug 2025 13:02:08 +0200 +Subject: [PATCH] build: fix build failure with cpp-httplib >= 0.23 +References: https://github.com/DescentDevelopers/Descent3/pull/721 + +--- + BUILD.md | 2 +- + Descent3/mission_download.cpp | 2 +- + netcon/inetfile/httpclient.cpp | 4 ++-- + netcon/inetfile/httpclient.h | 10 ++++++++-- + vcpkg.json | 5 ++++- + 5 files changed, 16 insertions(+), 7 deletions(-) + +diff --git a/BUILD.md b/BUILD.md +index 0ed8b771..7782e0fe 100644 +--- a/BUILD.md ++++ b/BUILD.md +@@ -4,7 +4,7 @@ + ## Dependencies + The build process uses [**CMake**](https://cmake.org/) and, by default, [**Ninja**](https://ninja-build.org/). You must install these; the project cannot locate them for you. The source code also depends on third-party libraries that are not provided as part of the repository: + - [**SDL3**](https://wiki.libsdl.org/SDL3/FrontPage) which is used as the base to handle video, audio and input. +-- [**cpp-httplib**](https://github.com/yhirose/cpp-httplib) as a HTTP client to download levels. ++- [**cpp-httplib**](https://github.com/yhirose/cpp-httplib) >= 0.23 as a HTTP client to download levels. + - [**glm**](https://github.com/g-truc/glm) providing useful additions to OpenGL. + - [**plog**](https://github.com/SergiusTheBest/plog) for logging + - [**zlib**](https://www.zlib.net/) as a compression utility +diff --git a/Descent3/mission_download.cpp b/Descent3/mission_download.cpp +index f494abe9..00263779 100644 +--- a/Descent3/mission_download.cpp ++++ b/Descent3/mission_download.cpp +@@ -399,7 +399,7 @@ bool msn_DownloadWithStatus(const char *url, const std::filesystem::path &filena + } + + httplib::Result (D3::HttpClient::*hcg)(const std::string &, const httplib::ContentReceiver &, +- const httplib::Progress &) = &D3::HttpClient::Get; ++ const D3::HttpClient::Progress &) = &D3::HttpClient::Get; + std::fstream in(qualfile, std::ios::binary | std::ios::trunc | std::ios::out); + auto async_task = std::async( + std::launch::async, hcg, &http_client, download_uri, +diff --git a/netcon/inetfile/httpclient.cpp b/netcon/inetfile/httpclient.cpp +index d15bc906..33c1e314 100644 +--- a/netcon/inetfile/httpclient.cpp ++++ b/netcon/inetfile/httpclient.cpp +@@ -30,7 +30,7 @@ httplib::Result HttpClient::Get(const std::string &URIPath) { + return m_client->Get(URIPath); + } + +-httplib::Result HttpClient::Get(const std::string &URIPath, const httplib::Progress &progress) { ++httplib::Result HttpClient::Get(const std::string &URIPath, const D3::HttpClient::Progress &progress) { + return m_client->Get(URIPath, progress); + } + +@@ -39,7 +39,7 @@ httplib::Result HttpClient::Get(const std::string &URIPath, const httplib::Conte + } + + httplib::Result HttpClient::Get(const std::string &URIPath, const httplib::ContentReceiver &content_receiver, +- const httplib::Progress &progress) { ++ const D3::HttpClient::Progress &progress) { + return m_client->Get(URIPath, content_receiver, progress); + } + +diff --git a/netcon/inetfile/httpclient.h b/netcon/inetfile/httpclient.h +index d3e2499c..a373405e 100644 +--- a/netcon/inetfile/httpclient.h ++++ b/netcon/inetfile/httpclient.h +@@ -32,6 +32,12 @@ namespace D3 { + + class HttpClient { + public: ++ using Progress = httplib::DownloadProgress; ++ // no way to test with macro; would have to do a cmake-level compile check ++ //#if httplib < 0.23 ++ //using Progress = httplib::Progress; ++ //#endif ++ + /** + * Constructor for HttpClient + * @param URL request URL, should be in form of http://example.com. Don't add "/" on the end as it's part of URIPath. +@@ -46,12 +52,12 @@ public: + * @param URIPath requested path (for example, "/some_dir/my_file.txt") + * @return standard HTTP code. 200 means is OK. + */ +- httplib::Result Get(const std::string &URIPath, const httplib::Progress &progress); ++ httplib::Result Get(const std::string &URIPath, const Progress &progress); + + httplib::Result Get(const std::string &URIPath, const httplib::ContentReceiver &content_receiver); + + httplib::Result Get(const std::string &URIPath, const httplib::ContentReceiver &content_receiver, +- const httplib::Progress &progress); ++ const Progress &progress); + + void SetProxy(const std::string &proxy_host, uint16_t port); + +diff --git a/vcpkg.json b/vcpkg.json +index c383313e..b5e7f64c 100644 +--- a/vcpkg.json ++++ b/vcpkg.json +@@ -1,7 +1,10 @@ + { + "builtin-baseline": "8f90c294883ccf67d2f4953383718aeae981575f", + "dependencies": [ +- "cpp-httplib", ++ { ++ "name": "cpp-httplib", ++ "version>=": "0.23" ++ }, + "glm", + "gtest", + "plog", +-- +2.51.0 + -- 2.51.1