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