Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 112638 - mail-filter/bogofilter: parallel make failure with with-included-gsl
Summary: mail-filter/bogofilter: parallel make failure with with-included-gsl
Status: RESOLVED FIXED
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: New packages (show other bugs)
Hardware: x86 Linux
: High normal (vote)
Assignee: Net-Mail Packages
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-11-15 13:18 UTC by Michael Williamson
Modified: 2006-12-09 07:55 UTC (History)
2 users (show)

See Also:
Package list:
Runtime testing required: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Michael Williamson 2005-11-15 13:18:44 UTC
The latest stable version of bogofilter-0.92.8 does not compile if gsl is not 
installed. The error message is:

libbf_gsl.a: File not found.

gsl is not even listed as a dependancy of bogofilter. Further more, bogofilter 
does not compile with the latest stable version of gsl in portage (gsl-1.4). I 
was only able to install bogofilter by installing the unstable gsl-1.7.

Reproducible: Always
Steps to Reproduce:
1. emerge -C gsl bogofilter
2. emerge bogofilter
3.

Actual Results:  
Compilation fails with error:
libbf_gsl.a: File not found.

Expected Results:  
Installed.

Portage 2.0.51.22-r3 (default-linux/x86/2005.0, gcc-3.4.4, glibc-2.3.5-r0, 2.6.
13-gentoo-r2 i686)
=================================================================
System uname: 2.6.13-gentoo-r2 i686 Pentium III (Coppermine)
Gentoo Base System version 1.6.13
distcc 2.18.3 i686-pc-linux-gnu (protocols 1 and 2) (default port 3632) 
[enabled]
ccache version 2.3 [disabled]
dev-lang/python:     2.3.5, 2.4.1-r1
sys-apps/sandbox:    1.2.10
sys-devel/autoconf:  2.13, 2.59-r6
sys-devel/automake:  1.4_p6, 1.5, 1.6.3, 1.7.9-r1, 1.8.5-r3, 1.9.6
sys-devel/binutils:  2.15.92.0.2-r10
sys-devel/libtool:   1.5.18-r1
virtual/os-headers:  2.6.11-r2
ACCEPT_KEYWORDS="x86"
AUTOCLEAN="yes"
CBUILD="i686-pc-linux-gnu"
CFLAGS="-O2 -march=pentium3 -mfpmath=sse -pipe -fomit-frame-pointer"
CHOST="i686-pc-linux-gnu"
CONFIG_PROTECT="/etc /usr/kde/2/share/config /usr/kde/3.4/env /usr/kde/3.4/
share/config /usr/kde/3.4/shutdown /usr/kde/3/share/config /usr/lib/X11/xkb /
usr/lib/mozilla/defaults/pref /usr/share/config /var/qmail/control"
CONFIG_PROTECT_MASK="/etc/gconf /etc/terminfo /etc/env.d"
CXXFLAGS="-O2 -march=pentium3 -mfpmath=sse -pipe -fomit-frame-pointer"
DISTDIR="/usr/portage/distfiles"
FEATURES="autoconfig distcc distlocks sandbox sfperms strict"
GENTOO_MIRRORS="http://distfiles.gentoo.org http://distro.ibiblio.org/pub/Linux/
distributions/gentoo"
LDFLAGS="-Wl,-O1"
MAKEOPTS="-j8"
PKGDIR="/usr/portage/packages"
PORTAGE_TMPDIR="/var/tmp"
PORTDIR="/usr/portage"
PORTDIR_OVERLAY="/usr/local/portage"
SYNC="rsync://rsync.gentoo.org/gentoo-portage"
USE="x86 3dfx X aac acpi alsa apache apache2 apm arts artswrappersuid asm 
audiofile avi bash-completion berkdb bitmap-fonts bonobo bzip2 c++ ccache cdb 
cdinstall cdr cdrom cgi cpudetection crypt css cups curl dbus directfb disk-
cache divx4linux doc dvd dvdr dvdread eds emboss encode esd ethereal exif expat 
ext-doc ext-man ext-openoffice ext-pdf ext-ps ext-rtf ext-xls fam fastcgi ffmpeg 
flac flash foomaticdb fortran ftp gd gdbm gif gimp gimpprint glut gmp gpm 
gstreamer gtk2 gtkhtml guile hal idn imagemagick imap imlib java jpeg junit kde 
kdeenablefinal lcms libg++ libwww lirc lua mad mhash mikmod mmx mng mono motif 
mozilla moznomail mp3 mpeg mysql mythtv ncurses nls nptl odbc ogg oggvorbis on-
the-fly-crypt opengl pam pcre pdflib perl php pic png ppds python qt quicktime 
quotes readline real recode samba sdk sdl spell sql sqlite sse ssl subversion 
svga tcltk tcpd threads tiff transcode truetype truetype-fonts type1-fonts udev 
usb v4l v4l2 visualization voodoo3 vorbis win32codecs xine xinerama xml xml2 
xmms xrandr xv xvid zlib zvbi userland_GNU kernel_linux elibc_glibc"
Unset:  ASFLAGS, CTARGET, LANG, LC_ALL, LINGUAS
Comment 1 Torsten Veller (RETIRED) gentoo-dev 2005-12-11 06:26:57 UTC
Well, you are right the ebuild is not correct. In 0.92.8 gsl is a dependency if
it is present. If it is not present bogofilter links a included gsl version.

