Xcode templates can be configured to use framework or dylibs

Xocde templates now disable objective-c garbage collector
This commit is contained in:
Marco Antognini 2011-08-20 12:19:00 +02:00
parent 71277f06e5
commit 0580cba0cd
15 changed files with 265 additions and 121 deletions

View File

@ -42,6 +42,64 @@ subject to the following restrictions:
<!-- ############################################################### Options -->
<key>Options</key>
<array>
<!-- ****************************************** Framework option -->
<dict>
<key>Identifier</key>
<string>libraryType</string>
<key>Name</key>
<string>Use frameworks</string>
<key>Description</key>
<string>Indicates whether frameworks should be used instead of dylibs or not.</string>
<key>Type</key>
<string>checkbox</string>
<key>SortOrder</key>
<integer>1</integer>
<key>Default</key>
<string>false</string>
<key>Units</key>
<dict>
<!-- ON -->
<key>true</key>
<dict>
<!-- compilation options -->
<key>Project</key>
<dict>
<key>SharedSettings</key>
<dict>
<key>SFML_LINK_PREFIX</key>
<string>$(SFML_LINK_FRAMEWORKS_PREFIX)</string>
<key>SFML_LINK_SUFFIX</key>
<string>$(SFML_LINK_FRAMEWORKS_SUFFIX)</string>
<key>HEADER_SEARCH_PATHS</key>
<string>$(HEADER_SEARCH_PATHS)</string>
</dict>
</dict>
</dict>
<!-- OFF -->
<key>false</key>
<dict>
<!-- compilation options -->
<key>Project</key>
<dict>
<key>SharedSettings</key>
<dict>
<key>SFML_LINK_PREFIX</key>
<string>$(SFML_LINK_DYLIBS_PREFIX)</string>
<key>SFML_LINK_SUFFIX</key>
<string>$(SFML_LINK_DYLIBS_SUFFIX)</string>
<key>HEADER_SEARCH_PATHS</key>
<string>$(HEADER_SEARCH_PATHS) /usr/local/include/</string>
</dict>
</dict>
</dict>
</dict>
</dict>
<!-- ********************************************* Window Module -->
<dict>
<key>Identifier</key>
@ -66,11 +124,8 @@ subject to the following restrictions:
<dict>
<key>SharedSettings</key>
<dict>
<key>WINDOW_RELEASE</key>
<string>-lsfml-window</string>
<key>WINDOW_DEBUG</key>
<string>-lsfml-window-d</string>
<key>SFML_WINDOW</key>
<string>$(SFML_LINK_PREFIX)sfml-window$(SFML_LINK_SUFFIX)</string>
</dict>
</dict>
@ -99,10 +154,7 @@ subject to the following restrictions:
<dict>
<key>SharedSettings</key>
<dict>
<key>WINDOW_RELEASE</key>
<string></string>
<key>WINDOW_DEBUG</key>
<key>SFML_WINDOW</key>
<string></string>
</dict>
</dict>
@ -157,11 +209,8 @@ subject to the following restrictions:
<dict>
<key>SharedSettings</key>
<dict>
<key>GRAPHICS_RELEASE</key>
<string>-lsfml-graphics</string>
<key>GRAPHICS_DEBUG</key>
<string>-lsfml-graphics-d</string>
<key>SFML_GRAPHICS</key>
<string>$(SFML_LINK_PREFIX)sfml-graphics$(SFML_LINK_SUFFIX)</string>
</dict>
</dict>
@ -256,10 +305,7 @@ text.SetColor(sf::Color::Black);
<dict>
<key>SharedSettings</key>
<dict>
<key>GRAPHICS_RELEASE</key>
<string></string>
<key>GRAPHICS_DEBUG</key>
<key>SFML_GRAPHICS</key>
<string></string>
</dict>
</dict>
@ -307,11 +353,8 @@ text.SetColor(sf::Color::Black);
<dict>
<key>SharedSettings</key>
<dict>
<key>AUDIO_RELEASE</key>
<string>-lsfml-audio</string>
<key>AUDIO_DEBUG</key>
<string>-lsfml-audio-d</string>
<key>SFML_AUDIO</key>
<string>$(SFML_LINK_PREFIX)sfml-audio$(SFML_LINK_SUFFIX)</string>
</dict>
</dict>
@ -354,10 +397,7 @@ music.Play();
<dict>
<key>SharedSettings</key>
<dict>
<key>AUDIO_RELEASE</key>
<string></string>
<key>AUDIO_DEBUG</key>
<key>SFML_AUDIO</key>
<string></string>
</dict>
</dict>
@ -402,11 +442,8 @@ music.Play();
<dict>
<key>SharedSettings</key>
<dict>
<key>NETWORK_RELEASE</key>
<string>-lsfml-network</string>
<key>NETWORK_DEBUG</key>
<string>-lsfml-network-d</string>
<key>SFML_NETWORK</key>
<string>$(SFML_LINK_PREFIX)sfml-network$(SFML_LINK_SUFFIX)</string>
</dict>
</dict>
@ -427,10 +464,7 @@ music.Play();
<dict>
<key>SharedSettings</key>
<dict>
<key>NETWORK_RELEASE</key>
<string></string>
<key>NETWORK_DEBUG</key>
<key>SFML_NETWORK</key>
<string></string>
</dict>
</dict>
@ -560,13 +594,23 @@ while (window.IsOpened())
<key>PRODUCT_NAME</key>
<string>$(TARGET_NAME)</string>
<key>SYSTEM_RELEASE</key>
<string>-lsfml-system</string>
<key>SYSTEM_DEBUG</key>
<string>-lsfml-system-d</string>
<key>HEADER_SEARCH_PATHS</key>
<string>$(HEADER_SEARCH_PATHS) /usr/local/include/</string>
<key>SFML_LINK_DYLIBS_PREFIX</key>
<string>-l</string>
<key>SFML_LINK_FRAMEWORKS_PREFIX</key>
<string>-framework </string>
<key>SFML_SYSTEM</key>
<string>$(SFML_LINK_PREFIX)sfml-system$(SFML_LINK_SUFFIX)</string>
<key>SFML_LINK_FRAMEWORKS_SUFFIX</key>
<string></string>
<key>CLANG_ENABLE_OBJC_ARC</key>
<string></string>
<key>GCC_ENABLE_OBJC_GC</key>
<string>unsupported</string>
</dict>
<key>Configurations</key>
@ -574,16 +618,22 @@ while (window.IsOpened())
<!-- ***************************************************** Debug -->
<key>Debug</key>
<dict>
<key>SFML_LINK_DYLIBS_SUFFIX</key>
<string>-d</string>
<key>OTHER_LDFLAGS</key>
<string>$(OTHER_LDFLAGS) $(SYSTEM_DEBUG) $(WINDOW_DEBUG) $(GRAPHICS_DEBUG) $(AUDIO_DEBUG) $(NETWORK_DEBUG)</string>
<string>$(OTHER_LDFLAGS) $(SFML_SYSTEM) $(SFML_WINDOW) $(SFML_GRAPHICS) $(SFML_AUDIO) $(SFML_NETWORK)</string>
</dict>
<!-- *************************************************** Release -->
<key>Release</key>
<dict>
<key>SFML_LINK_DYLIBS_SUFFIX</key>
<string></string>
<key>OTHER_LDFLAGS</key>
<string>$(OTHER_LDFLAGS) $(SYSTEM_RELEASE) $(WINDOW_RELEASE) $(GRAPHICS_RELEASE) $(AUDIO_RELEASE) $(NETWORK_RELEASE)</string>
<string>$(OTHER_LDFLAGS) $(SFML_SYSTEM) $(SFML_WINDOW) $(SFML_GRAPHICS) $(SFML_AUDIO) $(SFML_NETWORK)</string>
</dict>
</dict>
</dict>
@ -606,8 +656,16 @@ while (window.IsOpened())
<string>/bin/sh</string>
<key>ShellScript</key>
<string># 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.
<string># 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
</string>
<key>RunOnlyForDeploymentPostprocessing</key>
<string>NO</string>
<string>YES</string>
</dict>
</array>
</dict>

