From 572990dcd3f43386860b5b14015ad722fb96ea83 Mon Sep 17 00:00:00 2001 From: est31 Date: Wed, 10 Jun 2015 00:35:21 +0200 Subject: Add utf-8 conversion utilities and re-add intlGUIEditBox --- build/android/Makefile | 69 ++++++++++++++++++++++++++++++++- build/android/jni/Android.mk | 9 ++++- build/android/libiconv_android.patch | 39 +++++++++++++++++++ build/android/libiconv_android_mk.patch | 51 ++++++++++++++++++++++++ build/android/libiconv_stdio.patch | 10 +++++ 5 files changed, 175 insertions(+), 3 deletions(-) create mode 100644 build/android/libiconv_android.patch create mode 100644 build/android/libiconv_android_mk.patch create mode 100644 build/android/libiconv_stdio.patch (limited to 'build/android') diff --git a/build/android/Makefile b/build/android/Makefile index 1b33a4599..798d56037 100644 --- a/build/android/Makefile +++ b/build/android/Makefile @@ -131,6 +131,13 @@ FREETYPE_TIMESTAMP = $(FREETYPE_DIR)timestamp FREETYPE_TIMESTAMP_INT = $(ROOT)/deps/freetype_timestamp FREETYPE_URL_GIT = https://github.com/cdave1/freetype2-android +ICONV_VERSION = 1.14 +ICONV_DIR = $(ROOT)/deps/libiconv/ +ICONV_LIB = $(ICONV_DIR)/iconv.so +ICONV_TIMESTAMP = $(ICONV_DIR)timestamp +ICONV_TIMESTAMP_INT = $(ROOT)/deps/iconv_timestamp +ICONV_URL_HTTP = http://ftp.gnu.org/pub/gnu/libiconv/libiconv-$(ICONV_VERSION).tar.gz + SQLITE3_FOLDER = sqlite-amalgamation-3080704 SQLITE3_URL = http://www.sqlite.org/2014/$(SQLITE3_FOLDER).zip @@ -431,6 +438,64 @@ $(FREETYPE_LIB) : $(FREETYPE_TIMESTAMP) clean_freetype : $(RM) -rf ${FREETYPE_DIR} +$(ICONV_TIMESTAMP) : iconv_download + @LAST_MODIF=$$(find ${ICONV_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ + if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ + touch ${ICONV_TIMESTAMP}; \ + fi + +iconv_download : + @if [ ! -d ${ICONV_DIR} ] ; then \ + echo "iconv sources missing, downloading..."; \ + mkdir -p ${ROOT}/deps; \ + cd ${ROOT}/deps; \ + wget ${ICONV_URL_HTTP} || exit 1; \ + tar -xzf libiconv-${ICONV_VERSION}.tar.gz || exit 1; \ + rm libiconv-${ICONV_VERSION}.tar.gz; \ + ln -s libiconv-${ICONV_VERSION} libiconv; \ + cd ${ICONV_DIR}; \ + patch -p1 < ${ROOT}/libiconv_android.patch; \ + patch -p1 < ${ROOT}/libiconv_android_mk.patch; \ + patch -p1 < ${ROOT}/libiconv_stdio.patch; \ + cd jni; \ + ln -s .. src; \ + fi + +iconv : $(ICONV_LIB) + +$(ICONV_LIB) : $(ICONV_TIMESTAMP) + @REFRESH=0; \ + if [ ! -e ${ICONV_TIMESTAMP_INT} ] ; then \ + REFRESH=1; \ + fi; \ + if [ ! -e ${ICONV_LIB} ] ; then \ + REFRESH=1; \ + fi; \ + if [ ${ICONV_TIMESTAMP} -nt ${ICONV_TIMESTAMP_INT} ] ; then \ + REFRESH=1; \ + fi; \ + if [ $$REFRESH -ne 0 ] ; then \ + mkdir -p ${ICONV_DIR}; \ + export PATH=$$PATH:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \ + echo "changed timestamp for iconv detected building..."; \ + cd ${ICONV_DIR}; \ + ./configure; \ + make; \ + export NDK_PROJECT_PATH=${ICONV_DIR}; \ + ndk-build NDEBUG=${NDEBUG} NDK_MODULE_PATH=${NDK_MODULE_PATH} \ + APP_PLATFORM=${APP_PLATFORM} APP_ABI=${TARGET_ABI} \ + TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \ + TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \ + TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1; \ + touch ${ICONV_TIMESTAMP}; \ + touch ${ICONV_TIMESTAMP_INT}; \ + else \ + echo "nothing to be done for iconv"; \ + fi + +clean_iconv : + $(RM) -rf ${ICONV_DIR} + #Note: Texturehack patch is required for gpu's not supporting color format # correctly. Known bad GPU: # -geforce on emulator @@ -736,7 +801,7 @@ assets : $(ASSETS_TIMESTAMP) clean_assets : @$(RM) -r assets -apk: $(PATHCFGFILE) assets $(IRRLICHT_LIB) $(CURL_LIB) $(GMP_LIB) $(LEVELDB_TARGET) \ +apk: $(PATHCFGFILE) assets $(ICONV_LIB) $(IRRLICHT_LIB) $(CURL_LIB) $(GMP_LIB) $(LEVELDB_TARGET) \ $(OPENAL_LIB) $(OGG_LIB) prep_srcdir $(ROOT)/jni/src/android_version.h \ sqlite3_download @export NDEBUG=$$NDEBUG; $(MAKE) manifest; \ @@ -778,7 +843,7 @@ envpaths : clean_all : @$(MAKE) clean_apk; \ - $(MAKE) clean_assets clean_irrlicht clean_leveldb clean_curl clean_openssl \ + $(MAKE) clean_assets clean_iconv clean_irrlicht clean_leveldb clean_curl clean_openssl \ clean_openal clean_ogg clean_gmp clean_manifest; \ sleep 1; \ $(RM) -r gen libs obj deps bin Debug and_env diff --git a/build/android/jni/Android.mk b/build/android/jni/Android.mk index 2c574bc41..d62698ce4 100644 --- a/build/android/jni/Android.mk +++ b/build/android/jni/Android.mk @@ -24,6 +24,11 @@ LOCAL_MODULE := freetype LOCAL_SRC_FILES := deps/freetype2-android/Android/obj/local/$(TARGET_ARCH_ABI)/libfreetype2-static.a include $(PREBUILT_STATIC_LIBRARY) +include $(CLEAR_VARS) +LOCAL_MODULE := iconv +LOCAL_SRC_FILES := deps/libiconv/obj/local/$(TARGET_ARCH_ABI)/libiconv.a +include $(PREBUILT_STATIC_LIBRARY) + include $(CLEAR_VARS) LOCAL_MODULE := openal LOCAL_SRC_FILES := deps/openal-soft/libs/$(TARGET_LIBDIR)/libopenal.so @@ -97,6 +102,7 @@ LOCAL_C_INCLUDES := \ jni/src/json \ jni/src/cguittfont \ deps/irrlicht/include \ + deps/libiconv/include \ deps/freetype2-android/include \ deps/curl/include \ deps/openal-soft/jni/OpenAL/include \ @@ -153,6 +159,7 @@ LOCAL_SRC_FILES := \ jni/src/httpfetch.cpp \ jni/src/hud.cpp \ jni/src/imagefilters.cpp \ + jni/src/intlGUIEditBox.cpp \ jni/src/inventory.cpp \ jni/src/inventorymanager.cpp \ jni/src/itemdef.cpp \ @@ -346,7 +353,7 @@ LOCAL_SRC_FILES += \ LOCAL_SRC_FILES += jni/src/json/jsoncpp.cpp LOCAL_SHARED_LIBRARIES := openal ogg vorbis gmp -LOCAL_STATIC_LIBRARIES := Irrlicht freetype curl ssl crypto android_native_app_glue $(PROFILER_LIBS) +LOCAL_STATIC_LIBRARIES := Irrlicht iconv freetype curl ssl crypto android_native_app_glue $(PROFILER_LIBS) ifeq ($(HAVE_LEVELDB), 1) LOCAL_STATIC_LIBRARIES += LevelDB diff --git a/build/android/libiconv_android.patch b/build/android/libiconv_android.patch new file mode 100644 index 000000000..4eca0a4ef --- /dev/null +++ b/build/android/libiconv_android.patch @@ -0,0 +1,39 @@ +--- a/libcharset/lib/localcharset.c 2015-06-10 11:55:25.933870724 +0200 ++++ b/libcharset/lib/localcharset.c 2015-06-10 11:55:39.578063493 +0200 +@@ -47,7 +47,7 @@ + + #if !defined WIN32_NATIVE + # include +-# if HAVE_LANGINFO_CODESET ++# if HAVE_LANGINFO_CODESET && !(defined __ANDROID__) + # include + # else + # if 0 /* see comment below */ +@@ -124,7 +124,7 @@ get_charset_aliases (void) + cp = charset_aliases; + if (cp == NULL) + { +-#if !(defined DARWIN7 || defined VMS || defined WIN32_NATIVE || defined __CYGWIN__) ++#if !(defined DARWIN7 || defined VMS || defined WIN32_NATIVE || defined __CYGWIN__ || defined __ANDROID__) + const char *dir; + const char *base = "charset.alias"; + char *file_name; +@@ -338,6 +338,9 @@ get_charset_aliases (void) + "CP54936" "\0" "GB18030" "\0" + "CP65001" "\0" "UTF-8" "\0"; + # endif ++# if defined __ANDROID__ ++ cp = "*" "\0" "UTF-8" "\0"; ++# endif + #endif + + charset_aliases = cp; +@@ -361,7 +364,7 @@ locale_charset (void) + const char *codeset; + const char *aliases; + +-#if !(defined WIN32_NATIVE || defined OS2) ++#if !(defined WIN32_NATIVE || defined OS2 || defined __ANDROID__) + + # if HAVE_LANGINFO_CODESET + diff --git a/build/android/libiconv_android_mk.patch b/build/android/libiconv_android_mk.patch new file mode 100644 index 000000000..9eb7a1915 --- /dev/null +++ b/build/android/libiconv_android_mk.patch @@ -0,0 +1,51 @@ +From fe27aae178d65b06d5f4104158343b0d2d33e3f0 Mon Sep 17 00:00:00 2001 +From: Pierre Zurek +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) ++ diff --git a/build/android/libiconv_stdio.patch b/build/android/libiconv_stdio.patch new file mode 100644 index 000000000..19cb6aa09 --- /dev/null +++ b/build/android/libiconv_stdio.patch @@ -0,0 +1,10 @@ +--- 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 +@@ -695,7 +696,8 @@ _GL_CXXALIASWARN (gets); + /* 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 + always declared, since it is required by C89. */ +-_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) + #endif \ No newline at end of file -- cgit v1.2.3