Enable build of a standalone GUI (first step).

This commit is contained in:
gbeauche
2006-04-16 16:32:45 +00:00
parent 5f3874c853
commit 6994ab671e
6 changed files with 156 additions and 5 deletions

View File

@@ -35,6 +35,10 @@ SLIRP_CFLAGS = @SLIRP_CFLAGS@
SLIRP_SRCS = @SLIRP_SRCS@ SLIRP_SRCS = @SLIRP_SRCS@
SLIRP_OBJS = $(SLIRP_SRCS:../slirp/%.c=obj/%.o) SLIRP_OBJS = $(SLIRP_SRCS:../slirp/%.c=obj/%.o)
STANDALONE_GUI = @STANDALONE_GUI@
GUI_SRCS = ../prefs.cpp prefs_unix.cpp prefs_editor_gtk.cpp ../prefs_items.cpp \
../user_strings.cpp user_strings_unix.cpp xpram_unix.cpp sys_unix.cpp
## Files ## Files
SRCS = ../main.cpp main_unix.cpp ../prefs.cpp ../prefs_items.cpp prefs_unix.cpp \ SRCS = ../main.cpp main_unix.cpp ../prefs.cpp ../prefs_items.cpp prefs_unix.cpp \
sys_unix.cpp ../rom_patches.cpp ../slot_rom.cpp ../rsrc_patches.cpp \ sys_unix.cpp ../rom_patches.cpp ../slot_rom.cpp ../rsrc_patches.cpp \
@@ -47,12 +51,18 @@ SRCS = ../main.cpp main_unix.cpp ../prefs.cpp ../prefs_items.cpp prefs_unix.cpp
APP = BasiliskII APP = BasiliskII
APP_APP = $(APP).app APP_APP = $(APP).app
PROGS = $(APP)$(EXEEXT)
ifeq ($(STANDALONE_GUI),yes)
GUI_APP = BasiliskIIGUI
PROGS += $(GUI_APP)$(EXEEXT)
endif
## Rules ## Rules
.PHONY: modules install installdirs uninstall mostlyclean clean distclean depend dep .PHONY: modules install installdirs uninstall mostlyclean clean distclean depend dep
.SUFFIXES: .SUFFIXES:
.SUFFIXES: .c .cpp .s .o .h .SUFFIXES: .c .cpp .s .o .h
all: $(APP)$(EXEEXT) all: $(PROGS)
OBJ_DIR = obj OBJ_DIR = obj
$(OBJ_DIR):: $(OBJ_DIR)::
@@ -64,14 +74,23 @@ define SRCS_LIST_TO_OBJS
endef endef
OBJS = $(SRCS_LIST_TO_OBJS) OBJS = $(SRCS_LIST_TO_OBJS)
define GUI_SRCS_LIST_TO_OBJS
$(addprefix $(OBJ_DIR)/, $(addsuffix .o, $(foreach file, $(GUI_SRCS), \
$(basename $(notdir $(file))))))
endef
GUI_OBJS = $(GUI_SRCS_LIST_TO_OBJS)
SRC_PATHS += $(sort $(foreach file, $(SRCS), $(dir $(file)))) SRC_PATHS += $(sort $(foreach file, $(SRCS), $(dir $(file))))
VPATH := VPATH :=
VPATH += $(addprefix :, $(subst ,:, $(filter-out $($(subst, :, ,$(VPATH))), $(SRC_PATHS)))) VPATH += $(addprefix :, $(subst ,:, $(filter-out $($(subst, :, ,$(VPATH))), $(SRC_PATHS))))
$(APP)$(EXEEXT): $(OBJ_DIR) $(OBJS) $(APP)$(EXEEXT): $(OBJ_DIR) $(OBJS)
$(CXX) -o $(APP)$(EXEEXT) $(LDFLAGS) $(OBJS) $(LIBS) $(CXX) -o $@ $(LDFLAGS) $(OBJS) $(LIBS)
$(BLESS) $(APP)$(EXEEXT) $(BLESS) $(APP)$(EXEEXT)
$(GUI_APP)$(EXEEXT): $(OBJ_DIR) $(GUI_OBJS)
$(CXX) -o $@ $(LDFLAGS) $(GUI_OBJS) $(LIBS)
$(APP)_app: $(APP) ../MacOSX/Info.plist ../MacOSX/$(APP).icns $(APP)_app: $(APP) ../MacOSX/Info.plist ../MacOSX/$(APP).icns
mkdir -p $(APP_APP)/Contents mkdir -p $(APP_APP)/Contents
cp -f ../MacOSX/Info.plist $(APP_APP)/Contents/ cp -f ../MacOSX/Info.plist $(APP_APP)/Contents/
@@ -85,8 +104,11 @@ $(APP)_app: $(APP) ../MacOSX/Info.plist ../MacOSX/$(APP).icns
modules: modules:
cd Linux/NetDriver; make cd Linux/NetDriver; make
install: $(APP)$(EXEEXT) installdirs install: $(PROGS) installdirs
$(INSTALL_PROGRAM) $(APP)$(EXEEXT) $(DESTDIR)$(bindir)/$(APP)$(EXEEXT) $(INSTALL_PROGRAM) $(APP)$(EXEEXT) $(DESTDIR)$(bindir)/$(APP)$(EXEEXT)
if test -f "$(GUI_APP)$(EXEEXT)"; then \
$(INSTALL_PROGRAM) $(GUI_APP)$(EXEEXT) $(DESTDIR)$(bindir)/$(GUI_APP)$(EXEEXT); \
fi
-$(INSTALL_DATA) $(APP).1 $(DESTDIR)$(man1dir)/$(APP).1 -$(INSTALL_DATA) $(APP).1 $(DESTDIR)$(man1dir)/$(APP).1
$(INSTALL_DATA) $(KEYCODES) $(DESTDIR)$(datadir)/$(APP)/keycodes $(INSTALL_DATA) $(KEYCODES) $(DESTDIR)$(datadir)/$(APP)/keycodes
$(INSTALL_DATA) fbdevices $(DESTDIR)$(datadir)/$(APP)/fbdevices $(INSTALL_DATA) fbdevices $(DESTDIR)$(datadir)/$(APP)/fbdevices
@@ -97,6 +119,7 @@ installdirs:
uninstall: uninstall:
rm -f $(DESTDIR)$(bindir)/$(APP)$(EXEEXT) rm -f $(DESTDIR)$(bindir)/$(APP)$(EXEEXT)
rm -f $(DESTDIR)$(bindir)/$(GUI_APP)$(EXEEXT)
rm -f $(DESTDIR)$(man1dir)/$(APP).1 rm -f $(DESTDIR)$(man1dir)/$(APP).1
rm -f $(DESTDIR)$(datadir)/$(APP)/keycodes rm -f $(DESTDIR)$(datadir)/$(APP)/keycodes
rm -f $(DESTDIR)$(datadir)/$(APP)/fbdevices rm -f $(DESTDIR)$(datadir)/$(APP)/fbdevices
@@ -104,7 +127,7 @@ uninstall:
rmdir $(DESTDIR)$(datadir)/$(APP) rmdir $(DESTDIR)$(datadir)/$(APP)
mostlyclean: mostlyclean:
rm -f $(APP)$(EXEEXT) $(OBJ_DIR)/* core* *.core *~ *.bak rm -f $(PROGS) $(OBJ_DIR)/* core* *.core *~ *.bak
clean: mostlyclean clean: mostlyclean
rm -f cpuemu.cpp cpudefs.cpp cputmp*.s cpufast*.s cpustbl.cpp cputbl.h compemu.cpp compstbl.cpp comptbl.h rm -f cpuemu.cpp cpudefs.cpp cputmp*.s cpufast*.s cpustbl.cpp cputbl.h compemu.cpp compstbl.cpp comptbl.h

View File

@@ -14,6 +14,8 @@ dnl Some systems do not put corefiles in the currect directory, avoid saving
dnl cores for the configure tests since some are intended to dump core. dnl cores for the configure tests since some are intended to dump core.
ulimit -c 0 ulimit -c 0
AC_ARG_ENABLE(standalone-gui,[ --enable-standalone-gui enable a standalone GUI prefs editor [default=no]], [WANT_STANDALONE_GUI=$enableval], [WANT_STANDALONE_GUI=no])
dnl Video options. dnl Video options.
AC_ARG_ENABLE(xf86-dga, [ --enable-xf86-dga use the XFree86 DGA extension [default=yes]], [WANT_XF86_DGA=$enableval], [WANT_XF86_DGA=yes]) AC_ARG_ENABLE(xf86-dga, [ --enable-xf86-dga use the XFree86 DGA extension [default=yes]], [WANT_XF86_DGA=$enableval], [WANT_XF86_DGA=yes])
AC_ARG_ENABLE(xf86-vidmode, [ --enable-xf86-vidmode use the XFree86 VidMode extension [default=yes]], [WANT_XF86_VIDMODE=$enableval], [WANT_XF86_VIDMODE=yes]) AC_ARG_ENABLE(xf86-vidmode, [ --enable-xf86-vidmode use the XFree86 VidMode extension [default=yes]], [WANT_XF86_VIDMODE=$enableval], [WANT_XF86_VIDMODE=yes])
@@ -292,6 +294,19 @@ if [[ "x$WANT_GTK" = "xgtk" ]]; then
]) ])
fi fi
dnl Enable standalone GUI?
if [[ "$WANT_STANDALONE_GUI" != "yes" ]]; then
WANT_STANDALONE_GUI=no
fi
if [[ "$WANT_GTK" = "no" ]]; then
WANT_STANDALONE_GUI=no
fi
if [[ "$WANT_STANDALONE_GUI" = "yes" ]]; then
UISRCS=""
AC_DEFINE(STANDALONE_GUI, 1, [Define to use build a standalone GUI prefs editor.])
fi
AC_SUBST(STANDALONE_GUI, [$WANT_STANDALONE_GUI])
dnl We use ESD if possible. dnl We use ESD if possible.
if [[ "x$WANT_ESD" = "xyes" ]]; then if [[ "x$WANT_ESD" = "xyes" ]]; then
AM_PATH_ESD(0.2.8, [ AM_PATH_ESD(0.2.8, [

View File

@@ -508,10 +508,12 @@ int main(int argc, char **argv)
// Init system routines // Init system routines
SysInit(); SysInit();
#ifndef STANDALONE_GUI
// Show preferences editor // Show preferences editor
if (!PrefsFindBool("nogui")) if (!PrefsFindBool("nogui"))
if (!PrefsEditor()) if (!PrefsEditor())
QuitEmulator(); QuitEmulator();
#endif
// Install the handler for SIGSEGV // Install the handler for SIGSEGV
if (!sigsegv_install_handler(sigsegv_handler)) { if (!sigsegv_install_handler(sigsegv_handler)) {

View File

@@ -1521,3 +1521,110 @@ static void read_settings(void)
read_memory_settings(); read_memory_settings();
read_jit_settings(); read_jit_settings();
} }
#ifdef STANDALONE_GUI
#include <errno.h>
/*
* Fake unused data and functions
*/
uint8 XPRAM[XPRAM_SIZE];
void MountVolume(void *fh) { }
void FileDiskLayout(loff_t size, uint8 *data, loff_t &start_byte, loff_t &real_size) { }
void WarningAlert(const char *text) { }
/*
* Display alert
*/
static void dl_destroyed(void)
{
gtk_main_quit();
}
static void display_alert(int title_id, int prefix_id, int button_id, const char *text)
{
char str[256];
sprintf(str, GetString(prefix_id), text);
GtkWidget *dialog = gtk_dialog_new();
gtk_window_set_title(GTK_WINDOW(dialog), GetString(title_id));
gtk_container_border_width(GTK_CONTAINER(dialog), 5);
gtk_widget_set_uposition(GTK_WIDGET(dialog), 100, 150);
gtk_signal_connect(GTK_OBJECT(dialog), "destroy", GTK_SIGNAL_FUNC(dl_destroyed), NULL);
GtkWidget *label = gtk_label_new(str);
gtk_widget_show(label);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), label, TRUE, TRUE, 0);
GtkWidget *button = gtk_button_new_with_label(GetString(button_id));
gtk_widget_show(button);
gtk_signal_connect_object(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(dl_quit), GTK_OBJECT(dialog));
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, FALSE, FALSE, 0);
GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
gtk_widget_grab_default(button);
gtk_widget_show(dialog);
gtk_main();
}
/*
* Display error alert
*/
static void ErrorAlert(const char *text)
{
display_alert(STR_ERROR_ALERT_TITLE, STR_GUI_ERROR_PREFIX, STR_QUIT_BUTTON, text);
}
/*
* Start standalone GUI
*/
int main(int argc, char *argv[])
{
#ifdef HAVE_GNOMEUI
// Init GNOME/GTK
char version[16];
sprintf(version, "%d.%d", VERSION_MAJOR, VERSION_MINOR);
gnome_init("Basilisk II", version, argc, argv);
#else
// Init GTK
gtk_set_locale();
gtk_init(&argc, &argv);
#endif
// Read preferences
PrefsInit(argc, argv);
// Show preferences editor
bool start = PrefsEditor();
// Exit preferences
PrefsExit();
// Transfer control to the executable
if (start) {
char b2_path[PATH_MAX];
strcpy(b2_path, argv[0]);
char *p = strrchr(b2_path, '/');
p = p ? p + 1 : b2_path;
*p = '\0';
strcat(b2_path, "BasiliskII");
argv[0] = b2_path;
execv(b2_path, argv);
char str[256];
sprintf(str, GetString(STR_NO_B2_EXE_FOUND), b2_path, strerror(errno));
ErrorAlert(str);
return 1;
}
return 0;
}
#endif

View File

@@ -86,6 +86,8 @@ user_string_def platform_strings[] = {
{STR_WINDOW_TITLE_GRABBED, "Basilisk II (mouse grabbed, press Ctrl-F5 to release)"}, {STR_WINDOW_TITLE_GRABBED, "Basilisk II (mouse grabbed, press Ctrl-F5 to release)"},
{STR_NO_B2_EXE_FOUND, "Could not start %s (%s)."},
{-1, NULL} // End marker {-1, NULL} // End marker
}; };

View File

@@ -75,7 +75,9 @@ enum {
STR_IGNORESEGV_CTRL, STR_IGNORESEGV_CTRL,
STR_WINDOW_TITLE_GRABBED STR_WINDOW_TITLE_GRABBED,
STR_NO_B2_EXE_FOUND
}; };
#endif #endif