On Sat, Jul 16, 2011 at 04:40:22PM -0400, Jack Howarth wrote: > I have had a report of i386 darwin10 failing to build gcc 4.4.6 in fink > which I've reproduced > myself. The failure looks quite odd... > > /usr/bin/install -c -m 644 ./libiberty.a > /sw/src/fink.build/root-gcc44-4.4.6-1001/sw/lib/gcc4.4/lib/`/sw/src/fink.build/gcc44-4.4.6-1001/darwin_objdir/./gcc/xgcc > -B/sw/src/fink.build/gcc44-4.4.6-1001/darwin_objdir/./gcc/ > -B/sw/lib/gcc4.4/i386-apple-darwin10.8.0/bin/ > -B/sw/lib/gcc4.4/i386-apple-darwin10.8.0/lib/ -isystem > /sw/lib/gcc4.4/i386-apple-darwin10.8.0/include -isystem > /sw/lib/gcc4.4/i386-apple-darwin10.8.0/sys-include -g -O2 > -print-multi-os-directory`/./libiberty.an > mkdir > /sw/src/fink.build/root-gcc44-4.4.6-1001/sw/lib/gcc4.4/share/locale/zh_TW > mkdir > /sw/src/fink.build/root-gcc44-4.4.6-1001/sw/lib/gcc4.4/share/locale/zh_TW/LC_MESSAGES > libtool: install: /usr/bin/install -c .libs/libssp.0.dylib > /sw/src/fink.build/root-gcc44-4.4.6-1001/sw/lib/gcc4.4/lib/x86_64/libssp.0.dylib > libtool: install: (cd > /sw/src/fink.build/root-gcc44-4.4.6-1001/sw/lib/gcc4.4/lib/x86_64 && { ln -s > -f libssp.0.dylib libssp.dylib || { rm -f libssp.dylib && ln -s > libssp.0.dylib libssp.dylib; }; }) > libtool: install: /usr/bin/install -c .libs/libssp.lai > /sw/src/fink.build/root-gcc44-4.4.6-1001/sw/lib/gcc4.4/lib/x86_64/libssp.la > libtool: install: /usr/bin/install -c .libs/libssp.a > /sw/src/fink.build/root-gcc44-4.4.6-1001/sw/lib/gcc4.4/lib/x86_64/libssp.a > ( cd /sw/src/fink.build/root-gcc44-4.4.6-1001/sw/lib/gcc4.4/lib/`gcc -g -O2 > -print-multi-os-directory` ; chmod 644 ./libiberty.an ;ranlib ./libiberty.an ) > libtool: install: chmod 644 > /sw/src/fink.build/root-gcc44-4.4.6-1001/sw/lib/gcc4.4/lib/x86_64/libssp.a > ranlib: file: ./libiberty.an is not an archive > libtool: install: ranlib -c > /sw/src/fink.build/root-gcc44-4.4.6-1001/sw/lib/gcc4.4/lib/x86_64/libssp.a > make[2]: *** [install_to_libdir] Error 1 > make[1]: *** [install-libiberty] Error 2 > make[1]: *** Waiting for unfinished jobs.... > > and only occurs with parallel builds. Is it possible that the command... > > /usr/bin/install -c -m 644 ./libiberty.a > /sw/src/fink.build/root-gcc44-4.4.6-1001/sw/lib/gcc4.4/lib/`/sw/src/fink.build/gcc44-4.4.6-1001/darwin_objdir/./gcc/xgcc > -B/sw/src/fink.build/gcc44-4.4.6-1001/darwin_objdir/./gcc/ > -B/sw/lib/gcc4.4/i386-apple-darwin10.8.0/bin/ > -B/sw/lib/gcc4.4/i386-apple-darwin10.8.0/lib/ -isystem > /sw/lib/gcc4.4/i386-apple-darwin10.8.0/include -isystem > /sw/lib/gcc4.4/i386-apple-darwin10.8.0/sys-include -g -O2 > -print-multi-os-directory`/./libiberty.an > > could be in a race condition with the later command... > > ( cd /sw/src/fink.build/root-gcc44-4.4.6-1001/sw/lib/gcc4.4/lib/`gcc -g -O2 > -print-multi-os-directory` ; chmod 644 ./libiberty.an ;ranlib ./libiberty.an ) > > if so what can be done about this. So far the only work around I've found is > to use the --disable-java-multilib patch ala redhat > which seems to cause this issue to go latant again. Any ideas? > Jack
Also, I assume that this issue is coming from gcc-4.4.6/libiberty/Makefile.in at this section... # This is tricky. Even though CC in the Makefile contains # multilib-specific flags, it's overridden by FLAGS_TO_PASS from the # default multilib, so we have to take CFLAGS into account as well, # since it will be passed the multilib flags. MULTIOSDIR = `$(CC) $(CFLAGS) -print-multi-os-directory` install_to_libdir: all ${mkinstalldirs} $(DESTDIR)$(libdir)/$(MULTIOSDIR) $(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)n ( cd $(DESTDIR)$(libdir)/$(MULTIOSDIR) ; chmod 644 $(TARGETLIB)n ;$(RANLIB) $(TARGETLIB)n ) mv -f $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)n $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB) if test -n "${target_header_dir}"; then \ case "${target_header_dir}" in \ /*) thd=${target_header_dir};; \ *) thd=${includedir}/${target_header_dir};; \ esac; \ ${mkinstalldirs} $(DESTDIR)$${thd}; \ for h in ${INSTALLED_HEADERS}; do \ ${INSTALL_DATA} $$h $(DESTDIR)$${thd}; \ done; \ fi @$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install I'm not very familar with the finer points of adjusting Makefile.in's to be parallel make friendly. What keeps... $(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)n from outrunning the execution of the next command... ( cd $(DESTDIR)$(libdir)/$(MULTIOSDIR) ; chmod 644 $(TARGETLIB)n ;$(RANLIB) $(TARGETLIB)n ) on a multiprocessor machine with parallel make? Jack