diff mbox series

[v2] HOST_DIR/lib: symlink respectively to lib32/64

Message ID 1507064334-22885-1-git-send-email-matthew.weber@rockwellcollins.com
State Changes Requested
Headers show
Series [v2] HOST_DIR/lib: symlink respectively to lib32/64 | expand

Commit Message

Matt Weber Oct. 3, 2017, 8:58 p.m. UTC
Discovered the issue on a RHEL7.4 machine where
the cmake build dynamically selected HOST_DIR/lib64
as the installation path for the lzo2 library.

Fixes failures like the following:
host-mtd
http://autobuild.buildroot.net/results/d31/d31581d2e60f35cf70312683df99c768e2ea8516/

host-squashfs
http://autobuild.buildroot.net/results/d9c/d9c95231ac774ed71580754a15ebb3b121764310/

Signed-off-by: Matthew Weber <matthew.weber@rockwellcollins.com>
---
Changes
[Yann
v1 -> v2
 - Correct the condition used to determine host arch.
   (Previously used the target arch check)
---
 Makefile | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

Comments

Yann E. MORIN Oct. 3, 2017, 9:16 p.m. UTC | #1
Matthew, All,

On 2017-10-03 15:58 -0500, Matt Weber spake thusly:
> Discovered the issue on a RHEL7.4 machine where
> the cmake build dynamically selected HOST_DIR/lib64
> as the installation path for the lzo2 library.
> 
> Fixes failures like the following:
> host-mtd
> http://autobuild.buildroot.net/results/d31/d31581d2e60f35cf70312683df99c768e2ea8516/
> 
> host-squashfs
> http://autobuild.buildroot.net/results/d9c/d9c95231ac774ed71580754a15ebb3b121764310/
> 
> Signed-off-by: Matthew Weber <matthew.weber@rockwellcollins.com>
> ---
> Changes
> [Yann
> v1 -> v2
>  - Correct the condition used to determine host arch.
>    (Previously used the target arch check)
> ---
>  Makefile | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/Makefile b/Makefile
> index 9b09589..1cc474a 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -542,7 +542,7 @@ endif
>  
>  .PHONY: dirs
>  dirs: $(BUILD_DIR) $(STAGING_DIR) $(TARGET_DIR) \
> -	$(HOST_DIR) $(HOST_DIR)/usr $(BINARIES_DIR)
> +	$(HOST_DIR) $(HOST_DIR)/usr $(HOST_DIR)/lib $(BINARIES_DIR)
>  
>  $(BUILD_DIR)/buildroot-config/auto.conf: $(BR2_CONFIG)
>  	$(MAKE1) $(EXTRAMAKEARGS) HOSTCC="$(HOSTCC_NOCCACHE)" HOSTCXX="$(HOSTCXX_NOCCACHE)" silentoldconfig
> @@ -565,6 +565,13 @@ sdk: world
>  $(HOST_DIR)/usr: $(HOST_DIR)
>  	@ln -snf . $@
>  
> +$(HOST_DIR)/lib: $(HOST_DIR)
> +ifeq ($(HOSTARCH),x86)
> +	@ln -snf lib $@32
> +else
> +	@ln -snf lib $@64
> +endif

You will want to mkdir lib first. If you don't, you create a dangling symlink.

If lib32 (or lib64) s dangling, and if a package wants to install in
there before another package has created lib, then the install will
fail.

Typically, an install step would basically do something like:

    mkdir -p $(DESTDIR)$(PREFIX)/lib32/
    cp some-file $(DESTDIR)$(PREFIX)/lib32/some-file

However, the mkdir will fail there, with:

    mkdir: cannot create directory ‘/bla/bla/lib32’: File exists

Secondly, $(HOST_DIR)/lib is not a .PHONY rule, and since you do not
explicitly create it in the rule, the rule will get executed every time
make is called, until at last some host package creates lib.

So, forcibly create lib in that rule.

Regards,
Yann E. MORIN.

>  # Populating the staging with the base directories is handled by the skeleton package
>  $(STAGING_DIR):
>  	@mkdir -p $(STAGING_DIR)
> -- 
> 1.9.1
> 
> _______________________________________________
> buildroot mailing list
> buildroot@busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
Matt Weber Oct. 4, 2017, 12:43 p.m. UTC | #2
Yann, Jan,

On Tue, Oct 3, 2017 at 4:16 PM, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
>
> Matthew, All,
>
> On 2017-10-03 15:58 -0500, Matt Weber spake thusly:
> > Discovered the issue on a RHEL7.4 machine where
> > the cmake build dynamically selected HOST_DIR/lib64
> > as the installation path for the lzo2 library.
> >
> > Fixes failures like the following:
> > host-mtd
> > http://autobuild.buildroot.net/results/d31/d31581d2e60f35cf70312683df99c768e2ea8516/
> >
> > host-squashfs
> > http://autobuild.buildroot.net/results/d9c/d9c95231ac774ed71580754a15ebb3b121764310/
> >
> > Signed-off-by: Matthew Weber <matthew.weber@rockwellcollins.com>
> > ---
> > Changes
> > [Yann
> > v1 -> v2
> >  - Correct the condition used to determine host arch.
> >    (Previously used the target arch check)
> > ---
> >  Makefile | 9 ++++++++-
> >  1 file changed, 8 insertions(+), 1 deletion(-)
> >
> > diff --git a/Makefile b/Makefile
> > index 9b09589..1cc474a 100644
> > --- a/Makefile
> > +++ b/Makefile
> > @@ -542,7 +542,7 @@ endif
> >
> >  .PHONY: dirs
> >  dirs: $(BUILD_DIR) $(STAGING_DIR) $(TARGET_DIR) \
> > -     $(HOST_DIR) $(HOST_DIR)/usr $(BINARIES_DIR)
> > +     $(HOST_DIR) $(HOST_DIR)/usr $(HOST_DIR)/lib $(BINARIES_DIR)
> >
> >  $(BUILD_DIR)/buildroot-config/auto.conf: $(BR2_CONFIG)
> >       $(MAKE1) $(EXTRAMAKEARGS) HOSTCC="$(HOSTCC_NOCCACHE)" HOSTCXX="$(HOSTCXX_NOCCACHE)" silentoldconfig
> > @@ -565,6 +565,13 @@ sdk: world
> >  $(HOST_DIR)/usr: $(HOST_DIR)
> >       @ln -snf . $@
> >
> > +$(HOST_DIR)/lib: $(HOST_DIR)
> > +ifeq ($(HOSTARCH),x86)
> > +     @ln -snf lib $@32
> > +else
> > +     @ln -snf lib $@64
> > +endif
>
> You will want to mkdir lib first. If you don't, you create a dangling symlink.
>
> If lib32 (or lib64) s dangling, and if a package wants to install in
> there before another package has created lib, then the install will
> fail.
>
> Typically, an install step would basically do something like:
>
>     mkdir -p $(DESTDIR)$(PREFIX)/lib32/
>     cp some-file $(DESTDIR)$(PREFIX)/lib32/some-file
>
> However, the mkdir will fail there, with:
>
>     mkdir: cannot create directory ‘/bla/bla/lib32’: File exists
>
> Secondly, $(HOST_DIR)/lib is not a .PHONY rule, and since you do not
> explicitly create it in the rule, the rule will get executed every time
> make is called, until at last some host package creates lib.
>
> So, forcibly create lib in that rule.

v3 based on yesterday's discussion
https://patchwork.ozlabs.org/patch/821298/

Mat
diff mbox series

Patch

diff --git a/Makefile b/Makefile
index 9b09589..1cc474a 100644
--- a/Makefile
+++ b/Makefile
@@ -542,7 +542,7 @@  endif
 
 .PHONY: dirs
 dirs: $(BUILD_DIR) $(STAGING_DIR) $(TARGET_DIR) \
-	$(HOST_DIR) $(HOST_DIR)/usr $(BINARIES_DIR)
+	$(HOST_DIR) $(HOST_DIR)/usr $(HOST_DIR)/lib $(BINARIES_DIR)
 
 $(BUILD_DIR)/buildroot-config/auto.conf: $(BR2_CONFIG)
 	$(MAKE1) $(EXTRAMAKEARGS) HOSTCC="$(HOSTCC_NOCCACHE)" HOSTCXX="$(HOSTCXX_NOCCACHE)" silentoldconfig
@@ -565,6 +565,13 @@  sdk: world
 $(HOST_DIR)/usr: $(HOST_DIR)
 	@ln -snf . $@
 
+$(HOST_DIR)/lib: $(HOST_DIR)
+ifeq ($(HOSTARCH),x86)
+	@ln -snf lib $@32
+else
+	@ln -snf lib $@64
+endif
+
 # Populating the staging with the base directories is handled by the skeleton package
 $(STAGING_DIR):
 	@mkdir -p $(STAGING_DIR)