game-music-emu: fixes to unrar library use.

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++ )
 	{