In the mean time, the other patch #766877 was merged into experimental.
Time to review this bug. Unfortunately, the original submission lacks
details on what problems are being solved, so assessing the solutions is
difficult and I do not understand all the aspects.

| diff -urN debian/rules /usr/src/glibc/debian/rules
| --- debian/rules      2015-03-18 11:08:54.000000000 +0000
| +++ /usr/src/glibc/debian/rules       2015-05-10 07:31:39.000000000 +0000
| @@ -140,8 +140,12 @@
|  endif
|  endif
|  
| +ifeq ($(DEB_STAGE),stage2)
| +  DEB_BUILD_PROFILES+=stage2
| +endif
| +

Do we still want to support DEB_STAGE or DEB_BUILD_PROFILE? Maybe we can
just remove support for these variables in 2.21 entirely?

|  ifneq ($(filter stage1,$(DEB_BUILD_PROFILES)),)
| -  DEB_ARCH_REGULAR_PACKAGES = $(libc)-dev
| +  DEB_ARCH_REGULAR_PACKAGES = $(libc)-dev $(libc)

I still disagree with this approach. The underlying problem is that
currently the resulting libc-dev packages from stage1 cannot be
installed, because they depend on libc packages that are not built in
stage1. I think that generating empty libc packages is wrong and that
the dependencies should be dropped in stage1 instead.

|    DEB_INDEP_REGULAR_PACKAGES = 
|    DEB_UDEB_PACKAGES = 
|  else
| diff -urN debian/rules.d/build.mk /usr/src/glibc/debian/rules.d/build.mk
| --- debian/rules.d/build.mk   2015-03-19 20:28:42.000000000 +0000
| +++ /usr/src/glibc/debian/rules.d/build.mk    2015-05-10 07:31:39.000000000 
+0000
| @@ -160,10 +160,19 @@
|           cross-compiling=yes install_root=$(CURDIR)/debian/tmp-$(curpass)    
\
|           install-bootstrap-headers=yes install-headers )
|  
| -     install -d $(CURDIR)/debian/tmp-$(curpass)/lib
| -     install -m 644 $(DEB_BUILDDIR)/csu/crt[1in].o 
$(CURDIR)/debian/tmp-$(curpass)/lib
| -     ${CC} -nostdlib -nostartfiles -shared -x c /dev/null \
| -             -o $(CURDIR)/debian/tmp-$(curpass)/lib/libc.so
| +     install -d $(CURDIR)/debian/tmp-$(curpass)/$(call xx,libdir)
| +     install -m 644 $(DEB_BUILDDIR)/csu/crt[1in].o 
$(CURDIR)/debian/tmp-$(curpass)/$(call xx,libdir)
| +     $(call xx,CC) -nostdlib -nostartfiles -shared -x c /dev/null \
| +             -o $(CURDIR)/debian/tmp-$(curpass)/$(call xx,libdir)/libc.so

Fixed in experimental.

| +     if [ $(curpass) = libc ]; then \
| +       mkdir -p debian/tmp-$(curpass)/usr/include/$(DEB_HOST_MULTIARCH); \
| +       mv debian/tmp-$(curpass)/usr/include/bits 
debian/tmp-$(curpass)/usr/include/$(DEB_HOST_MULTIARCH); \
| +       mv debian/tmp-$(curpass)/usr/include/gnu 
debian/tmp-$(curpass)/usr/include/$(DEB_HOST_MULTIARCH); \
| +       mv debian/tmp-$(curpass)/usr/include/sys 
debian/tmp-$(curpass)/usr/include/$(DEB_HOST_MULTIARCH); \
| +       mv debian/tmp-$(curpass)/usr/include/fpu_control.h 
debian/tmp-$(curpass)/usr/include/$(DEB_HOST_MULTIARCH); \
| +       mv debian/tmp-$(curpass)/usr/include/a.out.h 
debian/tmp-$(curpass)/usr/include/$(DEB_HOST_MULTIARCH); \
| +       mv debian/tmp-$(curpass)/usr/include/ieee754.h 
debian/tmp-$(curpass)/usr/include/$(DEB_HOST_MULTIARCH); \
| +     fi

I would appreciate an explanation on what problem this hunk solves.

