[AD] [PATCH] Split USE_CONSOLE |
[ Thread Index | Date Index | More lists.liballeg.org/allegro-developers Archives ]
USE_CONSOLE was introduced because Windows isn't able to provide a console ouput for its GUI applications. Under Windows, it disables the magic main that turns by default a main() into a WinMain(). Now, presumably in order to mimic this behaviour, USE_CONSOLE disables the magic main on Unix systems too, although Unix systems always provide a console output, thus making USE_CONSOLE useless. Disabling the magic main on Unix systems has a few nasty effects: some configuration and file routines don't work anymore. For example, the following program: #define USE_CONSOLE #include <stdio.h> #include <allegro.h> int main(int argc, char *argv[]) { char exec_name[1024]; set_uformat(U_ASCII); allegro_init(); get_executable_name(exec_name, 1024); puts(exec_name); return 0; } END_OF_MAIN() returns "./unknown" on Unix systems, whereas it perfectly works under Windows! The attached patch splits USE_CONSOLE into two parts: ALLEGRO_USE_CONSOLE that only instructs Allegro to provide a console output (no-op on Unix systems) and ALLEGRO_NO_MAGIC_MAIN that disables the magic main. USE_CONSOLE is still provided for backward compatibility. After this patch is applied, the program above behaves correctly if USE_CONSOLE is replaced by ALLEGRO_USE_CONSOLE. Defining ALLEGRO_NO_MAGIC_MAIN allows a program to #include <allegro.h> without linking against the library (see src/i386/asmdef.c). And it's that symbol which inherits the few nasty effects of the former USE_CONSOLE. This patch will also simply the problem we are faced with Darwin: - it will let the Allegro distribution build on Darwin without any additional modification because USE_CONSOLE is replaced by ALLEGRO_USE_CONSOLE in the utilities, - it will narrow down the problem to the sole behaviour of ALLEGRO_NO_MAGIC_MAIN under Darwin (which is already impaired by the aforementioned limitations because Darwin belongs to the Unix family). Tested under Linux and Windows. Off-topic: is it normal that get_executable_name() returns './exec_name' on Unix systems ? The docs read "This generally comes from argv[0], but on Unix systems if argv[0] does not specify the path, we search for our file in $PATH." -- Eric Botcazou ebotcazou@xxxxxxxxxx
Attachment:
magic_main5.zip
Description: Zip compressed data
Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |