diff --git a/android/AndroidManifest.xml.in b/android/AndroidManifest.xml.in
new file mode 100644
index 0000000..d793a20
--- /dev/null
+++ b/android/AndroidManifest.xml.in
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/ant.properties b/android/ant.properties
new file mode 100644
index 0000000..ee52d86
--- /dev/null
+++ b/android/ant.properties
@@ -0,0 +1,17 @@
+# This file is used to override default values used by the Ant build system.
+#
+# This file must be checked in Version Control Systems, as it is
+# integral to the build system of your project.
+
+# This file is only used by the Ant script.
+
+# You can use this to override default values such as
+# 'source.dir' for the location of your java source folder and
+# 'out.dir' for the location of your output folder.
+
+# You can also use it define how the release builds are signed by declaring
+# the following properties:
+# 'key.store' for the location of your keystore and
+# 'key.alias' for the name of the key to use.
+# The password will be asked during the build when you use the 'release' target.
+
diff --git a/android/build.xml.in b/android/build.xml.in
new file mode 100644
index 0000000..5c23ed0
--- /dev/null
+++ b/android/build.xml.in
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/custom_rules.xml b/android/custom_rules.xml
new file mode 100644
index 0000000..6c40960
--- /dev/null
+++ b/android/custom_rules.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/jni/Application.mk b/android/jni/Application.mk
new file mode 100644
index 0000000..c17f980
--- /dev/null
+++ b/android/jni/Application.mk
@@ -0,0 +1,3 @@
+include $(call my-dir)/localgen.mk
+APP_PLATFORM := android-15
+APP_ABI := $(TARGET_ARCH_ABI)
diff --git a/android/jni/localgen.mk.in b/android/jni/localgen.mk.in
new file mode 100644
index 0000000..7ebc942
--- /dev/null
+++ b/android/jni/localgen.mk.in
@@ -0,0 +1,12 @@
+# Absolute paths to Allegro source and build directories.
+CMAKE_SOURCE_DIR := ${CMAKE_SOURCE_DIR}
+CMAKE_BINARY_DIR := ${CMAKE_BINARY_DIR}
+
+# Relative path to prebuilt Allegro libraries from LOCAL_PATH.
+RELATIVE_LIB_DIR := ${RELATIVE_LIB_DIR}
+
+# Library type suffix on Allegro libraries, e.g. "-debug".
+# XXX changing this requires manual editing of the System.loadLibrary calls
+LIB_TYPE_SUFFIX := ${LIB_TYPE_SUFFIX}
+
+TARGET_ARCH_ABI := ${ARM_TARGETS}
diff --git a/android/localgen.properties.in b/android/localgen.properties.in
new file mode 100644
index 0000000..457f12a
--- /dev/null
+++ b/android/localgen.properties.in
@@ -0,0 +1 @@
+jar.libs.dir=${LIBRARY_OUTPUT_PATH}
diff --git a/android/proguard-project.txt b/android/proguard-project.txt
new file mode 100644
index 0000000..f2fe155
--- /dev/null
+++ b/android/proguard-project.txt
@@ -0,0 +1,20 @@
+# 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.in b/android/project.properties.in
new file mode 100644
index 0000000..26012c0
--- /dev/null
+++ b/android/project.properties.in
@@ -0,0 +1,11 @@
+# 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 use,
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+
+# Project target.
+target=@ANDROID_TARGET@
diff --git a/android/res/layout/main.xml b/android/res/layout/main.xml
new file mode 100644
index 0000000..1819004
--- /dev/null
+++ b/android/res/layout/main.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/android/res/values/strings.xml.in b/android/res/values/strings.xml.in
new file mode 100644
index 0000000..dc697ce
--- /dev/null
+++ b/android/res/values/strings.xml.in
@@ -0,0 +1,4 @@
+
+
+ ${LIBSUPERDERPY_GAMENAME_PRETTY}
+
diff --git a/android/src/net/dosowisko/libsuperderpy/SuperDerpyActivity.java.debug.in b/android/src/net/dosowisko/libsuperderpy/SuperDerpyActivity.java.debug.in
new file mode 100644
index 0000000..892ca66
--- /dev/null
+++ b/android/src/net/dosowisko/libsuperderpy/SuperDerpyActivity.java.debug.in
@@ -0,0 +1,28 @@
+package net.dosowisko.${LIBSUPERDERPY_GAMENAME};
+
+import org.liballeg.android.AllegroActivity;
+
+public class SuperDerpyActivity extends AllegroActivity {
+
+ /* Load Allegro and other shared libraries in the lib directory of the apk
+ * bundle. You must load libraries which are required by later libraries
+ * first.
+ */
+ static {
+ System.loadLibrary("allegro-debug");
+ System.loadLibrary("allegro_primitives-debug");
+ System.loadLibrary("allegro_image-debug");
+ System.loadLibrary("allegro_font-debug");
+ System.loadLibrary("allegro_ttf-debug");
+ System.loadLibrary("allegro_audio-debug");
+ System.loadLibrary("allegro_acodec-debug");
+ }
+
+ /* By default, AllegroActivity.onCreate will cause Allegro to load the
+ * shared object `libapp.so'. You can specify another library name by
+ * overriding the constructor.
+ */
+ public SuperDerpyActivity() {
+ super("libgame.so");
+ }
+}
diff --git a/android/src/net/dosowisko/libsuperderpy/SuperDerpyActivity.java.in b/android/src/net/dosowisko/libsuperderpy/SuperDerpyActivity.java.in
new file mode 100644
index 0000000..60a251e
--- /dev/null
+++ b/android/src/net/dosowisko/libsuperderpy/SuperDerpyActivity.java.in
@@ -0,0 +1,28 @@
+package net.dosowisko.${LIBSUPERDERPY_GAMENAME};
+
+import org.liballeg.android.AllegroActivity;
+
+public class SuperDerpyActivity extends AllegroActivity {
+
+ /* Load Allegro and other shared libraries in the lib directory of the apk
+ * bundle. You must load libraries which are required by later libraries
+ * first.
+ */
+ static {
+ System.loadLibrary("allegro");
+ System.loadLibrary("allegro_primitives");
+ System.loadLibrary("allegro_image");
+ System.loadLibrary("allegro_font");
+ System.loadLibrary("allegro_ttf");
+ System.loadLibrary("allegro_audio");
+ System.loadLibrary("allegro_acodec");
+ }
+
+ /* By default, AllegroActivity.onCreate will cause Allegro to load the
+ * shared object `libapp.so'. You can specify another library name by
+ * overriding the constructor.
+ */
+ public SuperDerpyActivity() {
+ super("libgame.so");
+ }
+}
diff --git a/cmake/FindAllegro5.cmake b/cmake/FindAllegro5.cmake
index 85be126..4304792 100644
--- a/cmake/FindAllegro5.cmake
+++ b/cmake/FindAllegro5.cmake
@@ -17,6 +17,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(ALLEGRO5 DEFAULT_MSG ALLEGRO5_LIBRARY ALLEGRO5
IF(ALLEGRO5_FOUND)
SET(ALLEGRO5_LIBRARIES ${ALLEGRO5_LIBRARY})
+ SET(ALLEGRO5_LIBS ${ALLEGRO5_LIBS} ${ALLEGRO5_LIBRARIES})
ENDIF(ALLEGRO5_FOUND)
MARK_AS_ADVANCED(ALLEGRO5_LIBRARY ALLEGRO5_INCLUDE_DIR )
diff --git a/cmake/FindAllegro5ACodec.cmake b/cmake/FindAllegro5ACodec.cmake
index 8a69d9b..c77c094 100644
--- a/cmake/FindAllegro5ACodec.cmake
+++ b/cmake/FindAllegro5ACodec.cmake
@@ -17,6 +17,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(ALLEGRO5_ACODEC DEFAULT_MSG ALLEGRO5_ACODEC_LI
IF(ALLEGRO5_ACODEC_FOUND)
SET(ALLEGRO5_ACODEC_LIBRARIES ${ALLEGRO5_ACODEC_LIBRARY})
+ SET(ALLEGRO5_LIBS ${ALLEGRO5_LIBS} ${ALLEGRO5_ACODEC_LIBRARIES})
ENDIF(ALLEGRO5_ACODEC_FOUND)
MARK_AS_ADVANCED(ALLEGRO5_ACODEC_LIBRARY ALLEGRO5_ACODEC_INCLUDE_DIR )
diff --git a/cmake/FindAllegro5Audio.cmake b/cmake/FindAllegro5Audio.cmake
index 316589d..7f99ad6 100644
--- a/cmake/FindAllegro5Audio.cmake
+++ b/cmake/FindAllegro5Audio.cmake
@@ -17,6 +17,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(ALLEGRO5_AUDIO DEFAULT_MSG ALLEGRO5_AUDIO_LIBR
IF(ALLEGRO5_AUDIO_FOUND)
SET(ALLEGRO5_AUDIO_LIBRARIES ${ALLEGRO5_AUDIO_LIBRARY})
+ SET(ALLEGRO5_LIBS ${ALLEGRO5_LIBS} ${ALLEGRO5_AUDIO_LIBRARIES})
ENDIF(ALLEGRO5_AUDIO_FOUND)
MARK_AS_ADVANCED(ALLEGRO5_AUDIO_LIBRARY ALLEGRO5_AUDIO_INCLUDE_DIR )
diff --git a/cmake/FindAllegro5Color.cmake b/cmake/FindAllegro5Color.cmake
index 2321190..be0ef00 100644
--- a/cmake/FindAllegro5Color.cmake
+++ b/cmake/FindAllegro5Color.cmake
@@ -17,6 +17,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(ALLEGRO5_COLOR DEFAULT_MSG ALLEGRO5_COLOR_LIBR
IF(ALLEGRO5_COLOR_FOUND)
SET(ALLEGRO5_COLOR_LIBRARIES ${ALLEGRO5_COLOR_LIBRARY})
+ SET(ALLEGRO5_LIBS ${ALLEGRO5_LIBS} ${ALLEGRO5_COLOR_LIBRARIES})
ENDIF(ALLEGRO5_COLOR_FOUND)
MARK_AS_ADVANCED(ALLEGRO5_COLOR_LIBRARY ALLEGRO5_COLOR_INCLUDE_DIR )
diff --git a/cmake/FindAllegro5Font.cmake b/cmake/FindAllegro5Font.cmake
index 860c155..ea1c3a1 100644
--- a/cmake/FindAllegro5Font.cmake
+++ b/cmake/FindAllegro5Font.cmake
@@ -17,6 +17,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(ALLEGRO5_FONT DEFAULT_MSG ALLEGRO5_FONT_LIBRAR
IF(ALLEGRO5_FONT_FOUND)
SET(ALLEGRO5_FONT_LIBRARIES ${ALLEGRO5_FONT_LIBRARY})
+ SET(ALLEGRO5_LIBS ${ALLEGRO5_LIBS} ${ALLEGRO5_FONT_LIBRARIES})
ENDIF(ALLEGRO5_FONT_FOUND)
MARK_AS_ADVANCED(ALLEGRO5_FONT_LIBRARY ALLEGRO5_FONT_INCLUDE_DIR )
diff --git a/cmake/FindAllegro5Image.cmake b/cmake/FindAllegro5Image.cmake
index 20d89fc..2a96268 100644
--- a/cmake/FindAllegro5Image.cmake
+++ b/cmake/FindAllegro5Image.cmake
@@ -17,6 +17,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(ALLEGRO5_IMAGE DEFAULT_MSG ALLEGRO5_IMAGE_LIBR
IF(ALLEGRO5_IMAGE_FOUND)
SET(ALLEGRO5_IMAGE_LIBRARIES ${ALLEGRO5_IMAGE_LIBRARY})
+ SET(ALLEGRO5_LIBS ${ALLEGRO5_LIBS} ${ALLEGRO5_IMAGE_LIBRARIES})
ENDIF(ALLEGRO5_IMAGE_FOUND)
MARK_AS_ADVANCED(ALLEGRO5_IMAGE_LIBRARY ALLEGRO5_IMAGE_INCLUDE_DIR )
diff --git a/cmake/FindAllegro5Primitives.cmake b/cmake/FindAllegro5Primitives.cmake
index a893633..9bed349 100644
--- a/cmake/FindAllegro5Primitives.cmake
+++ b/cmake/FindAllegro5Primitives.cmake
@@ -17,6 +17,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(ALLEGRO5_PRIMITIVES DEFAULT_MSG ALLEGRO5_PRIMI
IF(ALLEGRO5_PRIMITIVES_FOUND)
SET(ALLEGRO5_PRIMITIVES_LIBRARIES ${ALLEGRO5_PRIMITIVES_LIBRARY})
+ SET(ALLEGRO5_LIBS ${ALLEGRO5_LIBS} ${ALLEGRO5_PRIMITIVES_LIBRARIES})
ENDIF(ALLEGRO5_PRIMITIVES_FOUND)
MARK_AS_ADVANCED(ALLEGRO5_PRIMITIVES_LIBRARY ALLEGRO5_PRIMITIVES_INCLUDE_DIR )
diff --git a/cmake/FindAllegro5TTF.cmake b/cmake/FindAllegro5TTF.cmake
index 3ae23a2..418b2ce 100644
--- a/cmake/FindAllegro5TTF.cmake
+++ b/cmake/FindAllegro5TTF.cmake
@@ -17,6 +17,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(ALLEGRO5_TTF DEFAULT_MSG ALLEGRO5_TTF_LIBRARY
IF(ALLEGRO5_TTF_FOUND)
SET(ALLEGRO5_TTF_LIBRARIES ${ALLEGRO5_TTF_LIBRARY})
+ SET(ALLEGRO5_LIBS ${ALLEGRO5_LIBS} ${ALLEGRO5_TTF_LIBRARIES})
ENDIF(ALLEGRO5_TTF_FOUND)
MARK_AS_ADVANCED(ALLEGRO5_TTF_LIBRARY ALLEGRO5_TTF_INCLUDE_DIR )
diff --git a/cmake/android.toolchain b/cmake/android.toolchain
index 294e3d1..9d96dc2 100644
--- a/cmake/android.toolchain
+++ b/cmake/android.toolchain
@@ -4,6 +4,13 @@ SET(CMAKE_SYSTEM_VERSION 1)
#set path for android toolchain -- look
+set(ANDROID_ALLEGRO_ROOT "$ENV{ANDROID_ALLEGRO_ROOT}" CACHE PATH "Path to Allegro 5 source directory after being compiled for Android" )
+
+message( STATUS "Selected Allegro dir: ${ANDROID_ALLEGRO_ROOT}" )
+if(NOT EXISTS ${ANDROID_ALLEGRO_ROOT})
+ message( FATAL_ERROR "Invalid ANDROID_ALLEGRO_ROOT! Point it to directory with Allegro 5 source after compiling it for Android.")
+endif()
+
set(ANDROID_NDK_TOOLCHAIN_ROOT "$ENV{ANDROID_NDK_TOOLCHAIN_ROOT}" CACHE PATH "Path to the Android NDK Standalone Toolchain" )
message( STATUS "Selected Android toolchain: ${ANDROID_NDK_TOOLCHAIN_ROOT}" )
@@ -70,7 +77,7 @@ set(CMAKE_RANLIB
set_property(CACHE ARM_TARGETS PROPERTY STRINGS ${PossibleArmTargets} )
-set(LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_SOURCE_DIR} CACHE PATH
+set(LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_BINARY_DIR}/android CACHE PATH
"root for library output, set this to change where
android libs are installed to")
@@ -150,6 +157,21 @@ endif()
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "c++ flags")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c flags")
+find_program(ANDROID_TOOL android NAMES android android.bat CMAKE_FIND_ROOT_PATH_BOTH)
+find_program(NDK_BUILD ndk-build CMAKE_FIND_ROOT_PATH_BOTH)
+find_program(ANT ant CMAKE_FIND_ROOT_PATH_BOTH)
+set(ANT_COMMAND "${ANT}" -noinput -nouserlib -noclasspath -quiet)
+
+if(NOT ANDROID_TOOL)
+ message(FATAL_ERROR "android tool not found")
+endif()
+if(NOT NDK_BUILD)
+ message(FATAL_ERROR "ndk-build not found")
+endif()
+if(NOT ANT)
+ message(FATAL_ERROR "ant not found")
+endif()
+
#set these global flags for cmake client scripts to change behavior
set(ANDROID True)
set(BUILD_ANDROID True)
diff --git a/cmake/libsuperderpy.cmake b/cmake/libsuperderpy.cmake
index 8c8dc73..38c3a6c 100644
--- a/cmake/libsuperderpy.cmake
+++ b/cmake/libsuperderpy.cmake
@@ -65,6 +65,10 @@ MACRO(register_gamestate name)
install(TARGETS "libsuperderpy-${LIBSUPERDERPY_GAMENAME}-${name}" DESTINATION ${LIB_INSTALL_DIR})
+ if (ANDROID)
+ add_dependencies(${LIBSUPERDERPY_GAMENAME}_apk "libsuperderpy-${LIBSUPERDERPY_GAMENAME}-${name}")
+ endif()
+
ENDMACRO()
MACRO(libsuperderpy_copy EXECUTABLE)
@@ -77,6 +81,88 @@ ENDMACRO()
include(InstallRequiredSystemLibraries)
+if(LIBSUPERDERPY_GAMENAME)
+ configure_file("${CMAKE_SOURCE_DIR}/libsuperderpy/src/defines.h.in" "${CMAKE_SOURCE_DIR}/src/defines.h")
+endif(LIBSUPERDERPY_GAMENAME)
+
+MACRO(add_libsuperderpy_target EXECUTABLE_SRC_LIST)
+ if(ANDROID)
+ set(EXECUTABLE game)
+ add_library(${EXECUTABLE} SHARED ${EXECUTABLE_SRC_LIST})
+
+ set(APK_PATH ${CMAKE_BINARY_DIR}/android/bin/${LIBSUPERDERPY_GAMENAME}-debug.apk)
+
+ add_custom_target(${LIBSUPERDERPY_GAMENAME}_apk ALL
+ DEPENDS ${EXECUTABLE}
+ WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/android"
+ COMMAND ${ANT_COMMAND} debug
+ )
+
+ add_custom_target(install_apk
+ DEPENDS ${LIBSUPERDERPY_GAMENAME}_apk
+ WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/android"
+ COMMAND adb -d install -r ${APK_PATH}
+ )
+
+ add_custom_target(run_apk
+ DEPENDS install_apk
+ COMMAND adb -d shell
+ 'am start -a android.intent.action.MAIN -n net.dosowisko.${LIBSUPERDERPY_GAMENAME}/.SuperDerpyActivity'
+ )
+
+ else(ANDROID)
+ add_executable(${EXECUTABLE} WIN32 MACOSX_BUNDLE ${EXECUTABLE_SRC_LIST})
+ endif(ANDROID)
+ENDMACRO()
+
+if(ANDROID)
+ set(ANDROID_TARGET "android-15" CACHE STRING "What Android target to compile for.")
+
+ # The android tool on Windows is a batch file wrapper, which cannot be
+ # started by MSYS shell directly. We invoke it via cmd.exe instead.
+ # We don't use the full path to avoid problems with spaces,
+ # and hope that android.bat is somewhere on the PATH.
+ if(ANDROID_TOOL MATCHES "[.]bat$")
+ set(ANDROID_UPDATE_COMMAND
+ cmd.exe /c "android.bat update project -p . -t ${ANDROID_TARGET}")
+ else()
+ set(ANDROID_UPDATE_COMMAND
+ "${ANDROID_TOOL}" update project -p . -t ${ANDROID_TARGET})
+ endif()
+
+ file(REMOVE_RECURSE "${CMAKE_BINARY_DIR}/android")
+ file(COPY "${CMAKE_SOURCE_DIR}/libsuperderpy/android" DESTINATION "${CMAKE_BINARY_DIR}")
+
+ MACRO(configure_android_file PATH)
+ configure_file("${CMAKE_BINARY_DIR}/android/${PATH}.in" "${CMAKE_BINARY_DIR}/android/${PATH}" ${ARGN})
+ file(REMOVE "${CMAKE_BINARY_DIR}/android/${PATH}.in")
+ ENDMACRO()
+
+ configure_android_file("AndroidManifest.xml")
+ configure_android_file("localgen.properties")
+ configure_android_file("build.xml" @ONLY)
+ configure_android_file("project.properties" @ONLY)
+ configure_android_file("res/values/strings.xml")
+ configure_android_file("jni/localgen.mk")
+ if (ALLEGRO5_LIBRARIES MATCHES "^.*-debug$")
+ configure_file("${CMAKE_BINARY_DIR}/android/src/net/dosowisko/libsuperderpy/SuperDerpyActivity.java.debug.in" "${CMAKE_BINARY_DIR}/android/src/net/dosowisko/libsuperderpy/SuperDerpyActivity.java")
+ else()
+ configure_file("${CMAKE_BINARY_DIR}/android/src/net/dosowisko/libsuperderpy/SuperDerpyActivity.java.in" "${CMAKE_BINARY_DIR}/android/src/net/dosowisko/libsuperderpy/SuperDerpyActivity.java")
+ endif()
+ file(REMOVE "${CMAKE_BINARY_DIR}/android/src/net/dosowisko/libsuperderpy/SuperDerpyActivity.java.in")
+ file(REMOVE "${CMAKE_BINARY_DIR}/android/src/net/dosowisko/libsuperderpy/SuperDerpyActivity.java.debug.in")
+
+ file(RENAME "${CMAKE_BINARY_DIR}/android/src/net/dosowisko/libsuperderpy" "${CMAKE_BINARY_DIR}/android/src/net/dosowisko/${LIBSUPERDERPY_GAMENAME}")
+
+ file(COPY ${ALLEGRO5_LIBS} DESTINATION ${LIBRARY_OUTPUT_PATH})
+ file(COPY "${ANDROID_ALLEGRO_ROOT}/android/libs/${ARM_TARGETS}/Allegro5.jar" DESTINATION ${LIBRARY_OUTPUT_PATH})
+
+ file(COPY "${CMAKE_SOURCE_DIR}/data/" DESTINATION "${CMAKE_BINARY_DIR}/android/assets/")
+
+ execute_process(COMMAND ${ANDROID_UPDATE_COMMAND} WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/android")
+
+endif(ANDROID)
+
set(LIBSUPERDERPY_CONFIG_INCLUDED 1)
endif (NOT LIBSUPERDERPY_CONFIG_INCLUDED)
diff --git a/src/defines.h.in b/src/defines.h.in
new file mode 100644
index 0000000..15575d5
--- /dev/null
+++ b/src/defines.h.in
@@ -0,0 +1,10 @@
+#ifndef DEFINES_H
+#define DEFINES_H
+
+/*
+ * These values are automatically set according to their cmake variables.
+ */
+#define LIBSUPERDERPY_GAMENAME "${LIBSUPERDERPY_GAMENAME}"
+#define LIBSUPERDERPY_GAMENAME_PRETTY "${LIBSUPERDERPY_GAMENAME_PRETTY}"
+
+#endif /* DEFINES_H */
diff --git a/src/libsuperderpy.c b/src/libsuperderpy.c
index 8b5f8b0..e7ab1d4 100644
--- a/src/libsuperderpy.c
+++ b/src/libsuperderpy.c
@@ -418,6 +418,8 @@ SYMBOL_EXPORT int libsuperderpy_run(struct Game *game) {
}
#ifdef ALLEGRO_MACOSX
else if ((ev.type == ALLEGRO_EVENT_KEY_DOWN) && (ev.keyboard.keycode == 104)) { //TODO: report to upstream
+#elif defined(ALLEGRO_ANDROID)
+ else if ((ev.type == ALLEGRO_EVENT_KEY_DOWN) && (ev.keyboard.keycode == ALLEGRO_KEY_MENU)) {
#else
else if ((ev.type == ALLEGRO_EVENT_KEY_DOWN) && (ev.keyboard.keycode == ALLEGRO_KEY_TILDE)) {
#endif