help-gnustep
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Distributing Renaissance/GNUstep app's on OS X


From: Uli Kusterer
Subject: Re: Distributing Renaissance/GNUstep app's on OS X
Date: Sat, 14 Feb 2004 00:18:07 +0100
User-agent: MT-NewsWatcher/3.3b1 (PPC Mac OS X)

In article <c0g6tp$15cd76$1@ID-210346.news.uni-berlin.de>,
 "Fletcher T. Penney" <me@privacy.net> wrote:

> Launching Project Builder, I went to the Targets tab, and clicked on 
> Installation Settings.  Then I changed the path to:
> 
> @executable_path/../Frameworks
> 
> 
> I then confirmed that prebinding was turned on in "Linker Settings".
> 
> 
> And then I built the project ( which took a long time, btw...)
> 
> No joy.  Turns out the instructions in that article were full of crap. 
> :)  For one thing, that path is incorrect ( I wondered about it, but it 
> was repeated multiple times...)  The binary is not placed in 
> Contents/MacOS, but rather in Ink.app itself....  Perhaps this is a 
> difference on newer versions of OS X???)

 You did change the installation path of the framework, and not of your 
app, right? Because only the app's executable should really be in 
Contents/MacOS/, while the framework should be in Contents/Frameworks/.

> ( I am using the Ink.app example, so the binary file is Ink.app/Ink

 That sounds screwy. The binary should be at Ink.app/Contents/MacOS/Ink.

> My instructions assume you put your frameworks in:
>       Ink.app/Contents/Frameworks/Renaissance.framework

Yes, that's where the framework should be.

>       This needs to be changed:
> 
>               install_name_tool -change Renaissance.framework/Renaissance 
> @executable_path/Contents/Frameworks/Renaissance.framework/Renaissance

This sounds like your bundle is wrong. @executable_path *should* stand 
for the actual executable binary of the host application, which should 
be inside Ink.app/Contents/MacOS/, as already stated. Then, the relative 
path to the framework in Ink.app/Contents/Frameworks/ should be

   @executable_path/../Frameworks/Renaissance.framework

The way your path is set up will only work if the actual executable was 
directly inside Ink.app. If that is the case, something is *very* screwy 
with your application's bundle.

> that copy was around 480k on my machine - 
> the version I built following the CocoaDev article was 5 Mb.  Way too 
> big for such a simple app...)

 You probably did a debug build or an un-stripped build for the 
CocoaDevCentral (there's a site called CocoaDev as well, careful...) 
sample. Debug builds are usually ten times as large as the corresponding 
release build.

>       Now that we know the "proper" path info, perhaps you could use this 
> information to go back and recompile the library the "right way".  But, 
> as it is unnecessary, why bother....

 Well, it would definitely be the recommended way of doing this. And if 
your bundle is really as screwed up as your description above makes it 
sound, you'll probably want to build a fresh new version with a 
corrected framework.

>       I hope this info helps others, but primarily I was happy to get it 
> working so that I can distribute GNUstep/Renaissance app's on OS X, 
> without requiring that the end-user know anything about it.  My 
> assumption is that these binaries would also run on Linux machines 
> running GNUstep, but that do NOT have Renaissance pre-installed, as long 
> as the app and the framework were recompiled for the right machine 
> architecture...

 Ummm... the *binaries* won't run on GNUstep. First the Mac version of 
Renaissance.framework links against Cocoa.framework, while on GNUstep 
you'd link against GNUstep.framework or something like that. Second, the 
executable format for Linux applications is not Mach-O. I think most of 
them use ELF, and anyway, most of them run on x86 (or Pentium 
<something>) CPUs.

>       Again, I am sure I have made terminology errors as I am new to this 
> aspect of programming, but the overall idea is valid ( even if there is 
> another, better solution )

 Ummm... yeah, guess those were terminology errors. Though I couldn't 
really tell you how to do the same on Linux under GNUstep anyway. You 
might want to ask about that on gnu.gnustep.help

Cheers,
-- Uli
http://www.zathras.de


reply via email to

[Prev in Thread] Current Thread [Next in Thread]