Hi, Let's get this straight: the title of this mail was only to trick you into reading what's below and "considered harmful" should never be used.
I'm updating win-builds.org with EFL git and ephysics failed building because too many things use the EAPI define. EAPI is useful because some platforms want that symbols exported from shared libraries are explicitly marked and, conversely, when using symbols from another shared library, they should be marked but differently. Basically that means: when eina_init() is compiled, it must be marked "dllexport" (for Windows but this is also useful for ELF) and when it is used from my application, its definition must be marked "dllimport". Simple enough. In the EFL world, this is achieved through EAPI. Below is code from EPhysics.h: #ifdef EAPI # undef EAPI #endif #ifdef _WIN32 # ifdef EFL_EPHYSICS_BUILD # ifdef DLL_EXPORT # define EAPI __declspec(dllexport) # else # define EAPI # endif /* ! DLL_EXPORT */ # else # define EAPI __declspec(dllimport) # endif /* ! EFL_EPHYSICS_BUILD */ Then ephysics_world.cpp gets built with -DEFL_EPHYSICS_BUILD=1 and EAPI gets "dllexport". That way, it will be possible to export the symbols defined in ephysics_world.cpp. Except that Eina.h is then included and since EFL_EINA_BUILD isn't defined and the code in Eina.h is similar, we get #undef EAPI and then #define again but for dllimport. Then the symbols are declared while getting a decoration that means they are to be imported from another shared library. That makes no sense and compilation aborts. There's the quick solution: include EPhysics.h after all others. There's the clean solution: stop abusing EAPI for 20 different libraries. Think about it: today it's 20 but the goal is to get that much higher; this will not happen if the order in which headers have to be included is tricky. Maybe that having EINA_API, EPHYSICS_API, ECORE_API, and so on looks a bit tedious but at least it's simple to get right. Another way to see it is that currently, a /single/ define (EAPI) is controlled by 20 other defines (each of the EFL_.*_BUILD). To everyone writing new libraries: do not ever write "EAPI" in your code but use a specific define for your library. -- Adrien Nader ------------------------------------------------------------------------------ BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT Develop your own process in accordance with the BPMN 2 standard Learn Process modeling best practices with Bonita BPM through live exercises http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_ source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel