OSX: fix compilation with 10.7 SDK

Recent work in the OS X parts of the code started using clang's support for
Obj-C's support for Literals and Subscripting. These particular language
features remove a lot of boilerplate code and allow to interact with
collections as consicely as one would do in scripting languages like Ruby or
Python.

Even if these are compiler features, Subscripting needs some runtime support.
This is provided with libarclite (coming with the compiler), but we need to
add the proper method definitions since the 10.7 SDK headers do not include
them. That is because 10.7 shipped before this language features.

This will cause some warnings when compiling with the 10.7 SDK because the
commit also redefines BOOL to make autoboxing/unboxing of BOOL literals to
work.

If you need to test this for whatever reason on 10.8, just pass in the correct
SDK to configure's extra cflags:

  ./configure --extra-cflags='-mmacosx-version-min=10.7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk'

Fixes #117
This commit is contained in:
Stefano Pigozzi 2013-06-19 19:25:19 +02:00
parent a9f76c6d86
commit 0407869ae3
4 changed files with 62 additions and 1 deletions

View File

@ -24,6 +24,7 @@
#include "core/input/keycodes.h" #include "core/input/keycodes.h"
#include "osdep/macosx_application_objc.h" #include "osdep/macosx_application_objc.h"
#include "osdep/macosx_compat.h"
static pthread_t playback_thread_id; static pthread_t playback_thread_id;

57
osdep/macosx_compat.h Normal file
View File

@ -0,0 +1,57 @@
/*
* Application Event Handling
*
* This file is part of mpv.
*
* mpv 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 Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* mpv 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 mpv. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef MPV_MACOSX_COMPAT
#define MPV_MACOSX_COMPAT
#import <Cocoa/Cocoa.h>
#if !defined(MAC_OS_X_VERSION_10_8)
# define MAC_OS_X_VERSION_10_8 MAC_OS_X_VERSION_10_7 + 1
#endif
#if (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_8)
@interface NSArray (SubscriptingAdditions)
- (id)objectAtIndexedSubscript:(NSUInteger)index;
@end
@interface NSMutableArray (SubscriptingAdditions)
- (void)setObject: (id)object atIndexedSubscript:(NSUInteger)index;
@end
@interface NSDictionary (SubscriptingAdditions)
- (id)objectForKeyedSubscript:(id)key;
@end
@interface NSMutableDictionary (SubscriptingAdditions)
- (void)setObject: (id)object forKeyedSubscript:(id)key;
@end
#if __has_feature(objc_bool)
#define YES __objc_yes
#define NO __objc_no
#else
#define YES ((BOOL)1)
#define NO ((BOOL)0)
#endif
#endif
#endif /* MPV_MACOSX_COMPAT */

View File

@ -30,8 +30,10 @@
#include "core/mp_fifo.h" #include "core/mp_fifo.h"
// doesn't make much sense, but needed to access keymap functionality // doesn't make much sense, but needed to access keymap functionality
#include "video/out/vo.h" #include "video/out/vo.h"
#include "osdep/macosx_events.h"
#import "osdep/macosx_application_objc.h" #import "osdep/macosx_application_objc.h"
#include "osdep/macosx_events.h"
#include "osdep/macosx_compat.h"
#define NSLeftAlternateKeyMask (0x000020 | NSAlternateKeyMask) #define NSLeftAlternateKeyMask (0x000020 | NSAlternateKeyMask)
#define NSRightAlternateKeyMask (0x000040 | NSAlternateKeyMask) #define NSRightAlternateKeyMask (0x000040 | NSAlternateKeyMask)

View File

@ -38,6 +38,7 @@
#include "osdep/macosx_application.h" #include "osdep/macosx_application.h"
#include "osdep/macosx_events.h" #include "osdep/macosx_events.h"
#include "osdep/macosx_compat.h"
@interface GLMPlayerWindow : NSWindow <NSWindowDelegate> @interface GLMPlayerWindow : NSWindow <NSWindowDelegate>
- (BOOL)canBecomeKeyWindow; - (BOOL)canBecomeKeyWindow;