Re: [AD] END_OF_MAIN removal patch for msvc |
[ Thread Index | Date Index | More lists.liballeg.org/allegro-developers Archives ]
On 17 Nov 2008, at 20:36, Peter Wang wrote:
It might be best just to expose the boilerplate to the user. For any program which wants to be portable to Mac OS X, you'd write: int real_main(int argc, const char *argv) { al_init(); ... } int main(int argc, const char *argv) { return al_run_in_main_thread(real_main, argc, argv); } Nothing up the sleeves. We might need three different versions of al_run_in_main_thread,for zero arguments, two arguments, and three arguments. Of course, we'dprobably get sick of writing that and end up providing a macro: ALLEGRO_MAIN_WRAPPER(real_main, argc, argv); which looks suspiciously like END_OF_MAIN(). *But* it doesn't requirethe symbol `_mangled_main_address' to exist, which causes problems whenpeople try to load the Allegro shared object at run-time, and there is no name mangling.
My main concern would be the number of people who forget to do that, inadvertently creating platform-dependent code. My secondary concern would be how that would interact with other libraries (probably no worse than END_OF_MAIN(), but the thought occured). My third concern would be that I actually think that looks uglier than END_OF_MAIN() ;)
I think it makes sense to split the problem in two: requiring a copy of argv[] and having a non-standard main/main requirement. The former can be solved by providing a function to pass it (we need some sensible default if a user forgets to do this), assuming we really want it still. The latter was never needed on *nix and now isn't needed on Windows anymore either. That leaves OS X.
If OS X is the only platform that needs a magic main at the moment, we should again look for a way to get rid of it there too. The ucontext stuff Peter [Hull] mentioned would be what I'd look into, assuming there's a way to make it work in Tiger (Leopard and up shouldn't be a problem if I understand correctly). Maybe (optionally) not in debug mode though, but then we'd still need END_OF_MAIN() just for that. Some sort of progress...
Evert
Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |