2025-07-21 21:12 CEST

View Issue Details Jump to Notes ]
IDProjectCategoryView StatusLast Update
0003039Spring engineLinuxpublic2012-05-04 11:46
Reporterdfreeman 
Assigned Toabma 
PrioritynormalSeverityblockReproducibilityalways
StatusresolvedResolutionno change required 
Product Version88.0 
Target VersionFixed in Version 
Summary0003039: 88 fails to build under Linux with devil 1.7.8
DescriptionFails to build with the following output. I built devil-1.7.8 myself.

--------8<--------8<--------8<--------8<--------

[ 51%] Building CXX object rts/builds/default/CMakeFiles/engine-default.dir/__/__/ExternalAI/SkirmishAIWrapper.cpp.o
Linking CXX executable ../../../spring
/usr/local/lib64/libIL.so: undefined reference to `png_set_gray_1_2_4_to_8'
collect2: ld returned 1 exit status
make[2]: *** [spring] Error 1
make[1]: *** [rts/builds/default/CMakeFiles/engine-default.dir/all] Error 2
make: *** [all] Error 2
TagsNo tags attached.
Checked infolog.txt for Errors
Attached Files

-Relationships
+Relationships

-Notes

~0008522

abma (administrator)

Last edited: 2012-03-27 12:53

/usr/local/ ?


this looks like some broken self-compiled lib-devil?!

either remove this lib or recompile should fix it i guess...

~0008526

dfreeman (reporter)

I did say I built it myself. I didn't find a package for openSUSE 12.1.

Here is the configure output for devIL. It doesn't look like it should be broken.

--------8<--------8<--------8<--------8<---------

configure: loading site script /usr/share/site/x86_64-unknown-linux-gnu
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for a sed that does not truncate output... /usr/bin/sed
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for fgrep... /usr/bin/grep -F
checking for ld used by gcc... /usr/x86_64-suse-linux/bin/ld
checking if the linker (/usr/x86_64-suse-linux/bin/ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
checking the name lister (/usr/bin/nm -B) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 1572864
checking whether the shell understands some XSI constructs... yes
checking whether the shell understands "+="... yes
checking for /usr/x86_64-suse-linux/bin/ld option to reload object files... -r
checking how to recognize dependent libraries... pass_all
checking for ar... ar
checking for strip... strip
checking for ranlib... ranlib
checking command to parse /usr/bin/nm -B output from gcc object... ok
checking how to run the C preprocessor... gcc -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC -DPIC
checking if gcc PIC flag -fPIC -DPIC works... yes
checking if gcc static flag -static works... no
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/usr/x86_64-suse-linux/bin/ld -m elf_x86_64) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for style of include used by make... GNU
checking dependency style of gcc... gcc3
checking build system type... (cached) x86_64-unknown-linux-gnu
checking host system type... (cached) x86_64-unknown-linux-gnu
checking whether gcc and cc understand -c and -o together... yes
checking for g++... g++
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking whether we are using the GNU C++ compiler... (cached) yes
checking whether g++ accepts -g... (cached) yes
checking dependency style of g++... gcc3
checking how to run the C++ preprocessor... g++ -E
checking for ld used by g++... /usr/x86_64-suse-linux/bin/ld -m elf_x86_64
checking if the linker (/usr/x86_64-suse-linux/bin/ld -m elf_x86_64) is GNU ld... yes
checking whether the g++ linker (/usr/x86_64-suse-linux/bin/ld -m elf_x86_64) supports shared libraries... yes
checking for g++ option to produce PIC... -fPIC -DPIC
checking if g++ PIC flag -fPIC -DPIC works... yes
checking if g++ static flag -static works... no
checking if g++ supports -c -o file.o... yes
checking if g++ supports -c -o file.o... (cached) yes
checking whether the g++ linker (/usr/x86_64-suse-linux/bin/ld -m elf_x86_64) supports shared libraries... yes
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking dependency style of g++... (cached) gcc3
checking whether make sets $(MAKE)... (cached) yes
checking whether byte ordering is bigendian... no
checking restrict keyword... no
checking Altivec... no
checking SSE... yes
checking SSE2... yes
checking SSE3... yes
checking x86... no
checking x86_64... yes
checking ppc... no
checking for valloc... yes
checking for posix_memalign... yes
checking for memalign... yes
checking mm_malloc.h usability... yes
checking mm_malloc.h presence... yes
checking for mm_malloc.h... yes
checking zlib.h usability... yes
checking zlib.h presence... yes
checking for zlib.h... yes
checking for main in -lz... yes
checking for main in -lm... yes
checking whether we would like to have support for blp format... yes
checking whether we would like to have support for bmp format... yes
checking whether we would like to have support for dcx format... yes
checking whether we would like to have support for dds format... yes
checking whether we would like to have support for dicom format... yes
checking whether we would like to have support for doom format... yes
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for OPENEXR... no
checking whether we would like to have support for exr format... no
checking whether we would like to have support for fits format... yes
checking whether we would like to have support for gif format... yes
checking whether we would like to have support for hdr format... yes
checking whether we would like to have support for icns format... yes
checking whether we would like to have support for icon format... yes
checking whether we would like to have support for iff format... yes
checking whether we would like to have support for ilbm format... yes
checking whether we would like to have support for iwi format... yes
checking jpeglib.h usability... yes
checking jpeglib.h presence... yes
checking for jpeglib.h... yes
checking for main in -ljpeg... yes
checking whether we would like to have support for jpeg format... yes
checking jasper/jasper.h usability... no
checking jasper/jasper.h presence... no
checking for jasper/jasper.h... no
checking for jasper/jasper.h... (cached) no
checking whether we would like to have support for jp2 format... no
checking for main in -llcms... no
checking lcms/lcms.h usability... no
checking lcms/lcms.h presence... no
checking for lcms/lcms.h... no
checking lcms.h usability... no
checking lcms.h presence... no
checking for lcms.h... no
checking whether we would like to have support for lcms format... no
checking whether we would like to have support for lif format... yes
checking whether we would like to have support for mdl format... yes
checking libmng.h usability... no
checking libmng.h presence... no
checking for libmng.h... no
checking whether we would like to have support for mng format... no
checking whether we would like to have support for mp3 format... yes
checking whether we would like to have support for pcx format... yes
checking whether we would like to have support for pcd format... yes
checking whether we would like to have support for pic format... yes
checking whether we would like to have support for pix format... yes
checking png.h usability... yes
checking png.h presence... yes
checking for png.h... yes
checking for main in -lpng12... no
checking for png.h... (cached) yes
checking for main in -lpng... yes
checking whether we would like to have support for png format... yes
checking whether we would like to have support for pnm format... yes
checking whether we would like to have support for psd format... yes
checking whether we would like to have support for psp format... yes
checking whether we would like to have support for pxr format... yes
checking whether we would like to have support for raw format... yes
checking whether we would like to have support for rot format... yes
checking whether we would like to have support for sgi format... yes
checking whether we would like to have support for sun format... yes
checking whether we would like to have support for texture format... yes
checking whether we would like to have support for tga format... yes
checking tiffio.h usability... no
checking tiffio.h presence... no
checking for tiffio.h... no
checking whether we would like to have support for tiff format... no
checking whether we would like to have support for tpl format... yes
checking whether we would like to have support for utx format... yes
checking whether we would like to have support for vtf format... yes
checking whether we would like to have support for wal format... yes
checking whether we would like to have support for wbmp format... yes
checking whether we would like to have support for wdp format... yes
checking whether we would like to have support for xpm format... yes
checking squish.h usability... no
checking squish.h presence... no
checking for squish.h... no
checking nvtt/nvtt.h usability... no
checking nvtt/nvtt.h presence... no
checking for nvtt/nvtt.h... no
checking for X... libraries /usr/lib64, headers
checking for the pthreads library -lpthreads... no
checking whether pthreads work without any flags... no
checking whether pthreads work with -Kthread... no
checking whether pthreads work with -kthread... no
checking for the pthreads library -llthread... no
checking whether pthreads work with -pthread... yes
checking for joinable pthread attribute... PTHREAD_CREATE_JOINABLE
checking if more special flags are required for pthreads... no
checking whether -R must be followed by a space... neither works
checking for gethostbyname... yes
checking for connect... yes
checking for remove... yes
checking for shmat... yes
checking for IceConnectionNumber in -lICE... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: creating lib/Makefile
config.status: creating bin/Makefile
config.status: creating test/Makefile
config.status: creating docs/Makefile
config.status: creating data/Makefile
config.status: creating data/IL.pc
config.status: creating data/ILU.pc
config.status: creating data/ILUT.pc
config.status: creating test/format_test/format_checks.sh
config.status: creating include/IL/config.h
config.status: include/IL/config.h is unchanged
config.status: executing libtool commands
config.status: executing depfiles commands
configure: +----------------------------------------+
configure: \| IL library Supported formats \|
configure: +----------------------------------------+-------+
configure: BLP BMP DCX DDS DICOM WAD FITS GIF HDR ICNS ICON IFF ILBM IWI JPG LIF MDL MP3 PCX PCD PIC PIX PNG PNM PSD PSP PXR RAW ROT SGI SUN TEXTURE TGA TPL UTX VTF WAL WBMP WDP XPM
configure: +----------------------------------------+
configure: \| IL library External libraries \|
configure: +----------------------------------------+-------+
configure: Required libs: OpenEXR libjpeg libpng
configure: +----------------------------------------+
configure: \| ILU part disabled \|
configure: +----------------------------------------+-------+
configure: Pass --enable-ILU option to the configure script if you want to build ILU
configure: +----------------------------------------+
configure: \| ILUT part disabled \|
configure: +----------------------------------------+-------+
configure: Pass --enable-ILUT option to the configure script if you want to build ILUT
configure: +----------------------------------------+
configure: \| Detected Machine Extensions \|
configure: +----------------------------------------+-------+
configure: SSE SSE2 SSE3 X86_64_ASM
configure: +----------------------------------------+
configure: \| Not building any examples \|
configure: +----------------------------------------+-------+
configure: Pass --with-examples option to the configure script if you want to build examples.
configure: +----------------------------------------+

~0008527

Kloot (developer)

GOOGLE it before dumping your libIL problems on us: http://sourceforge.net/tracker/index.php?func=detail&aid=3400745&group_id=4470&atid=104470

~0008602

dfreeman (reporter)

I thought it was a bug in Spring since I hadn't changed anything since v85 which compiled successfully. And if not a bug in Spring, I thought it would be useful for the developers to receive this feedback that it doesn't build on a major Linux distribution.

I have finally solved the problem, and I'd like to share it if you don't mind.

Under OpenSUSE 12.1, you can build and install the latest devil (1.7.8). But you must also have the package "libpng12-compat-devel" installed in order to link against the built library. You don't get any errors until trying to link against it. This package provides a symlink that allows the library to link against libpng version 1.2 instead of 1.4 which is typically also installed. (The latest devil is not compatible with libpng 1.4 due to removal of a deprecated function.)

In my case, I must have installed libpng14-compat-devel (which removes libpng12-compat-devel) AFTER successfully building devil/Spring85. In this case, Spring88 would not link against the already successfully used devil, because the symlink now points to libpng 1.4.

I recommend mentioning this issue in the release notes for building the source. I expect similar things happen on other platforms that are migrating to newer versions of libpng, until devil is fixed. Since it happens AFTER building devil, it may also affect users of packaged binaries if the dependencies specify libpng >= 1.2.

~0008603

hoijui (reporter)

in short: you compiled spring against devil headers that are incompatible with the actual library beeing used. that was my first though when i saw the error message alone. i can not see why it should be mentioned in spring ... anywhere.
its a user or distro failure, and the ocmpile error gives a good enough hint on what might be the problem.

~0008605

dfreeman (reporter)

I'm sorry to reopen this, but I don't have permission to comment otherwise.

No, I didn't compile Spring against devil headers that are incompatible with the devil library being used. I compiled Spring against the devil headers that match the binary of devil being used.

It was devil that was compiled against a version of libpng that was different from where the symlink to libpng was pointing. The symlink was changed AFTER Spring 85 was built, so Spring 85 continued to work (I suppose either the fully resolved libpng path is encoded into the Spring binary, or it's statically linked). But Spring 88 could not be built.

Essentially nothing else changed - only the symlink to libpng. And since I hadn't changed this on purpose, it looked like a problem with the Spring 88 source.

~0008606

dfreeman (reporter)

Reality check. You are linking against a library that hasn't been maintained since 2009-03-08, and whose maintainer admits to having no time to work on it since then. You expect me to take this up with somebody else, but there is nobody working on the library to fix or to document this.

I'm only building DevIL for Spring; no other software on my system is using DevIL. (SUSE don't ship DevIL any more.) From my point of view, DevIL is a subcomponent of Spring, albeit a shared one.

You can blame other people if you like. But the reality is that the combination of Spring/DevIL isn't compatible with the latest libpng that is being shipped by free software distributions, and that means that Spring isn't compatible with the latest distributions either. It's not your fault, it's not your job to fix it, but you could at least mention it.

Even better, you could perhaps release a modified DevIL and put it next to the Spring source where it will be easily found. Or it could go into the Spring source tree until DevIL is maintained once again.

~0008609

jK (developer)

Last edited: 2012-04-15 01:16

http://pkgs.org/opensuse-12.1/opensuse-games-i586/deutex-4.4.902-3.1.i586.rpm.html
last update is from February

Oops wrong link, as abma said I meant http://pkgs.org/opensuse-12.1/opensuse-games-i586/DevIL-devel-1.7.8-9.4.i586.rpm.html

~0008610

abma (administrator)

its http://pkgs.org/opensuse-12.1/opensuse-games-i586/DevIL-devel-1.7.8-9.4.i586.rpm.html and that date is last change from the opensuse packagers...

and last update at the homepage of devil is from 2009:

http://sourceforge.net/projects/openil/files/DevIL/

svn repo is quiet old, too:
http://openil.svn.sourceforge.net/viewvc/openil/

(don't know if there is a different/more up to date repo)

~0008627

abma (administrator)

hm, including devil into spring makes imo no sense. Including libs into spring should be avoided if possible.

it seems like libpng was updated and devil would require a update then too... -> bug / problem with opensuses libdevil.

to get this fixed, please report this bug to the opensuse guys to update libdevil. (maybe its already fixed?!)

~0008634

dfreeman (reporter)

JK, you're right. Thanks for pointing out that DevIL is in the openSUSE games repo. When I couldn't find it in the main distribution I didn't know about the games repo. Perhaps it got moved.

The official location is here:
download.opensuse.org/repositories/games/openSUSE_12.1/

Of course it makes much more sense to open an issue with the distro if they are still maintaining it - but there's probably no need since they ship both versions of libpng and the DevIL package will have the right dependencies. They'll only have to modify DevIL if they ever stop shipping the older libpng.

Anyway thanks for the resolution. I still hope this will be mentioned in the build instructions, it only takes a few bytes and somebody else will come across this as distros update their libpng. Or DevIL will break in some other way as it's not maintained.

~0008659

abma (administrator)

Last edited: 2012-05-04 11:46

@dfreeman:

i don't know where its best to write it down:

http://springrts.com/wiki/OpenSUSE_install
or
http://en.opensuse.org/Spring

(imo just write it down)

+Notes

-Issue History
Date Modified Username Field Change
2012-03-27 12:49 dfreeman New Issue
2012-03-27 12:52 abma Note Added: 0008522
2012-03-27 12:52 abma Status new => feedback
2012-03-27 12:53 abma Note Edited: 0008522
2012-03-27 17:17 dfreeman Note Added: 0008526
2012-03-27 17:22 Kloot Note Added: 0008527
2012-03-27 17:22 Kloot Status feedback => closed
2012-03-27 17:22 Kloot Resolution open => no change required
2012-04-12 09:53 dfreeman Note Added: 0008602
2012-04-12 09:53 dfreeman Status closed => feedback
2012-04-12 09:53 dfreeman Resolution no change required => reopened
2012-04-12 19:14 hoijui Note Added: 0008603
2012-04-12 20:11 abma Status feedback => resolved
2012-04-12 20:11 abma Resolution reopened => not fixable
2012-04-12 20:11 abma Assigned To => abma
2012-04-13 16:02 dfreeman Note Added: 0008605
2012-04-13 16:02 dfreeman Status resolved => feedback
2012-04-13 16:02 dfreeman Resolution not fixable => reopened
2012-04-13 16:46 dfreeman Note Added: 0008606
2012-04-14 16:27 jK Note Added: 0008609
2012-04-14 16:28 jK Note Edited: 0008609
2012-04-15 01:12 abma Note Added: 0008610
2012-04-15 01:16 jK Note Edited: 0008609
2012-04-16 13:19 abma Note Added: 0008627
2012-04-16 13:19 abma Status feedback => resolved
2012-04-16 13:19 abma Resolution reopened => no change required
2012-04-21 12:22 dfreeman Note Added: 0008634
2012-04-21 12:22 dfreeman Status resolved => feedback
2012-04-21 12:22 dfreeman Resolution no change required => reopened
2012-05-04 11:46 abma Note Added: 0008659
2012-05-04 11:46 abma Status feedback => resolved
2012-05-04 11:46 abma Resolution reopened => no change required
2012-05-04 11:46 abma Note Edited: 0008659
+Issue History