I'm trying to build eDuke on GNU/Linux and I have a problem: the build fails because of the SDL_USEFOLDER preprocessor symbol.
In file included from source/build/include/mutex.h:10:0, from source/build/include/osd.h:12, from source/build/include/baselayer.h:11, from source/duke3d/src/duke3d.h:28, from source/duke3d/src/sdlmusic.cpp:35: source/build/include/sdl_inc.h:63:25: fatal error: SDL_mixer.h: No such file or directory compilation terminated. Failed building obj/duke3d/sdlmusic.o from source/duke3d/src/sdlmusic.cpp! make: *** [GNUmakefile:982: obj/duke3d/sdlmusic.o] Error 1
The offender is the file `source/build/include/sdl_inc.h` at line 63 (second-to-laste line in the snippet below):
# if defined SDL_USEFOLDER # if SDL_TARGET == 2 # include <SDL2/SDL_mixer.h> # else # include <SDL/SDL_mixer.h> # endif # else # include "SDL_mixer.h" # endif
If I remove the surrounding `#if defined ...` everything compiles fine, the compiler looks for the header file in the correct location, the game compiles and everything runs normall. This leads me to believe that somehow the symbol was not defined properly and as a consequence to compiler starts looking for the SDL Mixer header in the same directory as the source code.
On the other hand, on line 15 we have a similar situation:
#if defined SDL_USEFOLDER # if SDL_TARGET == 2 # include <SDL2/SDL.h> # include <SDL2/SDL_syswm.h> # else # include <SDL/SDL.h> # include <SDL/SDL_syswm.h> # endif #else # include "SDL.h" # if !defined __APPLE__ # include "SDL_syswm.h" # endif #endif
I did not have to remove this surrounding preprocessor check.
Can someone please help me to figure out what is happening here? If the symbol is defined both places should work, and if it is undefined it should fail on line 15 already, not on line 63. What is the point of this preprocessor symbol? The fact that eDuke compiles fine with this out of the way indicates to me that all my dependencies are set up correctly (the SDL Mixer header is located under `$C_INCLUDE_PATH/SDL/SDL_mixer.h`).
My system is Kubuntu 18.04. The full build log:
eduke32_20190202-7326$ make Built object obj/duke3d/game.o Built object obj/duke3d/global.o Built object obj/duke3d/actors.o Built object obj/duke3d/gamedef.o Built object obj/duke3d/gameexec.o Built object obj/duke3d/gamevars.o Built object obj/duke3d/player.o Built object obj/duke3d/premap.o Built object obj/duke3d/sector.o Built object obj/duke3d/anim.o Built object obj/duke3d/common.o Built object obj/duke3d/config.o Built object obj/duke3d/demo.o Built object obj/duke3d/input.o Built object obj/duke3d/menus.o Built object obj/duke3d/namesdyn.o Built object obj/duke3d/net.o Built object obj/duke3d/savegame.o Built object obj/duke3d/rts.o Built object obj/duke3d/osdfuncs.o Built object obj/duke3d/osdcmds.o Built object obj/duke3d/grpscan.o Built object obj/duke3d/sounds.o Built object obj/duke3d/soundsdyn.o Built object obj/duke3d/cheats.o Built object obj/duke3d/sbar.o Built object obj/duke3d/screentext.o Built object obj/duke3d/screens.o Built object obj/duke3d/cmdline.o Built object obj/duke3d/startgtk.game.o Built object obj/duke3d/game_icon.o Built object obj/duke3d/game_banner.o Built object obj/build/rev.o Built object obj/build/baselayer.o Built object obj/build/cache1d.o Built object obj/build/klzw.o Built object obj/build/common.o Built object obj/build/compat.o Built object obj/build/crc32.o Built object obj/build/defs.o Built object obj/build/engine.o Built object obj/build/tiles.o Built object obj/build/clip.o Built object obj/build/2d.o Built object obj/build/hash.o Built object obj/build/palette.o Built object obj/build/polymost.o Built object obj/build/texcache.o Built object obj/build/dxtfilter.o Built object obj/build/hightile.o Built object obj/build/textfont.o Built object obj/build/smalltextfont.o Built object obj/build/kplib.o Built object obj/build/lz4.o Built object obj/build/osd.o Built object obj/build/pragmas.o Built object obj/build/scriptfile.o Built object obj/build/softsurface.o Built object obj/build/mmulti_null.o Built object obj/build/mutex.o Built object obj/build/xxhash.o Built object obj/build/md4.o Built object obj/build/colmatch.o Built object obj/build/screenshot.o Built object obj/build/mhk.o Built object obj/build/pngwrite.o Built object obj/build/miniz.o Built object obj/build/miniz_tinfl.o Built object obj/build/miniz_tdef.o Built object obj/build/fix16.o Built object obj/build/fix16_str.o Built object obj/build/a-c.o Built object obj/build/glsurface.o Built object obj/build/voxmodel.o Built object obj/build/mdsprite.o Built object obj/build/tilepacker.o Built object obj/build/glbuild.o Built object obj/build/polymer.o Built object obj/build/sdlayer.o Built object obj/build/gtkbits.o Built object obj/build/dynamicgtk.o Built object obj/build/animvpx.o In file included from source/build/include/mutex.h:10:0, from source/build/include/osd.h:12, from source/build/include/baselayer.h:11, from source/duke3d/src/duke3d.h:28, from source/duke3d/src/sdlmusic.cpp:35: source/build/include/sdl_inc.h:63:25: fatal error: SDL_mixer.h: No such file or directory compilation terminated. Failed building obj/duke3d/sdlmusic.o from source/duke3d/src/sdlmusic.cpp! make: *** [GNUmakefile:982: obj/duke3d/sdlmusic.o] Error 1