Skip to content

Commit

Permalink
games-roguelike/dwarf-fortress: Added gui? USE flag and removed hard …
Browse files Browse the repository at this point in the history
…dep.

GTK was required for runtime but was only used for a single fullscreen
dialog prompt when the config [WINDOWED:PROMPT].

Now, if libgraphics is compiled without using GTK, the game will not ask
at all if run from a window manager, but instead open in windowed mode.
However, if the game is run from a terminal, a simple scanf procedure
will ask the user for yes/no before deciding.

Signed-off-by: Finn Rayment <[email protected]>
Bug: https://bugs.gentoo.org/856685
Signed-off-by: James Le Cuirot <[email protected]>
  • Loading branch information
rayment authored and chewi committed Oct 9, 2022
1 parent 5d7a10d commit 1f45203
Show file tree
Hide file tree
Showing 4 changed files with 143 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ S="${WORKDIR}/df_linux"
LICENSE="free-noncomm BSD BitstreamVera"
SLOT="0"
KEYWORDS="-* ~amd64 ~x86"
IUSE="debug"
IUSE="debug gui"

RDEPEND="
dev-libs/glib:2
Expand All @@ -29,7 +29,7 @@ RDEPEND="
media-libs/sdl-ttf
sys-libs/zlib:=
virtual/glu
x11-libs/gtk+:2"
gui? ( x11-libs/gtk+:2 )"
# libsndfile, openal and ncurses are only needed at compile-time,
# optfeature through dlopen() at runtime if requested
DEPEND="
Expand All @@ -44,6 +44,7 @@ QA_PREBUILT="opt/${PN}/libs/Dwarf_Fortress"
PATCHES=(
"${FILESDIR}"/${P}-missing-cmath.patch
"${FILESDIR}"/${P}-ncurses6.patch
"${FILESDIR}"/${P}-nogtk.patch
"${FILESDIR}"/${P}-segfault-fixes.patch
)

Expand All @@ -60,7 +61,7 @@ src_compile() {
# -DDEBUG is recognized to give additional debug output
append-cppflags -D$(usev !debug N)DEBUG

emake -f "${FILESDIR}"/Makefile.native
emake -f "${FILESDIR}"/Makefile.native HAVE_GTK=$(usex gui 1 0)
}

