From 0580cba0cd78cd309f02eeea8b23efbd862ec7d2 Mon Sep 17 00:00:00 2001 From: Marco Antognini Date: Sat, 20 Aug 2011 12:19:00 +0200 Subject: [PATCH] Xcode templates can be configured to use framework or dylibs Xocde templates now disable objective-c garbage collector --- .../ResourcePath.hpp | 0 .../ResourcePath.mm | 0 .../TemplateInfo.plist | 183 ++++++++++++------ .../cute_image.jpg | Bin .../nice_music.ogg | Bin .../sansation.ttf | Bin .../TemplateIcon.icns | Bin .../TemplateInfo.plist | 0 .../TemplateInfo.plist | 140 +++++++++----- .../cute_image.jpg | Bin .../nice_music.ogg | Bin .../sansation.ttf | Bin .../TemplateIcon.icns | Bin .../TemplateInfo.plist | 0 xcode/templates/readme.txt | 63 ++++-- 15 files changed, 265 insertions(+), 121 deletions(-) rename xcode/templates/{ => SFML}/SFML Application Base.xctemplate/ResourcePath.hpp (100%) rename xcode/templates/{ => SFML}/SFML Application Base.xctemplate/ResourcePath.mm (100%) rename xcode/templates/{ => SFML}/SFML Application Base.xctemplate/TemplateInfo.plist (78%) rename xcode/templates/{ => SFML}/SFML Application Base.xctemplate/cute_image.jpg (100%) rename xcode/templates/{ => SFML}/SFML Application Base.xctemplate/nice_music.ogg (100%) rename xcode/templates/{ => SFML}/SFML Application Base.xctemplate/sansation.ttf (100%) rename xcode/templates/{ => SFML}/SFML Application.xctemplate/TemplateIcon.icns (100%) rename xcode/templates/{ => SFML}/SFML Application.xctemplate/TemplateInfo.plist (100%) rename xcode/templates/{ => SFML}/SFML Command Line Tool Base.xctemplate/TemplateInfo.plist (82%) rename xcode/templates/{ => SFML}/SFML Command Line Tool Base.xctemplate/cute_image.jpg (100%) rename xcode/templates/{ => SFML}/SFML Command Line Tool Base.xctemplate/nice_music.ogg (100%) rename xcode/templates/{ => SFML}/SFML Command Line Tool Base.xctemplate/sansation.ttf (100%) rename xcode/templates/{ => SFML}/SFML Command Line Tool.xctemplate/TemplateIcon.icns (100%) rename xcode/templates/{ => SFML}/SFML Command Line Tool.xctemplate/TemplateInfo.plist (100%) diff --git a/xcode/templates/SFML Application Base.xctemplate/ResourcePath.hpp b/xcode/templates/SFML/SFML Application Base.xctemplate/ResourcePath.hpp similarity index 100% rename from xcode/templates/SFML Application Base.xctemplate/ResourcePath.hpp rename to xcode/templates/SFML/SFML Application Base.xctemplate/ResourcePath.hpp diff --git a/xcode/templates/SFML Application Base.xctemplate/ResourcePath.mm b/xcode/templates/SFML/SFML Application Base.xctemplate/ResourcePath.mm similarity index 100% rename from xcode/templates/SFML Application Base.xctemplate/ResourcePath.mm rename to xcode/templates/SFML/SFML Application Base.xctemplate/ResourcePath.mm diff --git a/xcode/templates/SFML Application Base.xctemplate/TemplateInfo.plist b/xcode/templates/SFML/SFML Application Base.xctemplate/TemplateInfo.plist similarity index 78% rename from xcode/templates/SFML Application Base.xctemplate/TemplateInfo.plist rename to xcode/templates/SFML/SFML Application Base.xctemplate/TemplateInfo.plist index c6bfcd297..137453a33 100644 --- a/xcode/templates/SFML Application Base.xctemplate/TemplateInfo.plist +++ b/xcode/templates/SFML/SFML Application Base.xctemplate/TemplateInfo.plist @@ -42,6 +42,64 @@ subject to the following restrictions: Options + + + Identifier + libraryType + Name + Use frameworks + Description + Indicates whether frameworks should be used instead of dylibs or not. + Type + checkbox + SortOrder + 1 + Default + false + Units + + + true + + + Project + + SharedSettings + + SFML_LINK_PREFIX + $(SFML_LINK_FRAMEWORKS_PREFIX) + + SFML_LINK_SUFFIX + $(SFML_LINK_FRAMEWORKS_SUFFIX) + + HEADER_SEARCH_PATHS + $(HEADER_SEARCH_PATHS) + + + + + false + + + Project + + SharedSettings + + SFML_LINK_PREFIX + $(SFML_LINK_DYLIBS_PREFIX) + + SFML_LINK_SUFFIX + $(SFML_LINK_DYLIBS_SUFFIX) + + HEADER_SEARCH_PATHS + $(HEADER_SEARCH_PATHS) /usr/local/include/ + + + + + + + Identifier @@ -66,11 +124,8 @@ subject to the following restrictions: SharedSettings - WINDOW_RELEASE - -lsfml-window - - WINDOW_DEBUG - -lsfml-window-d + SFML_WINDOW + $(SFML_LINK_PREFIX)sfml-window$(SFML_LINK_SUFFIX) @@ -99,10 +154,7 @@ subject to the following restrictions: SharedSettings - WINDOW_RELEASE - - - WINDOW_DEBUG + SFML_WINDOW @@ -157,11 +209,8 @@ subject to the following restrictions: SharedSettings - GRAPHICS_RELEASE - -lsfml-graphics - - GRAPHICS_DEBUG - -lsfml-graphics-d + SFML_GRAPHICS + $(SFML_LINK_PREFIX)sfml-graphics$(SFML_LINK_SUFFIX) @@ -256,10 +305,7 @@ text.SetColor(sf::Color::Black); SharedSettings - GRAPHICS_RELEASE - - - GRAPHICS_DEBUG + SFML_GRAPHICS @@ -307,11 +353,8 @@ text.SetColor(sf::Color::Black); SharedSettings - AUDIO_RELEASE - -lsfml-audio - - AUDIO_DEBUG - -lsfml-audio-d + SFML_AUDIO + $(SFML_LINK_PREFIX)sfml-audio$(SFML_LINK_SUFFIX) @@ -354,10 +397,7 @@ music.Play(); SharedSettings - AUDIO_RELEASE - - - AUDIO_DEBUG + SFML_AUDIO @@ -402,11 +442,8 @@ music.Play(); SharedSettings - NETWORK_RELEASE - -lsfml-network - - NETWORK_DEBUG - -lsfml-network-d + SFML_NETWORK + $(SFML_LINK_PREFIX)sfml-network$(SFML_LINK_SUFFIX) @@ -427,10 +464,7 @@ music.Play(); SharedSettings - NETWORK_RELEASE - - - NETWORK_DEBUG + SFML_NETWORK @@ -560,13 +594,23 @@ while (window.IsOpened()) PRODUCT_NAME $(TARGET_NAME) - SYSTEM_RELEASE - -lsfml-system - SYSTEM_DEBUG - -lsfml-system-d - - HEADER_SEARCH_PATHS - $(HEADER_SEARCH_PATHS) /usr/local/include/ + SFML_LINK_DYLIBS_PREFIX + -l + + SFML_LINK_FRAMEWORKS_PREFIX + -framework + + SFML_SYSTEM + $(SFML_LINK_PREFIX)sfml-system$(SFML_LINK_SUFFIX) + + SFML_LINK_FRAMEWORKS_SUFFIX + + + CLANG_ENABLE_OBJC_ARC + + + GCC_ENABLE_OBJC_GC + unsupported Configurations @@ -574,16 +618,22 @@ while (window.IsOpened()) Debug + SFML_LINK_DYLIBS_SUFFIX + -d + OTHER_LDFLAGS -$(OTHER_LDFLAGS) $(SYSTEM_DEBUG) $(WINDOW_DEBUG) $(GRAPHICS_DEBUG) $(AUDIO_DEBUG) $(NETWORK_DEBUG) + $(OTHER_LDFLAGS) $(SFML_SYSTEM) $(SFML_WINDOW) $(SFML_GRAPHICS) $(SFML_AUDIO) $(SFML_NETWORK) Release + SFML_LINK_DYLIBS_SUFFIX + + OTHER_LDFLAGS -$(OTHER_LDFLAGS) $(SYSTEM_RELEASE) $(WINDOW_RELEASE) $(GRAPHICS_RELEASE) $(AUDIO_RELEASE) $(NETWORK_RELEASE) + $(OTHER_LDFLAGS) $(SFML_SYSTEM) $(SFML_WINDOW) $(SFML_GRAPHICS) $(SFML_AUDIO) $(SFML_NETWORK) @@ -606,8 +656,16 @@ while (window.IsOpened()) /bin/sh ShellScript - # This shell script simply copies required sfml dylibs into the application bundle frameworks folder -# NB : this script assumes that if moduleX is required in release mode then it is also required in debug mode. + # This shell script simply copies required sfml dylibs/frameworks into the application bundle frameworks folder. +# If you're using static libraries (which is not recommended) you should remove this script from your project. + +# Are we building a project that uses framework or dylibs ? +if [ $SFML_LINK_PREFIX = $SFML_LINK_FRAMEWORKS_PREFIX ] +then + frameworks=1 +else + frameworks=0 +fi require () # $1 is a SFML module like 'system' or 'audio' { @@ -616,45 +674,58 @@ require () # $1 is a SFML module like 'system' or 'audio' echo "no parameter! ERROR!" exit else - if [ $CONFIGURATION = "Debug" ] + # clean potentially old stuff + rm -f $BUILT_PRODUCTS_DIR/test.app/Contents/Frameworks/libsfml-$1.2.dylib + rm -f $BUILT_PRODUCTS_DIR/test.app/Contents/Frameworks/libsfml-$1-d.2.dylib + rm -f $BUILT_PRODUCTS_DIR/test.app/Contents/Frameworks/sfml-$1.framework + + # copy SFML libraries + if [ $frameworks ] + then + ditto /Library/Frameworks/sfml-$1.framework $BUILT_PRODUCTS_DIR/test.app/Contents/Frameworks/sfml-$1.framework + elif [ $CONFIGURATION = "Debug" ] then - rm -f $BUILT_PRODUCTS_DIR/test.app/Contents/Frameworks/libsfml-$1.2.dylib ditto /usr/local/lib/libsfml-$1-d.2.dylib $BUILT_PRODUCTS_DIR/test.app/Contents/Frameworks/libsfml-$1-d.2.dylib else - rm -f $BUILT_PRODUCTS_DIR/test.app/Contents/Frameworks/libsfml-$1-d.2.dylib ditto /usr/local/lib/libsfml-$1.2.dylib $BUILT_PRODUCTS_DIR/test.app/Contents/Frameworks/libsfml-$1.2.dylib fi + + if [ $1 = "audio" ] + then + # copy sndfile framework too + ditto /Library/Frameworks/sndfile.framework $BUILT_PRODUCTS_DIR/test.app/Contents/Frameworks/sndfile.framework + fi fi } -if [ -n "$SYSTEM_RELEASE" ] +if [ -n "$SFML_SYSTEM" ] then require "system" fi -if [ -n "$AUDIO_RELEASE" ] +if [ -n "$SFML_AUDIO" ] then require "audio" fi -if [ -n "$NETWORK_RELEASE" ] +if [ -n "$SFML_NETWORK" ] then require "network" fi -if [ -n "$WINDOW_RELEASE" ] +if [ -n "$SFML_WINDOW" ] then require "window" fi -if [ -n "$GRAPHICS_RELEASE" ] +if [ -n "$SFML_GRAPHICS" ] then require "graphics" fi RunOnlyForDeploymentPostprocessing - NO + YES diff --git a/xcode/templates/SFML Application Base.xctemplate/cute_image.jpg b/xcode/templates/SFML/SFML Application Base.xctemplate/cute_image.jpg similarity index 100% rename from xcode/templates/SFML Application Base.xctemplate/cute_image.jpg rename to xcode/templates/SFML/SFML Application Base.xctemplate/cute_image.jpg diff --git a/xcode/templates/SFML Application Base.xctemplate/nice_music.ogg b/xcode/templates/SFML/SFML Application Base.xctemplate/nice_music.ogg similarity index 100% rename from xcode/templates/SFML Application Base.xctemplate/nice_music.ogg rename to xcode/templates/SFML/SFML Application Base.xctemplate/nice_music.ogg diff --git a/xcode/templates/SFML Application Base.xctemplate/sansation.ttf b/xcode/templates/SFML/SFML Application Base.xctemplate/sansation.ttf similarity index 100% rename from xcode/templates/SFML Application Base.xctemplate/sansation.ttf rename to xcode/templates/SFML/SFML Application Base.xctemplate/sansation.ttf diff --git a/xcode/templates/SFML Application.xctemplate/TemplateIcon.icns b/xcode/templates/SFML/SFML Application.xctemplate/TemplateIcon.icns similarity index 100% rename from xcode/templates/SFML Application.xctemplate/TemplateIcon.icns rename to xcode/templates/SFML/SFML Application.xctemplate/TemplateIcon.icns diff --git a/xcode/templates/SFML Application.xctemplate/TemplateInfo.plist b/xcode/templates/SFML/SFML Application.xctemplate/TemplateInfo.plist similarity index 100% rename from xcode/templates/SFML Application.xctemplate/TemplateInfo.plist rename to xcode/templates/SFML/SFML Application.xctemplate/TemplateInfo.plist diff --git a/xcode/templates/SFML Command Line Tool Base.xctemplate/TemplateInfo.plist b/xcode/templates/SFML/SFML Command Line Tool Base.xctemplate/TemplateInfo.plist similarity index 82% rename from xcode/templates/SFML Command Line Tool Base.xctemplate/TemplateInfo.plist rename to xcode/templates/SFML/SFML Command Line Tool Base.xctemplate/TemplateInfo.plist index 428e6d18c..8746f3bd0 100644 --- a/xcode/templates/SFML Command Line Tool Base.xctemplate/TemplateInfo.plist +++ b/xcode/templates/SFML/SFML Command Line Tool Base.xctemplate/TemplateInfo.plist @@ -42,6 +42,64 @@ subject to the following restrictions: Options + + + Identifier + libraryType + Name + Use frameworks + Description + Indicates whether frameworks should be used instead of dylibs or not. + Type + checkbox + SortOrder + 1 + Default + false + Units + + + true + + + Project + + SharedSettings + + SFML_LINK_PREFIX + $(SFML_LINK_FRAMEWORKS_PREFIX) + + SFML_LINK_SUFFIX + $(SFML_LINK_FRAMEWORKS_SUFFIX) + + HEADER_SEARCH_PATHS + $(HEADER_SEARCH_PATHS) + + + + + false + + + Project + + SharedSettings + + SFML_LINK_PREFIX + $(SFML_LINK_DYLIBS_PREFIX) + + SFML_LINK_SUFFIX + $(SFML_LINK_DYLIBS_SUFFIX) + + HEADER_SEARCH_PATHS + $(HEADER_SEARCH_PATHS) /usr/local/include/ + + + + + + + Identifier @@ -66,11 +124,8 @@ subject to the following restrictions: SharedSettings - WINDOW_RELEASE - -lsfml-window - - WINDOW_DEBUG - -lsfml-window-d + SFML_WINDOW + $(SFML_LINK_PREFIX)sfml-window$(SFML_LINK_SUFFIX) @@ -99,10 +154,7 @@ subject to the following restrictions: SharedSettings - WINDOW_RELEASE - - - WINDOW_DEBUG + SFML_WINDOW @@ -157,11 +209,8 @@ subject to the following restrictions: SharedSettings - GRAPHICS_RELEASE - -lsfml-graphics - - GRAPHICS_DEBUG - -lsfml-graphics-d + SFML_GRAPHICS + $(SFML_LINK_PREFIX)sfml-graphics$(SFML_LINK_SUFFIX) @@ -256,10 +305,7 @@ text.SetColor(sf::Color::Black); SharedSettings - GRAPHICS_RELEASE - - - GRAPHICS_DEBUG + SFML_GRAPHICS @@ -307,11 +353,8 @@ text.SetColor(sf::Color::Black); SharedSettings - AUDIO_RELEASE - -lsfml-audio - - AUDIO_DEBUG - -lsfml-audio-d + SFML_AUDIO + $(SFML_LINK_PREFIX)sfml-audio$(SFML_LINK_SUFFIX) @@ -354,10 +397,7 @@ music.Play(); SharedSettings - AUDIO_RELEASE - - - AUDIO_DEBUG + SFML_AUDIO @@ -399,11 +439,8 @@ music.Play(); SharedSettings - NETWORK_RELEASE - -lsfml-network - - NETWORK_DEBUG - -lsfml-network-d + SFML_NETWORK + $(SFML_LINK_PREFIX)sfml-network$(SFML_LINK_SUFFIX) @@ -424,10 +461,7 @@ music.Play(); SharedSettings - NETWORK_RELEASE - - - NETWORK_DEBUG + SFML_NETWORK @@ -554,13 +588,23 @@ while (window.IsOpened()) PRODUCT_NAME $(TARGET_NAME) - SYSTEM_RELEASE - -lsfml-system - SYSTEM_DEBUG - -lsfml-system-d - - HEADER_SEARCH_PATHS - $(HEADER_SEARCH_PATHS) /usr/local/include/ + SFML_LINK_DYLIBS_PREFIX + -l + + SFML_LINK_FRAMEWORKS_PREFIX + -framework + + SFML_SYSTEM + $(SFML_LINK_PREFIX)sfml-system$(SFML_LINK_SUFFIX) + + SFML_LINK_FRAMEWORKS_SUFFIX + + + CLANG_ENABLE_OBJC_ARC + + + GCC_ENABLE_OBJC_GC + unsupported Configurations @@ -568,16 +612,22 @@ while (window.IsOpened()) Debug + SFML_LINK_DYLIBS_SUFFIX + -d + OTHER_LDFLAGS -$(OTHER_LDFLAGS) $(SYSTEM_DEBUG) $(WINDOW_DEBUG) $(GRAPHICS_DEBUG) $(AUDIO_DEBUG) $(NETWORK_DEBUG) + $(OTHER_LDFLAGS) $(SFML_SYSTEM) $(SFML_WINDOW) $(SFML_GRAPHICS) $(SFML_AUDIO) $(SFML_NETWORK) Release + SFML_LINK_DYLIBS_SUFFIX + + OTHER_LDFLAGS -$(OTHER_LDFLAGS) $(SYSTEM_RELEASE) $(WINDOW_RELEASE) $(GRAPHICS_RELEASE) $(AUDIO_RELEASE) $(NETWORK_RELEASE) + $(OTHER_LDFLAGS) $(SFML_SYSTEM) $(SFML_WINDOW) $(SFML_GRAPHICS) $(SFML_AUDIO) $(SFML_NETWORK) diff --git a/xcode/templates/SFML Command Line Tool Base.xctemplate/cute_image.jpg b/xcode/templates/SFML/SFML Command Line Tool Base.xctemplate/cute_image.jpg similarity index 100% rename from xcode/templates/SFML Command Line Tool Base.xctemplate/cute_image.jpg rename to xcode/templates/SFML/SFML Command Line Tool Base.xctemplate/cute_image.jpg diff --git a/xcode/templates/SFML Command Line Tool Base.xctemplate/nice_music.ogg b/xcode/templates/SFML/SFML Command Line Tool Base.xctemplate/nice_music.ogg similarity index 100% rename from xcode/templates/SFML Command Line Tool Base.xctemplate/nice_music.ogg rename to xcode/templates/SFML/SFML Command Line Tool Base.xctemplate/nice_music.ogg diff --git a/xcode/templates/SFML Command Line Tool Base.xctemplate/sansation.ttf b/xcode/templates/SFML/SFML Command Line Tool Base.xctemplate/sansation.ttf similarity index 100% rename from xcode/templates/SFML Command Line Tool Base.xctemplate/sansation.ttf rename to xcode/templates/SFML/SFML Command Line Tool Base.xctemplate/sansation.ttf diff --git a/xcode/templates/SFML Command Line Tool.xctemplate/TemplateIcon.icns b/xcode/templates/SFML/SFML Command Line Tool.xctemplate/TemplateIcon.icns similarity index 100% rename from xcode/templates/SFML Command Line Tool.xctemplate/TemplateIcon.icns rename to xcode/templates/SFML/SFML Command Line Tool.xctemplate/TemplateIcon.icns diff --git a/xcode/templates/SFML Command Line Tool.xctemplate/TemplateInfo.plist b/xcode/templates/SFML/SFML Command Line Tool.xctemplate/TemplateInfo.plist similarity index 100% rename from xcode/templates/SFML Command Line Tool.xctemplate/TemplateInfo.plist rename to xcode/templates/SFML/SFML Command Line Tool.xctemplate/TemplateInfo.plist diff --git a/xcode/templates/readme.txt b/xcode/templates/readme.txt index ce2d4b30d..ee41b9d68 100644 --- a/xcode/templates/readme.txt +++ b/xcode/templates/readme.txt @@ -1,43 +1,66 @@ XCODE 4 TEMPLATES ================= -These are templates to create easily a new project in Xcode 4. +These are templates to create easily a new SFML project in Xcode 4. Features -------- * You can choose between command line tool or bundle application. - * You can select or not each module of SFML you'll use into your project. - * A basic example is inserted automatically into your project's code. + * You can choose between using SFML libraries as dylibs or frameworks. + * You can add independently each SFML module you'll use into your project. + * A basic example is included automatically into your project's code. Install ------- -Copy the four folders into ~/Library/Developer/Xcode/Templates folder (you might need to create it first). +If you are building SFML from sources you can set CMake's INSTALL_XCODE4_TEMPLATES variable to TRUE to install the templates automatically. Otherwise proceed as follow : + 1. Make sure "~/Library/Developer/Xcode/Templates/" folder exists; + 2. Copy "SFML" folder into the above folder. Usage ----- To use these templates follow these steps : - * open Xcode 4, - * select «create a new Xcode project» from the «Welcome to Xcode» window or select menu File > New > New Project, - * select «Templates» under «Mac OS X», - * then select either «SFML Application» or «SFML Command Line Tool», - * fill in the requested information and you're done. + 1. open Xcode 4, + 2. select "create a new Xcode project" from the "Welcome to Xcode" window or select menus File > New > New Project, + 3. select "SFML" subsection under "Mac OS X", + 4. then select either "SFML Application" or "SFML Command Line Tool", + 5. fill in the requested information and you're done. -Note ----- +Question & Answer +----------------- -If you wish to add/remove any module of SFML from your project without rebuilding a new one follow these steps : + * I would like to add/remove a module of SFML from my current project without creating a new one. How can I do that ? - * select your project from the project navigator panel (cmd+1), - * select your project's target on the main area, - * go to the «Build Settings» tab, - * go down to the bottom, - * edit any MODULEX_CONFIG variable (e.g. AUDIO_DEBUG, NETWORK_RELEASE) you want to. + 1. select your project from the project navigator panel, + 2. select your project's target on the main area, + 3. go to the "Build Settings" tab, + 4. go down to the bottom, + 5. set SFML_XXX variable, where XXX is the name of the module to add/remove to "$(SFML_LINK_PREFIX)sfml-XXX$(SFML_LINK_SUFFIX)" to add it or to "" (nothing) to remove it. -Examples : - * to disable the audio module simply erase the content of AUDIO_DEBUG and AUDIO_RELEASE. - * to add the network module set NETWORK_DEBUG to '-lsfml-network-d' and NETWORK_RELEASE to '-lsfml-network'. + * I changed my mind and would like to switch from dylibs to frameworks or vice versa. How can I do that ? + + 1. select your project from the project navigator panel, + 2. select your project's target on the main area, + 3. go to the "Build Settings" tab, + 4. go down to the bottom, + 5. update SFML_LINK_PREFIX and SFML_LINK_SUFFIX as follow : + * if you want to use frameworks, then + 1. set SFML_LINK_PREFIX to "$(SFML_LINK_FRAMEWORKS_PREFIX)", + 2. set SFML_LINK_SUFFIX to "$(SFML_LINK_FRAMEWORKS_SUFFIX)" + * if you want to use dylibs, then + 1. set SFML_LINK_PREFIX to "$(SFML_LINK_DYLIBS_PREFIX)", + 2. set SFML_LINK_SUFFIX to "$(SFML_LINK_DYLIBS_SUFFIX)" + + + * I want to use the static version of SFML. Is it possible ? + + Short answer : Don't do that! + + We strongly recommend you to use either dylibs or frameworks on Mac OS X. Please refer to Apple documentation for information about static vs shared libraries debate. + + If you really need/want to use static libraries proceed as follow. First, set your project to use dylibs (see above Q & A). Then set SFML_LINK_DYLIBS_SUFFIX to "-s-d" in debug mode and to "-s" in release mode. Finally, remove the script automatically generated by the application template (see Build Phases tab). +