Skip to content

Commit ef99ce1

Browse files
committed
Detect iconv type at compile time instead of project generation
1 parent 88c486a commit ef99ce1

File tree

3 files changed

+7
-25
lines changed

3 files changed

+7
-25
lines changed

CMakeLists.txt

-4
Original file line numberDiff line numberDiff line change
@@ -520,12 +520,8 @@ target_include_directories(Aegisub PRIVATE ${OPENGL_INCLUDE_DIR})
520520
target_link_libraries(Aegisub ${OPENGL_LIBRARIES})
521521

522522
find_package(Iconv REQUIRED)
523-
target_compile_definitions(libaegisub PRIVATE "HAVE_ICONV")
524523
target_include_directories(libaegisub PRIVATE ${Iconv_INCLUDE_DIRS})
525524
target_link_libraries(libaegisub ${Iconv_LIBRARIES})
526-
if(NOT Iconv_IS_BUILT_IN)
527-
target_compile_definitions(libaegisub PRIVATE "AGI_ICONV_CONST")
528-
endif()
529525

530526
find_package(ICU REQUIRED uc dt in)
531527
target_include_directories(libaegisub PRIVATE ${ICU_INCLUDE_DIRS})

configure.ac

-14
Original file line numberDiff line numberDiff line change
@@ -272,20 +272,6 @@ AC_SUBST(ICONV_CFLAGS)
272272

273273
AS_IF([test x$agi_cv_with_iconv = xno], [AC_MSG_FAILURE([Please install a working iconv library.])])
274274

275-
AC_AGI_COMPILE([iconv (const)], [iconv_const], [$ICONV_CFLAGS], [$ICONV_LIBS],[
276-
#include <iconv.h>
277-
int main(void) {
278-
iconv_t cd = iconv_open("UTF-16", "UTF-8");
279-
const char *in = "in";
280-
char *out = new char();
281-
size_t res, inbytesleft, outbytesleft;
282-
res = iconv(cd, &in, &inbytesleft, &out, &outbytesleft);
283-
return 0;
284-
} ])
285-
286-
AS_IF([test x$agi_cv_with_iconv_const = xyes],
287-
[AC_DEFINE(AGI_ICONV_CONST, 1, [Enable if iconv expects the in argument to be const])])
288-
289275
###############
290276
# Audio Players
291277
###############

libaegisub/common/charset_conv.cpp

+7-7
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,6 @@
3333
#define ICONV_POSIX
3434
#endif
3535

36-
#ifdef AGI_ICONV_CONST
37-
#define ICONV_CONST_CAST(a) a
38-
#else
39-
#define ICONV_CONST_CAST(a) const_cast<char **>(a)
40-
#endif
41-
4236
static const iconv_t iconv_invalid = (iconv_t)-1;
4337
static const size_t iconv_failed = (size_t)-1;
4438

@@ -286,7 +280,13 @@ Iconv::~Iconv() {
286280
}
287281

288282
size_t Iconv::operator()(const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft) {
289-
return iconv(cd, ICONV_CONST_CAST(inbuf), inbytesleft, outbuf, outbytesleft);
283+
struct InbufConstCast{
284+
const char** p;
285+
InbufConstCast(const char** p) : p(p) {}
286+
operator const char** () const { return p; }
287+
operator char** () const { return const_cast<char**>(p); }
288+
} inbuf_const_cast(inbuf);
289+
return iconv(cd, inbuf_const_cast, inbytesleft, outbuf, outbytesleft);
290290
}
291291

292292
IconvWrapper::IconvWrapper(const char* sourceEncoding, const char* destEncoding, bool enableSubst)

0 commit comments

Comments
 (0)