[arch-haskell] Codec-Image-DevIL, Arch Linux,
haskell-codec-image-devil
Gregory D. Weber
gdweber at iue.edu
Fri Mar 26 16:37:09 EDT 2010
I. Problem: Codec-Image-DevIL 0.1 and 0.2.0 will not build on Arch Linux
A. Attempted installation from Arch User Repository (AUR)
I attempted to install the package
haskell-codec-image-devil 0.2.0-2
(http://aur.archlinux.org/packages.php?ID=18919)
with bauerbill:
$ bauerbill --aur -Sy haskell-codec-image-devil
...
==> Starting build()...
Configuring Codec-Image-DevIL-0.2.0...
Setup: Missing dependency on a foreign library:
* Missing C library: IL
This problem can usually be solved by installing the system package that
provides this library (you may need the "-dev" version). If the library is
already installed but in a non-standard location then you can use the flags
--extra-include-dirs= and --extra-lib-dirs= to specify where it is.
==> ERROR: Build Failed.
Aborting...
ERROR: makepkg exited with an error (512)
ERROR: no package found: /tmp/bauerbill/build/aur/haskell-codec-image-devil/haskell-codec-image-devil-0.2.0-2-x86_64.pkg.tar.gz
$
The error message "Missing C library: IL" is incorrect:
the Arch 'devil' package
is installed, and the include and library files are present in
the normal locations:
$ pacman -Q devil
devil 1.7.8-6
$ ls /usr/include/IL
devil_cpp_wrapper.hpp il.h ilu.h ilu_region.h ilut.h
$ ls /usr/lib/*IL*
/usr/lib/libIL.a /usr/lib/libILU.a /usr/lib/libILUT.a
/usr/lib/libIL.so@ /usr/lib/libILU.so@ /usr/lib/libILUT.so@
/usr/lib/libIL.so.1@ /usr/lib/libILU.so.1@ /usr/lib/libILUT.so.1@
/usr/lib/libIL.so.1.1.0* /usr/lib/libILU.so.1.1.0* /usr/lib/libILUT.so.1.1.0*
B. Attempted installation from Hackage
Trying to install either version 0.1 or 0.2.0 from Hackage
yields essentially the same result:
$ runghc Setup configure
Configuring Codec-Image-DevIL-0.2.0...
Setup: Missing dependency on a foreign library:
* Missing C library: IL
This problem can usually be solved by installing the system package that
provides this library (you may need the "-dev" version). If the library is
already installed but in a non-standard location then you can use the flags
--extra-include-dirs= and --extra-lib-dirs= to specify where it is.
$
C. Missing comment on AUR package page
Incidentally -- I'm pretty sure I posted a comment reporting
the problem earlier this month (March 2010) on
http://aur.archlinux.org/packages.php?ID=18919
-- but the comment seems to have disappeared.
Or maybe I'm not going through the right hoops to view
comments -- I remember having that trouble before,
but can't remember the solution.
II. Solution
There seem to be two errors, one involving Codec-Image-DevIL
and one involving Cabal. I have solutions for the first,
but not the second.
A. Fixing Codec-Image-DevIL
1. Quick fix:
Edit Codec-Image-DevIL.cabal and replace the line
Extra-Libraries: IL
with one of the following (take your choice):
Extra-Libraries: IL, pthread
Extra-Libraries: IL, rt
Extra-Libraries: IL, pthread, rt
These all work in Arch Linux, and they also work (though they are not
needed) in Fedora 10.
2. How I discovered this:
I wrote a small C program that calls a few DevIL functions
(such as ilInit, ilLoadImage) just to demonstrate that they are
truly there.
Compiling and linking with -lIL failed:
$ gcc -o ctestil -lIL ctestil.o
/usr/lib/libIlmThread.so.6: undefined reference to `sem_init'
/usr/lib/libIlmThread.so.6: undefined reference to `sem_destroy'
/usr/lib/libIlmThread.so.6: undefined reference to `pthread_create'
/usr/lib/libIlmThread.so.6: undefined reference to `sem_post'
/usr/lib/libIlmThread.so.6: undefined reference to `sem_trywait'
/usr/lib/libIlmThread.so.6: undefined reference to `sem_getvalue'
/usr/lib/libIlmThread.so.6: undefined reference to `sem_wait'
/usr/lib/libIlmThread.so.6: undefined reference to `pthread_join'
collect2: ld returned 1 exit status
Reading 'man sem_init', I found the statement
"Link with -lrt or -pthread." Sure enough, both of these
worked:
$ gcc -o ctestil -lIL -lrt ctestil.o
$ gcc -o ctestil -lIL -pthread ctestil.o
B. Whether to fix Cabal?
But why is Cabal spuriously reporting the absence of libIL?
It is an error, isn't it?
I have the impression, formed from browsing around on
http://hackage.haskell.org/trac/hackage/, that in the
configuration step, when Cabal sees the line
Extra-Libraries: IL
it writes a small C program that tries to include that library,
and reports the library is missing if there's an error
in compiling it. Maybe Cabal needs to interpret the
C compiler's error messages more carefully.
Greg
--
___ ___ __ _
/ _ \ / _ \| | | | Gregory D. Weber, Associate Professor
/ /_\// / | | | /\ | | Indiana University East
/ /_\\/ /__| | |/ \| | http://mypage.iu.edu/~gdweber/
\____/\_____/\___/\__/ Tel. (765) 973-8420; FAX (765) 973-8550
More information about the arch-haskell
mailing list