From ed4ed86f5bb71d313176e798d3f8559a1f1d2af9 Mon Sep 17 00:00:00 2001
From: Ozkan Sezer <[EMAIL REDACTED]>
Date: Thu, 5 Oct 2023 14:33:32 +0300
Subject: [PATCH] fixes to unrar library use.
---
CMakeLists.txt | 6 +++++-
gme/Spc_Emu.cpp | 17 ++++++++++++++---
2 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5cc62c4..aca1ea9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -81,7 +81,11 @@ endif()
# libraries. Ensure CMake looks only for static libs if we're doing a static
# build. See https://stackoverflow.com/a/44738756
if(NOT BUILD_SHARED_LIBS)
+ if(MSVC)
+ set(CMAKE_FIND_LIBRARY_SUFFIXES ".lib")
+ else()
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
+ endif()
endif()
# Check for GCC/Clang "visibility" support.
@@ -103,7 +107,7 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
if (USE_GME_SPC)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_HOME_DIRECTORY}/cmake")
find_package(UNRAR QUIET)
- if (UNRAR_FOUND)
+ if (UNRAR_FOUND AND NOT WIN32)
# POSIX Threading for unRAR
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
endif()
diff --git a/gme/Spc_Emu.cpp b/gme/Spc_Emu.cpp
index 39c8a05..18f8de8 100644
--- a/gme/Spc_Emu.cpp
+++ b/gme/Spc_Emu.cpp
@@ -8,13 +8,23 @@
#include <algorithm>
#ifdef RARDLL
+#ifndef _WIN32
#define PASCAL
#define CALLBACK
+#define UINT unsigned int
#define LONG long
#define HANDLE void *
#define LPARAM intptr_t
-#define UINT __attribute__((unused)) unsigned int
+#else
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#endif
#include <dll.hpp>
+#ifndef ERAR_SUCCESS
+#define ERAR_SUCCESS 0
+#endif
#endif
/* Copyright (C) 2004-2006 Shay Green. This module is free software; you
@@ -286,6 +296,7 @@ extern gme_type_t const gme_spc_type = &gme_spc_type_;
#ifdef RARDLL
static int CALLBACK call_rsn(UINT msg, LPARAM UserData, LPARAM P1, LPARAM P2)
{
+ (void) msg;
byte **bp = (byte **)UserData;
unsigned char *addr = (unsigned char *)P1;
memcpy( *bp, addr, P2 );
@@ -314,7 +325,7 @@ struct Rsn_File : Spc_File
int count = 0;
unsigned biggest = 0;
blargg_vector<byte> temp;
- HANDLE PASCAL rar = RAROpenArchive( &data );
+ HANDLE rar = RAROpenArchive( &data );
struct RARHeaderData head;
for ( ; RARReadHeader( rar, &head ) == ERAR_SUCCESS; count++ )
{
@@ -512,7 +523,7 @@ blargg_err_t Rsn_Emu::load_archive( const char* path )
// get the file count and unpacked size
long pos = 0;
int count = 0;
- HANDLE PASCAL rar = RAROpenArchive( &data );
+ HANDLE rar = RAROpenArchive( &data );
struct RARHeaderData head;
for ( ; RARReadHeader( rar, &head ) == ERAR_SUCCESS; count++ )
{