Bug 239101 - Generated Makefile for ruby bindings is not parallel safe (breaks net-analyzer/rrdtool)
|
Bug#:
239101
|
Product: Gentoo Linux
|
Version: unspecified
|
Platform: All
|
|
OS/Version: Linux
|
Status: RESOLVED
|
Severity: enhancement
|
Priority: P2
|
|
Resolution: FIXED
|
Assigned To: ruby@gentoo.org
|
Reported By: matsuu@gentoo.org
|
|
Component: Ebuilds
|
|
|
URL:
http://redmine.ruby-lang.org/issues/show/1337
|
|
Summary: Generated Makefile for ruby bindings is not parallel safe (breaks net-analyzer/rrdtool)
|
|
Keywords:
|
|
Status Whiteboard:
|
|
Opened: 2008-09-30 00:19 0000
|
Sometimes net-analyzer/rrdtool parallel make install failed with ruby bindings,
but emerge doesn't failed.
# USE=ruby emerge rrdtool
(snip)
make[4]: Entering directory
`/var/tmp/portage/net-analyzer/rrdtool-1.3.3/work/rrdtool-1.3.3/bindings/ruby'
mkdir -p
/var/tmp/portage/net-analyzer/rrdtool-1.3.3/image//usr/lib64/ruby/site_ruby/1.8/x86_64-linux
/usr/bin/install -c -m 0755 RRD.so
/var/tmp/portage/net-analyzer/rrdtool-1.3.3/image//usr/lib64/ruby/site_ruby/1.8/x86_64-linux
/usr/bin/install: cannot create regular file
`/var/tmp/portage/net-analyzer/rrdtool-1.3.3/image//usr/lib64/ruby/site_ruby/1.8/x86_64-linux':
File exists
make[4]: ***
[/var/tmp/portage/net-analyzer/rrdtool-1.3.3/image//usr/lib64/ruby/site_ruby/1.8/x86_64-linux/RRD.so]
Error 1
make[4]: Leaving directory
`/var/tmp/portage/net-analyzer/rrdtool-1.3.3/work/rrdtool-1.3.3/bindings/ruby'
I think that it should add "-j1" to "emake install".
Portage 2.2_rc11 (!../usr/portage/profiles/default-linux/amd64/2007.0/desktop,
gcc-4.3.1, glibc-2.8_p20080602-r0, 2.6.26-gentoo-r1 x86_64)
=================================================================
System uname:
Linux-2.6.26-gentoo-r1-x86_64-Intel-R-_Core-TM-2_Duo_CPU_L7300_@_1.40GHz-with-glibc2.2.5
Timestamp of tree: Unknown
distcc 2.18.3 x86_64-pc-linux-gnu (protocols 1 and 2) (default port 3632)
[enabled]
ccache version 2.4 [enabled]
app-shells/bash: 3.2_p39
dev-java/java-config: 1.3.7, 2.1.6-r1
dev-lang/python: 2.5.2-r7
dev-python/pycrypto: 2.0.1-r6
dev-util/ccache: 2.4-r7
sys-apps/baselayout: 2.0.0
sys-apps/openrc: 0.2.5
sys-apps/sandbox: 1.2.18.1-r3
sys-devel/autoconf: 2.13, 2.63
sys-devel/automake: 1.5, 1.6.3, 1.7.9-r1, 1.8.5-r3, 1.9.6-r2, 1.10.1-r1
sys-devel/binutils: 2.18-r3
sys-devel/gcc-config: 1.4.0-r4
sys-devel/libtool: 2.2.4
virtual/os-headers: 2.6.26
ACCEPT_KEYWORDS="amd64 ~amd64"
CBUILD="x86_64-pc-linux-gnu"
CFLAGS="-O2 -march=nocona -pipe"
CHOST="x86_64-pc-linux-gnu"
CONFIG_PROTECT="/etc /usr/kde/3.5/env /usr/kde/3.5/share/config
/usr/kde/3.5/shutdown /usr/share/config"
CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/env.d/java/
/etc/eselect/postgresql /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release
/etc/revdep-rebuild /etc/terminfo /etc/udev/rules.d"
CXXFLAGS="-O2 -march=nocona -pipe"
DISTDIR="/usr/portage/distfiles"
FEATURES="autoaddcvs ccache collision-protect cvs distcc distlocks
parallel-fetch preserve-libs protect-owned sandbox sfperms strict test
unmerge-orphans userfetch"
GENTOO_MIRRORS="http://distfiles.gentoo.org
http://distro.ibiblio.org/pub/linux/distributions/gentoo"
LANG="ja_JP.UTF-8"
LDFLAGS=""
LINGUAS="ja"
MAKEOPTS="-j4"
PKGDIR="/usr/portage/packages"
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress
--force --whole-file --delete --stats --timeout=180 --exclude=/distfiles
--exclude=/local --exclude=/packages"
PORTAGE_TMPDIR="/var/tmp"
PORTDIR="/home/matsuu/gentoo-x86"
PORTDIR_OVERLAY="/usr/local/portage /home/matsuu/work/matsuu_overlay/secondlife
/home/matsuu/work/matsuu_overlay/misc /home/matsuu/work/matsuu_overlay/awesome
/home/matsuu/work/matsuu_overlay/processing"
SYNC="cvs://matsuu@cvs.gentoo.org:/var/cvsroot"
USE="X a52 aac acl acpi alsa amd64 anthy apache2 arts avahi bash-completion
berkdb bitmap-fonts cairo ccache cdr cjk cli cracklib crypt cups curl daap dbus
dga dmx dri dvd dvdr dvdread eds emboss encode esd evo fam firefox fortran gdbm
gif glitz gnome gpm gstreamer gtk hal iconv imap immqt-bc ipv6 ipw4965 isdnlog
java jpeg kde kerberos logrotate mad mdnsresponder-compat midi mikmod mmx
mozdevelop mp3 mpeg mudflap ncurses nls nptl nptlonly nsplugin ogg opengl
openmp oss pam pcre pdf perl png pppd python qt3 qt3support qt4 quicktime
readline reflection sdl session spell spl sse sse2 ssl ssse3 svg tcpd tiff
truetype truetype-fonts type1-fonts unicode vorbis wireshark x264 xcb
xcomposite xml xorg xosd xulrunner xv xvid zlib" ALSA_CARDS="hda-intel"
ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file
hooks iec958 ioplug ladspa lfloat linear meter mulaw multi null plug rate route
share shm softvol" ELIBC="glibc" INPUT_DEVICES="mouse keyboard synaptics evdev"
KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001
mtxorb ncurses text" LINGUAS="ja" USERLAND="GNU" VIDEO_CARDS="i810 vesa vga"
Unset: CPPFLAGS, CTARGET, EMERGE_DEFAULT_OPTS, FFLAGS, INSTALL_MASK, LC_ALL,
PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS
Please, attach full build output. -j1 is only workaround which we should avoid
as much as possible...
Please, provide full build output of broken build. I need to see how it
fails...
rrdtool-1.3.3-with-ruby.log is broken build. it has no emerge error, but
/usr/lib64/python2.5/site-packages/rrdtoolmodule.so is not provided.
please check `diff -u rrdtool-1.3.3-with-ruby.log
rrdtool-1.3.3-with-ruby-j1.log`.
This is ruby build problem so this is impossible to fix in rrdtool.
Makefile for ruby bindings is created with
ruby extconf.rb
where extconf.rb is really short file:
========================================
require 'mkmf'
if /linux/ =~ RUBY_PLATFORM
$LDFLAGS += '-Wl,--rpath -Wl,$(EPREFIX)/lib'
elsif /solaris/ =~ RUBY_PLATFORM
$LDFLAGS += '-R$(EPREFIX)/lib'
elsif /hpux/ =~ RUBY_PLATFORM
$LDFLAGS += '+b$(EPREFIX)/lib'
elsif /aix/ =~ RUBY_PLATFORM
$LDFLAGS += '-Wl,-blibpath:$(EPREFIX)/lib'
end
dir_config("rrd","../../src","../../src/.libs")
have_library("rrd", "rrd_create")
create_makefile("RRD")
========================================
Resulted Makefile is not parallel safe...
================================================================
install: install-so ## Not affects install-rb
install-so: $(RUBYARCHDIR)
install-so: $(RUBYARCHDIR)/$(DLLIB)
$(RUBYARCHDIR)/$(DLLIB): $(DLLIB)
$(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR)
$(RUBYARCHDIR):
$(MAKEDIRS) $@
================================================================
So it calls $(RUBYARCHDIR) and $(RUBYARCHDIR)/$(DLLIB) in parallel. From make
file info:
"
One file can be the target of several rules. All the prerequisites
mentioned in all the rules are merged into one list of prerequisites for
the target.
"
So reasons found but this is definitely not rrdtool issue. This is the issue
with ruby 1.8.6_p287-r1.
Ruby is this know issue?
It wasnt' a known issue to the ruby herd. It's not clear to me where the real
problem is. Perhaps ruby's mkmf should write out parallel make safe Makefiles,
but it can only do that if it understands the dependencies.
In any case I think some investigation into the ruby side of things is needed
first.
So, rather than forcing -j1 on everybody, can we "fix" rrdtool's ebuild to only
use -j1 if USE=ruby, or, even better... simply patch the generated Makefile
after it's been created?
(In reply to comment #9)
> So, rather than forcing -j1 on everybody, can we "fix" rrdtool's ebuild to
> only use -j1 if USE=ruby
Since this issue affects only 'make install' do you think it's worth additional
logic in ebuild?
(In reply to comment #10)
> http://redmine.ruby-lang.org/attachments/download/338
MATSUU, these are really great news. Thank you for localizing and fixing this
issue.
@ruby: Could you backport patch, please? :)
(In reply to comment #11)
> @ruby: Could you backport patch, please? :)
>
Fixed in ruby-1.8.6_p287-r13.ebuild, ruby-1.8.7_p72-r11.ebuild and
ruby-1.9.1-r1.ebuild. Built rrdtool successfully against it multiple times.
Thanks everyone!