-
Type:
Bug
-
Resolution: Unresolved
-
Priority:
P4
-
None
-
Affects Version/s: None
-
Component/s: infrastructure
-
None
I'm working on building a Linux devkit for an OpenJDK project which requires some new components (RPMs) for Linux and I found that for Linux x64 it downloads the 32 bit as well as the 64 bit RPMs.
Then it unpacks the 32 bit ones first and when it comes to unpack the 64 bit ones, they'd overlay/replace the 64 bit ones, so it leaves the existing files alone.
I think that mostly this has not been a problem, as header files will be the same and libs go in different 32 vs 64 bit locations.
But now when I need a tool from one of the packages and they go in /usr/bin
Here's a snippet of what I saw
The particular problem is
> cpio: ./usr/bin/wayland-scanner not created: newer or same age version exists
I end up with the 32 bit version but there's no way to run it because you need all the 32 bit support libraries on your system.
=======
Unpacking target rpms and libraries from /cwd/build/devkit/download/rpms/x86_64-linux-gnu-OL7.6/wayland-devel-1.15.0-1.el7.i686.rpm
1161 blocks
touch /cwd/build/devkit/result/x86_64-linux-gnu-to-x86_64-linux-gnu/x86_64-linux-gnu/sysroot/wayland-devel-1.15.0-1.el7.i686.rpm.unpacked
Unpacking target rpms and libraries from /cwd/build/devkit/download/rpms/x86_64-linux-gnu-OL7.6/wayland-devel-1.15.0-1.el7.x86_64.rpm
cpio: ./usr/bin/wayland-scanner not created: newer or same age version exists
cpio: ./usr/include/wayland-client-core.h not created: newer or same age version exists
cpio: ./usr/include/wayland-client-protocol.h not created: newer or same age version exists
cpio: ./usr/include/wayland-client.h not created: newer or same age version exists
cpio: ./usr/include/wayland-cursor.h not created: newer or same age version exists
cpio: ./usr/include/wayland-egl-backend.h not created: newer or same age version exists
cpio: ./usr/include/wayland-egl-core.h not created: newer or same age version exists
cpio: ./usr/include/wayland-egl.h not created: newer or same age version exists
cpio: ./usr/include/wayland-server-core.h not created: newer or same age version exists
cpio: ./usr/include/wayland-server-protocol.h not created: newer or same age version exists
cpio: ./usr/include/wayland-server.h not created: newer or same age version exists
cpio: ./usr/include/wayland-util.h not created: newer or same age version exists
cpio: ./usr/include/wayland-version.h not created: newer or same age version exists
cpio: ./usr/share/aclocal/wayland-scanner.m4 not created: newer or same age version exists
cpio: ./usr/share/wayland/wayland-scanner.mk not created: newer or same age version exists
cpio: ./usr/share/wayland/wayland.dtd not created: newer or same age version exists
cpio: ./usr/share/wayland/wayland.xml not created: newer or same age version exists
1162 blocks
touch /cwd/build/devkit/result/x86_64-linux-gnu-to-x86_64-linux-gnu/x86_64-linux-gnu/sysroot/wayland-devel-1.15.0-1.el7.x86_64.rpm.unpacked
========
So I updated the Tools.gml to ONLY download the 64 bit RPMs by commenting out the RPM_ARCHS line below
=====
ifeq ($(ARCH),x86_64)
# Enable mixed mode.
RPM_ARCHS += i386 i686
=====
unfortunately this then left me with a failure creating the devkit due to lack of 32 bit RPMs.
Multiple failures actually. First because of "--enable-multilib"
I had do disable that completely
CONFIG += --disable-multilib
but that wasn't enough because it also wants to use -m32 which won't work so I also had to remove the -m32 flag below.
ifeq (x86_64,$(ARCH))
LIBDIRS := lib64 lib
CFLAGS_lib := -m32
So various problems. I don't know what the "right" solution is.
It does seem to be a new requirement for a 'tool' to be obtained from the devkit.
But the tool we need, Wayland-scanner, isn't a "base" tool like cpio or something, and it is a relatively new tool, so likely evolving, so I don't know that its reasonable to require it to be natively installed on the build system.
But that does touch on another problem - how to find tools in the devkit at JDK build time, but that's all I'll write about that in this report.
At the very least it is odd that we try to over-write files and don't (apparently) care about that.
Then it unpacks the 32 bit ones first and when it comes to unpack the 64 bit ones, they'd overlay/replace the 64 bit ones, so it leaves the existing files alone.
I think that mostly this has not been a problem, as header files will be the same and libs go in different 32 vs 64 bit locations.
But now when I need a tool from one of the packages and they go in /usr/bin
Here's a snippet of what I saw
The particular problem is
> cpio: ./usr/bin/wayland-scanner not created: newer or same age version exists
I end up with the 32 bit version but there's no way to run it because you need all the 32 bit support libraries on your system.
=======
Unpacking target rpms and libraries from /cwd/build/devkit/download/rpms/x86_64-linux-gnu-OL7.6/wayland-devel-1.15.0-1.el7.i686.rpm
1161 blocks
touch /cwd/build/devkit/result/x86_64-linux-gnu-to-x86_64-linux-gnu/x86_64-linux-gnu/sysroot/wayland-devel-1.15.0-1.el7.i686.rpm.unpacked
Unpacking target rpms and libraries from /cwd/build/devkit/download/rpms/x86_64-linux-gnu-OL7.6/wayland-devel-1.15.0-1.el7.x86_64.rpm
cpio: ./usr/bin/wayland-scanner not created: newer or same age version exists
cpio: ./usr/include/wayland-client-core.h not created: newer or same age version exists
cpio: ./usr/include/wayland-client-protocol.h not created: newer or same age version exists
cpio: ./usr/include/wayland-client.h not created: newer or same age version exists
cpio: ./usr/include/wayland-cursor.h not created: newer or same age version exists
cpio: ./usr/include/wayland-egl-backend.h not created: newer or same age version exists
cpio: ./usr/include/wayland-egl-core.h not created: newer or same age version exists
cpio: ./usr/include/wayland-egl.h not created: newer or same age version exists
cpio: ./usr/include/wayland-server-core.h not created: newer or same age version exists
cpio: ./usr/include/wayland-server-protocol.h not created: newer or same age version exists
cpio: ./usr/include/wayland-server.h not created: newer or same age version exists
cpio: ./usr/include/wayland-util.h not created: newer or same age version exists
cpio: ./usr/include/wayland-version.h not created: newer or same age version exists
cpio: ./usr/share/aclocal/wayland-scanner.m4 not created: newer or same age version exists
cpio: ./usr/share/wayland/wayland-scanner.mk not created: newer or same age version exists
cpio: ./usr/share/wayland/wayland.dtd not created: newer or same age version exists
cpio: ./usr/share/wayland/wayland.xml not created: newer or same age version exists
1162 blocks
touch /cwd/build/devkit/result/x86_64-linux-gnu-to-x86_64-linux-gnu/x86_64-linux-gnu/sysroot/wayland-devel-1.15.0-1.el7.x86_64.rpm.unpacked
========
So I updated the Tools.gml to ONLY download the 64 bit RPMs by commenting out the RPM_ARCHS line below
=====
ifeq ($(ARCH),x86_64)
# Enable mixed mode.
RPM_ARCHS += i386 i686
=====
unfortunately this then left me with a failure creating the devkit due to lack of 32 bit RPMs.
Multiple failures actually. First because of "--enable-multilib"
I had do disable that completely
CONFIG += --disable-multilib
but that wasn't enough because it also wants to use -m32 which won't work so I also had to remove the -m32 flag below.
ifeq (x86_64,$(ARCH))
LIBDIRS := lib64 lib
CFLAGS_lib := -m32
So various problems. I don't know what the "right" solution is.
It does seem to be a new requirement for a 'tool' to be obtained from the devkit.
But the tool we need, Wayland-scanner, isn't a "base" tool like cpio or something, and it is a relatively new tool, so likely evolving, so I don't know that its reasonable to require it to be natively installed on the build system.
But that does touch on another problem - how to find tools in the devkit at JDK build time, but that's all I'll write about that in this report.
At the very least it is odd that we try to over-write files and don't (apparently) care about that.