View File

Before

Width:  |  Height:  |  Size: 140 KiB

After

Width:  |  Height:  |  Size: 140 KiB

View File

@ -42,6 +42,64 @@ subject to the following restrictions:
<!-- ############################################################### Options -->
<key>Options</key>
<array>
<!-- ****************************************** Framework option -->
<dict>
<key>Identifier</key>
<string>libraryType</string>
<key>Name</key>
<string>Use frameworks</string>
<key>Description</key>
<string>Indicates whether frameworks should be used instead of dylibs or not.</string>
<key>Type</key>
<string>checkbox</string>
<key>SortOrder</key>
<integer>1</integer>
<key>Default</key>
<string>false</string>
<key>Units</key>
<dict>
<!-- ON -->
<key>true</key>
<dict>
<!-- compilation options -->
<key>Project</key>
<dict>
<key>SharedSettings</key>
<dict>
<key>SFML_LINK_PREFIX</key>
<string>$(SFML_LINK_FRAMEWORKS_PREFIX)</string>
<key>SFML_LINK_SUFFIX</key>
<string>$(SFML_LINK_FRAMEWORKS_SUFFIX)</string>
<key>HEADER_SEARCH_PATHS</key>
<string>$(HEADER_SEARCH_PATHS)</string>
</dict>
</dict>
</dict>
<!-- OFF -->
<key>false</key>
<dict>
<!-- compilation options -->
<key>Project</key>
<dict>
<key>SharedSettings</key>
<dict>
<key>SFML_LINK_PREFIX</key>
<string>$(SFML_LINK_DYLIBS_PREFIX)</string>
<key>SFML_LINK_SUFFIX</key>
<string>$(SFML_LINK_DYLIBS_SUFFIX)</string>
<key>HEADER_SEARCH_PATHS</key>
<string>$(HEADER_SEARCH_PATHS) /usr/local/include/</string>
</dict>
</dict>
</dict>
</dict>
</dict>
<!-- ********************************************* Window Module -->
<dict>
<key>Identifier</key>
@ -66,11 +124,8 @@ subject to the following restrictions:
<dict>
<key>SharedSettings</key>
<dict>
<key>WINDOW_RELEASE</key>
<string>-lsfml-window</string>
<key>WINDOW_DEBUG</key>
<string>-lsfml-window-d</string>
<key>SFML_WINDOW</key>
<string>$(SFML_LINK_PREFIX)sfml-window$(SFML_LINK_SUFFIX)</string>
</dict>
</dict>
@ -99,10 +154,7 @@ subject to the following restrictions:
<dict>
<key>SharedSettings</key>
<dict>
<key>WINDOW_RELEASE</key>
<string></string>
<key>WINDOW_DEBUG</key>
<key>SFML_WINDOW</key>
<string></string>
</dict>
</dict>
@ -157,11 +209,8 @@ subject to the following restrictions:
<dict>
<key>SharedSettings</key>
<dict>
<key>GRAPHICS_RELEASE</key>
<string>-lsfml-graphics</string>
<key>GRAPHICS_DEBUG</key>
<string>-lsfml-graphics-d</string>
<key>SFML_GRAPHICS</key>
<string>$(SFML_LINK_PREFIX)sfml-graphics$(SFML_LINK_SUFFIX)</string>
</dict>
</dict>
@ -256,10 +305,7 @@ text.SetColor(sf::Color::Black);
<dict>
<key>SharedSettings</key>
<dict>
<key>GRAPHICS_RELEASE</key>
<string></string>
<key>GRAPHICS_DEBUG</key>
<key>SFML_GRAPHICS</key>
<string></string>
</dict>
</dict>
@ -307,11 +353,8 @@ text.SetColor(sf::Color::Black);
<dict>
<key>SharedSettings</key>
<dict>
<key>AUDIO_RELEASE</key>
<string>-lsfml-audio</string>
<key>AUDIO_DEBUG</key>
<string>-lsfml-audio-d</string>
<key>SFML_AUDIO</key>
<string>$(SFML_LINK_PREFIX)sfml-audio$(SFML_LINK_SUFFIX)</string>
</dict>
</dict>
@ -354,10 +397,7 @@ music.Play();
<dict>
<key>SharedSettings</key>
<dict>
<key>AUDIO_RELEASE</key>
<string></string>
<key>AUDIO_DEBUG</key>
<key>SFML_AUDIO</key>
<string></string>
</dict>
</dict>
@ -399,11 +439,8 @@ music.Play();
<dict>
<key>SharedSettings</key>
<dict>
<key>NETWORK_RELEASE</key>
<string>-lsfml-network</string>
<key>NETWORK_DEBUG</key>
<string>-lsfml-network-d</string>
<key>SFML_NETWORK</key>
<string>$(SFML_LINK_PREFIX)sfml-network$(SFML_LINK_SUFFIX)</string>
</dict>
</dict>
@ -424,10 +461,7 @@ music.Play();
<dict>
<key>SharedSettings</key>
<dict>
<key>NETWORK_RELEASE</key>
<string></string>
<key>NETWORK_DEBUG</key>
<key>SFML_NETWORK</key>
<string></string>
</dict>
</dict>
@ -554,13 +588,23 @@ while (window.IsOpened())
<key>PRODUCT_NAME</key>
<string>$(TARGET_NAME)</string>
<key>SYSTEM_RELEASE</key>
<string>-lsfml-system</string>
<key>SYSTEM_DEBUG</key>
<string>-lsfml-system-d</string>
<key>HEADER_SEARCH_PATHS</key>
<string>$(HEADER_SEARCH_PATHS) /usr/local/include/</string>
<key>SFML_LINK_DYLIBS_PREFIX</key>
<string>-l</string>
<key>SFML_LINK_FRAMEWORKS_PREFIX</key>
<string>-framework </string>
<key>SFML_SYSTEM</key>
<string>$(SFML_LINK_PREFIX)sfml-system$(SFML_LINK_SUFFIX)</string>
<key>SFML_LINK_FRAMEWORKS_SUFFIX</key>
<string></string>
<key>CLANG_ENABLE_OBJC_ARC</key>
<string></string>
<key>GCC_ENABLE_OBJC_GC</key>
<string>unsupported</string>
</dict>
<key>Configurations</key>
@ -568,16 +612,22 @@ while (window.IsOpened())
<!-- ***************************************************** Debug -->
<key>Debug</key>
<dict>
<key>SFML_LINK_DYLIBS_SUFFIX</key>
<string>-d</string>
<key>OTHER_LDFLAGS</key>
<string>$(OTHER_LDFLAGS) $(SYSTEM_DEBUG) $(WINDOW_DEBUG) $(GRAPHICS_DEBUG) $(AUDIO_DEBUG) $(NETWORK_DEBUG)</string>
<string>$(OTHER_LDFLAGS) $(SFML_SYSTEM) $(SFML_WINDOW) $(SFML_GRAPHICS) $(SFML_AUDIO) $(SFML_NETWORK)</string>
</dict>
<!-- *************************************************** Release -->
<key>Release</key>
<dict>
<key>SFML_LINK_DYLIBS_SUFFIX</key>
<string></string>
<key>OTHER_LDFLAGS</key>
<string>$(OTHER_LDFLAGS) $(SYSTEM_RELEASE) $(WINDOW_RELEASE) $(GRAPHICS_RELEASE) $(AUDIO_RELEASE) $(NETWORK_RELEASE)</string>
<string>$(OTHER_LDFLAGS) $(SFML_SYSTEM) $(SFML_WINDOW) $(SFML_GRAPHICS) $(SFML_AUDIO) $(SFML_NETWORK)</string>
</dict>
</dict>
</dict>

View File

Before

Width:  |  Height:  |  Size: 140 KiB

After

Width:  |  Height:  |  Size: 140 KiB

View File

@ -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).