But it should never fail. So i don't understand why your compilation failed.

I just commited a new ebuild for 0.92.8 where always the included gsl is used.
If you want please test it. If it fails again i need more input.


If you start using bogofilter go with 1.0.0. It has many fixes and best
upgrading precedure from 0.92.8 to 1.0.0 will include a retraining of the database.
Comment 2 Andrey Falko 2005-12-12 10:56:32 UTC
I tested this just now. Compiles properly with or without gsl. I also checked
that the application launches both ways. Since I am not an official tester yet,
I can't mark "Tested".
Comment 3 Martin von Gagern 2006-12-05 14:45:31 UTC
Same here on ~x86 for mail-filter/bogofilter-1.1.3

Looking at the log, I copy some interesting lines:
./configure ... --with-included-gsl --build=i686-pc-linux-gnu
GSL_LIBS=libbf_gsl.a
i686-pc-linux-gnu-gcc -DBOGOFILTER ... -o bogofilter bogofilter.o main.o \
   libbogofilter.a strlcpy.o strlcat.o /usr/lib/libdb.so libbf_gsl.a -lm
i686-pc-linux-gnu-ar cru libbf_gsl.a libbf_gsl_a-chisq.o ... libbf_gsl_a-minmax.o 
i686-pc-linux-gnu-gcc: libbf_gsl.a: No such file or directory

It looks like internal gsl was configured, even compiled, but while the archive was still being built, another make process tried to link against it. Looks very much like a parallel build issue. The standard workaround of setting MAKEOPTS=-j1 made bogofilter compile for me. But of course this is not a proper fix.

Looking at src/Makefile as it is generated by configure, I see this:
bogofilter$(EXEEXT): $(bogofilter_OBJECTS) $(bogofilter_DEPENDENCIES) 
  @rm -f bogofilter$(EXEEXT)
  $(LINK) $(bogofilter_LDFLAGS) $(bogofilter_OBJECTS) $(bogofilter_LDADD) \
          $(LIBS)

GSL_LIBS is part of bogofilter_LDADD but not bogofilter_DEPENDENCIES. So I'd guess this change to Makefile.am might help:

--- src/Makefile.am 2006-12-05 23:30:20.000000000 +0100
+++ src/Makefile.am 2006-12-05 23:30:20.000000000 +0100
@@ -26,6 +26,7 @@
 ../gsl/sys/pow_int.c ../gsl/sys/minmax.c
 noinst_LIBRARIES += libbf_gsl.a
 libbf_gsl_a_CPPFLAGS= -I$(top_srcdir)
+bogofilter_DEPENDENCIES += libbf_gsl.a
 endif
 
 if USE_GCC4

Of course, if you change that you'd have to rerun autoconf, which I know near to nothing about, so I'll leave this to more experienced devs.

I reported this upstream as
http://sourceforge.net/tracker/index.php?func=detail&aid=1609654&group_id=62265&atid=499997
Comment 4 David Relson 2006-12-05 16:45:35 UTC
The patch, as suggested, causes a complaint of "+=" being used before bogofilter_DEPENDENCIES has been set.  The following patch puts the GSL test after setting bogofilter_DEPENDENCIES thus handling the complaint.  However not having an SMP system I can't test the patch.  

