diff --git a/frontend/menu/rgui.c b/frontend/menu/rgui.c
index 3bebf6ac6e..247498c418 100644
--- a/frontend/menu/rgui.c
+++ b/frontend/menu/rgui.c
@@ -498,11 +498,7 @@ static void render_text(rgui_handle_t *rgui)
if (!core_version)
core_version = "";
-#ifndef __BLACKBERRY_QNX__
snprintf(title_msg, sizeof(title_msg), "%s - %s %s", PACKAGE_VERSION, core_name, core_version);
-#else
- snprintf(title_msg, sizeof(title_msg), "%s %s", core_name, core_version);
-#endif
blit_line(rgui, TERM_START_X + 15, (TERM_HEIGHT * FONT_HEIGHT_STRIDE) + TERM_START_Y + 2, title_msg, true);
unsigned x = TERM_START_X;
diff --git a/general.h b/general.h
index 11016128a4..bef77dc703 100644
--- a/general.h
+++ b/general.h
@@ -38,6 +38,10 @@
#include "config.h"
#endif
+#ifndef PACKAGE_VERSION
+#define PACKAGE_VERSION "0.9.9.4"
+#endif
+
// Platform-specific headers
// PS3
#if defined(__CELLOS_LV2__) && !defined(__PSL1GHT__)
diff --git a/gfx/context/null_ctx.c b/gfx/context/null_ctx.c
new file mode 100644
index 0000000000..7b15f627a9
--- /dev/null
+++ b/gfx/context/null_ctx.c
@@ -0,0 +1,143 @@
+/* RetroArch - A frontend for libretro.
+ * Copyright (C) 2010-2013 - Hans-Kristian Arntzen
+ * Copyright (C) 2011-2013 - Daniel De Matteis
+ *
+ * RetroArch is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Found-
+ * ation, either version 3 of the License, or (at your option) any later version.
+ *
+ * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with RetroArch.
+ * If not, see .
+ */
+
+#include "../../driver.h"
+#include "../../general.h"
+#include "../gfx_common.h"
+#include "../gl_common.h"
+
+#include "../image.h"
+
+#include "../fonts/gl_font.h"
+#include
+
+#ifdef HAVE_GLSL
+#include "../shader_glsl.h"
+#endif
+
+GLfloat _angle;
+
+static enum gfx_ctx_api g_api;
+
+static void gfx_ctx_set_swap_interval(unsigned interval)
+{
+ RARCH_LOG("gfx_ctx_set_swap_interval(%d).\n", interval);
+}
+
+static void gfx_ctx_destroy(void)
+{
+}
+
+static void gfx_ctx_get_video_size(unsigned *width, unsigned *height)
+{
+}
+
+static bool gfx_ctx_init(void)
+{
+
+ return true;
+}
+
+static void gfx_ctx_swap_buffers(void)
+{
+}
+
+static void gfx_ctx_check_window(bool *quit,
+ bool *resize, unsigned *width, unsigned *height, unsigned frame_count)
+{
+ (void)frame_count;
+
+ *quit = false;
+
+ unsigned new_width, new_height;
+ gfx_ctx_get_video_size(&new_width, &new_height);
+ if (new_width != *width || new_height != *height)
+ {
+ *width = new_width;
+ *height = new_height;
+ *resize = true;
+ }
+
+ // Check if we are exiting.
+ if (g_extern.lifecycle_state & (1ULL << RARCH_QUIT_KEY))
+ *quit = true;
+}
+
+static void gfx_ctx_set_resize(unsigned width, unsigned height)
+{
+ (void)width;
+ (void)height;
+}
+
+static void gfx_ctx_update_window_title(void)
+{
+ char buf[128];
+ gfx_get_fps(buf, sizeof(buf), false);
+}
+
+static bool gfx_ctx_set_video_mode(
+ unsigned width, unsigned height,
+ bool fullscreen)
+{
+ (void)width;
+ (void)height;
+ (void)fullscreen;
+ return true;
+}
+
+
+static void gfx_ctx_input_driver(const input_driver_t **input, void **input_data)
+{
+ *input = NULL;
+ *input_data = NULL;
+}
+
+static unsigned gfx_ctx_get_resolution_width(unsigned resolution_id)
+{
+ int gl_width;
+
+ return gl_width;
+}
+
+static bool gfx_ctx_bind_api(enum gfx_ctx_api api)
+{
+ g_api = api;
+ return api == GFX_CTX_OPENGL_ES_API;
+}
+
+static bool gfx_ctx_has_focus(void)
+{
+ return true;
+}
+
+const gfx_ctx_driver_t gfx_ctx_null = {
+ gfx_ctx_init,
+ gfx_ctx_destroy,
+ gfx_ctx_bind_api,
+ gfx_ctx_set_swap_interval,
+ gfx_ctx_set_video_mode,
+ gfx_ctx_get_video_size,
+ NULL,
+ gfx_ctx_update_window_title,
+ gfx_ctx_check_window,
+ gfx_ctx_set_resize,
+ gfx_ctx_has_focus,
+ gfx_ctx_swap_buffers,
+ gfx_ctx_input_driver,
+ NULL,
+ NULL,
+ "null",
+};
diff --git a/gfx/gfx_context.h b/gfx/gfx_context.h
index a7420aba08..861479e564 100644
--- a/gfx/gfx_context.h
+++ b/gfx/gfx_context.h
@@ -108,6 +108,7 @@ extern const gfx_ctx_driver_t gfx_ctx_wgl;
extern const gfx_ctx_driver_t gfx_ctx_videocore;
extern const gfx_ctx_driver_t gfx_ctx_bbqnx;
extern const gfx_ctx_driver_t gfx_ctx_ios;
+extern const gfx_ctx_driver_t gfx_ctx_null;
const gfx_ctx_driver_t *gfx_ctx_find_driver(const char *ident); // Finds driver with ident. Does not initialize.
const gfx_ctx_driver_t *gfx_ctx_init_first(enum gfx_ctx_api api); // Finds first suitable driver and initializes.
diff --git a/griffin/griffin.c b/griffin/griffin.c
index fe119c0970..37ec1f0714 100644
--- a/griffin/griffin.c
+++ b/griffin/griffin.c
@@ -85,10 +85,7 @@ CONFIG FILE
#include "../conf/config_file.c"
#include "../core_options.c"
-
-#if defined(__QNX__) || defined(IOS)
#include "../core_info.c"
-#endif
/*============================================================
CHEATS
@@ -100,7 +97,6 @@ CHEATS
VIDEO CONTEXT
============================================================ */
-#ifdef HAVE_VID_CONTEXT
#include "../gfx/gfx_context.c"
#if defined(__CELLOS_LV2__)
@@ -113,8 +109,8 @@ VIDEO CONTEXT
#include "../gfx/context/bbqnx_ctx.c"
#elif defined(IOS)
#include "../gfx/context/ioseagl_ctx.c"
-#endif
-
+#else
+#include "../gfx/context/null_ctx.c"
#endif
/*============================================================
@@ -417,9 +413,13 @@ MAIN
#include "../frontend/frontend_ios.c"
#endif
-#if (defined(__QNX__) && !defined(HAVE_BB10)) || !defined(RARCH_MOBILE)
+#ifndef IS_XCODE
+#ifndef RARCH_MOBILE
+#ifndef HAVE_BB10
#include "../frontend/frontend.c"
#endif
+#endif
+#endif
/*============================================================
RETROARCH
diff --git a/osx/RetroArch.xcodeproj/project.pbxproj b/osx/RetroArch.xcodeproj/project.pbxproj
index abf3f485de..f53cb8d1ca 100644
--- a/osx/RetroArch.xcodeproj/project.pbxproj
+++ b/osx/RetroArch.xcodeproj/project.pbxproj
@@ -8,6 +8,9 @@
/* Begin PBXBuildFile section */
5014454A17858BE60072A543 /* RetroArch.icns in Resources */ = {isa = PBXBuildFile; fileRef = 5014454917858BE60072A543 /* RetroArch.icns */; };
+ 5022D5C917859F16008CD69B /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5022D5C817859F16008CD69B /* AudioUnit.framework */; };
+ 5022D5CB1785A300008CD69B /* image.c in Sources */ = {isa = PBXBuildFile; fileRef = 5022D5CA1785A300008CD69B /* image.c */; };
+ 50AE1AF417858CA000D99603 /* griffin.c in Sources */ = {isa = PBXBuildFile; fileRef = 50AE1AF317858CA000D99603 /* griffin.c */; };
7409592A0CC826D800261DBF /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 740959290CC826D800261DBF /* Credits.rtf */; };
745217950CA98A790067AF41 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 745217940CA98A790067AF41 /* OpenGL.framework */; };
745217CD0CA98B160067AF41 /* GLString.m in Sources */ = {isa = PBXBuildFile; fileRef = 74F0EC690CA98A30009E924F /* GLString.m */; };
@@ -22,6 +25,11 @@
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; };
29B97319FDCFA39411CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/MainMenu.nib; sourceTree = ""; };
5014454917858BE60072A543 /* RetroArch.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = RetroArch.icns; sourceTree = ""; };
+ 5022D5C817859F16008CD69B /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = ../../../../System/Library/Frameworks/AudioUnit.framework; sourceTree = ""; };
+ 5022D5CA1785A300008CD69B /* image.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = image.c; path = ../gfx/image.c; sourceTree = ""; };
+ 50AE1AF317858CA000D99603 /* griffin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = griffin.c; path = ../griffin/griffin.c; sourceTree = ""; };
+ 50AE1AF517859DEB00D99603 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = ../../../../System/Library/Frameworks/CoreAudio.framework; sourceTree = ""; };
+ 50AE1AF717859DF700D99603 /* CoreAudioKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudioKit.framework; path = ../../../../System/Library/Frameworks/CoreAudioKit.framework; sourceTree = ""; };
740959290CC826D800261DBF /* Credits.rtf */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; path = Credits.rtf; sourceTree = ""; };
7439218A0CC944C3009BCC59 /* ReadMe.rtfd */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; path = ReadMe.rtfd; sourceTree = ""; };
745217940CA98A790067AF41 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; };
@@ -38,6 +46,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ 5022D5C917859F16008CD69B /* AudioUnit.framework in Frameworks */,
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
745217950CA98A790067AF41 /* OpenGL.framework in Frameworks */,
);
@@ -49,6 +58,8 @@
080E96DDFE201D6D7F000001 /* Classes */ = {
isa = PBXGroup;
children = (
+ 5022D5CA1785A300008CD69B /* image.c */,
+ 50AE1AF317858CA000D99603 /* griffin.c */,
74F0EC6A0CA98A30009E924F /* GLString.h */,
74F0EC690CA98A30009E924F /* GLString.m */,
74F0EC5B0CA989F9009E924F /* BasicOpenGLView.m */,
@@ -84,6 +95,9 @@
29B97314FDCFA39411CA2CEA /* RetroArch CocoaGL */ = {
isa = PBXGroup;
children = (
+ 5022D5C817859F16008CD69B /* AudioUnit.framework */,
+ 50AE1AF717859DF700D99603 /* CoreAudioKit.framework */,
+ 50AE1AF517859DEB00D99603 /* CoreAudio.framework */,
7439218A0CC944C3009BCC59 /* ReadMe.rtfd */,
080E96DDFE201D6D7F000001 /* Classes */,
29B97317FDCFA39411CA2CEA /* Resources */,
@@ -180,6 +194,8 @@
files = (
745217CD0CA98B160067AF41 /* GLString.m in Sources */,
74F0EC5D0CA989F9009E924F /* BasicOpenGLView.m in Sources */,
+ 50AE1AF417858CA000D99603 /* griffin.c in Sources */,
+ 5022D5CB1785A300008CD69B /* image.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -214,8 +230,23 @@
GCC_DYNAMIC_NO_PIC = NO;
GCC_MODEL_TUNING = G5;
GCC_OPTIMIZATION_LEVEL = 0;
+ HEADER_SEARCH_PATHS = ../;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
+ OTHER_CFLAGS = (
+ "-DWANT_MINIZ",
+ "-DHAVE_RGUI",
+ "-DHAVE_GRIFFIN",
+ "-DIS_XCODE",
+ "-DHAVE_COREAUDIO",
+ "-DHAVE_DYNAMIC",
+ "-DHAVE_FBO",
+ "-DHAVE_OPENGL",
+ "-DHAVE_GLSL",
+ "-DHAVE_NETPLAY",
+ "-DHAVE_THREADS",
+ "-DHAVE_STRL",
+ );
PRODUCT_NAME = RetroArch;
SDKROOT = "";
WRAPPER_EXTENSION = app;
@@ -230,8 +261,23 @@
COMBINE_HIDPI_IMAGES = YES;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_MODEL_TUNING = G5;
+ HEADER_SEARCH_PATHS = ../;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
+ OTHER_CFLAGS = (
+ "-DWANT_MINIZ",
+ "-DHAVE_RGUI",
+ "-DHAVE_GRIFFIN",
+ "-DIS_XCODE",
+ "-DHAVE_COREAUDIO",
+ "-DHAVE_DYNAMIC",
+ "-DHAVE_FBO",
+ "-DHAVE_OPENGL",
+ "-DHAVE_GLSL",
+ "-DHAVE_NETPLAY",
+ "-DHAVE_THREADS",
+ "-DHAVE_STRL",
+ );
PRODUCT_NAME = RetroArch;
SDKROOT = "";
WRAPPER_EXTENSION = app;
diff --git a/retroarch.c b/retroarch.c
index 1c874c8baf..9c8488ba29 100644
--- a/retroarch.c
+++ b/retroarch.c
@@ -632,7 +632,7 @@ static void print_compiler(FILE *file)
static void print_help(void)
{
puts("===================================================================");
-#if !defined(__BLACKBERRY_QNX__) && !defined(IOS)
+#if !defined(__BLACKBERRY_QNX__) && !defined(IOS) && !defined(IS_XCODE)
/* To get around error 'too many decimal points in number - expected ')' before numeric constant */
puts("RetroArch: Frontend for libretro -- v" PACKAGE_VERSION " --");
#endif