src_install() {
Expand Down
9 changes: 8 additions & 1 deletion games-roguelike/dwarf-fortress/files/Makefile.native
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# Copyright 2014-2016 Alex Xu (Hello71)
# Distributed under the terms of the GNU General Public License v2

HAVE_GTK ?= 1

SRCS := g_src/basics.cpp g_src/command_line.cpp g_src/enabler.cpp \
g_src/files.cpp g_src/find_files_posix.cpp g_src/graphics.cpp \
g_src/init.cpp g_src/interface.cpp g_src/keybindings.cpp \
Expand All @@ -11,7 +13,12 @@ SRCS := g_src/basics.cpp g_src/command_line.cpp g_src/enabler.cpp \
OBJS := $(SRCS:.cpp=.o)

BLIBS := ncursesw openal sndfile
LIBS := glew glu gtk+-2.0 sdl SDL_image SDL_ttf zlib

LIBS := glew glu sdl SDL_image SDL_ttf zlib
ifeq ($(HAVE_GTK),1)
LIBS += gtk+-2.0
endif

CXXFLAGS ?= -O2 -pipe -Wall -Wextra
CXXFLAGS += $(shell $(PKG_CONFIG) --cflags $(BLIBS) $(LIBS)) -Dunix -Dlinux -fPIC -std=c++11 -D_GLIBCXX_USE_CXX11_ABI=0
LDLIBS := $(shell $(PKG_CONFIG) --libs $(LIBS))
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
Removes hard dependency on GTK in favour of stdin calls.

--- a/g_src/KeybindingScreen.cpp
+++ b/g_src/KeybindingScreen.cpp
@@ -1,7 +1,9 @@
#ifdef __APPLE__
# include "osx_messagebox.h"
#elif defined(unix)
-# include <gtk/gtk.h>
+# ifdef HAVE_GTK
+# include <gtk/gtk.h>
+# endif
#endif

#include "GL/glew.h"
--- a/g_src/enabler.cpp
+++ b/g_src/enabler.cpp
@@ -1,7 +1,9 @@
#ifdef __APPLE__
# include "osx_messagebox.h"
#elif defined(unix)
-# include <gtk/gtk.h>
+# ifdef HAVE_GTK
+# include <gtk/gtk.h>
+# endif
#endif

#include <cassert>
@@ -713,7 +715,7 @@ int main (int argc, char* argv[]) {
#ifdef unix
setlocale(LC_ALL, "");
#endif
-#if !defined(__APPLE__) && defined(unix)
+#if !defined(__APPLE__) && defined(unix) && defined(HAVE_GTK)
bool gtk_ok = false;
if (getenv("DISPLAY"))
gtk_ok = gtk_init_check(&argc, &argv);
@@ -734,6 +736,7 @@ int main (int argc, char* argv[]) {
init.begin(); // Load init.txt settings

#if !defined(__APPLE__) && defined(unix)
+ #if defined(HAVE_GTK)
if (!gtk_ok && !init.display.flag.has_flag(INIT_DISPLAY_FLAG_TEXT)) {
puts("Display not found and PRINT_MODE not set to TEXT, aborting.");
exit(EXIT_FAILURE);
@@ -743,6 +746,7 @@ int main (int argc, char* argv[]) {
puts("Graphical tiles are not compatible with text output, sorry");
exit(EXIT_FAILURE);
}
+ #endif
#endif

// Initialize video, if we /use/ video
--- a/g_src/renderer_curses.cpp
+++ b/g_src/renderer_curses.cpp
@@ -1,3 +1,7 @@
+#if defined(__APPLE__) || defined(unix)
+# include <unistd.h>
+#endif
+
static bool curses_initialized = false;

static void endwin_void() {
--- a/g_src/win32_compat.cpp
+++ b/g_src/win32_compat.cpp
@@ -13,7 +13,11 @@
# ifdef __APPLE__
# include "osx_messagebox.h"
# elif defined(unix)
-# include <gtk/gtk.h>
+# ifdef HAVE_GTK
+# include <gtk/gtk.h>
+# else
+# include <unistd.h>
+# endif
# endif
#endif

@@ -112,6 +116,7 @@ int MessageBox(HWND *dummy, const char *text, const char *caption, UINT type)
}
# else // GTK code
if (getenv("DISPLAY")) {
+ #ifdef HAVE_GTK
// Have X, will dialog
GtkWidget *dialog = gtk_message_dialog_new(NULL,
GTK_DIALOG_DESTROY_WITH_PARENT,
@@ -141,6 +146,23 @@ int MessageBox(HWND *dummy, const char *text, const char *caption, UINT type)
break;
}
}
+ #else
+ if (isatty(fileno(stdin))) {
+ dprintf(2, "Alert %s:\n%s\n", caption ? caption : "", text ? text : "");
+ if (type & MB_YESNO) {
+ while(ret == IDOK) {
+ dprintf(2, "please answer with 'yes' or 'no'\n");
+ char buf[16];
+ fgets(buf, sizeof buf, stdin);
+ if(!strncmp(buf, "yes", 3)) ret = IDYES;
+ else if(!strncmp(buf, "no", 2)) ret = IDNO;
+ }
+ }
+ } else {
+ /* just assume windowed if no TTY is available to ask */
+ ret = IDNO;
+ }
+ #endif /* HAVE_GTK */
} else {
// Use curses
init_curses();
@@ -173,7 +195,7 @@ int MessageBox(HWND *dummy, const char *text, const char *caption, UINT type)
}
nodelay(*stdscr_p, -1);
}
-# endif
+ #endif

if (toggle_screen) {
enabler.toggle_fullscreen();
Original file line number Diff line number Diff line change
Expand Up @@ -7,32 +7,40 @@ https://bugs.gentoo.org/729002
https://www.bay12games.com/dwarves/mantisbt/view.php?id=11564
--- a/g_src/enabler.cpp
+++ b/g_src/enabler.cpp
@@ -591,4 +591,6 @@
@@ -592,6 +592,8 @@ int enablerst::loop(string cmdline) {

// Clean up graphical resources
delete renderer;
+
+ return 0;
}

void enablerst::override_grid_size(int x, int y) {
--- a/g_src/music_and_sound_openal.cpp
+++ b/g_src/music_and_sound_openal.cpp
@@ -251,5 +251,4 @@
@@ -250,7 +250,6 @@ void musicsoundst::deinitsound() {
alDeleteBuffers(1, &buffer);
}
// Deinit OpenAL
- alcMakeContextCurrent(NULL);
alcDestroyContext(context);
alcCloseDevice(device);
@@ -481,5 +480,5 @@

@@ -480,7 +479,7 @@ static bool init_openal() {

void alEnable( ALenum capability ) { _alEnable(capability); }
void alDisable( ALenum capability ) { _alDisable(capability); }
-ALboolean alIsEnabled( ALenum capability ) { _alIsEnabled(capability); }
+ALboolean alIsEnabled( ALenum capability ) { return _alIsEnabled(capability); }
const ALchar* alGetString( ALenum param ) { return _alGetString(param); }
void alGetBooleanv( ALenum param, ALboolean* data ) { _alGetBooleanv(param, data); }
@@ -491,5 +490,5 @@
void alGetIntegerv( ALenum param, ALint* data ) { _alGetIntegerv(param, data); }
@@ -490,7 +489,7 @@ ALboolean alGetBoolean( ALenum param ) { return _alGetBoolean(param); }
ALint alGetInteger( ALenum param ) { return _alGetInteger(param); }
ALfloat alGetFloat( ALenum param ) { return _alGetFloat(param); }
ALdouble alGetDouble( ALenum param ) { return _alGetDouble(param); }
-ALenum alGetError( void ) { _alGetError(); }
+ALenum alGetError( void ) { return _alGetError(); }
ALboolean alIsExtensionPresent( const ALchar* extname ) { return _alIsExtensionPresent(extname); }
void* alGetProcAddress( const ALchar* fname ) { return _alGetProcAddress(fname); }
ALenum alGetEnumValue( const ALchar* ename ) { return _alGetEnumValue(ename); }

0 comments on commit 1f45203

Please sign in to comment.