forked from Mirrorlandia_minetest/minetest
Android: fix horrible libiconv build
Before, our libiconv build was a joke. We first called configure for our own build host system, then called make, before we executed a Android.mk script we provided as patch. The first "native make" always failed, and the LIBICONV_LIB file setting in our Makefile didn't match the built one, resulting in an always-rebuild of iconv. This commit cleans up this total mess, removes the double-build, and the Android.mk, and properly calls ./configure with the according target platform, and uses a built toolchain. As we have to deal with the android bug "NDK: Support for prebuild libs with full sonames" https://code.google.com/p/android/issues/detail?id=55868 as the 2013 patch https://lists.gnu.org/archive/html/libtool-patches/2013-06/msg00002.html by Google's David Turner wasn't inside the 2011 libtool, we pass -avoid-version to libtool. Thanks to the proper build, wide_to_utf8 works for android now, removing us of the need to disable it.
This commit is contained in:
parent
f97c2702a2
commit
eb3aac20c8
@ -133,7 +133,7 @@ FREETYPE_URL_GIT = https://github.com/cdave1/freetype2-android
|
|||||||
|
|
||||||
ICONV_VERSION = 1.14
|
ICONV_VERSION = 1.14
|
||||||
ICONV_DIR = $(ROOT)/deps/libiconv/
|
ICONV_DIR = $(ROOT)/deps/libiconv/
|
||||||
ICONV_LIB = $(ICONV_DIR)/iconv.so
|
ICONV_LIB = $(ICONV_DIR)/lib/.libs/libiconv.so
|
||||||
ICONV_TIMESTAMP = $(ICONV_DIR)timestamp
|
ICONV_TIMESTAMP = $(ICONV_DIR)timestamp
|
||||||
ICONV_TIMESTAMP_INT = $(ROOT)/deps/iconv_timestamp
|
ICONV_TIMESTAMP_INT = $(ROOT)/deps/iconv_timestamp
|
||||||
ICONV_URL_HTTP = http://ftp.gnu.org/pub/gnu/libiconv/libiconv-$(ICONV_VERSION).tar.gz
|
ICONV_URL_HTTP = http://ftp.gnu.org/pub/gnu/libiconv/libiconv-$(ICONV_VERSION).tar.gz
|
||||||
@ -455,10 +455,7 @@ iconv_download :
|
|||||||
ln -s libiconv-${ICONV_VERSION} libiconv; \
|
ln -s libiconv-${ICONV_VERSION} libiconv; \
|
||||||
cd ${ICONV_DIR}; \
|
cd ${ICONV_DIR}; \
|
||||||
patch -p1 < ${ROOT}/libiconv_android.patch; \
|
patch -p1 < ${ROOT}/libiconv_android.patch; \
|
||||||
patch -p1 < ${ROOT}/libiconv_android_mk.patch; \
|
|
||||||
patch -p1 < ${ROOT}/libiconv_stdio.patch; \
|
patch -p1 < ${ROOT}/libiconv_stdio.patch; \
|
||||||
cd jni; \
|
|
||||||
ln -s .. src; \
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
iconv : $(ICONV_LIB)
|
iconv : $(ICONV_LIB)
|
||||||
@ -479,16 +476,22 @@ $(ICONV_LIB) : $(ICONV_TIMESTAMP)
|
|||||||
export PATH=$$PATH:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \
|
export PATH=$$PATH:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \
|
||||||
echo "changed timestamp for iconv detected building..."; \
|
echo "changed timestamp for iconv detected building..."; \
|
||||||
cd ${ICONV_DIR}; \
|
cd ${ICONV_DIR}; \
|
||||||
./configure; \
|
\
|
||||||
make; \
|
export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-iconv; \
|
||||||
export NDK_PROJECT_PATH=${ICONV_DIR}; \
|
${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \
|
||||||
ndk-build NDEBUG=${NDEBUG} NDK_MODULE_PATH=${NDK_MODULE_PATH} \
|
--toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \
|
||||||
APP_PLATFORM=${APP_PLATFORM} APP_ABI=${TARGET_ABI} \
|
--install-dir=$${TOOLCHAIN}; \
|
||||||
TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \
|
export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \
|
||||||
TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \
|
export CC=${CROSS_PREFIX}gcc; \
|
||||||
TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1; \
|
export CXX=${CROSS_PREFIX}g++; \
|
||||||
|
export TARGET_OS=OS_ANDROID_CROSSCOMPILE; \
|
||||||
|
./configure --host=${TARGET_HOST} || exit 1; \
|
||||||
|
sed -i 's/LIBICONV_VERSION_INFO) /LIBICONV_VERSION_INFO) -avoid-version /g' lib/Makefile; \
|
||||||
|
grep "iconv_LDFLAGS" src/Makefile; \
|
||||||
|
$(MAKE) -s || exit 1; \
|
||||||
touch ${ICONV_TIMESTAMP}; \
|
touch ${ICONV_TIMESTAMP}; \
|
||||||
touch ${ICONV_TIMESTAMP_INT}; \
|
touch ${ICONV_TIMESTAMP_INT}; \
|
||||||
|
rm -rf ${TOOLCHAIN}; \
|
||||||
else \
|
else \
|
||||||
echo "nothing to be done for iconv"; \
|
echo "nothing to be done for iconv"; \
|
||||||
fi
|
fi
|
||||||
|
@ -26,8 +26,8 @@ include $(PREBUILT_STATIC_LIBRARY)
|
|||||||
|
|
||||||
include $(CLEAR_VARS)
|
include $(CLEAR_VARS)
|
||||||
LOCAL_MODULE := iconv
|
LOCAL_MODULE := iconv
|
||||||
LOCAL_SRC_FILES := deps/libiconv/obj/local/$(TARGET_ARCH_ABI)/libiconv.a
|
LOCAL_SRC_FILES := deps/libiconv/lib/.libs/libiconv.so
|
||||||
include $(PREBUILT_STATIC_LIBRARY)
|
include $(PREBUILT_SHARED_LIBRARY)
|
||||||
|
|
||||||
include $(CLEAR_VARS)
|
include $(CLEAR_VARS)
|
||||||
LOCAL_MODULE := openal
|
LOCAL_MODULE := openal
|
||||||
@ -355,8 +355,8 @@ LOCAL_SRC_FILES += \
|
|||||||
# json
|
# json
|
||||||
LOCAL_SRC_FILES += jni/src/json/jsoncpp.cpp
|
LOCAL_SRC_FILES += jni/src/json/jsoncpp.cpp
|
||||||
|
|
||||||
LOCAL_SHARED_LIBRARIES := openal ogg vorbis gmp
|
LOCAL_SHARED_LIBRARIES := iconv openal ogg vorbis gmp
|
||||||
LOCAL_STATIC_LIBRARIES := Irrlicht iconv freetype curl ssl crypto android_native_app_glue $(PROFILER_LIBS)
|
LOCAL_STATIC_LIBRARIES := Irrlicht freetype curl ssl crypto android_native_app_glue $(PROFILER_LIBS)
|
||||||
|
|
||||||
ifeq ($(HAVE_LEVELDB), 1)
|
ifeq ($(HAVE_LEVELDB), 1)
|
||||||
LOCAL_STATIC_LIBRARIES += LevelDB
|
LOCAL_STATIC_LIBRARIES += LevelDB
|
||||||
|
@ -1,51 +0,0 @@
|
|||||||
From fe27aae178d65b06d5f4104158343b0d2d33e3f0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Pierre Zurek <pierrezurek@gmail.com>
|
|
||||||
Date: Sat, 2 Apr 2011 23:11:57 +0200
|
|
||||||
Subject: [PATCH] Added Android.mk.
|
|
||||||
|
|
||||||
This makefile first executes the configure script, that will
|
|
||||||
generate the config.h files necessary to build iconv.
|
|
||||||
---
|
|
||||||
Android.mk | 29 +++++++++++++++++++++++++++++
|
|
||||||
1 file changed, 29 insertions(+)
|
|
||||||
create mode 100644 Android.mk
|
|
||||||
|
|
||||||
diff --git a/jni/Android.mk b/jni/Android.mk
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..799b22d
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/jni/Android.mk
|
|
||||||
@@ -0,0 +1,32 @@
|
|
||||||
+LOCAL_PATH := $(call my-dir)
|
|
||||||
+include $(CLEAR_VARS)
|
|
||||||
+
|
|
||||||
+LOCAL_ARM_MODE := arm
|
|
||||||
+
|
|
||||||
+LOCAL_SRC_FILES := src/lib/iconv.c \
|
|
||||||
+ src/libcharset/lib/localcharset.c \
|
|
||||||
+ src/lib/relocatable.c
|
|
||||||
+
|
|
||||||
+LOCAL_C_INCLUDES += $(LOCAL_PATH)/src/include \
|
|
||||||
+ $(LOCAL_PATH)/src/libcharset \
|
|
||||||
+ $(LOCAL_PATH)/src/libcharset/include
|
|
||||||
+
|
|
||||||
+LOCAL_CFLAGS := \
|
|
||||||
+ -DLIBDIR="\"c\"" \
|
|
||||||
+ -D_ANDROID \
|
|
||||||
+ -DBUILDING_LIBCHARSET \
|
|
||||||
+ -DBUILDING_LIBICONV \
|
|
||||||
+ -DBUILDING_LIBICONV \
|
|
||||||
+ -DIN_LIBRARY
|
|
||||||
+
|
|
||||||
+LOCAL_MODULE:= iconv
|
|
||||||
+
|
|
||||||
+$(info Configuring iconv...)
|
|
||||||
+COMMAND := $(shell \
|
|
||||||
+ export PATH=$(TOOLCHAIN_INSTALL_DIR)/bin:$$PATH; \
|
|
||||||
+ cd $(LOCAL_PATH); \
|
|
||||||
+ make distclean; \
|
|
||||||
+ ./configure --host="arm-linux-androideabi")
|
|
||||||
+$(info iconv configured.)
|
|
||||||
+
|
|
||||||
+include $(BUILD_STATIC_LIBRARY)
|
|
||||||
+
|
|
@ -1,6 +1,6 @@
|
|||||||
--- a/srclib/stdio.in.h 2011-08-07 15:42:06.000000000 +0200
|
--- a/srclib/stdio.in.h 2011-08-07 15:42:06.000000000 +0200
|
||||||
+++ b/srclib/stdio.in.h 2015-06-10 09:27:58.129056262 +0200
|
+++ b/srclib/stdio.in.h 2015-06-10 09:27:58.129056262 +0200
|
||||||
@@ -695,7 +696,8 @@ _GL_CXXALIASWARN (gets);
|
@@ -695,8 +696,9 @@ _GL_CXXALIASWARN (gets);
|
||||||
/* It is very rare that the developer ever has full control of stdin,
|
/* It is very rare that the developer ever has full control of stdin,
|
||||||
so any use of gets warrants an unconditional warning. Assume it is
|
so any use of gets warrants an unconditional warning. Assume it is
|
||||||
always declared, since it is required by C89. */
|
always declared, since it is required by C89. */
|
||||||
@ -8,3 +8,6 @@
|
|||||||
+/*_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");*/
|
+/*_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");*/
|
||||||
+#define gets(a) fgets( a, sizeof(*(a)), stdin)
|
+#define gets(a) fgets( a, sizeof(*(a)), stdin)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if @GNULIB_OBSTACK_PRINTF@ || @GNULIB_OBSTACK_PRINTF_POSIX@
|
||||||
|
@ -102,16 +102,6 @@ std::wstring utf8_to_wide(const std::string &input)
|
|||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __ANDROID__
|
|
||||||
|
|
||||||
// TODO: this is an ugly fix for wide_to_utf8 somehow not working on android
|
|
||||||
std::string wide_to_utf8(const std::wstring &input)
|
|
||||||
{
|
|
||||||
return wide_to_narrow(input);
|
|
||||||
}
|
|
||||||
|
|
||||||
#else // __ANDROID__
|
|
||||||
|
|
||||||
std::string wide_to_utf8(const std::wstring &input)
|
std::string wide_to_utf8(const std::wstring &input)
|
||||||
{
|
{
|
||||||
size_t inbuf_size = (input.length() + 1) * sizeof(wchar_t);
|
size_t inbuf_size = (input.length() + 1) * sizeof(wchar_t);
|
||||||
@ -138,8 +128,6 @@ std::string wide_to_utf8(const std::wstring &input)
|
|||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // __ANDROID__
|
|
||||||
|
|
||||||
#else // _WIN32
|
#else // _WIN32
|
||||||
|
|
||||||
std::wstring utf8_to_wide(const std::string &input)
|
std::wstring utf8_to_wide(const std::string &input)
|
||||||
|
Loading…
Reference in New Issue
Block a user