Note: just running "make" will regenerate src/Makefile from src/Makefile.am (without manually running autoconf).

Please let me know if the patch works!

Index: src/Makefile.am
===================================================================
RCS file: /cvsroot/bogofilter/bogofilter/src/Makefile.am,v
retrieving revision 1.141
diff -u -r1.141 Makefile.am
--- src/Makefile.am	30 Nov 2006 00:14:16 -0000	1.141
+++ src/Makefile.am	6 Dec 2006 00:37:33 -0000
@@ -12,22 +12,6 @@
 
 noinst_LIBRARIES = libbogofilter.a
 
-if NEED_GSL
-libbf_gsl_a_CFLAGS=$(AM_CFLAGS) -DRENAMEFILES
-libbf_gsl_a_SOURCES= \
-../gsl/cdf/chisq.c ../gsl/cdf/gamma.c \
-../gsl/specfunc/gamma_inc.c ../gsl/err/error.c \
-../gsl/sys/infnan.c ../gsl/sys/fdiv.c \
-../gsl/specfunc/exp.c ../gsl/specfunc/trig.c \
-../gsl/specfunc/log.c ../gsl/specfunc/psi.c \
-../gsl/specfunc/zeta.c ../gsl/specfunc/elementary.c \
-../gsl/err/stream.c ../gsl/specfunc/expint.c \
-../gsl/specfunc/erfc.c ../gsl/sys/coerce.c \
-../gsl/sys/pow_int.c ../gsl/sys/minmax.c
-noinst_LIBRARIES += libbf_gsl.a
-libbf_gsl_a_CPPFLAGS= -I$(top_srcdir)
-endif
-
 if USE_GCC4
 AM_CPPFLAGS = -iquote$(top_srcdir)/gnugetopt -iquote$(top_srcdir)/trio \
 	      -I$(srcdir) @GSL_CFLAGS@ -I$(top_srcdir)/gsl/specfunc -I$(top_srcdir)
@@ -59,8 +43,27 @@
 bogofilter_LDADD = $(LDADD) $(LIBDB) $(GSL_LIBS)
 bogoutil_LDADD = $(LDADD) $(LIBDB)
 configtest_LDADD = $(LDADD) $(LIBDB)
+bogofilter_DEPENDENCIES = $(LDADD)
+
+if NEED_GSL
+libbf_gsl_a_CFLAGS=$(AM_CFLAGS) -DRENAMEFILES
+libbf_gsl_a_SOURCES= \
+../gsl/cdf/chisq.c ../gsl/cdf/gamma.c \
+../gsl/specfunc/gamma_inc.c ../gsl/err/error.c \
+../gsl/sys/infnan.c ../gsl/sys/fdiv.c \
+../gsl/specfunc/exp.c ../gsl/specfunc/trig.c \
+../gsl/specfunc/log.c ../gsl/specfunc/psi.c \
+../gsl/specfunc/zeta.c ../gsl/specfunc/elementary.c \
+../gsl/err/stream.c ../gsl/specfunc/expint.c \
+../gsl/specfunc/erfc.c ../gsl/sys/coerce.c \
+../gsl/sys/pow_int.c ../gsl/sys/minmax.c
+noinst_LIBRARIES += libbf_gsl.a
+libbf_gsl_a_CPPFLAGS= -I$(top_srcdir)
+bogofilter_DEPENDENCIES += libbf_gsl.a
+endif
 
 EXTRA_PROGRAMS=panicenv
+
 panicenv_SOURCES=panicenv.c
 panicenv_LDADD=$(LIBDB)
 
Comment 5 Torsten Veller (RETIRED) gentoo-dev 2006-12-09 05:26:20 UTC
Martin, does this patch work for you?

I've problems to reproduce the failure. I can see it fail once, twice but then it just works with `MAKEOPTS=-j8 USE=-gsl emerge bogofilter`.
Comment 6 David Relson 2006-12-09 05:51:02 UTC
Torsten and Martin,

Since Torsten's results seem pretty good, I'll commit the change.  If you encounter further problems please experiment with makefile changes and let me know what you learn.

Thanks.
Comment 7 Torsten Veller (RETIRED) gentoo-dev 2006-12-09 07:55:20 UTC
bogofilter-1.1.3 now applies the patch. Closing this bugreport. Please reopen it if there are further problems.

Thanks.