diff --git a/driver.c b/driver.c index 6cf71584e0b8..d248e7b774a6 100644 --- a/driver.c +++ b/driver.c @@ -157,6 +157,7 @@ void uninit_drivers(void) uninit_audio(); } +#ifdef HAVE_DYLIB static void init_dsp_plugin(void) { if (!(*g_settings.audio.dsp_plugin)) @@ -221,6 +222,7 @@ static void deinit_dsp_plugin(void) dylib_close(g_extern.audio_data.dsp_lib); } } +#endif static void adjust_audio_input_rate(void) { @@ -311,7 +313,9 @@ void init_audio(void) g_extern.audio_data.src_ratio = (double)g_settings.audio.out_rate / g_settings.audio.in_rate; +#ifdef HAVE_DYLIB init_dsp_plugin(); +#endif } void uninit_audio(void) @@ -338,7 +342,9 @@ void uninit_audio(void) free(g_extern.audio_data.outsamples); g_extern.audio_data.outsamples = NULL; +#ifdef HAVE_DYLIB deinit_dsp_plugin(); +#endif } #ifdef HAVE_DYLIB @@ -402,7 +408,6 @@ static void init_filter(void) g_extern.filter.colormap[i] = (r << 16) | (g << 8) | (b << 0); } } -#endif static void deinit_filter(void) { @@ -415,6 +420,7 @@ static void deinit_filter(void) free(g_extern.filter.colormap); } } +#endif #ifdef HAVE_XML static void init_shader_dir(void) @@ -543,7 +549,9 @@ void uninit_video_input(void) if (driver.video_data && driver.video) driver.video->free(driver.video_data); +#ifdef HAVE_DYLIB deinit_filter(); +#endif #ifdef HAVE_XML deinit_shader_dir(); diff --git a/dynamic.c b/dynamic.c index 32f9f189cb31..8f72bc201276 100644 --- a/dynamic.c +++ b/dynamic.c @@ -25,15 +25,18 @@ #include "config.h" #endif +#include #include "libsnes.hpp" +#ifdef NEED_DYNAMIC #ifdef _WIN32 #include #else #include #endif +#endif -#ifdef HAVE_DYNAMIC +#ifdef NEED_DYNAMIC #define DLSYM(lib, x) dylib_proc(lib, #x) #define SYM(type, x) do { \ @@ -96,7 +99,7 @@ unsigned (*psnes_get_memory_size)(unsigned); void (*psnes_unload_cartridge)(void); void (*psnes_term)(void); -#ifdef HAVE_DYLIB +#ifdef NEED_DYNAMIC static void set_environment(void); #endif @@ -144,13 +147,11 @@ static void load_dynamic(void) SYM(void (*)(void), snes_unload_cartridge); SYM(void (*)(void), snes_term); } -#endif - +#else #define SSYM(x) do { \ p##x = x; \ } while (0) -#ifndef HAVE_DYNAMIC static void set_statics(void) { SSYM(snes_init); @@ -183,14 +184,13 @@ static void set_statics(void) } #endif -void init_dlsym(void) +void init_libsnes_sym(void) { // Guarantee that we can do "dirty" casting. // Every OS that this program supports should pass this ... assert(sizeof(void*) == sizeof(void (*)(void))); #ifdef HAVE_DYNAMIC - // Try to verify that -lsnes was not linked in from other modules // since loading it dynamically and with -l will fail hard. function_t sym = dylib_proc(NULL, "snes_init"); @@ -218,12 +218,12 @@ void init_dlsym(void) set_statics(); #endif -#ifdef HAVE_DYLIB +#ifdef NEED_DYNAMIC set_environment(); #endif } -void uninit_dlsym(void) +void uninit_libsnes_sym(void) { #ifdef HAVE_DYNAMIC if (lib_handle) @@ -231,6 +231,7 @@ void uninit_dlsym(void) #endif } +#ifdef NEED_DYNAMIC // Platform independent dylib loading. dylib_t dylib_load(const char *path) { @@ -322,7 +323,6 @@ static bool environment_cb(unsigned cmd, void *data) return true; } -#ifdef HAVE_DYLIB // Assume SNES as defaults. static void set_environment_defaults(void) { @@ -354,4 +354,3 @@ static void set_environment(void) } #endif - diff --git a/dynamic.h b/dynamic.h index bee2014c8d77..4525fa3bb7c8 100644 --- a/dynamic.h +++ b/dynamic.h @@ -21,15 +21,27 @@ #include #include "libsnes.hpp" -void init_dlsym(void); -void uninit_dlsym(void); +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#if defined(HAVE_DYNAMIC) || defined(HAVE_DYLIB) +#define NEED_DYNAMIC +#else +#undef NEED_DYNAMIC +#endif + +void init_libsnes_sym(void); +void uninit_libsnes_sym(void); typedef void *dylib_t; +#ifdef NEED_DYNAMIC typedef void (*function_t)(void); dylib_t dylib_load(const char *path); void dylib_close(dylib_t lib); function_t dylib_proc(dylib_t lib, const char *proc); +#endif extern void (*psnes_init)(void); diff --git a/ssnes.c b/ssnes.c index b3bb9fa680c6..2a711546b0ce 100644 --- a/ssnes.c +++ b/ssnes.c @@ -1944,7 +1944,7 @@ int main(int argc, char *argv[]) parse_input(argc, argv); parse_config(); - init_dlsym(); + init_libsnes_sym(); fill_title_buf(); psnes_init(); @@ -2097,7 +2097,7 @@ int main(int argc, char *argv[]) psnes_unload_cartridge(); psnes_term(); uninit_drivers(); - uninit_dlsym(); + uninit_libsnes_sym(); return 0; @@ -2105,7 +2105,7 @@ int main(int argc, char *argv[]) psnes_unload_cartridge(); psnes_term(); uninit_drivers(); - uninit_dlsym(); + uninit_libsnes_sym(); return 1; }