Q-0.9.0d82

Keep me going
give me coffee! Smoke 1 Smoke 2 Smoke 3

We're getting closer to a new stable. Lot's of Bugfixes and a conversion tool to update the old guests.

Another tool, that I like to point out is the new translation update tool "localizationStringsUpdate". It's a small command line app, to merge ".strings" that you extract from nibs. In Q we are working with "generic" nibs. I.e. we do not keep nibs for every language, but we dublicate the generic nibs and inject the translated strings at build time. So we are not hindered by translation, if we do changes to the layout, or add new items. So what does this thingy do? It takes a base translation file and the existing ".strings" and fills in the known transaltions to the basefile. Checking is done by the "oid". Then it drops the new file.

Synopsis: ./localizationStringsUpdate BaseFile OldTranslation OutputFile

Finally, grab the new Q at http://www.kju-app.org.

Q-0.9.0d77

After a hard battle with weak linking of some Tiger CG calls (to run Q on Panther) we have finally a new nightly, that *runs* on Panther. I *know* it, since I have stripped two harddisk from an old server, set it up with new ones, inserted the old ones into an external HD enclosure, moved all the data form my Firewire HD so that I finally could setup a Panther system on my GFs Powerbook (txs btw ;)).

Let's elaborate a little further for the techie:

Weak linking offers the possibility to link against function calls that are not present/defined on the users system. This comes in handy when you like to use Tiger only functions, but you still want your binary to work on Panther. Basically you then code a Tiger path (makes use of the new function) and a Panther path (with replacement code). The binary checks at runtime whether the function call (symbol) is defined. If it is, you can make use oft it, obviously. Without weak linking, your program would normally abort right away, because the linker would not find the Tiger Symbol on Panther ("undefined reference to _xxx"). Now Apple introduced weak linking with 10.2.8. So You can use weak linking down to 10.2.8.

So where is the problem?

Well, first, if you build with "make", You need to define MACOSX_DEPLOYMENT_TARGET, else Your system will set it to 10.1, which does not support weak linking. Why? To weak link, the Function which you like to be weak linked needs the following attribute: "__attribute__((weak_import))". But the new functions, that Apple introduces with every release of OS X, are not weak linked by default. They are linked by rules defined in "AvailabiliyMacros.h". These macros set the attribute dynamically based on the *lowest* system the binary should work on. This is 10.1 by default. So to trigger these macros to use weak linking, MACOSX_DEPLOYMENT_TARGET needs to be set accordingly.

[edited, tx for pointing out phil]

Second, in early stages, Apple messed soething up with the documentation. Here is the sample code I googled up: (lesson learned: one should always use the recent files that come with xcode updates 🙂 ):

void MyAboutBox(void)
{
    if(HIAboutBox != NULL)
    {
        // Lots of code to display an about box with earlier technology.
    }
    else
    {
        HIAboutBox(NULL);
    }
}

Problem was pointed out at cocoadev.

[/edited]
Grab it at http://www.kju-app.org.

Mike

Q-0.9.0d74

After a lengthy svn commit battle we have finally generated and upped the new Q nightly. Yeah Katios, your translation is in! And SvnX definitly does not like my nibs ;).

Grab it at http://www.kju-app.org.

Mike