fs_uae, fs_uae_launcher: Update FS-UAE to 3.1.66, patch Launcher for better exe finding (#10455)

* fs_uae_launcher: Better Haiku-friendly binary search

When updating fs-uae to 3.1.66, fs-uae-launcher was unable to find the
fs-uae binary when the launcher was launched from the Deskbar. This
changes the binary search code for Haiku to always look in the same
direcctory where fs-uae-launcher is to be installed.

* fs_uae: Update to 3.1.66

In order to get --with-glew to work, I had to manually add all of the C
flags and linker options via env variables. glew.pc eventually tries to
include gl.pc which doesn't exist. However, it seems that I only need to
provide -Lgl and the program should work correctly (and it does).

* Indent recpies using tabs
This commit is contained in:
John Bintz
2024-05-20 13:00:17 -04:00
committed by GitHub
parent c1b383cb29
commit b5f0e02f11
4 changed files with 557 additions and 9 deletions

View File

@@ -8,11 +8,12 @@ setting up FS-UAE."
HOMEPAGE="https://fs-uae.net/launcher/"
COPYRIGHT="2011-2017 Frode Solheim"
LICENSE="GNU GPL v2"
REVISION="1"
REVISION="2"
SOURCE_URI="https://fs-uae.net/files/FS-UAE-Launcher/Stable/$portVersion/fs-uae-launcher-$portVersion.tar.xz"
CHECKSUM_SHA256="e36104442db278e0f1d073dbc2be2f9a937cd33e964968b75b324c393f8ec030"
SOURCE_DIR="fs-uae-launcher-$portVersion"
ADDITIONAL_FILES="fs-uae-launcher.rdef.in"
PATCHES="fs_uae_launcher-3.1.68.patchset"
ARCHITECTURES="all !x86_gcc2"
SECONDARY_ARCHITECTURES="?x86"

View File

@@ -0,0 +1,89 @@
From 04e5052445068b4684cd3a2cbc1836c590f4bc4b Mon Sep 17 00:00:00 2001
From: John Bintz <haiku@johnbintz.com>
Date: Fri, 17 May 2024 23:36:14 +0000
Subject: try this approach
diff --git a/fsgs/plugins/pluginexecutablefinder.py b/fsgs/plugins/pluginexecutablefinder.py
index 7c8fa9e..478fbfb 100644
--- a/fsgs/plugins/pluginexecutablefinder.py
+++ b/fsgs/plugins/pluginexecutablefinder.py
@@ -48,6 +48,10 @@ def find_executable(name: str):
exe_file = find_executable_in_side_by_side_app_bundle(name)
if exe_file:
return exe_file
+ if System.haiku:
+ exe_file = find_executable_in_dir_or_app(name, "/bin")
+ if exe_file:
+ return exe_file
exe_file = find_executable_side_by_side(name)
if exe_file:
return exe_file
--
2.43.2
From ba11feac815d74cddfebbe4c932b90c11226e087 Mon Sep 17 00:00:00 2001
From: John Bintz <haiku@johnbintz.com>
Date: Fri, 17 May 2024 23:43:22 +0000
Subject: detect haiku
diff --git a/fsbc/system.py b/fsbc/system.py
index 35c2bc8..5aab5c4 100644
--- a/fsbc/system.py
+++ b/fsbc/system.py
@@ -4,6 +4,7 @@ import platform as _platform
windows = sys.platform == "win32"
linux = sys.platform.startswith("linux")
macosx = sys.platform == "darwin"
+haiku = sys.platform.startswith("haiku")
if windows:
platform = "windows"
@@ -11,6 +12,8 @@ elif linux:
platform = "linux"
elif macosx:
platform = "macos"
+elif haiku:
+ platform = "haiku"
else:
platform = "unknown"
@@ -19,6 +22,7 @@ class System:
windows = windows
linux = linux
macos = macosx
+ haiku = haiku
platform = platform
x86_64 = False
--
2.43.2
From 22c33c4898e2dc5ab81a28aa3de2506c5e8b11e9 Mon Sep 17 00:00:00 2001
From: John Bintz <haiku@johnbintz.com>
Date: Fri, 17 May 2024 23:48:18 +0000
Subject: try again
diff --git a/fsgs/plugins/pluginexecutablefinder.py b/fsgs/plugins/pluginexecutablefinder.py
index 478fbfb..ecbf1fa 100644
--- a/fsgs/plugins/pluginexecutablefinder.py
+++ b/fsgs/plugins/pluginexecutablefinder.py
@@ -49,7 +49,10 @@ def find_executable(name: str):
if exe_file:
return exe_file
if System.haiku:
- exe_file = find_executable_in_dir_or_app(name, "/bin")
+ plugin_name = known_executables.get(name)
+ if plugin_name is None:
+ return None
+ exe_file = find_executable_in_dir_or_app(name, "/bin", plugin_name)
if exe_file:
return exe_file
exe_file = find_executable_side_by_side(name)
--
2.43.2

View File

@@ -0,0 +1,110 @@
SUMMARY="FS-UAE is a cross platform Amiga emulator ported from WinUAE"
DESCRIPTION="Accurate Amiga Emulation
FS-UAE integrates the most accurate Amiga emulation code available from \
WinUAE. FS-UAE emulates A500, A500+, A600, A1200, A1000, A3000 and A4000 \
models, but you can tweak the hardware configuration and create customized \
Amigas.
On-Screen GUI With Gamepad Control
FS-UAE is fully controllable with a gamepad - you can easily swap floppies \
and load save states through the on-screen GUI. In addition to being great \
on your personal computer, FS-UAE is also well suited to be started from an \
emulator frontend running on a HTPC.
Emulate High-End Amigas
FS-UAE supports emulating an Amiga 4000 with an CPU as fast as your \
system can emulate it. Picasso96 drivers can be used with the built-in \
UAEgfx card to display Workbench in high resolutions and with up to 16.7 \
million colors, and the built-in bsdsocket.library means that the Amiga \
will have access to the Internet.
Community Support
There is a support forum for FS-UAE on the English Amiga Board with many \
active registered users. If you are stuck, you'll almost certainly get an \
answer to your questions there. You can also leave comments on fs-uae.net \
is you rather want that.
Online Documentation
A great deal of documentation about how to use and configure FS-UAE is \
available on fs-uae.net."
HOMEPAGE="https://fs-uae.net/"
COPYRIGHT="2011-2017 Frode Solheim"
LICENSE="GNU GPL v2"
REVISION="1"
SOURCE_URI="https://fs-uae.net/files/FS-UAE/Stable/${portVersion}/fs-uae-${portVersion}.tar.xz"
CHECKSUM_SHA256="606e1868b500413d69bd33bb469f8fd08d6c08988801f17b7dd022f3fbe23832"
SOURCE_DIR="fs-uae-$portVersion"
PATCHES="fs_uae-$portVersion.patchset"
ARCHITECTURES="all ?x86 !x86_gcc2"
SECONDARY_ARCHITECTURES="?x86"
PROVIDES="
fs_uae$secondaryArchSuffix = $portVersion
cmd:fs_uae$secondaryArchSuffix
cmd:fs_uae_device_helper$secondaryArchSuffix
"
REQUIRES="
haiku$secondaryArchSuffix
lib:libgl$secondaryArchSuffix
lib:libglew$secondaryArchSuffix
lib:libglib_2.0$secondaryArchSuffix
lib:libglu$secondaryArchSuffix
lib:libgthread_2.0$secondaryArchSuffix
lib:libintl$secondaryArchSuffix
lib:libmpeg2$secondaryArchSuffix
lib:libopenal$secondaryArchSuffix
lib:libpng16$secondaryArchSuffix
lib:libsdl2_2.0$secondaryArchSuffix
lib:libx11$secondaryArchSuffix
lib:libz$secondaryArchSuffix
"
BUILD_REQUIRES="
haiku${secondaryArchSuffix}_devel
devel:libGL$secondaryArchSuffix
devel:libglew$secondaryArchSuffix
devel:libglib_2.0$secondaryArchSuffix
devel:libgthread_2.0$secondaryArchSuffix
devel:libmpeg2$secondaryArchSuffix
devel:libopenal$secondaryArchSuffix
devel:libpng16$secondaryArchSuffix
devel:libsdl2_2.0$secondaryArchSuffix
devel:libx11$secondaryArchSuffix
"
BUILD_PREREQUIRES="
cmd:aclocal$secondaryArchSuffix
cmd:autoconf$secondaryArchSuffix
cmd:awk$secondaryArchSuffix
cmd:bison$secondaryArchSuffix
cmd:flex$secondaryArchSuffix
cmd:gcc$secondaryArchSuffix
cmd:libtoolize$secondaryArchSuffix
cmd:make
cmd:perl$secondaryArchSuffix
cmd:pkg_config$secondaryArchSuffix
cmd:zip$secondaryArchSuffix
"
BUILD()
{
export CPPFLAGS="-D_BSD_SOURCE"
export CXXFLAGS="-fPIC"
export CFLAGS="-fPIC"
export LDFLAGS="-lnetwork"
export GLEW_LIBS="-lGL -lGLEW -lGLU -L/system/develop/lib"
export GLEW_CFLAGS="-I/system/develop/headers"
autoreconf -f -i
runConfigure ./configure --disable-bsdsocket --disable-netplay --with-glew
make $jobArgs
}
INSTALL()
{
make install
}

View File

@@ -0,0 +1,348 @@
From 065faeb7d353e16aea165701e1e36f75f50d1bce Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zolt=C3=A1n=20Mizsei?= <zmizsei@extrowerk.com>
Date: Sun, 6 Aug 2017 14:19:55 +0200
Subject: FS-UAE: Tidied up Haiku patchset
diff --git a/Makefile.am b/Makefile.am
index d00bbb9..7c97a4d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -751,6 +751,7 @@ libfsemu_a_SOURCES = \
libfsemu/src/ml/input.c \
libfsemu/src/ml/keyboard.c \
libfsemu/src/ml/macosx.c \
+ libfsemu/src/ml/haiku.c \
libfsemu/src/ml/ml.c \
libfsemu/src/ml/ml_internal.h \
libfsemu/src/ml/mouse.c \
diff --git a/configure.ac b/configure.ac
index 168533b..c8c4a80 100644
--- a/configure.ac
+++ b/configure.ac
@@ -270,6 +270,7 @@ AC_DEFINE([USE_SDL_INPUT], [1], [Define to 1 to use SDL for input])
AS_CASE([$host_os],
[mingw*], [],
[darwin*], [],
+[haiku*], [],
[
X11_LIBS="-lX11"
AC_DEFINE([USE_X11], [1], [Define to 1 to use X11])
@@ -352,6 +353,13 @@ AS_CASE([$host_os],
OS_CPPFLAGS="-DDRAGONFLYBSD"
LOADABLE_MODULE_EXT=".so"
],
+[haiku*], [
+ OS_NAME="haiku"
+ OS_NAME_2="Haiku"
+ OS_NAME_3="Haiku"
+ OS_CPPFLAGS="-DHAIKU"
+ LOADABLE_MODULE_EXT=".so"
+],
[
OS_NAME="unknown"
OS_NAME_2="Unknown OS"
diff --git a/libfsemu/include/fs/endian.h b/libfsemu/include/fs/endian.h
index 01ee0f9..a276e10 100644
--- a/libfsemu/include/fs/endian.h
+++ b/libfsemu/include/fs/endian.h
@@ -7,6 +7,10 @@
#include <stdint.h>
+#ifdef __HAIKU__
+#include <endian.h>
+#endif
+
#ifdef _WIN32
/* Use custom conversion routines for Windows */
diff --git a/libfsemu/src/ml/haiku.c b/libfsemu/src/ml/haiku.c
new file mode 100644
index 0000000..f839d2a
--- /dev/null
+++ b/libfsemu/src/ml/haiku.c
@@ -0,0 +1,127 @@
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef HAIKU
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/time.h>
+
+#include <fs/log.h>
+#include <fs/ml.h>
+#include "ml_internal.h"
+
+void fs_ml_configure_window(void)
+{
+ // TODO
+}
+
+
+void fs_ml_usleep(int usec) {
+ usleep(usec);
+}
+
+void fs_ml_prevent_power_saving(void)
+{
+ // TODO
+}
+
+void fs_ml_activate_window_switcher_impl(void)
+{
+ fs_log("FIXME: Active window switcher not implemented\n");
+}
+
+#define MAX_SCANCODES 200
+static int g_key_map[MAX_SCANCODES] = {};
+
+void fs_ml_initialize_keymap() {
+ for (int i = 0; i < MAX_SCANCODES; i++) {
+ g_key_map[i] = -1;
+ }
+
+ g_key_map[53] = FS_ML_KEY_ESCAPE;
+ g_key_map[122] = FS_ML_KEY_F1;
+ g_key_map[120] = FS_ML_KEY_F2;
+ g_key_map[99] = FS_ML_KEY_F3;
+ g_key_map[118] = FS_ML_KEY_F4;
+ g_key_map[96] = FS_ML_KEY_F5;
+ g_key_map[97] = FS_ML_KEY_F6;
+ g_key_map[98] = FS_ML_KEY_F7;
+ g_key_map[100] = FS_ML_KEY_F8;
+ g_key_map[101] = FS_ML_KEY_F9;
+ g_key_map[109] = FS_ML_KEY_F10;
+ g_key_map[103] = FS_ML_KEY_F11;
+ g_key_map[111] = FS_ML_KEY_F12;
+
+ g_key_map[10] = FS_ML_KEY_BACKQUOTE;
+ g_key_map[18] = FS_ML_KEY_1;
+ g_key_map[19] = FS_ML_KEY_2;
+ g_key_map[20] = FS_ML_KEY_3;
+ g_key_map[21] = FS_ML_KEY_4;
+ g_key_map[23] = FS_ML_KEY_5;
+ g_key_map[22] = FS_ML_KEY_6;
+ g_key_map[26] = FS_ML_KEY_7;
+ g_key_map[28] = FS_ML_KEY_8;
+ g_key_map[25] = FS_ML_KEY_9;
+ g_key_map[29] = FS_ML_KEY_0;
+ g_key_map[27] = FS_ML_KEY_MINUS;
+ g_key_map[24] = FS_ML_KEY_EQUALS;
+ g_key_map[15] = FS_ML_KEY_BACKSPACE;
+
+ g_key_map[48] = FS_ML_KEY_TAB;
+ g_key_map[12] = FS_ML_KEY_Q;
+ g_key_map[13] = FS_ML_KEY_W;
+ g_key_map[14] = FS_ML_KEY_E;
+ g_key_map[15] = FS_ML_KEY_R;
+ g_key_map[17] = FS_ML_KEY_T;
+ g_key_map[16] = FS_ML_KEY_Y;
+ g_key_map[32] = FS_ML_KEY_U;
+ g_key_map[34] = FS_ML_KEY_I;
+ g_key_map[31] = FS_ML_KEY_O;
+ g_key_map[35] = FS_ML_KEY_P;
+ g_key_map[33] = FS_ML_KEY_LEFTBRACKET;
+ g_key_map[30] = FS_ML_KEY_RIGHTBRACKET;
+ g_key_map[36] = FS_ML_KEY_RETURN;
+
+ g_key_map[0] = FS_ML_KEY_A;
+ g_key_map[1] = FS_ML_KEY_S;
+ g_key_map[2] = FS_ML_KEY_D;
+ g_key_map[3] = FS_ML_KEY_F;
+ g_key_map[5] = FS_ML_KEY_G;
+ g_key_map[4] = FS_ML_KEY_H;
+ g_key_map[38] = FS_ML_KEY_J;
+ g_key_map[40] = FS_ML_KEY_K;
+ g_key_map[37] = FS_ML_KEY_L;
+ g_key_map[41] = FS_ML_KEY_SEMICOLON;
+ g_key_map[39] = FS_ML_KEY_QUOTE;
+ g_key_map[42] = FS_ML_KEY_BACKSLASH;
+
+ g_key_map[50] = FS_ML_KEY_LESS;
+ g_key_map[6] = FS_ML_KEY_Z;
+ g_key_map[7] = FS_ML_KEY_X;
+ g_key_map[8] = FS_ML_KEY_C;
+ g_key_map[9] = FS_ML_KEY_V;
+ g_key_map[11] = FS_ML_KEY_B;
+ g_key_map[45] = FS_ML_KEY_N;
+ g_key_map[46] = FS_ML_KEY_M;
+ g_key_map[43] = FS_ML_KEY_COMMA;
+ g_key_map[47] = FS_ML_KEY_PERIOD;
+ g_key_map[44] = FS_ML_KEY_SLASH;
+ g_key_map[49] = FS_ML_KEY_SPACE;
+ g_key_map[110] = FS_ML_KEY_MENU;
+
+ g_key_map[105] = FS_ML_KEY_PRINT;
+ g_key_map[107] = FS_ML_KEY_SCROLLOCK;
+ g_key_map[113] = FS_ML_KEY_PAUSE;
+}
+
+int fs_ml_scancode_to_key(int scancode) {
+ if (scancode < 0 || scancode >= MAX_SCANCODES) {
+ return -1;
+ }
+ return g_key_map[scancode];
+}
+
+#endif
diff --git a/manymouse/x11_xinput2.c b/manymouse/x11_xinput2.c
index bdbda8c..21db919 100644
--- a/manymouse/x11_xinput2.c
+++ b/manymouse/x11_xinput2.c
@@ -10,7 +10,7 @@
#include "manymouse.h"
/* Try to use this on everything but Windows and Mac OS by default... */
#ifndef SUPPORT_XINPUT2
-#if ( (defined(_WIN32) || defined(__CYGWIN__)) )
+#if ( (defined(_WIN32) || defined(__CYGWIN__) || defined(__HAIKU__)) )
#define SUPPORT_XINPUT2 0
#elif ( (defined(__MACH__)) && (defined(__APPLE__)) )
#define SUPPORT_XINPUT2 0
diff --git a/src/fs-uae/main.c b/src/fs-uae/main.c
index f3f0370..6aab284 100644
--- a/src/fs-uae/main.c
+++ b/src/fs-uae/main.c
@@ -40,6 +40,10 @@ static int fs_uae_argc;
static char **fs_uae_argv;
static int g_warn_about_missing_config_file;
+#ifdef __HAIKU__
+int log_bsd = 0;
+#endif
+
#define LOG_LINE "---------------------------------------------------------" \
"-------------------\n"
diff --git a/src/scp.cpp b/src/scp.cpp
index 0d7a6a5..5f35864 100644
--- a/src/scp.cpp
+++ b/src/scp.cpp
@@ -21,6 +21,10 @@
#define MAX_REVS 5
+#ifdef __HAIKU__
+#include <endian.h>
+#endif
+
enum pll_mode {
PLL_fixed_clock, /* Fixed clock, snap phase to flux transitions. */
PLL_variable_clock, /* Variable clock, snap phase to flux transitions. */
--
2.13.1
From b33930a42cf51826937c2290468857dbf25a1f1d Mon Sep 17 00:00:00 2001
From: Chris Moore <chris@mooreonline.org>
Date: Mon, 7 Aug 2017 19:13:30 +0100
Subject: Further fixes
diff --git a/src/ethernet.cpp b/src/ethernet.cpp
index 115aa5a..d2f2963 100644
--- a/src/ethernet.cpp
+++ b/src/ethernet.cpp
@@ -14,7 +14,7 @@
#include "uae/slirp.h"
#ifndef HAVE_INET_ATON
-static int inet_aton(const char *cp, struct in_addr *ia)
+int inet_aton(const char *cp, struct in_addr *ia)
{
uint32_t addr = inet_addr(cp);
if (addr == 0xffffffff)
diff --git a/src/jit/exception_handler.cpp b/src/jit/exception_handler.cpp
index 8cf96f8..2e8b873 100644
--- a/src/jit/exception_handler.cpp
+++ b/src/jit/exception_handler.cpp
@@ -9,8 +9,10 @@
#ifndef __USE_GNU
#define __USE_GNU
#endif
+#ifndef __HAIKU__
#include <sys/ucontext.h>
#endif
+#endif
#include <signal.h>
#define SIG_READ 1
--
2.13.1
From b3076a6b080f81acea707d4c74557b109f8e3da8 Mon Sep 17 00:00:00 2001
From: Chris Moore <chris@mooreonline.org>
Date: Tue, 8 Aug 2017 19:00:45 +0100
Subject: Fix Haiku fs-uae.dat file location
diff --git a/libfsemu/src/data.c b/libfsemu/src/data.c
index 2d597ad..a5239e7 100644
--- a/libfsemu/src/data.c
+++ b/libfsemu/src/data.c
@@ -12,6 +12,10 @@
#include <stdint.h>
#include <glib.h>
+#ifdef __HAIKU__
+#include <FindDirectory.h>
+#endif
+
#ifdef USE_ZLIB
#include "zlib.h"
#endif
@@ -339,6 +343,20 @@ int fs_data_init(const char *app_name, const char *dat_name)
}
#endif
+#ifdef __HAIKU__
+ char haiku_data_path[PATH_MAX + 1];
+ status_t status = find_path(fs_data_init, B_FIND_PATH_DATA_DIRECTORY,
+ "fs-uae", haiku_data_path, PATH_MAX);
+ if (status == B_OK) {
+ if (g_dat_file == NULL) {
+ char *dat_path = g_build_filename(haiku_data_path, dat_name, NULL);
+ fs_log("checking dat file: %s\n", dat_path);
+ g_dat_file = g_fopen(dat_path, "rb");
+ free(dat_path);
+ }
+ }
+#endif
+
if (g_dat_file == NULL) {
error = 10;
} else {
--
2.13.1
From 17456f069bc3c8b6f8f0faad51ece2528830349f Mon Sep 17 00:00:00 2001
From: Chris Moore <chris@mooreonline.org>
Date: Sun, 10 Sep 2017 09:40:21 +0100
Subject: Fix conflicting typedefs for uint32
diff --git a/src/include/gfxfilter.h b/src/include/gfxfilter.h
index 914b517..578d6b5 100644
--- a/src/include/gfxfilter.h
+++ b/src/include/gfxfilter.h
@@ -22,7 +22,11 @@ extern void PAL_1x1_16 (uae_u16 *src, int pitchs, uae_u16 *trg, int pitcht, int
typedef unsigned char uint8;
typedef unsigned short uint16;
+#ifndef __HAIKU__
typedef unsigned long uint32;
+#else
+#include <SupportDefs.h>
+#endif
#ifndef __cplusplus
typedef int bool;
#endif
--
2.13.1