]> err.no Git - sope/blob - sope-core/README-OSX.txt
Added Xcode project for EOCoreData and updated prebinding infos
[sope] / sope-core / README-OSX.txt
1 # $Id$
2
3 Building Notes
4 ==============
5
6 Prerequisites:
7 - Apple Developer Tools
8 - sope-xml
9
10 There are two ways to build SOPE on MacOSX, either using the gnustep-make
11 package or as native Xcode projects. The first option is usually used when
12 you build SOPE for use with OGo, while the latter is more appropriate for
13 SOPE:X applications.
14
15 Building using gstep-make:
16 ==========================
17
18 First install gnustep-make (eg v1.8), then ensure that GNUstep.sh is properly
19 sources. For the build just enter:
20   make -s install
21 or
22   make -s debug=yes install
23 if you build with debug informations.
24
25 Building using Xcode:
26 =====================
27
28 The Xcode build comes in two variants, one for development and the other for
29 deployment.
30
31
32 Development
33 -----------
34 Development usually means you're happily hacking away at your pet
35 projects and sometimes want to update the SOPE frameworks. For this purpose
36 use the "all" target and the accompanied "Development" build style. Later,
37 you can narrow the target down to something more specific. For development we
38 assume the destination for frameworks to be /Library/Frameworks. Once you are
39 done building all the frameworks the loader commands of the frameworks will
40 have that destination path built in. In order to use the frameworks you either
41 have to install them (by copying them manually to their destination) or to
42 prepare symlinks from /Library/Frameworks to the place where the built products
43 are. I usually build everything in a central place (i.e. /Local/BuildArea) and
44 have symlinks from /Library/Frameworks to /Local/BuildArea for each of the
45 products.
46
47 Also the following products are expected to be in the following locations:
48 *.sax -> /Library/SaxDrivers
49 *.sxp -> /Library/SoProducts
50
51 Either copy them to the appropriate places or symlink them (my suggestion).
52
53
54 Deployment
55 ----------
56 Deployment in our terms means you want to copy all required SOPE products into
57 an application's app wrapper. For this step all frameworks need to be built in
58 a special fashion, as the "install_name" of the frameworks needs to be prepared
59 to point to a relative path in the app wrapper. The situation is even more
60 complicated as all frameworks during linking store the "install names" of other
61 frameworks in their mach loader commands. In order for this step not to break
62 we need to set up an environment which is clearly separated from the
63 Development environment. I chose to use $(USER_LIBRARY_DIR)/EmbeddedFrameworks
64 as the default destination for these builds. In order for your application to
65 easily pick up the built products and copy them into its app wrapper this
66 location needs to be fixed and easily accessible. Note that on my system
67 ~/Library/EmbeddedFrameworks is a symlink to /Library/EmbeddedFrameworks so
68 even if you don't like the location at all it's very easy to point it to 
69 somewhere else. As soon as you have set this up you can use the
70 "Wrapper Contents" target with the accompanied "Wrapper" build style to build
71 all wrapper contents in the appropriate fashion. When you're done you can copy
72 all the wrapper products into your application's wrapper. The expected
73 destination is the "Frameworks" directory in the wrappers "Contents" directory.
74 For a complete list of what you need to copy into your application's wrapper
75 see the "Direct Dependencies" of all "Wrapper Contents" targets in all SOPE
76 related projects. At the time of this writing the complete list for SOPE
77 consisted of the following:
78
79 SxXML
80   SaxObjC.framework
81   DOM.framework
82   XmlRpc.framework
83
84 SxCore
85   EOControl.framework
86   NGExtensions.framework
87   NGStreams.framework
88   NGMime.framework
89   NGImap4.framework
90   NGLdap.framework
91   NGMail.framework
92   NGiCal.framework
93
94
95 Note: "A word on umbrellas"
96       The general idea of umbrellas is to make life easier by providing a cover
97       for linking. In an ideal world we would provide a SOPE umbrella (we 
98       actually do that) and you just link against that and forget about the
99       complete list. However, with the "Wrapper" style things do not work that
100       way. Because the "install name"s of all frameworks are relative paths,
101       during linking the mach dyld cannot find the dependend frameworks
102       (because the path isn't absolute) and thus symbol checking fails. This
103       directly leads to prebinding to fail which we really don't want since we
104       have such a huge dependency tree and prebinding escpecially in our case
105       speeds up loading significantly. So, umbrellas do not really help with
106       "Wrapper" products - in fact they just add to the overall dependency
107       graph without providing any benefit. With the notable exception of the
108       "Development" build style umbrellas are totally useless. If you're
109       not planning to do a "Wrapper" deployment you might be happy to have
110       the umbrellas, however, that's why they are still here.
111
112 Note: You cannot use the -buildAllTargets commandline argument for Xcode,
113       because the Xcode projects also contain a target to build in the
114       gstep-make environment (called GSM:all)
115
116
117 Prebinding Notes
118 ================
119
120 General technical information about prebinding is available from Apple at
121 http://developer.apple.com/documentation/Performance/Conceptual/LaunchTime/Tasks/Prebinding.html#//apple_ref/doc/uid/20001858.
122
123 OGo frameworks currently use the range from 0xC0000000 to 0xCFFFFFFF.
124
125 Any questions and feedback regarding our use of this range should go to
126 Marcus Müller <znek@mulle-kybernetik.com>.
127
128
129 sope-core: 0xC1000000 - 0xC2FFFFFF
130 ===============================
131
132 0xC1000000 EOControl
133 0xC1200000 NGExtensions
134 0xC1400000 NGStreams
135 0xC2E00000 EOCoreData