|  else
|       : # FIXME: why just needed for ARM multilib?
|       case "$(curpass)" in \
| diff -urN debian/rules.d/debhelper.mk 
/usr/src/glibc/debian/rules.d/debhelper.mk
| --- debian/rules.d/debhelper.mk       2015-03-19 22:15:39.000000000 +0000
| +++ /usr/src/glibc/debian/rules.d/debhelper.mk        2015-05-10 
12:12:25.937141495 +0000
| @@ -109,7 +109,8 @@
|       ./debian/shlibs-add-udebs $(curpass)
|  
|       dh_installdeb -p$(curpass)
| -     dh_shlibdeps -p$(curpass)
| +     [ -n "$$(echo $(curpass) | grep 'mips32')" ] && 
o32_libs="-l$(CURDIR)/debian/$(curpass)/libo32/"; \
| +        dh_shlibdeps $$o32_libs  -p$(curpass)

Why does this special case mips32? Would it be possible to solve this
issue for more architectures by relying on slibdir instead?

|       dh_gencontrol -p$(curpass)
|       if [ $(curpass) = nscd ] ; then \
|               sed -i -e "s/\(Depends:.*libc[0-9.]\+\)-[a-z0-9]\+/\1/" 
debian/nscd/DEBIAN/control ; \
| @@ -179,7 +180,7 @@
|  
|       # Generate common substvars files.
|       : > tmp.substvars
| -ifeq ($(filter stage2,$(DEB_BUILD_PROFILES)),)
| +ifeq ($(filter stage1 stage2,$(DEB_BUILD_PROFILES)),)
|       echo 'libgcc:Depends=libgcc1 [!hppa !m68k], libgcc2 [m68k], libgcc4 
[hppa]' >> tmp.substvars
|  endif

The gcc stage2 (which can be built with glibc stage1 packages) includes
libgccN packages. Thus the dependency is satisfiable in stage2. Dropping
it here should not be necessary and I think it also is wrong.

|  
| @@ -197,9 +198,20 @@
|       slibdir=$(call xx,slibdir) ; \
|       rtlddir=$(call xx,rtlddir) ; \
|       curpass=$(curpass) ; \
| -     templates="libc-dev" ;\
| -     pass="" ; \
| -     suffix="" ;\
| +     templates="libc-dev" ; \
| +     case "$$curpass:$$slibdir" in \
| +       libc:*) \
| +         suffix="" \
| +         pass="" \
| +         ;; \
| +       *:/lib32 | *:/lib64 | *:/libo32 | *:/libx32 | 
*:/lib/arm-linux-gnueabi*) \
| +         suffix="-$(curpass)" \
| +         pass="-alt" \
| +         ;; \
| +       *:*) \
| +         templates="" ; \
| +         ;; \
| +     esac ; \
|       for t in $$templates ; do \
|         for s in debian/$$t$$pass.* ; do \
|           t=`echo $$s | sed -e "s#libc\(.*\)$$pass#$(libc)\1$$suffix#"` ; \
| @@ -210,10 +222,11 @@
|           sed -e "s#RTLDDIR#$$rtlddir#g" -i $$t; \
|           sed -e "s#SLIBDIR#$$slibdir#g" -i $$t; \
|           sed -e "s#LIBDIR#$$libdir#g" -i $$t; \
| +         sed -e "s#MULTIARCHDIR#$$DEB_HOST_MULTIARCH#g" -i $$t ; \
|         done ; \
| -     done
| +     done; \
| +     sed -e "/.*.a /d" -i debian/$(libc)-dev$$suffix.install
|  
| -     sed -e "/$$libdir.*.a /d" -i debian/$(libc)-dev.install
|  else
|  $(patsubst %,debhelper_%,$(GLIBC_PASSES)) :: debhelper_% : 
$(stamp)debhelper_%
|  $(stamp)debhelper_%: $(stamp)debhelper-common $(stamp)install_%

Fixed in experimental.

| diff -urN debian/sysdeps/linux.mk /usr/src/glibc/debian/sysdeps/linux.mk
| --- debian/sysdeps/linux.mk   2015-03-16 16:03:45.000000000 +0000
| +++ /usr/src/glibc/debian/sysdeps/linux.mk    2015-05-10 22:20:49.109875755 
+0000
| @@ -16,7 +16,7 @@
|  endif
|  
|  ifndef LINUX_SOURCE
| -  ifeq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE))
| +  ifeq ($(shell dpkg-query --status linux-libc-dev-$(DEB_HOST_ARCH)-cross 
2>/dev/null),)
|      LINUX_HEADERS := /usr/include
|    else
|      LINUX_HEADERS := /usr/$(DEB_HOST_GNU_TYPE)/include

I'm not sure that the test covers all relevant cases, but I have been
using the very same test in rebootstrap with success. Without this hunk,
cross building glibc will not find linux headers when
linux-libc-dev:$(DEB_HOST_ARCH) is installed.

So it looks like roughly a third of the issues are fixed in
experimental.

Helmut

Reply via email to