On Debian "testing" ScummVM-1.7.0 FTBFS in "make test":
./test/cxxtest/cxxtestgen.py --runner=StdioPrinter --no-std --no-eh --include=./test/cxxtest_mingw.h -o test/runner.cpp test/common/hashmap.h test/common/fixedstack.h test/common/stream.h test/common/memoryreadstream.h test/common/seekablesubreadstream.h test/common/str.h test/common/memorywritestream.h test/common/array.h test/common/list.h test/common/subreadstream.h test/common/rational.h test/common/math.h test/common/pack.h test/common/queue.h test/common/memoryreadstreamendian.h test/common/util.h test/common/algorithm.h test/common/huffman.h test/common/hash-str.h test/common/bitstream.h test/common/bufferedreadstream.h test/common/ptr.h test/common/bufferedseekablereadstream.h test/common/tokenizer.h test/common/endian.h test/common/func.h test/common/rendermode.h test/common/stack.h test/common/md5.h test/common/serializer.h test/common/rect.h test/audio/helper.h test/audio/audiostream.h test/audio/raw.h test/audio/timestamp.h
g++ -Wall -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -g -ansi -W -Wno-unused-parameter -Wno-empty-body -pedantic -Wno-long-long -O2 -Wuninitialized -Wno-long-long -Wno-multichar -Wno-unknown-pragmas -Wno-reorder -Wpointer-arith -Wcast-qual -Wshadow -Wnon-virtual-dtor -Wwrite-strings -fno-exceptions -fcheck-new -DHAVE_CONFIG_H -DRELEASE_BUILD -DSDL_BACKEND -DPOSIX -DDATA_PATH=\"/usr/share/scummvm\" -DPLUGIN_DIRECTORY=\"/usr/lib/scummvm\" -DENABLE_SCUMM=STATIC_PLUGIN -DENABLE_SCUMM_7_8 -DENABLE_HE -DENABLE_AGI=STATIC_PLUGIN -DENABLE_AGOS=STATIC_PLUGIN -DENABLE_AGOS2 -DENABLE_CGE=STATIC_PLUGIN -DENABLE_CINE=STATIC_PLUGIN -DENABLE_COMPOSER=STATIC_PLUGIN -DENABLE_CRUISE=STATIC_PLUGIN -DENABLE_DRACI=STATIC_PLUGIN -DENABLE_DRASCULA=STATIC_PLUGIN -DENABLE_DREAMWEB=STATIC_PLUGIN -DENABLE_GOB=STATIC_PLUGIN -DENABLE_GROOVIE=STATIC_PLUGIN -DENABLE_HOPKINS=STATIC_PLUGIN -DENABLE_HUGO=STATIC_PLUGIN -DENABLE_KYRA=STATIC_PLUGIN -DENABLE_LOL -DENABLE_EOB -DENABLE_LURE=STATIC_PLUGIN -DENABLE_MADE=STATIC_PLUGIN -DENABLE_MOHAWK=STATIC_PLUGIN -DENABLE_MORTEVIELLE=STATIC_PLUGIN -DENABLE_NEVERHOOD=STATIC_PLUGIN -DENABLE_PARALLACTION=STATIC_PLUGIN -DENABLE_PEGASUS=STATIC_PLUGIN -DENABLE_QUEEN=STATIC_PLUGIN -DENABLE_SAGA=STATIC_PLUGIN -DENABLE_IHNM -DENABLE_SCI=STATIC_PLUGIN -DENABLE_SKY=STATIC_PLUGIN -DENABLE_SWORD1=STATIC_PLUGIN -DENABLE_SWORD2=STATIC_PLUGIN -DENABLE_TEENAGENT=STATIC_PLUGIN -DENABLE_TINSEL=STATIC_PLUGIN -DENABLE_TOLTECS=STATIC_PLUGIN -DENABLE_TONY=STATIC_PLUGIN -DENABLE_TOON=STATIC_PLUGIN -DENABLE_TOUCHE=STATIC_PLUGIN -DENABLE_TSAGE=STATIC_PLUGIN -DENABLE_TUCKER=STATIC_PLUGIN -DENABLE_VOYEUR=STATIC_PLUGIN -DENABLE_WINTERMUTE=STATIC_PLUGIN -I. -I. -I./engines -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -I/usr/include/freetype2 -I./test/cxxtest -Wno-format -o test/runner test/runner.cpp audio/libaudio.a common/libcommon.a -L/usr/lib/x86_64-linux-gnu -lSDL -lm -lvorbisfile -lvorbis -logg -lFLAC -logg -lmad -lasound -ljpeg -lpng -lz -ltheoradec -lz -lmpeg2 -lfluidsynth -lfreetype -lz -lpng12 -lGL
common/libcommon.a(system.o): In function `instance':
/tmp/buildd/scummvm-1.7.0+dfsg/./common/singleton.h:70: undefined reference to `Common::Singleton<GUI::EventRecorder>::_singleton'
common/libcommon.a(system.o): In function `makeInstance':
/tmp/buildd/scummvm-1.7.0+dfsg/./common/singleton.h:52: undefined reference to `GUI::EventRecorder::EventRecorder()'
common/libcommon.a(system.o): In function `instance':
/tmp/buildd/scummvm-1.7.0+dfsg/./common/singleton.h:71: undefined reference to `Common::Singleton<GUI::EventRecorder>::_singleton'
common/libcommon.a(system.o): In function `getSavefileManager':
/tmp/buildd/scummvm-1.7.0+dfsg/common/system.cpp:165: undefined reference to `GUI::EventRecorder::getSaveManager(Common::SaveFileManager*)'
/tmp/buildd/scummvm-1.7.0+dfsg/common/system.cpp:165: undefined reference to `GUI::EventRecorder::getSaveManager(Common::SaveFileManager*)'
collect2: error: ld returned 1 exit status
test/module.mk:32: recipe for target 'test/runner' failed
make[2] *** [test/runner] Error 1
This appears to be a regression from 1.6.0.
Yes, "make test" doesn't work when you don't pass "--disable-eventrecorder" to configure. It's known and you should really just not use "make test" when building right now. You can also pass "--disable-eventrecorder" to configure since that one is still WIP anyway. Your choice really. Closing as later.
Thanks for your comments. But perhaps "--disable-eventrecorder" should be default if it is work-in-progress? Besides "it's known" (to whom?) also doesn't feel right as there is no README note about it etc.
With "--disable-eventrecorder" there is a following test failure:
"make test" --> BUILD: make test doesn't work OOTBWe only really consider "make test" for developers, we don't expect anyone else to really use it. Thus, we didn't write about this issue anywhere. But, if I can find a nice spot where to put it, I'll add it (probably somewhere on our wiki, but it seems it completely misses out on the unit tests right now...).
Disabling the WIP event recorder would probably cause too much internal discussion, thus I would really like to avoid that.
That's an interesting failure case. It seems it's related to the fact that gcc always uses string pooling with -O2 (maybe others too) but doesn't do it without that. It seems the unit test is simply crazy and wants to make sure it's not the same pointer.... I will look into fixing that. It should however be no issue in reality. Thanks for reporting.
"make test" is useful not only to developers but also to package maintainers (like myself) who run tests automatically in the end of the build process in order to check generated binaries. In Debian it is especially important because we build for many architectures of which only few may be available to maintainer to actually run application.
Thanks again for your quick response and for taking out problematic test.