[ 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:


#include <stdio.h>
#include <allegro.h>

int main(int argc, char *argv[])
   char exec_name[1024];


   get_executable_name(exec_name, 1024);

   return 0;

returns "./unknown" on Unix systems, whereas it perfectly works under

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

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

Eric Botcazou

Attachment: magic_main5.zip
Description: Zip compressed data

Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/