summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Android/.classpath8
-rw-r--r--Android/.project33
-rw-r--r--Android/.settings/org.eclipse.jdt.core.prefs4
-rw-r--r--Android/AndroidManifest.xml27
-rw-r--r--Android/assets/basedir/Plugins/README.txt2
-rw-r--r--Android/assets/basedir/README.txt10
-rw-r--r--Android/assets/basedir/webadmin/README.txt1
-rw-r--r--Android/gen/com/mcserver/BuildConfig.java6
-rw-r--r--Android/gen/com/mcserver/R.java39
-rw-r--r--Android/jni/Android.mk44
-rw-r--r--Android/jni/Application.mk7
-rw-r--r--Android/jni/ToJava.cpp3
-rw-r--r--Android/jni/ToJava.h59
-rw-r--r--Android/jni/app-android.cpp130
-rw-r--r--Android/proguard-project.txt20
-rw-r--r--Android/project.properties14
-rw-r--r--Android/res/drawable-hdpi/ic_launcher.pngbin12967 -> 0 bytes
-rw-r--r--Android/res/drawable-ldpi/ic_launcher.pngbin5942 -> 0 bytes
-rw-r--r--Android/res/drawable-mdpi/ic_launcher.pngbin7989 -> 0 bytes
-rw-r--r--Android/res/drawable-xhdpi/ic_launcher.pngbin18851 -> 0 bytes
-rw-r--r--Android/res/layout/list_item.xml7
-rw-r--r--Android/res/layout/main.xml61
-rw-r--r--Android/res/values-pl/strings.xml13
-rw-r--r--Android/res/values/strings.xml13
-rw-r--r--Android/src/com/mcserver/MCServerActivity.java302
-rw-r--r--Android/src/com/mcserver/MCServerInstaller.java432
-rw-r--r--CMakeLists.txt47
-rw-r--r--SetFlags.cmake9
-rw-r--r--android/.gitignore5
-rw-r--r--android/CMakeLists.txt32
m---------lib/libevent0
m---------lib/lua0
m---------lib/tolua++0
-rw-r--r--src/Bindings/CMakeLists.txt2
-rw-r--r--src/ByteBuffer.cpp37
-rw-r--r--src/CMakeLists.txt24
-rw-r--r--src/ClientHandle.h2
-rw-r--r--src/FurnaceRecipe.cpp6
-rw-r--r--src/LoggerListeners.cpp53
-rw-r--r--src/OSSupport/CMakeLists.txt8
-rw-r--r--src/OSSupport/Errors.cpp2
-rw-r--r--src/OSSupport/File.cpp6
-rw-r--r--src/OSSupport/NetworkInterfaceEnum.cpp14
-rw-r--r--src/OSSupport/NetworkSingleton.cpp15
-rw-r--r--src/OSSupport/StackTrace.cpp4
-rw-r--r--src/Root.cpp22
-rw-r--r--src/StringUtils.cpp4
-rw-r--r--src/World.cpp6
-rw-r--r--src/main.cpp18
49 files changed, 146 insertions, 1405 deletions
diff --git a/Android/.classpath b/Android/.classpath
deleted file mode 100644
index a4763d1ee..000000000
--- a/Android/.classpath
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry kind="src" path="src"/>
- <classpathentry kind="src" path="gen"/>
- <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
- <classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
- <classpathentry kind="output" path="bin/classes"/>
-</classpath>
diff --git a/Android/.project b/Android/.project
deleted file mode 100644
index ad960717b..000000000
--- a/Android/.project
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>MCServer</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>com.android.ide.eclipse.adt.ApkBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>com.android.ide.eclipse.adt.AndroidNature</nature>
- <nature>org.eclipse.jdt.core.javanature</nature>
- </natures>
-</projectDescription>
diff --git a/Android/.settings/org.eclipse.jdt.core.prefs b/Android/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index f77b31c2d..000000000
--- a/Android/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.source=1.5
diff --git a/Android/AndroidManifest.xml b/Android/AndroidManifest.xml
deleted file mode 100644
index 0a2cc8380..000000000
--- a/Android/AndroidManifest.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.mcserver"
- android:versionCode="3"
- android:versionName="r1375" >
-
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
- <uses-permission android:name="android.permission.READ_LOGS"/>
-
- <uses-sdk android:minSdkVersion="10" />
-
- <application
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name" >
- <activity
- android:name=".MCServerActivity"
- android:label="@string/app_name" >
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
-
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
-
-</manifest> \ No newline at end of file
diff --git a/Android/assets/basedir/Plugins/README.txt b/Android/assets/basedir/Plugins/README.txt
deleted file mode 100644
index 1c8259eda..000000000
--- a/Android/assets/basedir/Plugins/README.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Put all pre-packaged plugins in here such as Core.
-The user will be able to install each plugin in here separately. \ No newline at end of file
diff --git a/Android/assets/basedir/README.txt b/Android/assets/basedir/README.txt
deleted file mode 100644
index 784d10fc7..000000000
--- a/Android/assets/basedir/README.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-Put all pre-packaged settings/preferences and license files in here.
-Such as:
-
-settings.example.ini
-groups.example.ini
-users.example.ini
-webadmin.example.ini
-Lua-LICENSE.txt
-MersenneTwister-LICENSE.txt
-etc.etc \ No newline at end of file
diff --git a/Android/assets/basedir/webadmin/README.txt b/Android/assets/basedir/webadmin/README.txt
deleted file mode 100644
index 96090fd33..000000000
--- a/Android/assets/basedir/webadmin/README.txt
+++ /dev/null
@@ -1 +0,0 @@
-Put pre-packaged webadmin template in here \ No newline at end of file
diff --git a/Android/gen/com/mcserver/BuildConfig.java b/Android/gen/com/mcserver/BuildConfig.java
deleted file mode 100644
index e40837927..000000000
--- a/Android/gen/com/mcserver/BuildConfig.java
+++ /dev/null
@@ -1,6 +0,0 @@
-/** Automatically generated file. DO NOT MODIFY */
-package com.mcserver;
-
-public final class BuildConfig {
- public final static boolean DEBUG = true;
-} \ No newline at end of file
diff --git a/Android/gen/com/mcserver/R.java b/Android/gen/com/mcserver/R.java
deleted file mode 100644
index cbb9e653a..000000000
--- a/Android/gen/com/mcserver/R.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/* AUTO-GENERATED FILE. DO NOT MODIFY.
- *
- * This class was automatically generated by the
- * aapt tool from the resource data it found. It
- * should not be modified by hand.
- */
-
-package com.mcserver;
-
-public final class R {
- public static final class attr {
- }
- public static final class drawable {
- public static final int ic_launcher=0x7f020000;
- }
- public static final class id {
- public static final int configure_server=0x7f050003;
- public static final int ip_address=0x7f050005;
- public static final int listView1=0x7f050006;
- public static final int server_status_text=0x7f050004;
- public static final int start_server=0x7f050002;
- public static final int stop_server=0x7f050001;
- public static final int textView2=0x7f050000;
- }
- public static final class layout {
- public static final int list_item=0x7f030000;
- public static final int main=0x7f030001;
- }
- public static final class string {
- public static final int app_name=0x7f040001;
- public static final int configure=0x7f040007;
- public static final int hello=0x7f040000;
- public static final int mcserver_is_not_running=0x7f040005;
- public static final int mcserver_is_running=0x7f040004;
- public static final int start=0x7f040002;
- public static final int stop=0x7f040003;
- public static final int your_ip=0x7f040006;
- }
-}
diff --git a/Android/jni/Android.mk b/Android/jni/Android.mk
deleted file mode 100644
index ce142d446..000000000
--- a/Android/jni/Android.mk
+++ /dev/null
@@ -1,44 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := mcserver
-
-
-
-LOCAL_SRC_FILES := $(shell find ../lib/polarssl ../lib/lua ../lib/jsoncpp ../lib/zlib ../src ../lib/tolua++ ../lib/iniFile ../lib/expat ../lib/md5 ../lib/sqlite ../lib/luaexpat '(' -name '*.cpp' -o -name '*.c' ')')
-LOCAL_SRC_FILES := $(filter-out %SquirrelFunctions.cpp %SquirrelBindings.cpp %cPlugin_Squirrel.cpp %cSquirrelCommandBinder.cpp %minigzip.c %lua.c %tolua.c %toluabind.c %LeakFinder.cpp %StackWalker.cpp %example.c,$(LOCAL_SRC_FILES))
-LOCAL_SRC_FILES := $(patsubst %.cpp,../%.cpp,$(LOCAL_SRC_FILES))
-LOCAL_SRC_FILES := $(patsubst %.c,../%.c,$(LOCAL_SRC_FILES))
-LOCAL_SRC_FILES += app-android.cpp ToJava.cpp
-
-LOCAL_CFLAGS := -DANDROID_NDK \
- -O3 \
- -funroll-loops \
- -mfloat-abi=softfp -mfpu=neon \
- -fexceptions \
-
-
-LOCAL_STATIC_LIBRARIES := cpufeatures
-
-LOCAL_C_INCLUDES := ../src \
- ../src/packets \
- ../src/items \
- ../src/blocks \
- ../lib/tolua++/src/lib \
- ../lib/lua/src \
- ../lib/zlib-1.2.7 \
- ../lib/iniFile \
- ../lib/tolua++/include \
- ../lib/jsoncpp/include \
- ../lib/jsoncpp/src/lib_json \
- ../lib/expat/ \
- ../lib/md5/ \
- ../lib/sqlite/ \
- ../lib/luaexpat/ \
- .. \
-
-
-LOCAL_LDLIBS := -ldl -llog
-
-include $(BUILD_SHARED_LIBRARY)
-$(call import-module,cpufeatures)
diff --git a/Android/jni/Application.mk b/Android/jni/Application.mk
deleted file mode 100644
index e00c8b5e2..000000000
--- a/Android/jni/Application.mk
+++ /dev/null
@@ -1,7 +0,0 @@
-# Build both ARMv5TE and ARMv7-A machine code.
-APP_MODULES := mcserver
-# APP_ABI := armeabi armeabi-v7a
-#APP_STL := stlport_static
-
-APP_STL := gnustl_static
-APP_CPPFLAGS := -frtti \ No newline at end of file
diff --git a/Android/jni/ToJava.cpp b/Android/jni/ToJava.cpp
deleted file mode 100644
index 8db22dd1d..000000000
--- a/Android/jni/ToJava.cpp
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "Globals.h"
-
-#include "ToJava.h" \ No newline at end of file
diff --git a/Android/jni/ToJava.h b/Android/jni/ToJava.h
deleted file mode 100644
index 11979c847..000000000
--- a/Android/jni/ToJava.h
+++ /dev/null
@@ -1,59 +0,0 @@
-#pragma once
-
-#include <jni.h>
-#include <android/log.h>
-extern JNIEnv* g_CurrentJNIEnv;
-extern JavaVM* g_JavaVM;
-extern jobject g_JavaThread;
-//extern jobject g_JavaActivity;
-
-//__android_log_vprint(ANDROID_LOG_ERROR,"MCServer", a_Format, argList);
-
-static void CallJavaFunction_Void_String( jobject a_Object, const std::string & a_FunctionName, const std::string & a_StringParam )
-{
- JNIEnv * oldEnv = g_CurrentJNIEnv;
- int status = g_JavaVM->AttachCurrentThread(&g_CurrentJNIEnv, NULL);
- __android_log_print(ANDROID_LOG_ERROR,"MCServer", "STATUS: %i old: %p new: %p", status, oldEnv, g_CurrentJNIEnv );
- jstring str = g_CurrentJNIEnv->NewStringUTF( a_StringParam.c_str() );
-
-
- //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "JNIEnv: %i Object: %i", g_CurrentJNIEnv, a_Object );
- jclass cls = g_CurrentJNIEnv->GetObjectClass( a_Object );
- //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "jclass: %i", cls );
- jmethodID mid = g_CurrentJNIEnv->GetMethodID( cls, a_FunctionName.c_str(), "(Ljava/lang/String;)V"); // void a_FunctionName( String )
- //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "jmethodID: %i", mid );
- if (mid != 0)
- {
-
- __android_log_print(ANDROID_LOG_ERROR,"MCServer", "Going to call right NOW! %s", a_FunctionName.c_str() );
- g_CurrentJNIEnv->CallVoidMethod( a_Object, mid, str );
- }
- else
- {
- __android_log_print(ANDROID_LOG_ERROR,"MCServer", "It was 0, derp" );
- }
-
- if( oldEnv != g_CurrentJNIEnv )
- {
- g_JavaVM->DetachCurrentThread();
- }
-}
-
-
-static void CallJavaFunction_Void_Void( jobject a_Object, const std::string & a_FunctionName )
-{
- //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "JNIEnv: %i Object: %i", g_CurrentJNIEnv, a_Object );
- jclass cls = g_CurrentJNIEnv->GetObjectClass( a_Object );
- //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "jclass: %i", cls );
- jmethodID mid = g_CurrentJNIEnv->GetMethodID( cls, a_FunctionName.c_str(), "()V"); // void a_FunctionName( String )
- //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "jmethodID: %i", mid );
- if (mid != 0)
- {
- //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "Going to call right NOW! %s", a_FunctionName.c_str() );
- g_CurrentJNIEnv->CallVoidMethod( a_Object, mid );
- }
- else
- {
- __android_log_print(ANDROID_LOG_ERROR,"MCServer", "It was 0, derp" );
- }
-} \ No newline at end of file
diff --git a/Android/jni/app-android.cpp b/Android/jni/app-android.cpp
deleted file mode 100644
index 386f1b90e..000000000
--- a/Android/jni/app-android.cpp
+++ /dev/null
@@ -1,130 +0,0 @@
-#include "Globals.h"
-
-#include <jni.h>
-#include <sys/time.h>
-#include <time.h>
-#include <stdint.h>
-
-#include <stdlib.h>
-#include <math.h>
-#include <float.h>
-#include <assert.h>
-
-#include "OSSupport/CriticalSection.h"
-#include "OSSupport/File.h"
-#include "ToJava.h"
-
-#include "Root.h"
-#include "WebAdmin.h"
-
-#include <android/log.h>
-
-#ifdef _WIN32 // For IntelliSense parsing
-typedef void jobject;
-typedef int jint;
-typedef bool jboolean;
-typedef void JavaVM;
-typedef void JNIEnv;
-#endif
-
-cCriticalSection g_CriticalSection;
-
-JNIEnv* g_CurrentJNIEnv = 0;
-jobject g_JavaThread = 0;
-JavaVM* g_JavaVM = 0;
-//jobject g_JavaActivity = 0;
-
-cRoot * pRoot = NULL;
-
-
-class cMainThread :
- public cIsThread
-{
-public:
- cMainThread() :
- cIsThread("cMainThread")
- {
- //Start();
- __android_log_print(ANDROID_LOG_ERROR,"MCServer", "%s", "cMainThread");
- }
-
- void Stop(void)
- {
- m_ShouldTerminate = true;
- Wait();
- }
-
-protected:
-
- virtual void Execute(void) override
- {
- __android_log_print(ANDROID_LOG_ERROR,"MCServer", "%s", "Execute");
- pRoot = new cRoot();
- pRoot->Start();
- delete pRoot;
- }
-
-} ;
-
-cMainThread * pMainThread = NULL;
-
-jint JNI_OnLoad(JavaVM* vm, void* reserved)
-{
- //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "%s", "JNI_OnLoad JNI_OnLoad JNI_OnLoad JNI_OnLoad");
- g_JavaVM = vm;
- return JNI_VERSION_1_4;
-}
-
-/* Called when program/activity is created */
-extern "C" void Java_com_mcserver_MCServerActivity_NativeOnCreate( JNIEnv* env, jobject thiz )
-{
- g_CriticalSection.Lock();
- g_CurrentJNIEnv = env;
- g_JavaThread = thiz;
- //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "%s", "Logging from C++!");
- g_CriticalSection.Unlock();
-
- cFile::CreateFolder("/sdcard/mcserver");
-
- pRoot = new cRoot();
- pRoot->Start();
- delete pRoot; pRoot = NULL;
-}
-
-
-
-
-
-extern "C" void Java_com_mcserver_MCServerActivity_NativeCleanUp( JNIEnv* env, jobject thiz )
-{
- g_CriticalSection.Lock();
- g_CurrentJNIEnv = env;
- g_JavaThread = thiz;
- g_CriticalSection.Unlock();
-
- __android_log_print(ANDROID_LOG_ERROR,"MCServer", "pRoot: %p", pRoot);
- if( pRoot != NULL )
- {
- pRoot->QueueExecuteConsoleCommand("stop");
- }
-}
-
-
-
-
-extern "C" jboolean Java_com_mcserver_MCServerActivity_NativeIsServerRunning( JNIEnv* env, jobject thiz )
-{
- return pRoot != NULL;
-}
-
-
-
-
-extern "C" jint Java_com_mcserver_MCServerActivity_NativeGetWebAdminPort( JNIEnv* env, jobject thiz )
-{
- if( pRoot != NULL && pRoot->GetWebAdmin() != NULL )
- {
- return atoi(pRoot->GetWebAdmin()->GetIPv4Ports().c_str());
- }
- return 0;
-}
diff --git a/Android/proguard-project.txt b/Android/proguard-project.txt
deleted file mode 100644
index f2fe1559a..000000000
--- a/Android/proguard-project.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-# To enable ProGuard in your project, edit project.properties
-# to define the proguard.config property as described in that file.
-#
-# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in ${sdk.dir}/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the ProGuard
-# include property in project.properties.
-#
-# For more details, see
-# http://developer.android.com/guide/developing/tools/proguard.html
-
-# Add any project specific keep options here:
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-# public *;
-#}
diff --git a/Android/project.properties b/Android/project.properties
deleted file mode 100644
index 7a6518b77..000000000
--- a/Android/project.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-# This file is automatically generated by Android Tools.
-# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
-#
-# This file must be checked in Version Control Systems.
-#
-# To customize properties used by the Ant build system edit
-# "ant.properties", and override values to adapt the script to your
-# project structure.
-#
-# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
-#proguard.config=${sdk.dir}\tools\proguard\proguard-android.txt:proguard-project.txt
-
-# Project target.
-target=android-12
diff --git a/Android/res/drawable-hdpi/ic_launcher.png b/Android/res/drawable-hdpi/ic_launcher.png
deleted file mode 100644
index d8a74a2d8..000000000
--- a/Android/res/drawable-hdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/Android/res/drawable-ldpi/ic_launcher.png b/Android/res/drawable-ldpi/ic_launcher.png
deleted file mode 100644
index 5fa7251f8..000000000
--- a/Android/res/drawable-ldpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/Android/res/drawable-mdpi/ic_launcher.png b/Android/res/drawable-mdpi/ic_launcher.png
deleted file mode 100644
index 0e3af7c05..000000000
--- a/Android/res/drawable-mdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/Android/res/drawable-xhdpi/ic_launcher.png b/Android/res/drawable-xhdpi/ic_launcher.png
deleted file mode 100644
index 60b19df2d..000000000
--- a/Android/res/drawable-xhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/Android/res/layout/list_item.xml b/Android/res/layout/list_item.xml
deleted file mode 100644
index e77da47db..000000000
--- a/Android/res/layout/list_item.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<TextView xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent" >
-
-
-</TextView> \ No newline at end of file
diff --git a/Android/res/layout/main.xml b/Android/res/layout/main.xml
deleted file mode 100644
index 4ff238d80..000000000
--- a/Android/res/layout/main.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:gravity="center_horizontal"
- android:orientation="vertical" >
-
- <TextView
- android:id="@+id/textView2"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/app_name"
- android:textAppearance="?android:attr/textAppearanceLarge" />
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content" >
-
- <Button
- android:id="@+id/stop_server"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:enabled="true"
- android:text="@string/stop" />
-
- <Button
- android:id="@+id/start_server"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="@string/start" />
-
- <Button
- android:id="@+id/configure_server"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="@string/configure" />
-
- </LinearLayout>
-
- <TextView
- android:id="@+id/server_status_text"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/mcserver_is_not_running"
- android:textAppearance="?android:attr/textAppearanceMedium" />
-
- <TextView
- android:id="@+id/ip_address"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/your_ip" />
- <ListView
- android:id="@+id/listView1"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" >
- </ListView>
-
-</LinearLayout> \ No newline at end of file
diff --git a/Android/res/values-pl/strings.xml b/Android/res/values-pl/strings.xml
deleted file mode 100644
index 74c8044d8..000000000
--- a/Android/res/values-pl/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <string name="hello">Hello World, MCServerActivity!</string>
- <string name="app_name">MCServer</string>
- <string name="start">Start</string>
- <string name="stop">Stop</string>
- <string name="mcserver_is_running">MCServer jest włączony</string>
- <string name="mcserver_is_not_running">MCServer jest wyłączony</string>
- <string name="your_ip">Twoje IP …</string>
- <string name="configure">Ustawienia</string>
-
-</resources>
diff --git a/Android/res/values/strings.xml b/Android/res/values/strings.xml
deleted file mode 100644
index 9eb81d653..000000000
--- a/Android/res/values/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <string name="hello">Hello World, MCServerActivity!</string>
- <string name="app_name">MCServer</string>
- <string name="start">Start</string>
- <string name="stop">Stop</string>
- <string name="mcserver_is_running">MCServer is running</string>
- <string name="mcserver_is_not_running">MCServer is not running</string>
- <string name="your_ip">Your IP …</string>
- <string name="configure">Configure</string>
-
-</resources> \ No newline at end of file
diff --git a/Android/src/com/mcserver/MCServerActivity.java b/Android/src/com/mcserver/MCServerActivity.java
deleted file mode 100644
index 8a9846ca1..000000000
--- a/Android/src/com/mcserver/MCServerActivity.java
+++ /dev/null
@@ -1,302 +0,0 @@
-package com.mcserver;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.InetAddress;
-import java.net.NetworkInterface;
-import java.net.SocketException;
-import java.util.ArrayList;
-import java.util.Enumeration;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.graphics.Color;
-import android.net.Uri;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.widget.ArrayAdapter;
-import android.widget.Button;
-import android.widget.ListView;
-import android.widget.TextView;
-
-public class MCServerActivity extends Activity {
- MainThread mThread = null;
- Thread ServerStatusThread = null;
- boolean mbExiting = false;
- boolean mbEnabledLogging = false;
-
- ArrayList<String> mLogList = new ArrayList<String>();
- ArrayAdapter<String> mAdapter;
-
- MCServerInstaller mInstaller = null;
-
- final private int MENU_REINSTALL = 0;
-
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
-
- //Log.e("MCServer", "p id: " + android.os.Process.myPid() );
-
-
- ((Button)findViewById(R.id.start_server)).setOnClickListener( new View.OnClickListener() {
- public void onClick(View v) {
- mbEnabledLogging = true;
- if( mThread == null || mThread.isAlive() == false ) {
- mThread = new MainThread( (MCServerActivity)v.getContext() );
- mThread.start();
- }
- }
- });
-
- ((Button)findViewById(R.id.stop_server)).setOnClickListener( new View.OnClickListener() {
- public void onClick(View v) {
- mbEnabledLogging = true;
- NativeCleanUp();
- }
- });
-
- ((Button)findViewById(R.id.configure_server)).setOnClickListener( new View.OnClickListener() {
- public void onClick(View v) {
- Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://localhost:" + NativeGetWebAdminPort() + "/webadmin/"));
- startActivity( myIntent );
- }
- });
-
-
-
- ListView lv = (ListView)this.findViewById(R.id.listView1);
- mAdapter = new ArrayAdapter<String>(this,
- R.layout.list_item,
- mLogList);
- lv.setAdapter(mAdapter);
-
-
- mLogList.add("---- LOG ----");
-
- ServerStatusThread = new Thread( new Runnable() {
- public void run() {
- for(;;)
- {
- try {
- runOnUiThread( new Runnable() {
- public void run() {
- UpdateServerStatus();
- }
- });
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- }
- }
- }
- });
- ServerStatusThread.start();
-
-
-
-
-
-
-
- Thread loggerThread = new Thread( new Runnable() {
- public void run() {
- Process process = null;
-
- try {
- process = Runtime.getRuntime().exec("logcat -v raw *:s MCServer ");// Verbose filter
- } catch (IOException e) {
- }
-
- BufferedReader reader = null;
-
- try {
- InputStreamReader isr = new InputStreamReader(process.getInputStream());
- reader = new BufferedReader( isr );
-
- String line;
-
- while( mbExiting == false ) {
- line = reader.readLine();
- if( mbEnabledLogging == true && line != null )
- {
- AddToLog( line );
- }
- }
-
- Log.i("MCServer", "Prepping thread for termination");
- reader.close();
- process.destroy();
- process = null;
- reader = null;
- } catch (IOException e) {
- }
- }
- });
- loggerThread.start();
-
- ((TextView)findViewById(R.id.ip_address)).setText("Connect to: " + getLocalIpAddress());
-
-
- mInstaller = new MCServerInstaller(this);
- if( mInstaller.NeedsUpdate() )
- {
- mInstaller.ShowFirstRunDialog();
- }
- }
-
-
-
- public String getLocalIpAddress() {
- try {
- for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
- NetworkInterface intf = en.nextElement();
- for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
- InetAddress inetAddress = enumIpAddr.nextElement();
- if (!inetAddress.isLoopbackAddress()) {
- return inetAddress.getHostAddress().toString();
- }
- }
- }
- } catch (SocketException ex) {
- Log.e("MCServer", ex.toString());
- }
- return null;
- }
-
-
-
- public void UpdateServerStatus()
- {
- if( NativeIsServerRunning() ) {
- ((TextView)findViewById(R.id.server_status_text)).setText(R.string.mcserver_is_running);
- ((TextView)findViewById(R.id.server_status_text)).setTextColor(Color.GREEN);
- ((Button)findViewById(R.id.stop_server)).setEnabled(true);
- ((Button)findViewById(R.id.start_server)).setEnabled(false);
- ((Button)findViewById(R.id.configure_server)).setEnabled(true);
- } else {
- ((TextView)findViewById(R.id.server_status_text)).setText(R.string.mcserver_is_not_running);
- ((TextView)findViewById(R.id.server_status_text)).setTextColor(Color.RED);
- ((Button)findViewById(R.id.stop_server)).setEnabled(false);
- ((Button)findViewById(R.id.start_server)).setEnabled(true);
- ((Button)findViewById(R.id.configure_server)).setEnabled(false);
- }
- }
-
-
-
-
-
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- if(keyCode==KeyEvent.KEYCODE_BACK)
- {
- //android.os.Process.killProcess(android.os.Process.myPid());
- NativeCleanUp();
- return super.onKeyDown(keyCode, event);
- }
- return false;
- }
-
-
-
-
- public void onDestroy() {
- mbExiting = true;
- super.onDestroy();
- }
-
-
-
-
-
- public void AddToLog( final String logMessage ) {
- final ListView lv = ((ListView)findViewById(R.id.listView1));
- lv.post(new Runnable() {
- public void run() {
- //final boolean bAutoscroll = lv.getLastVisiblePosition() >= mAdapter.getCount() - 1 ? true : false;
-
- mLogList.add(logMessage);
- while( mLogList.size() > 100 ) // only allow 100 messages in the list, otherwise it might slow the GUI down
- {
- mLogList.remove(0);
- }
- mAdapter.notifyDataSetChanged();
-
-
- // Autoscroll detection is dodgy
- //if( bAutoscroll )
- {
- lv.setSelection(mAdapter.getCount() - 1);
- }
- }
- });
- }
-
-
-
-
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- menu.add(0, MENU_REINSTALL, 0, "Reinstall MCServer" );
- return super.onCreateOptionsMenu(menu);
- }
-
-
-
-
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
-
- switch( item.getItemId() )
- {
- case MENU_REINSTALL:
- mInstaller.ShowPluginInstallDialog(true);
- return true;
- }
- return false;
- }
-
-
-
-
-
- static {
- System.loadLibrary("mcserver");
- }
-
-
- public native void NativeOnCreate();
- public native void NativeCleanUp();
- public native boolean NativeIsServerRunning();
- public native int NativeGetWebAdminPort();
-
-}
-
-
-class MainThread extends Thread {
- MCServerActivity mContext = null;
- int numlogs = 0;
-
- MainThread( MCServerActivity aContext ) {
- mContext = aContext;
- }
-
- public void run() {
- mContext.NativeOnCreate();
- }
-
-}
-
-
-
-
-
-
diff --git a/Android/src/com/mcserver/MCServerInstaller.java b/Android/src/com/mcserver/MCServerInstaller.java
deleted file mode 100644
index 5a865a602..000000000
--- a/Android/src/com/mcserver/MCServerInstaller.java
+++ /dev/null
@@ -1,432 +0,0 @@
-package com.mcserver;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-
-import android.app.AlertDialog;
-import android.app.ProgressDialog;
-import android.content.DialogInterface;
-import android.content.SharedPreferences;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.res.AssetManager;
-import android.os.AsyncTask;
-import android.os.Environment;
-import android.util.Log;
-
-public class MCServerInstaller {
- private MCServerActivity mContext;
- final private String BaseDirectory = "basedir";
- final private String PluginDirectory = "Plugins";
-
- final public String SHARED_PREFS_NAME = "MCSERVER_PREFS";
- final public String PREF_IS_INSTALLED = "IS_INSTALLED";
- final public String PREF_LAST_VERSION = "LAST_VERSION";
- private SharedPreferences mSettings = null;
-
- int thisVersion;
-
- MCServerInstaller( MCServerActivity activity )
- {
- mContext = activity;
-
- mSettings = mContext.getSharedPreferences( SHARED_PREFS_NAME, 0);
-
- try {
- this.thisVersion = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0).versionCode;
- } catch (NameNotFoundException e) {
- Log.e("MCServer", "Could not read version code from manifest!");
- e.printStackTrace();
- this.thisVersion = -1;
- }
- }
-
-
- public boolean IsInstalled()
- {
- return mSettings.getBoolean(PREF_IS_INSTALLED, false);
- }
-
-
- public boolean NeedsUpdate()
- {
- Log.i("MCServer", "thisVersion: " + this.thisVersion + " pref: " + mSettings.getInt(PREF_LAST_VERSION, 0));
- return mSettings.getInt(PREF_LAST_VERSION, 0) != this.thisVersion;
- }
-
-
- public ArrayList<String> FindFoldersInPath(String path)
- {
- ArrayList<String> allFolders = new ArrayList<String>();
- AssetManager am = mContext.getAssets();
- try {
- String[] allPlugins = am.list(path);
- for(String pluginName : allPlugins)
- {
- InputStream istr = null;
- try
- {
- istr = am.open(path + "/" + pluginName);
- } catch( java.io.FileNotFoundException e ) {
- // It seems to be a folder :D
- allFolders.add(pluginName);
- continue;
- }
- istr.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- return allFolders;
- }
-
-
-
-
- public void ExpandAssets( String path )
- {
- AssetManager am = mContext.getAssets();
- try {
- String[] getAssets = am.list(path);
- for(String assetName : getAssets)
- {
- //Log.e("MCServer", path + "/" + imgName);
-
- InputStream istr = null;
- try
- {
- istr = am.open(path + "/" + assetName);
- } catch( java.io.FileNotFoundException e ) {
- //Log.e("MCServer", "Could not open" + path + "/" + imgName );
- ExpandAssets(path + "/" + assetName);
- continue;
- }
-
- String outPath = Environment.getExternalStorageDirectory().getPath() + "/mcserver/" + path + "/" + assetName;
- //Log.e("MCServer", "outPath: " + outPath );
- File f = new File( outPath );
-
- f.getParentFile().mkdirs();
- f.createNewFile();
- OutputStream ostr = new FileOutputStream(f);
-
- byte[] buffer = new byte[1024];
- int length;
- while ((length = istr.read(buffer))>0)
- {
- ostr.write(buffer, 0, length);
- }
- ostr.flush();
- ostr.close();
- istr.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
-
- void ShowFirstRunDialog()
- {
- AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
- //builder.setTitle("blaa");
- builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- }
- });
- builder.setMessage("It seems this is the first time you are running MCServer on your Android device or it has been updated! This app comes with a couple of pre-packaged plugins, please take a moment to select the plugins you would like to install.");
- builder.setCancelable(false);
- AlertDialog dialog = builder.create();
- dialog.show();
-
- dialog.setOnDismissListener( new DialogInterface.OnDismissListener(){
- public void onDismiss(DialogInterface dialog) {
- ShowPluginInstallDialog(false);
- }
- });
- }
-
-
- public void ShowPluginInstallDialog(boolean bCancelable)
- {
- final ArrayList<String> allPlugins = FindFoldersInPath( BaseDirectory + "/" + PluginDirectory );
- final CharSequence[] items = allPlugins.toArray(new CharSequence[allPlugins.size()]);
- final boolean[] selected = new boolean[items.length];
- for( int i = 0; i < items.length; ++i )
- {
- if( items[i].toString().contains("Core") )
- { // Select the core plugin by default
- selected[i] = true;
- items[i] = items[i] + " (Recommended)";
- }
- }
-
- AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
- builder.setTitle("Plugins to install");
- builder.setCancelable(bCancelable);
- builder.setMultiChoiceItems(items, selected, new DialogInterface.OnMultiChoiceClickListener() {
- public void onClick(DialogInterface dialog, int which, boolean isChecked) {
- selected[which] = isChecked;
- }
- });
- builder.setPositiveButton("Install", new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- ArrayList<String> toInstall = new ArrayList<String>();
- for( int i = 0; i < selected.length; ++i )
- {
- if( selected[i] )
- {
- toInstall.add(allPlugins.get(i));
- }
- }
- InstallPlugins(toInstall);
- }
- });
-
- AlertDialog dialog2 = builder.create();
- dialog2.show();
- }
-
-
- void InstallPlugins( final ArrayList<String> plugins )
- {
- new AsyncTask<Void, Integer, Boolean>()
- {
- ProgressDialog progressDialog;
-
- @Override
- protected void onPreExecute()
- {
- /*
- * This is executed on UI thread before doInBackground(). It is
- * the perfect place to show the progress dialog.
- */
- progressDialog = ProgressDialog.show(mContext, "", "Installing...");
-
- }
-
- @Override
- protected Boolean doInBackground(Void... params)
- {
- if (params == null)
- {
- return false;
- }
- try
- {
- /*
- * This is run on a background thread, so we can sleep here
- * or do whatever we want without blocking UI thread. A more
- * advanced use would download chunks of fixed size and call
- * publishProgress();
- */
- for( int i = 0; i < plugins.size(); ++i )
- {
- this.publishProgress((int)(i / (float)plugins.size() * 100), i);
- InstallSinglePlugin(PluginDirectory + "/" + plugins.get(i));
- }
-
- this.publishProgress( 100, -1 );
- InstallExampleSettings();
-
- this.publishProgress( 100, -2 );
- InstallWebAdmin();
-
- }
- catch (Exception e)
- {
- Log.e("tag", e.getMessage());
- /*
- * The task failed
- */
- return false;
- }
-
- /*
- * The task succeeded
- */
- return true;
- }
-
- protected void onProgressUpdate(Integer... progress)
- {
- progressDialog.setProgress(progress[0]);
- if( progress[1] > -1 )
- {
- progressDialog.setMessage("Installing " + plugins.get(progress[1]) + "..." );
- }
- else if( progress[1] == -1 )
- {
- progressDialog.setMessage("Installing default settings...");
- }
- else if( progress[1] == -2 )
- {
- progressDialog.setMessage("Installing WebAdmin...");
- }
- }
-
- @Override
- protected void onPostExecute(Boolean result)
- {
- progressDialog.dismiss();
- /*
- * Update here your view objects with content from download. It
- * is save to dismiss dialogs, update views, etc., since we are
- * working on UI thread.
- */
- AlertDialog.Builder b = new AlertDialog.Builder(mContext);
- b.setTitle(android.R.string.dialog_alert_title);
- if (result)
- {
- b.setMessage("Install succeeded");
-
- SharedPreferences.Editor editor = mSettings.edit();
- editor.putBoolean(PREF_IS_INSTALLED, true);
- editor.putInt(PREF_LAST_VERSION, thisVersion);
- editor.commit();
- }
- else
- {
- b.setMessage("Install failed");
- }
- b.setPositiveButton(android.R.string.ok,
- new DialogInterface.OnClickListener()
- {
- public void onClick(DialogInterface dialog, int which)
- {
- dialog.dismiss();
- }
- });
- b.create().show();
- }
- }.execute();
- }
-
-
- void InstallExampleSettings()
- {
- AssetManager am = mContext.getAssets();
- try {
- String[] allFiles = am.list(BaseDirectory);
- for(String fileName : allFiles)
- {
- InputStream istr = null;
- try
- {
- istr = am.open(BaseDirectory + "/" + fileName);
- } catch( java.io.FileNotFoundException e ) {
- // Must be a folder :D
- continue;
- }
-
- String outPath = Environment.getExternalStorageDirectory().getPath() + "/mcserver/" + fileName;
- Log.i("MCServer", "outPath: " + outPath );
- File f = new File( outPath );
-
- f.getParentFile().mkdirs();
- f.createNewFile();
- OutputStream ostr = new FileOutputStream(f);
-
- byte[] buffer = new byte[1024];
- int length;
- while ((length = istr.read(buffer))>0)
- {
- ostr.write(buffer, 0, length);
- }
- ostr.flush();
- ostr.close();
- istr.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
-
- void InstallWebAdmin()
- {
- AssetManager am = mContext.getAssets();
- try {
- String[] allFiles = am.list(BaseDirectory + "/webadmin");
- for(String fileName : allFiles)
- {
- InputStream istr = null;
- try
- {
- istr = am.open(BaseDirectory + "/webadmin/" + fileName);
- } catch( java.io.FileNotFoundException e ) {
- // Must be a folder :D
- continue;
- }
-
- String outPath = Environment.getExternalStorageDirectory().getPath() + "/mcserver/webadmin/" + fileName;
- Log.i("MCServer", "outPath: " + outPath );
- File f = new File( outPath );
-
- f.getParentFile().mkdirs();
- f.createNewFile();
- OutputStream ostr = new FileOutputStream(f);
-
- byte[] buffer = new byte[1024];
- int length;
- while ((length = istr.read(buffer))>0)
- {
- ostr.write(buffer, 0, length);
- }
- ostr.flush();
- ostr.close();
- istr.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
-
- void InstallSinglePlugin( String path )
- {
- AssetManager am = mContext.getAssets();
- try {
- String[] getImages = am.list(BaseDirectory + "/" + path);
- for(String imgName : getImages)
- {
- Log.i("MCServer", path + "/" + imgName);
-
- InputStream istr = null;
- try
- {
- istr = am.open(BaseDirectory + "/" + path + "/" + imgName);
- } catch( java.io.FileNotFoundException e ) {
- Log.i("MCServer", "Could not open" + path + "/" + imgName );
- InstallSinglePlugin(path + "/" + imgName);
- continue;
- }
-
- String outPath = Environment.getExternalStorageDirectory().getPath() + "/mcserver/" + path + "/" + imgName;
- Log.i("MCServer", "outPath: " + outPath );
- File f = new File( outPath );
-
- f.getParentFile().mkdirs();
- f.createNewFile();
- OutputStream ostr = new FileOutputStream(f);
-
- byte[] buffer = new byte[1024];
- int length;
- while ((length = istr.read(buffer))>0)
- {
- ostr.write(buffer, 0, length);
- }
- ostr.flush();
- ostr.close();
- istr.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-}
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0b1ac6096..169f06e71 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -98,11 +98,11 @@ endif()
if(MSVC OR MSVC_IDE)
if( MSVC_VERSION LESS 1700 ) # VC10- / VS2010-
message(FATAL_ERROR "The project requires C++11 features. "
- "You need at least Visual Studio 11 (Microsoft Visual Studio 2012), "
- "with Microsoft Visual C++ Compiler Nov 2012 CTP (v120_CTP_Nov2012).")
+ "You need at least Visual Studio 11 (Microsoft Visual Studio 2012), "
+ "with Microsoft Visual C++ Compiler Nov 2012 CTP (v120_CTP_Nov2012).")
elseif( MSVC_VERSION EQUAL 1700 ) # VC11 / VS2012
message( "VC11: using Microsoft Visual Studio 2012 "
- "with Microsoft Visual C++ Compiler Nov 2012 CTP (v120_CTP_Nov2012)" )
+ "with Microsoft Visual C++ Compiler Nov 2012 CTP (v120_CTP_Nov2012)" )
set(CMAKE_GENERATOR_TOOLSET "v120_CTP_Nov2012" CACHE STRING "Platform Toolset" FORCE)
else() # VC12+, assuming C++11 supported.
endif()
@@ -111,14 +111,14 @@ endif()
set(BUILD_TOOLS OFF CACHE BOOL "")
set(SELF_TEST OFF CACHE BOOL "")
-# Check whether Lua 5.1 can be used:
+# Check whether Lua can be used:
if (NOT(DISABLE_SYSTEM_LUA))
include(CheckLua.cmake)
- if(HAS_LUA_INTERPRETER AND ("${LUA_INTERPRETER_VERSION}" STREQUAL "5.1"))
- message(STATUS "Lua 5.1 has been found in your system and will be used for the build.")
+ if(HAS_LUA_INTERPRETER)
+ message(STATUS "Lua has been found in your system and will be used for the build.")
set(USE_SYSTEM_LUA 1)
else()
- message(STATUS "Lua 5.1 has NOT been found in your system, the build will use its own Lua implementation.")
+ message(STATUS "Lua has NOT been found in your system, the build will use its own Lua implementation.")
unset(USE_SYSTEM_LUA)
endif()
else()
@@ -140,7 +140,6 @@ if(${BUILD_UNSTABLE_TOOLS})
add_subdirectory(Tools/GeneratorPerformanceTest/)
endif()
-include(CheckCXXCompilerFlag)
include(SetFlags.cmake)
set_flags()
set_lib_flags()
@@ -151,7 +150,6 @@ if (WIN32)
add_definitions(-DLUA_BUILD_AS_DLL)
endif()
-
# The Expat library is linked in statically, make the source files aware of that:
add_definitions(-DXML_STATIC)
@@ -166,7 +164,7 @@ endif()
# Build all dependent libraries as static:
SET(CMAKE_BUILD_STATIC_LIBRARIES ON)
-
+####
@@ -196,40 +194,40 @@ set(JSONCPP_WITH_PKGCONFIG_SUPPORT OFF CACHE BOOL "Generate and install .pc file
link_directories(lib/jsoncpp/src/lib_json)
# Check that the libraries are present:
-if (NOT EXISTS ${CMAKE_SOURCE_DIR}/lib/SQLiteCpp/CMakeLists.txt)
+if (NOT EXISTS ${PROJECT_SOURCE_DIR}/lib/SQLiteCpp/CMakeLists.txt)
message(FATAL_ERROR "SQLiteCpp is missing in folder lib/SQLiteCpp. Have you initialized the submodules / downloaded the extra libraries?")
endif()
-if (NOT EXISTS ${CMAKE_SOURCE_DIR}/lib/polarssl/CMakeLists.txt)
+if (NOT EXISTS ${PROJECT_SOURCE_DIR}/lib/polarssl/CMakeLists.txt)
message(FATAL_ERROR "PolarSSL is missing in folder lib/polarssl. Have you initialized the submodules / downloaded the extra libraries?")
endif()
-if (NOT EXISTS ${CMAKE_SOURCE_DIR}/lib/libevent/CMakeLists.txt)
+if (NOT EXISTS ${PROJECT_SOURCE_DIR}/lib/libevent/CMakeLists.txt)
message(FATAL_ERROR "LibEvent is missing in folder lib/libevent. Have you initialized and updated the submodules / downloaded the extra libraries?")
endif()
-if (NOT EXISTS ${CMAKE_SOURCE_DIR}/lib/jsoncpp/CMakeLists.txt)
+if (NOT EXISTS ${PROJECT_SOURCE_DIR}/lib/jsoncpp/CMakeLists.txt)
message(FATAL_ERROR "JsonCPP is missing in folder lib/jsoncpp. Have you initialized and updated the submodules / downloaded the extra libraries?")
endif()
-if (NOT EXISTS ${CMAKE_SOURCE_DIR}/lib/cmake-coverage/CodeCoverage.cmake)
+if (NOT EXISTS ${PROJECT_SOURCE_DIR}/lib/cmake-coverage/CodeCoverage.cmake)
message(FATAL_ERROR "cmake-coverage is missing in folder lib/cmake-coverage. Have you initialized and updated the submodules / downloaded the extra libraries?")
endif()
-if (NOT EXISTS ${CMAKE_SOURCE_DIR}/lib/expat/CMakeLists.txt)
+if (NOT EXISTS ${PROJECT_SOURCE_DIR}/lib/expat/CMakeLists.txt)
message(FATAL_ERROR "expat is missing in folder lib/expat. Have you initialized and updated the submodules / downloaded the extra libraries?")
endif()
-if (NOT EXISTS ${CMAKE_SOURCE_DIR}/lib/lua/CMakeLists.txt)
+if (NOT EXISTS ${PROJECT_SOURCE_DIR}/lib/lua/CMakeLists.txt)
message(FATAL_ERROR "lua is missing in folder lib/lua. Have you initialized and updated the submodules / downloaded the extra libraries?")
endif()
-if (NOT EXISTS ${CMAKE_SOURCE_DIR}/lib/luaexpat/CMakeLists.txt)
+if (NOT EXISTS ${PROJECT_SOURCE_DIR}/lib/luaexpat/CMakeLists.txt)
message(FATAL_ERROR "luaexpat is missing in folder lib/luaexpat. Have you initialized and updated the submodules / downloaded the extra libraries?")
endif()
-if (NOT EXISTS ${CMAKE_SOURCE_DIR}/lib/luaproxy/CMakeLists.txt)
+if (NOT EXISTS ${PROJECT_SOURCE_DIR}/lib/luaproxy/CMakeLists.txt)
message(FATAL_ERROR "luaproxy is missing in folder lib/luaproxy. Have you initialized and updated the submodules / downloaded the extra libraries?")
endif()
-if (NOT EXISTS ${CMAKE_SOURCE_DIR}/lib/sqlite/CMakeLists.txt)
+if (NOT EXISTS ${PROJECT_SOURCE_DIR}/lib/sqlite/CMakeLists.txt)
message(FATAL_ERROR "sqlite is missing in folder lib/sqlite. Have you initialized and updated the submodules / downloaded the extra libraries?")
endif()
-if (NOT EXISTS ${CMAKE_SOURCE_DIR}/lib/tolua++/CMakeLists.txt)
+if (NOT EXISTS ${PROJECT_SOURCE_DIR}/lib/tolua++/CMakeLists.txt)
message(FATAL_ERROR "tolua++ is missing in folder lib/tolua++. Have you initialized and updated the submodules / downloaded the extra libraries?")
endif()
-if (NOT EXISTS ${CMAKE_SOURCE_DIR}/lib/zlib/CMakeLists.txt)
+if (NOT EXISTS ${PROJECT_SOURCE_DIR}/lib/zlib/CMakeLists.txt)
message(FATAL_ERROR "zlib is missing in folder lib/zlib. Have you initialized and updated the submodules / downloaded the extra libraries?")
endif()
@@ -263,19 +261,18 @@ if (WIN32)
add_subdirectory(lib/luaproxy/)
endif()
-
# We use EXCLUDE_FROM_ALL so that only the explicit dependencies are used
# (PolarSSL also has test and example programs in their CMakeLists.txt, we don't want those)
include(lib/polarssl.cmake EXCLUDE_FROM_ALL)
set_exe_flags()
-add_subdirectory (src)
+add_subdirectory(src)
if(${SELF_TEST})
message("Tests enabled")
enable_testing()
- add_subdirectory (tests)
+ add_subdirectory(tests)
endif()
# Put projects into solution folders in MSVC:
diff --git a/SetFlags.cmake b/SetFlags.cmake
index 357cb9e7c..7ccba4f72 100644
--- a/SetFlags.cmake
+++ b/SetFlags.cmake
@@ -86,7 +86,13 @@ macro(set_flags)
else()
add_flags_cxx("-pthread")
endif()
-
+ elseif (ANDROID)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
+ set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -std=c++14")
+ set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_COVERAGE} -std=c++14")
+ set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=c++14")
+
+ add_flags_cxx("-fsigned-char")
else()
# Let gcc / clang know that we're compiling a multi-threaded app:
if (${UNIX})
@@ -300,6 +306,7 @@ macro(set_exe_flags)
endif()
endif()
add_flags_cxx("-Wno-error=unused-command-line-argument")
+ add_flags_cxx("-Wno-documentation-unknown-command")
endif()
endif()
diff --git a/android/.gitignore b/android/.gitignore
new file mode 100644
index 000000000..a9446f022
--- /dev/null
+++ b/android/.gitignore
@@ -0,0 +1,5 @@
+/Cuberite/
+/CMakeFiles/
+/lua_native-prefix/
+/tolua_native-prefix/
+CMakeCache.txt \ No newline at end of file
diff --git a/android/CMakeLists.txt b/android/CMakeLists.txt
new file mode 100644
index 000000000..849b24d04
--- /dev/null
+++ b/android/CMakeLists.txt
@@ -0,0 +1,32 @@
+# Build command:
+# cmake . -DCMAKE_SYSTEM_NAME=Android -DCMAKE_SYSTEM_VERSION=16 -DCMAKE_BUILD_TYPE=Release -DCMAKE_ANDROID_ARCH_ABI=armeabi -DNATIVE_TOLUA_GENERATOR="" -DCMAKE_ANDROID_NDK=""
+# -G "MinGW Makefiles" -DCMAKE_MAKE_PROGRAM="" may also be required on Windows
+
+cmake_minimum_required (VERSION 3.7)
+project(Cuberite)
+
+# Set up Android parameters
+add_definitions(-DANDROID)
+set(ANDROID TRUE)
+set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
+set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fPIE -pie")
+
+# We're crosscompiling for Android
+set(NO_NATIVE_OPTIMIZATION TRUE)
+
+# SYSTEM flag to silence warnings for external headers
+include_directories(SYSTEM
+ ../lib/
+ ../src/
+ ../lib/jsoncpp/include/
+ ../lib/polarssl/include/
+ ../lib/sqlitecpp/include/
+ ../lib/sqlitecpp/sqlite3/
+ ../lib/libevent/include/
+)
+
+# Disable some compiler warnings (the lazy way out)
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-double-promotion")
+
+# Build the rest of the server
+add_subdirectory(../ Cuberite)
diff --git a/lib/libevent b/lib/libevent
-Subproject 3e2c10a7b3b795ce594b3cb2d0e232632e642c7
+Subproject 1a9d45c3391b4592d53a3e274d515f86e409c0c
diff --git a/lib/lua b/lib/lua
-Subproject 966e06975699f51022474b39629dbad9c0fcf0b
+Subproject 7dfee332d4766424eff2780d569c89ce69ddc60
diff --git a/lib/tolua++ b/lib/tolua++
-Subproject 5d69f56b06fdfe1e67cd2572083abb863ec3b70
+Subproject c4cb9a5c6079ffa2e03b8e7533dc7175a19f25a
diff --git a/src/Bindings/CMakeLists.txt b/src/Bindings/CMakeLists.txt
index 640fd60fa..c4fae1148 100644
--- a/src/Bindings/CMakeLists.txt
+++ b/src/Bindings/CMakeLists.txt
@@ -159,7 +159,7 @@ set_source_files_properties(${BINDING_OUTPUTS} PROPERTIES GENERATED TRUE)
set_source_files_properties(${CMAKE_SOURCE_DIR}/src/Bindings/Bindings.cpp PROPERTIES COMPILE_FLAGS -Wno-error)
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
- set_source_files_properties(${CMAKE_SOURCE_DIR}/src/Bindings/Bindings.cpp PROPERTIES COMPILE_FLAGS ${COMPILE_FLAGS} "-Wno-old-style-cast -Wno-missing-prototypes")
+ set_source_files_properties(Bindings.cpp PROPERTIES COMPILE_FLAGS ${COMPILE_FLAGS} "-Wno-old-style-cast -Wno-missing-prototypes")
set_source_files_properties(LuaWindow.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=switch-enum")
endif()
diff --git a/src/ByteBuffer.cpp b/src/ByteBuffer.cpp
index 6cfb66f9a..1a4dc8bb8 100644
--- a/src/ByteBuffer.cpp
+++ b/src/ByteBuffer.cpp
@@ -22,27 +22,6 @@ Unfortunately it is very slow, so it is disabled even for regular DEBUG builds.
-// Try to determine endianness:
-#if ( \
- defined(__i386__) || defined(__alpha__) || \
- defined(__ia64) || defined(__ia64__) || \
- defined(_M_IX86) || defined(_M_IA64) || \
- defined(_M_ALPHA) || defined(__amd64) || \
- defined(__amd64__) || defined(_M_AMD64) || \
- defined(__x86_64) || defined(__x86_64__) || \
- defined(_M_X64) || defined(__bfin__) || \
- defined(__ARMEL__) || defined(__AARCH64EL__) || \
- (defined(_WIN32) && defined(__ARM__) && defined(_MSC_VER)) \
-)
- #define IS_LITTLE_ENDIAN
-#elif ( \
- defined (__ARMEB__) || defined(__sparc) || defined(__powerpc__) || defined(__POWERPC__) \
-)
- #define IS_BIG_ENDIAN
-#else
- #error Cannot determine endianness of this platform
-#endif
-
// If a string sent over the protocol is larger than this, a warning is emitted to the console
#define MAX_STRING_SIZE (512 KiB)
@@ -754,22 +733,6 @@ bool cByteBuffer::WriteVarUTF8String(const AString & a_Value)
-bool cByteBuffer::WriteLEInt32(Int32 a_Value)
-{
- CHECK_THREAD
- CheckValid();
- #ifdef IS_LITTLE_ENDIAN
- return WriteBuf(reinterpret_cast<const char *>(&a_Value), 4);
- #else
- int Value = ((a_Value >> 24) & 0xff) | ((a_Value >> 16) & 0xff00) | ((a_Value >> 8) & 0xff0000) | (a_Value & 0xff000000);
- return WriteBuf(reinterpret_cast<const char *>(&Value), 4);
- #endif
-}
-
-
-
-
-
bool cByteBuffer::WritePosition64(Int32 a_BlockX, Int32 a_BlockY, Int32 a_BlockZ)
{
CHECK_THREAD
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index ac1c8138b..0bb1e442a 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -290,9 +290,6 @@ foreach(arg ${ALLFILES})
endforeach()
FILE(WRITE "AllFiles.lst" "${ALLFILESLINES}")
-
-set(EXECUTABLE Cuberite)
-
if (MSVC)
get_directory_property(BINDING_OUTPUTS DIRECTORY "Bindings" DEFINITION BINDING_OUTPUTS)
get_directory_property(BINDING_DEPENDENCIES DIRECTORY "Bindings" DEFINITION BINDING_DEPENDENCIES)
@@ -324,46 +321,45 @@ if (MSVC)
endif()
endif()
-add_executable(${EXECUTABLE} ${SOURCE})
+add_executable(${CMAKE_PROJECT_NAME} ${SOURCE})
# Output the executable into the $/Server folder, so that it has access to external resources:
-set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/Server)
-SET_TARGET_PROPERTIES(${EXECUTABLE} PROPERTIES
+SET_TARGET_PROPERTIES(${CMAKE_PROJECT_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_SOURCE_DIR}/Server
RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_SOURCE_DIR}/Server
RUNTIME_OUTPUT_DIRECTORY_DEBUGPROFILE ${CMAKE_SOURCE_DIR}/Server
RUNTIME_OUTPUT_DIRECTORY_RELEASEPROFILE ${CMAKE_SOURCE_DIR}/Server
)
-
# Make the debug executable have a "_debug" suffix
-SET_TARGET_PROPERTIES(${EXECUTABLE} PROPERTIES DEBUG_POSTFIX "_debug")
+SET_TARGET_PROPERTIES(${CMAKE_PROJECT_NAME} PROPERTIES DEBUG_POSTFIX "_debug")
# Make the profiled executables have a "_profile" postfix
-SET_TARGET_PROPERTIES(${EXECUTABLE} PROPERTIES DEBUGPROFILE_POSTFIX "_debug_profile")
-SET_TARGET_PROPERTIES(${EXECUTABLE} PROPERTIES RELEASEPROFILE_POSTFIX "_profile")
+SET_TARGET_PROPERTIES(${CMAKE_PROJECT_NAME} PROPERTIES DEBUGPROFILE_POSTFIX "_debug_profile")
+SET_TARGET_PROPERTIES(${CMAKE_PROJECT_NAME} PROPERTIES RELEASEPROFILE_POSTFIX "_profile")
# Precompiled headers (2nd part)
if (MSVC)
SET_TARGET_PROPERTIES(
- ${EXECUTABLE} PROPERTIES COMPILE_FLAGS "/Yu\"Globals.h\""
+ ${CMAKE_PROJECT_NAME} PROPERTIES COMPILE_FLAGS "/Yu\"Globals.h\""
OBJECT_DEPENDS "$(IntDir)/$(TargetName.pch)"
)
endif ()
if (NOT MSVC)
- target_link_libraries(${EXECUTABLE}
+ target_link_libraries(${CMAKE_PROJECT_NAME}
OSSupport HTTPServer Bindings Items Blocks Noise
Protocol Generating WorldStorage
Mobs Entities Simulator IncrementalRedstoneSimulator
BlockEntities UI PolarSSL++
)
endif ()
+
if (WIN32)
- target_link_libraries(${EXECUTABLE} expat tolualib ws2_32.lib Psapi.lib)
+ target_link_libraries(${CMAKE_PROJECT_NAME} expat tolualib ws2_32.lib Psapi.lib)
endif()
if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
@@ -371,7 +367,7 @@ if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
add_flags_lnk(-L/usr/ports/devel)
endif()
-target_link_libraries(${EXECUTABLE} luaexpat jsoncpp_lib_static mbedtls zlib sqlite lua SQLiteCpp event_core event_extra)
+target_link_libraries(${CMAKE_PROJECT_NAME} luaexpat jsoncpp_lib_static mbedtls zlib sqlite lua SQLiteCpp event_core event_extra)
# Create a folder for Bindings' documentation:
FILE(MAKE_DIRECTORY "Bindings/docs")
diff --git a/src/ClientHandle.h b/src/ClientHandle.h
index e6982d546..8b6a78127 100644
--- a/src/ClientHandle.h
+++ b/src/ClientHandle.h
@@ -55,7 +55,7 @@ class cClientHandle // tolua_export
{ // tolua_export
public: // tolua_export
- #if defined(ANDROID_NDK)
+ #if defined(ANDROID)
static const int DEFAULT_VIEW_DISTANCE = 4; // The default ViewDistance (used when no value is set in Settings.ini)
#else
static const int DEFAULT_VIEW_DISTANCE = 10;
diff --git a/src/FurnaceRecipe.cpp b/src/FurnaceRecipe.cpp
index 2c20eec0f..d1082b63f 100644
--- a/src/FurnaceRecipe.cpp
+++ b/src/FurnaceRecipe.cpp
@@ -6,7 +6,7 @@
#include <fstream>
-#define FURNACE_RECIPE_FILE "furnace.txt"
+#define FURNACE_RECIPE_FILE FILE_IO_PREFIX "furnace.txt"
@@ -70,6 +70,10 @@ void cFurnaceRecipe::ReloadRecipes(void)
LineNum++;
if (ParsingLine.empty())
{
+ // There is a problem here on Android. Text files transferred from another OS may have a newline representation Android's implementation of getline doesn't expect
+ // Thus, part of a newline may be left in ParsingLine. ::empty() thus thinks the string isn't empty, and the below code outputs interesting errors since it was passed a nearly empty string
+ // Ref: http://stackoverflow.com/questions/6089231/getting-std-ifstream-to-handle-lf-cr-and-crlf
+ // TODO: There is a solution in the above reference, but it isn't very pretty. Fix it somehow.
continue;
}
diff --git a/src/LoggerListeners.cpp b/src/LoggerListeners.cpp
index 1d6d9c6ce..91f166bda 100644
--- a/src/LoggerListeners.cpp
+++ b/src/LoggerListeners.cpp
@@ -8,14 +8,12 @@
#if defined(_WIN32)
#include <io.h> // Needed for _isatty(), not available on Linux
#include <time.h>
-#elif defined(__linux) && !defined(ANDROID_NDK)
+#elif defined(__linux)
#include <unistd.h> // Needed for isatty() on Linux
-#elif defined(ANDROID_NDK)
- #include <android/log.h>
#endif
-#if defined(_WIN32) || (defined (__linux) && !defined(ANDROID_NDK))
+#if defined(_WIN32) || defined (__linux)
class cColouredConsoleListener
: public cLogger::cListener
{
@@ -107,7 +105,7 @@
-#elif defined (__linux) && !defined(ANDROID_NDK)
+#elif defined (__linux)
@@ -154,46 +152,6 @@
}
};
-
-
-#elif defined(ANDROID_NDK)
-
-
-
- class cAndroidConsoleListener
- : public cLogger::cListener
- {
- public:
- virtual void Log(AString a_Message, cLogger::eLogLevel a_LogLevel) override
- {
- android_LogPriority AndroidLogLevel;
- switch (a_LogLevel)
- {
- case cLogger::llRegular:
- {
- AndroidLogLevel = ANDROID_LOG_VERBOSE;
- break;
- }
- case cLogger::llInfo:
- {
- AndroidLogLevel = ANDROID_LOG_INFO;
- break;
- }
- case cLogger::llWarning:
- {
- AndroidLogLevel = ANDROID_LOG_WARNING;
- break;
- }
- case cLogger::llError:
- {
- AndroidLogLevel = ANDROID_LOG_ERROR;
- break;
- }
- }
- __android_log_print(AndroidLogLevel, "Cuberite", "%s", a_Message.c_str());
- }
- };
-
#endif
@@ -273,8 +231,7 @@ std::unique_ptr<cLogger::cListener> MakeConsoleListener(bool a_IsService)
{
return cpp14::make_unique<cVanillaCPPConsoleListener>();
}
-
- #elif defined (__linux) && !defined(ANDROID_NDK)
+ #elif defined (__linux) && !defined(ANDROID)
// TODO: lookup terminal in terminfo
if (isatty(fileno(stdout)))
{
@@ -306,7 +263,7 @@ public:
bool Open()
{
// Assume creation succeeds, as the API does not provide a way to tell if the folder exists.
- cFile::CreateFolder(FILE_IO_PREFIX + AString("logs"));
+ cFile::CreateFolder(FILE_IO_PREFIX "logs");
bool success = m_File.Open(
FILE_IO_PREFIX + Printf(
"logs/LOG_%d.txt",
diff --git a/src/OSSupport/CMakeLists.txt b/src/OSSupport/CMakeLists.txt
index 876b4f789..22699f7cd 100644
--- a/src/OSSupport/CMakeLists.txt
+++ b/src/OSSupport/CMakeLists.txt
@@ -43,12 +43,4 @@ endif()
if(NOT MSVC)
add_library(OSSupport ${SRCS} ${HDRS})
-
- if(UNIX)
- if(NOT APPLE)
- target_link_libraries(OSSupport rt)
- endif()
-
- target_link_libraries(OSSupport pthread event_core event_extra)
- endif()
endif()
diff --git a/src/OSSupport/Errors.cpp b/src/OSSupport/Errors.cpp
index a05650111..004cbaccc 100644
--- a/src/OSSupport/Errors.cpp
+++ b/src/OSSupport/Errors.cpp
@@ -22,7 +22,7 @@ AString GetOSErrorString( int a_ErrNo)
// According to http://linux.die.net/man/3/strerror_r there are two versions of strerror_r():
- #if defined(__GLIBC__) && defined( _GNU_SOURCE) && !defined(ANDROID_NDK) // GNU version of strerror_r()
+ #if defined(__GLIBC__) && defined( _GNU_SOURCE) && !defined(ANDROID) // GNU version of strerror_r()
char * res = strerror_r( errno, buffer, ARRAYCOUNT(buffer));
if (res != nullptr)
diff --git a/src/OSSupport/File.cpp b/src/OSSupport/File.cpp
index a59f599ae..062161144 100644
--- a/src/OSSupport/File.cpp
+++ b/src/OSSupport/File.cpp
@@ -653,9 +653,13 @@ unsigned cFile::GetLastModificationTime(const AString & a_FileName)
{
return 0;
}
- #ifdef _WIN32
+ #if defined(_WIN32)
// Windows returns times in local time already
return static_cast<unsigned>(st.st_mtime);
+ #elif defined(ANDROID)
+ // Identical to Linux below, but st_mtime is an unsigned long, so cast is needed:
+ auto Time = static_cast<time_t>(st.st_mtime);
+ return static_cast<unsigned>(mktime(localtime(&Time)));
#else
// Linux returns UTC time, convert to local timezone:
return static_cast<unsigned>(mktime(localtime(&st.st_mtime)));
diff --git a/src/OSSupport/NetworkInterfaceEnum.cpp b/src/OSSupport/NetworkInterfaceEnum.cpp
index d3a254c23..439710c38 100644
--- a/src/OSSupport/NetworkInterfaceEnum.cpp
+++ b/src/OSSupport/NetworkInterfaceEnum.cpp
@@ -7,10 +7,10 @@
#include "Network.h"
#include "event2/util.h"
-#ifdef _WIN32
+#if defined(_WIN32)
#include <IPHlpApi.h>
#pragma comment(lib, "IPHLPAPI.lib")
-#else // _WIN32
+#elif !defined(ANDROID) // _WIN32
#include <sys/types.h>
#include <ifaddrs.h>
#include <netinet/in.h>
@@ -21,7 +21,7 @@
-#ifdef _WIN32
+#if defined(_WIN32)
/** Converts the SOCKET_ADDRESS structure received from the OS into an IP address string. */
static AString PrintAddress(SOCKET_ADDRESS & a_Addr)
@@ -50,7 +50,7 @@ static AString PrintAddress(SOCKET_ADDRESS & a_Addr)
return IP;
}
-#else // _WIN32
+#elif !defined(ANDROID) // _WIN32
static AString PrintAddress(ifaddrs * InterfaceAddress)
{
@@ -82,7 +82,7 @@ static AString PrintAddress(ifaddrs * InterfaceAddress)
}
}
-#endif // else _WIN32
+#endif // else !ANDROID
@@ -92,7 +92,7 @@ AStringVector cNetwork::EnumLocalIPAddresses(void)
{
AStringVector res;
- #ifdef _WIN32
+ #if defined(_WIN32)
// Query the OS for all adapters' addresses:
char buffer[64 KiB]; // A buffer backing the address list
@@ -129,7 +129,7 @@ AStringVector cNetwork::EnumLocalIPAddresses(void)
} // for pUnicast
} // for pCurrAddresses
- #else // _WIN32
+ #elif !defined(ANDROID) // _WIN32
struct ifaddrs * ifAddrStruct = nullptr;
getifaddrs(&ifAddrStruct);
diff --git a/src/OSSupport/NetworkSingleton.cpp b/src/OSSupport/NetworkSingleton.cpp
index dcf17bccb..3a8dbbdc7 100644
--- a/src/OSSupport/NetworkSingleton.cpp
+++ b/src/OSSupport/NetworkSingleton.cpp
@@ -13,6 +13,11 @@
#include "IPLookup.h"
#include "HostnameLookup.h"
+#ifdef ANDROID
+ // For DNS server retrieval
+ #include <sys/system_properties.h>
+#endif
+
@@ -89,6 +94,16 @@ void cNetworkSingleton::Initialise(void)
abort();
}
+ #ifdef ANDROID
+ char PropertyBuffer[PROP_VALUE_MAX];
+
+ __system_property_get("net.dns1", PropertyBuffer);
+ evdns_base_nameserver_ip_add(m_DNSBase, PropertyBuffer);
+
+ __system_property_get("net.dns2", PropertyBuffer);
+ evdns_base_nameserver_ip_add(m_DNSBase, PropertyBuffer);
+ #endif
+
// Create the event loop thread:
m_HasTerminated = false;
m_EventLoopThread = std::thread(RunEventLoop, this);
diff --git a/src/OSSupport/StackTrace.cpp b/src/OSSupport/StackTrace.cpp
index 030566065..c84e2cbca 100644
--- a/src/OSSupport/StackTrace.cpp
+++ b/src/OSSupport/StackTrace.cpp
@@ -7,7 +7,7 @@
#include "StackTrace.h"
#ifdef _WIN32
#include "../StackWalker.h"
-#else
+#elif !defined(ANDROID) // The Android NDK has no execinfo header
#ifdef __GLIBC__
#include <execinfo.h>
#endif
@@ -32,7 +32,7 @@ void PrintStackTrace(void)
}
} sw;
sw.ShowCallstack();
- #else
+ #elif !defined(ANDROID)
#ifdef __GLIBC__
// Use the backtrace() function to get and output the stackTrace:
// Code adapted from https://stackoverflow.com/questions/77005/how-to-generate-a-stacktrace-when-my-gcc-c-app-crashes
diff --git a/src/Root.cpp b/src/Root.cpp
index 55e149511..206bddfbc 100644
--- a/src/Root.cpp
+++ b/src/Root.cpp
@@ -207,18 +207,16 @@ void cRoot::Start(std::unique_ptr<cSettingsRepositoryInterface> a_OverridesRepo)
{
m_WebAdmin->Start();
- #if !defined(ANDROID_NDK)
- LOGD("Starting InputThread...");
- try
- {
- m_InputThreadRunFlag.test_and_set();
- m_InputThread = std::thread(InputThread, std::ref(*this));
- }
- catch (std::system_error & a_Exception)
- {
- LOGERROR("cRoot::Start (std::thread) error %i: could not construct input thread; %s", a_Exception.code().value(), a_Exception.what());
- }
- #endif
+ LOGD("Starting InputThread...");
+ try
+ {
+ m_InputThreadRunFlag.test_and_set();
+ m_InputThread = std::thread(InputThread, std::ref(*this));
+ }
+ catch (std::system_error & a_Exception)
+ {
+ LOGERROR("cRoot::Start (std::thread) error %i: could not construct input thread; %s", a_Exception.code().value(), a_Exception.what());
+ }
LOG("Startup complete, took %ldms!", static_cast<long int>(std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now() - BeginTime).count()));
diff --git a/src/StringUtils.cpp b/src/StringUtils.cpp
index 521aa79f4..81999a35d 100644
--- a/src/StringUtils.cpp
+++ b/src/StringUtils.cpp
@@ -5,10 +5,6 @@
#include "Globals.h"
-#if defined(ANDROID_NDK)
-#include <ctype.h>
-#endif
-
#ifdef _MSC_VER
// Under MSVC, link to WinSock2 (needed by RawBEToUTF8's byteswapping)
#pragma comment(lib, "ws2_32.lib")
diff --git a/src/World.cpp b/src/World.cpp
index eafd44ce0..e02ca7964 100644
--- a/src/World.cpp
+++ b/src/World.cpp
@@ -354,10 +354,10 @@ bool cWorld::SetSpawn(double a_X, double a_Y, double a_Z)
void cWorld::InitializeSpawn(void)
{
// For the debugging builds, don't make the server build too much world upon start:
- #if defined(_DEBUG) || defined(ANDROID_NDK)
- const int DefaultViewDist = 9;
+ #if defined(_DEBUG) || defined(ANDROID)
+ const int DefaultViewDist = 9;
#else
- const int DefaultViewDist = 20; // Always prepare an area 20 chunks across, no matter what the actual cClientHandle::VIEWDISTANCE is
+ const int DefaultViewDist = 20; // Always prepare an area 20 chunks across, no matter what the actual cClientHandle::VIEWDISTANCE is
#endif // _DEBUG
if (!m_IsSpawnExplicitlySet)
diff --git a/src/main.cpp b/src/main.cpp
index 6061602d7..83056bf61 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -8,6 +8,20 @@
#include <csignal>
#include <stdlib.h>
+#ifdef ANDROID
+ // Workaround for Android NDK builds that do not support std::to_string
+ namespace std
+ {
+ template <typename T>
+ std::string to_string(T Value)
+ {
+ std::ostringstream TempStream;
+ TempStream << Value;
+ return TempStream.str();
+ }
+ }
+#endif
+
#ifdef _MSC_VER
#include <dbghelp.h>
#endif // _MSC_VER
@@ -223,14 +237,11 @@ static void UniversalMain(std::unique_ptr<cSettingsRepositoryInterface> a_Overri
// Initialize LibEvent:
cNetworkSingleton::Get().Initialise();
- #if !defined(ANDROID_NDK)
try
- #endif
{
cRoot Root;
Root.Start(std::move(a_OverridesRepo));
}
- #if !defined(ANDROID_NDK)
catch (std::exception & e)
{
LOGERROR("Standard exception: %s", e.what());
@@ -239,7 +250,6 @@ static void UniversalMain(std::unique_ptr<cSettingsRepositoryInterface> a_Overri
{
LOGERROR("Unknown exception!");
}
- #endif
// Shutdown all of LibEvent:
cNetworkSingleton::Get().Terminate();