eme version 0.2a - seme version 0.2
If you try to port eme to another system/compiler than Linux/gcc and DOS/DJGPP, I'd be pleased to hear of you (even to tell me that you've dropped the port because of too many errors ;).
eme is developped under GNU/Linux. It relies heavily on GNU make, gcc, Allegro and several GNU tools. I test it (and compile seme) under DOS with DJGPP.
I expect ports to platform where GNU make, gcc and Allegro work to be not too difficult. There may be neverthless some problems with:
System autodetection: the guess.mk autodetects the system in a very simple way:
Windows: I try as much as possible to give a version that works under a Microsoft OS, but I can test only on platform I have access to (which means DOS).
gcc version: Tested with gcc 2.95 and 3.1.
Various gcc flavour: eme is tested with gcc and DJGPP. I don't have other versions (such as MingW32/Cygwin) but i expect them to compile my code happily.
Windows+bash: I know some people use bash under Windows, the makefiles may not cope with that.
Other compiler than gcc: I don't have a non-gcc compiler and I don't plan to buy or steal one. I also know that some new C/C++ features I use aren't supported in the same way by all compilers.
Non-GNU Unices: There may be problems with tools with a slightly different behaviour.
Non-GNU make: eme makefiles will most probably not work with other make tools. Note: on some Unices, GNU make is called gmake.
CR, LF, CR/LF: The tarball file has Unix line separators, the zip file has CR/LF separators, there is no version with Apple separators. Text files are read by eme in the following cases:
Having an empty half hard-drive on a laptop, and an old i386 spleeping with no useful OS, I may one day try to port eme to an other OS.
Makefile structure.
The main makefile is Makefile, it defines all the main targets and includes the following makefiles:
If you create an emetool version, you'll probably not have to change the following makefiles. Seme uses two makefiles: seme/Makefile and seme/version.mk. Ieme uses one makefiles: ieme/Makefile. There are three makefiles in the examples directory: examples/Makefile, examples/seme/Makefile, examples/plugin/Makefile.
Note that all autogen.mk makefiles are autogenerated by emetool.
File structure.
You need Altheme which is *not* ported/tested under other compiler than gcc and djgpp. After you've unzipped Altheme, you'll find the source files in src/ and the includes files in include/. The files should be compiled as a library.
eme is divided in one library and several executables.
The eme library: the files in src/ should be compiled as a library. The include files are also in src/. To compile the library you need the Altheme include files.
seme executable: the .cc and .h files in seme/ need the include files from both Altheme and eme. They should be linked with: eme library, Altheme library, Allegro library, standard C++ library.
ieme executable: ieme/plugin.cc need the include files from both Altheme and eme. It should be linked with: eme library, Altheme library, Allegro library, standard C++ library.
Example plugin: examples/plugin.cc need the include files from both Altheme and eme. It should be linked with: eme library, Altheme library, Allegro library, standard C++ library.
"Game" example: the files examples/seme/loader.c, examples/seme/loader.h and examples/seme/game.cc should be compiled and linked with Allegro.
emetool: The emetool generation is done in the makefile emetool.mk. There are currently two versions: one for sh (mainly defined in emetool.nix) and one for DOS (mainly defined in emetool.dos).
Conditional compilation.
There are several defines that can change what is compiled:
Some differences between compilers, that I am aware of:
void foo() { for (int i=0; i<10; ++i) bar(i); for (int i=0; i<20; ++i) baz(i); }