diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5a028c745..159236e40 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -24,6 +24,8 @@ option(USE_SYSTEM_ANGELSCRIPT "Use system angelscript instead of built-in angels
option(USE_SYSTEM_ENET "Use system ENET instead of the built-in version, when available." ON)
option(USE_SYSTEM_GLEW "Use system GLEW instead of the built-in version, when available." ON)
+CMAKE_DEPENDENT_OPTION(USE_CRYPTO_OPENSSL "Use OpenSSL instead of Nettle for cryptography in STK." OFF
+ "NOT APPLE" ON)
CMAKE_DEPENDENT_OPTION(BUILD_RECORDER "Build opengl recorder" ON
"NOT SERVER_ONLY;NOT APPLE" OFF)
CMAKE_DEPENDENT_OPTION(USE_FRIBIDI "Support for right-to-left languages" ON
@@ -453,26 +455,45 @@ else()
target_link_libraries(supertuxkart ${PTHREAD_LIBRARY})
endif()
-# CURL and OpenSSL
+# CURL and OpenSSL or Nettle
# 1.0.1d for compatible AES GCM handling
SET(OPENSSL_MINIMUM_VERSION "1.0.1d")
if(MSVC)
+ set(USE_CRYPTO_OPENSSL ON)
target_link_libraries(supertuxkart ${PROJECT_SOURCE_DIR}/${DEPENDENCIES}/lib/libcurl.lib)
target_link_libraries(supertuxkart ${PROJECT_SOURCE_DIR}/${DEPENDENCIES}/lib/libeay32.lib)
elseif(MINGW)
+ set(USE_CRYPTO_OPENSSL ON)
target_link_libraries(supertuxkart ${PROJECT_SOURCE_DIR}/${DEPENDENCIES}/lib/libcurldll.a)
target_link_libraries(supertuxkart ${PROJECT_SOURCE_DIR}/${DEPENDENCIES}/lib/libeay32.dll)
else()
find_package(CURL REQUIRED)
- find_package(OpenSSL REQUIRED)
-
- if(${OPENSSL_VERSION} VERSION_LESS ${OPENSSL_MINIMUM_VERSION} OR
- (${OPENSSL_VERSION} VERSION_EQUAL ${OPENSSL_MINIMUM_VERSION} AND ${OPENSSL_VERSION} STRLESS ${OPENSSL_MINIMUM_VERSION}))
- message(FATAL_ERROR "OpenSSL version found (${OPENSSL_VERSION}) is less then the minimum required (${OPENSSL_MINIMUM_VERSION}), aborting.")
- endif()
-
include_directories(${CURL_INCLUDE_DIRS})
- include_directories(${OpenSSL_INCLUDE_DIRS})
+
+ find_path(NETTLE_INCLUDE_DIRS nettle/gcm.h nettle/sha.h nettle/base64.h nettle/yarrow.h)
+ find_library(NETTLE_LIBRARY NAMES nettle libnettle)
+
+ if (NOT NETTLE_INCLUDE_DIRS OR NOT NETTLE_LIBRARY OR USE_CRYPTO_OPENSSL)
+ set(USE_CRYPTO_OPENSSL ON)
+ find_package(OpenSSL REQUIRED)
+
+ if(${OPENSSL_VERSION} VERSION_LESS ${OPENSSL_MINIMUM_VERSION} OR
+ (${OPENSSL_VERSION} VERSION_EQUAL ${OPENSSL_MINIMUM_VERSION} AND ${OPENSSL_VERSION} STRLESS ${OPENSSL_MINIMUM_VERSION}))
+ message(FATAL_ERROR "OpenSSL version found (${OPENSSL_VERSION}) is less then the minimum required (${OPENSSL_MINIMUM_VERSION}), aborting.")
+ endif()
+ include_directories(${OpenSSL_INCLUDE_DIRS})
+ else()
+ set(USE_CRYPTO_OPENSSL OFF)
+ include_directories(${NETTLE_INCLUDE_DIRS})
+ endif()
+endif()
+
+if (USE_CRYPTO_OPENSSL)
+ message(STATUS "OpenSSL will be used for cryptography in STK.")
+ add_definitions(-DENABLE_CRYPTO_OPENSSL)
+else()
+ message(STATUS "Nettle will be used for cryptography in STK.")
+ add_definitions(-DENABLE_CRYPTO_NETTLE)
endif()
# Common library dependencies
@@ -484,9 +505,14 @@ target_link_libraries(supertuxkart
stkirrlicht
${Angelscript_LIBRARIES}
${CURL_LIBRARIES}
- ${OPENSSL_CRYPTO_LIBRARY}
)
+if (USE_CRYPTO_OPENSSL)
+ target_link_libraries(supertuxkart ${OPENSSL_CRYPTO_LIBRARY})
+else()
+ target_link_libraries(supertuxkart ${NETTLE_LIBRARY})
+endif()
+
if(NOT SERVER_ONLY)
if(NOT USE_GLES2)
target_link_libraries(supertuxkart ${OPENGL_gl_LIBRARY} ${GLEW_LIBRARIES})
diff --git a/android/Android.mk b/android/Android.mk
index 67fddb84d..a2f0f0724 100644
--- a/android/Android.mk
+++ b/android/Android.mk
@@ -161,6 +161,7 @@ LOCAL_CFLAGS := -I../lib/angelscript/include \
-Iobj/openssl/include \
-DUSE_GLES2 \
-DENABLE_SOUND \
+ -DENABLE_CRYPTO_OPENSSL \
-DNDEBUG \
-DANDROID_PACKAGE_NAME=\"$(PACKAGE_NAME)\" \
-DANDROID_APP_DIR_NAME=\"$(APP_DIR_NAME)\" \
diff --git a/data/gui/blue_flag.png b/data/gui/blue_flag.png
index bb62e53c3..4b23dbe30 100644
Binary files a/data/gui/blue_flag.png and b/data/gui/blue_flag.png differ
diff --git a/data/gui/help7.stkgui b/data/gui/help7.stkgui
index 8c8dfb2b6..42376bd48 100644
--- a/data/gui/help7.stkgui
+++ b/data/gui/help7.stkgui
@@ -59,7 +59,7 @@
+ text="When input devices are configured, select the 'multiplayer' icon in the main menu. Each player can press the 'fire' key of their gamepad or keyboard to join the game, and use their input device to select their kart. The game continues when everyone selected their kart. Note that the mouse may not be used for this operation."/>
diff --git a/data/gui/hourglass.png b/data/gui/hourglass.png
index fa7a2f62b..3a775b0c7 100644
Binary files a/data/gui/hourglass.png and b/data/gui/hourglass.png differ
diff --git a/data/gui/main_menu.stkgui b/data/gui/main_menu.stkgui
index ab4bac2f7..d796f1dd3 100644
--- a/data/gui/main_menu.stkgui
+++ b/data/gui/main_menu.stkgui
@@ -25,9 +25,9 @@
I18N="Main menu button" text="Addons"/>
-
+
-
+
@@ -38,7 +38,7 @@
-