mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2024-11-14 13:27:45 -07:00
improve NetBSD-specific code
NetBSD doesn't put packages in /usr/local like /CMakeLists.txt thought. The `#ifdef __NetBSD__` around iconv was actually breaking compilation on NetBSD when using the system libiconv (there's also a GNU iconv package) A C program included from C++ source broke on NetBSD specifically, work around it. This doesn't fix compilation on NetBSD, which is currently broken, but is closer to correct.
This commit is contained in:
parent
5817be7bd3
commit
0859d2c472
@ -402,7 +402,7 @@ endif()
|
|||||||
# All commands and submodule commands also need to see these
|
# All commands and submodule commands also need to see these
|
||||||
# changes, so just setting them in the project scope via
|
# changes, so just setting them in the project scope via
|
||||||
# include_directories and link_directories is not sufficient
|
# include_directories and link_directories is not sufficient
|
||||||
if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD|NetBSD")
|
if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
|
||||||
set(CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH};/usr/local")
|
set(CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH};/usr/local")
|
||||||
set(CMAKE_REQUIRED_INCLUDES "/usr/local/include")
|
set(CMAKE_REQUIRED_INCLUDES "/usr/local/include")
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/usr/local/lib")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/usr/local/lib")
|
||||||
|
@ -35,9 +35,6 @@
|
|||||||
constexpr u32 CODEPAGE_SHIFT_JIS = 932;
|
constexpr u32 CODEPAGE_SHIFT_JIS = 932;
|
||||||
constexpr u32 CODEPAGE_WINDOWS_1252 = 1252;
|
constexpr u32 CODEPAGE_WINDOWS_1252 = 1252;
|
||||||
#else
|
#else
|
||||||
#if defined(__NetBSD__)
|
|
||||||
#define LIBICONV_PLUG
|
|
||||||
#endif
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <iconv.h>
|
#include <iconv.h>
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
@ -528,13 +525,8 @@ std::string CodeTo(const char* tocode, const char* fromcode, std::basic_string_v
|
|||||||
while (src_bytes != 0)
|
while (src_bytes != 0)
|
||||||
{
|
{
|
||||||
size_t const iconv_result =
|
size_t const iconv_result =
|
||||||
#if defined(__NetBSD__)
|
|
||||||
iconv(conv_desc, reinterpret_cast<const char**>(&src_buffer), &src_bytes, &dst_buffer,
|
|
||||||
&dst_bytes);
|
|
||||||
#else
|
|
||||||
iconv(conv_desc, const_cast<char**>(reinterpret_cast<const char**>(&src_buffer)),
|
iconv(conv_desc, const_cast<char**>(reinterpret_cast<const char**>(&src_buffer)),
|
||||||
&src_bytes, &dst_buffer, &dst_bytes);
|
&src_bytes, &dst_buffer, &dst_bytes);
|
||||||
#endif
|
|
||||||
if ((size_t)-1 == iconv_result)
|
if ((size_t)-1 == iconv_result)
|
||||||
{
|
{
|
||||||
if (EILSEQ == errno || EINVAL == errno)
|
if (EILSEQ == errno || EINVAL == errno)
|
||||||
|
@ -11,6 +11,17 @@
|
|||||||
#include <string_view>
|
#include <string_view>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
|
// https://github.com/zserge/expr/ is a C program and sorta valid C++.
|
||||||
|
// When included in a C++ program, it's treated as a C++ code, and it may cause
|
||||||
|
// issues: <cmath> may already be included, if so, including <math.h> may
|
||||||
|
// not do anything. <math.h> is obligated to put its functions in the global
|
||||||
|
// namespace, while <cmath> may or may not. The C code we're interpreting as
|
||||||
|
// C++ won't call functions by their qualified names. The code may work anyway
|
||||||
|
// if <cmath> puts its functions in the global namespace, or if the functions
|
||||||
|
// are actually macros that expand inline, both of which are common.
|
||||||
|
// NetBSD 10.0 i386 is an exception, and we need `using` there.
|
||||||
|
using std::isinf;
|
||||||
|
using std::isnan;
|
||||||
#include <expr.h>
|
#include <expr.h>
|
||||||
|
|
||||||
#include "Common/BitUtils.h"
|
#include "Common/BitUtils.h"
|
||||||
|
Loading…
Reference in New Issue
Block a user