On Sun, Jun 11, 2006 at 04:33:05PM +0200, Steinar H. Gunderson wrote:
>   chmod 644 debian/tmp/usr/lib/bigloo/2.7a/*
>   find debian/tmp -name '*.css' | xargs chmod 644
>   chmod: missing operand after `644'
> 
> I'll investigate, but this seems rather odd to me.

The only .css file that is supposed to be in debian/tmp/ comes from
bde/bmem/, but for some reason, make consistently just ignores bde/bmem/.
Some investigation of bde/Makefile reveals:

dobmem:
        @ if [ "$(LDPRELOADSUPPORT)" = "yes" ]; then \
            (cd bmem && $(MAKE)) || exit 1; \
          fi

I might not be the biggest fan of this kind of hiding stuff from the build
log. Anyhow, simple testing indicates that LDPRELOADSUPPORT is simply "no" on
my amd64 machine. And why is this? The output from the earlier buildd logs
contains:
  
  nanosleep: yes
  normal sleep: no
  shared library: yes
  ld preload: yes
  dlopen: yes [-ldl]

but on my amd64 machine, I get

  nanosleep: yes
  normal sleep: no
  shared library: no (because I don't know ld option)
  dlopen: yes [-ldl]

Not good, not good. (I might add that a build system signalling "can't build
shared libraries" by "no .css files" might not be perceived as very robust,
though! :-) ) More tracing leads to the following invocation from configure:

  ./autoconf/ldshare --user=root --tmp=/tmp --cc=gcc --ld=ld --ldopt=
  --ldlibs=-lc --sharedsuffix=so

which seems to do a test if it can compile a shared library, using a command
line that boils down to this:

  + ld -shared -o actestroot.so actestroot-lib.o -lc
  ld: actestroot-lib.o: relocation R_X86_64_32 against `a local symbol' can
  not be used when making a shared object; recompile with -fPIC
  actestroot-lib.o: could not read symbols: Bad value

In other words, it fails due to missing -fPIC on compiling a C library. But
the build logs seem to indicate that it can indeed use -fPIC; but for some
reason, on my amd64, it adds -DBGL_NO_PIC instead of -fPIC. More delving into
the configure system indicates that this is governed by a "$cpicflags". This
is by default "demanded" and then attempted figured out by the following
evilness:

  # The -pic C compiler options
  if [ "$cpicflags" = "no" ]; then
    cpicflags=""
  else
    if [ "$ldopt" = "no-share" ]; then
      cpicflags=""   [later gets changed to -DBGL_NO_PIC]
    else
      [stuff to run autoconf/ccpic here]

Full circle -- it sets ldopt="no-share" because it fails due to missing
-fPIC, and it won't add -fPIC since ldopt is "no-share".

It seems to be the best thing to do would be to help it on its way, and set
cpicflags="-fPIC" from the start. Now, this is already done in debian/rules
for arm:

  ARCH=$(shell dpkg-architecture -qDEB_BUILD_ARCH)
  ifeq (${ARCH},arm)
  #CC=gcc-3.2
  EXTRA_CONFIG_FLAGS += --coflags=-O2 --cpicflags=-fPIC
  else
  #CC=gcc
  endif

Makes me wonder why it's not default, if it's a known problem. Simply
removing the if test and always send -fPIC seems to be the most sane solution
to me. Any objections?

/* Steinar */
-- 
Homepage: http://www.sesse.net/


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to