bfd/docs building on Cygwin

Message ID 61c618ea-fb49-644d-574b-c9d9134eb646@suse.com
State New
Headers show
Series
  • bfd/docs building on Cygwin
Related show

Commit Message

Nick Clifton via Binutils Feb. 8, 2021, 12:20 p.m.
In bba33ab1e0f7 ("Fix build without makeinfo from release
binutils tar") uses of "cp -p" were introduced, to work
around a build problem (which arguably was easy enough to
work around by passing MAKEINFO=true on the make command
line, as I've been doing under Cygwin for a long time).
The previous Cygwin version I had been using was quite old,
so I've noticed the new issue only after recently having
installed an up-to-date one.

The problem is with "cp -p" trying to preserve ownership:
With the sources living on a Samba share I observe this
failing with "Permission denied". Looking at the purpose of
the copying I wonder why copies are being made in the first
place. Would the change below (suitably propagated to
Makefile.in of course) be an acceptable alternative?

(Seeing the not insignificant amount of redundancy here:
Isn't the binutils build system implying GNU make anyway,
for vpath support? If so, is there a reason all these
individual rules couldn't be consolidated into a few
pattern rules?)

Thanks, Jan

Comments

Nick Clifton via Binutils Feb. 8, 2021, 4:57 p.m. | #1
Hi Jan,

> The problem is with "cp -p" trying to preserve ownership:

> With the sources living on a Samba share I observe this

> failing with "Permission denied". Looking at the purpose of

> the copying I wonder why copies are being made in the first

> place. 


I think that the copy is there so that move-if-change invocation
on the next line of the rule will work.  I think that script
requires both files to be present...


> Would the change below 


> -	test -e aoutx.texi || test ! -f $(srcdir)/aoutx.texi || cp -p $(srcdir)/aoutx.texi .

> +	test -e aoutx.texi || test ! -f $(srcdir)/aoutx.texi || $(LN_S) $(srcdir)/aoutx.texi .


I think that this will fail if the source and build directories
are on different file systems.


> (Seeing the not insignificant amou of redundancy here:

> Isn't the binutils build system implying GNU make anyway,

> for vpath support? If so, is there a reason all these

> individual rules couldn't be consolidated into a few

> pattern rules?)


None that I can think of.  I would certainly be happy to
review such a patch.  It would be especially good if the
patch replaced "cp -p" with something like "$(COPY)" which
could then be set to "cp -p" for most hosts but something
else for situations like yours...

Cheers
   Nick
Nick Clifton via Binutils Feb. 8, 2021, 5:03 p.m. | #2
On 08.02.2021 17:57, Nick Clifton wrote:
>> The problem is with "cp -p" trying to preserve ownership:

>> With the sources living on a Samba share I observe this

>> failing with "Permission denied". Looking at the purpose of

>> the copying I wonder why copies are being made in the first

>> place. 

> 

> I think that the copy is there so that move-if-change invocation

> on the next line of the rule will work.  I think that script

> requires both files to be present...


Right - a property that's equally fulfilled with a real copy
or a symlink.

>> Would the change below 

> 

>> -	test -e aoutx.texi || test ! -f $(srcdir)/aoutx.texi || cp -p $(srcdir)/aoutx.texi .

>> +	test -e aoutx.texi || test ! -f $(srcdir)/aoutx.texi || $(LN_S) $(srcdir)/aoutx.texi .

> 

> I think that this will fail if the source and build directories

> are on different file systems.


Why? I'm talking about a symbolic link, not a hard link here.
Plus LN_S falls back to "cp -pR" when symlinks aren't available.
(Also in the case I've described source and build tree are
indeed on different file systems - the source tree is remote,
while the build tree is on the local hard drive.)

>> (Seeing the not insignificant amou of redundancy here:

>> Isn't the binutils build system implying GNU make anyway,

>> for vpath support? If so, is there a reason all these

>> individual rules couldn't be consolidated into a few

>> pattern rules?)

> 

> None that I can think of.  I would certainly be happy to

> review such a patch.  It would be especially good if the

> patch replaced "cp -p" with something like "$(COPY)" which

> could then be set to "cp -p" for most hosts but something

> else for situations like yours...


Yet I understand that would involve configure adjustments,
which - to be honest - I'd rather keep my fingers off of. But
I can see about making a consolidation patch as outlined; may
take a little while, though.

Jan
Nick Clifton via Binutils Feb. 9, 2021, 12:11 a.m. | #3
On Mon, Feb 08, 2021 at 01:20:12PM +0100, Jan Beulich wrote:
> In bba33ab1e0f7 ("Fix build without makeinfo from release

> binutils tar") uses of "cp -p" were introduced, to work

> around a build problem (which arguably was easy enough to

> work around by passing MAKEINFO=true on the make command

> line, as I've been doing under Cygwin for a long time).

> The previous Cygwin version I had been using was quite old,

> so I've noticed the new issue only after recently having

> installed an up-to-date one.

> 

> The problem is with "cp -p" trying to preserve ownership:

> With the sources living on a Samba share I observe this

> failing with "Permission denied". Looking at the purpose of

> the copying I wonder why copies are being made in the first

> place. Would the change below (suitably propagated to

> Makefile.in of course) be an acceptable alternative?


Yes, "ln -s" should be OK (and of course $(LN_S) falls back to
"cp -p" where symbolic links are not supported).
Patch approved.

> (Seeing the not insignificant amount of redundancy here:

> Isn't the binutils build system implying GNU make anyway,

> for vpath support? If so, is there a reason all these

> individual rules couldn't be consolidated into a few

> pattern rules?)


I don't see a problem in requiring GNU make to build binutils, but
that should be formalised by saying so in binutils/README.

-- 
Alan Modra
Australia Development Lab, IBM
Nick Clifton via Binutils Feb. 9, 2021, 9:21 a.m. | #4
On 09.02.2021 01:11, Alan Modra wrote:
> On Mon, Feb 08, 2021 at 01:20:12PM +0100, Jan Beulich wrote:

>> In bba33ab1e0f7 ("Fix build without makeinfo from release

>> binutils tar") uses of "cp -p" were introduced, to work

>> around a build problem (which arguably was easy enough to

>> work around by passing MAKEINFO=true on the make command

>> line, as I've been doing under Cygwin for a long time).

>> The previous Cygwin version I had been using was quite old,

>> so I've noticed the new issue only after recently having

>> installed an up-to-date one.

>>

>> The problem is with "cp -p" trying to preserve ownership:

>> With the sources living on a Samba share I observe this

>> failing with "Permission denied". Looking at the purpose of

>> the copying I wonder why copies are being made in the first

>> place. Would the change below (suitably propagated to

>> Makefile.in of course) be an acceptable alternative?

> 

> Yes, "ln -s" should be OK (and of course $(LN_S) falls back to

> "cp -p" where symbolic links are not supported).

> Patch approved.


Thanks - will test this some more and then commit.

>> (Seeing the not insignificant amount of redundancy here:

>> Isn't the binutils build system implying GNU make anyway,

>> for vpath support? If so, is there a reason all these

>> individual rules couldn't be consolidated into a few

>> pattern rules?)

> 

> I don't see a problem in requiring GNU make to build binutils, but

> that should be formalised by saying so in binutils/README.


Oh, I realize right now GNU make is documented as a requirement
only when wanting to build in a directory distinct from the
source one. Perhaps requiring GNU make uniformly is too
aggressive then? Plus I supposed gdb folks would need to agree
too, as bfd/ is shared between the two?

Jan
Nick Clifton via Binutils Feb. 9, 2021, 11:37 a.m. | #5
On Tue, Feb 09, 2021 at 10:21:42AM +0100, Jan Beulich wrote:
> On 09.02.2021 01:11, Alan Modra wrote:

> > I don't see a problem in requiring GNU make to build binutils, but

> > that should be formalised by saying so in binutils/README.

> 

> Oh, I realize right now GNU make is documented as a requirement

> only when wanting to build in a directory distinct from the

> source one. Perhaps requiring GNU make uniformly is too

> aggressive then? Plus I supposed gdb folks would need to agree

> too, as bfd/ is shared between the two?


They already require GNU make.  From gdb/NEWS

* Building GDB and GDBserver now requires GNU make >= 3.82.

So does gcc.

@item GNU make version 3.80 (or later)

You must have GNU make installed to build GCC@.

-- 
Alan Modra
Australia Development Lab, IBM

Patch

--- 2.36/bfd/doc/Makefile.am
+++ 2.36/bfd/doc/Makefile.am
@@ -97,21 +97,21 @@  protos: libbfd.h libcoff.h bfd.h
 aoutx.texi: aoutx.stamp ; @true
 aoutx.stamp: $(srcdir)/../aoutx.h $(srcdir)/doc.str $(MKDOC)
 	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../aoutx.h >aoutx.tmp
-	test -e aoutx.texi || test ! -f $(srcdir)/aoutx.texi || cp -p $(srcdir)/aoutx.texi .
+	test -e aoutx.texi || test ! -f $(srcdir)/aoutx.texi || $(LN_S) $(srcdir)/aoutx.texi .
 	$(SHELL) $(srcdir)/../../move-if-change aoutx.tmp aoutx.texi
 	touch $@
 
 archive.texi: archive.stamp ; @true
 archive.stamp: $(srcdir)/../archive.c $(srcdir)/doc.str $(MKDOC)
 	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../archive.c >archive.tmp
-	test -e archive.texi || test ! -f $(srcdir)/archive.texi || cp -p $(srcdir)/archive.texi .
+	test -e archive.texi || test ! -f $(srcdir)/archive.texi || $(LN_S) $(srcdir)/archive.texi .
 	$(SHELL) $(srcdir)/../../move-if-change archive.tmp archive.texi
 	touch $@
 
 archures.texi: archures.stamp ; @true
 archures.stamp: $(srcdir)/../archures.c $(srcdir)/doc.str $(MKDOC)
 	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../archures.c >archures.tmp
-	test -e archures.texi || test ! -f $(srcdir)/archures.texi || cp -p $(srcdir)/archures.texi .
+	test -e archures.texi || test ! -f $(srcdir)/archures.texi || $(LN_S) $(srcdir)/archures.texi .
 	$(SHELL) $(srcdir)/../../move-if-change archures.tmp archures.texi
 	touch $@
 
@@ -120,133 +120,133 @@  archures.stamp: $(srcdir)/../archures.c
 bfdt.texi: bfdt.stamp ; @true
 bfdt.stamp: $(srcdir)/../bfd.c $(srcdir)/doc.str $(MKDOC)
 	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../bfd.c >bfd.tmp
-	test -e bfdt.texi || test ! -f $(srcdir)/bfdt.texi || cp -p $(srcdir)/bfdt.texi .
+	test -e bfdt.texi || test ! -f $(srcdir)/bfdt.texi || $(LN_S) $(srcdir)/bfdt.texi .
 	$(SHELL) $(srcdir)/../../move-if-change bfd.tmp bfdt.texi
 	touch $@
 
 cache.texi: cache.stamp ; @true
 cache.stamp: $(srcdir)/../cache.c $(srcdir)/doc.str $(MKDOC)
 	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../cache.c >cache.tmp
-	test -e cache.texi || test ! -f $(srcdir)/cache.texi || cp -p $(srcdir)/cache.texi .
+	test -e cache.texi || test ! -f $(srcdir)/cache.texi || $(LN_S) $(srcdir)/cache.texi .
 	$(SHELL) $(srcdir)/../../move-if-change cache.tmp cache.texi
 	touch $@
 
 coffcode.texi: coffcode.stamp ; @true
 coffcode.stamp: $(srcdir)/../coffcode.h $(srcdir)/doc.str $(MKDOC)
 	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../coffcode.h >coffcode.tmp
-	test -e coffcode.texi || test ! -f $(srcdir)/coffcode.texi || cp -p $(srcdir)/coffcode.texi .
+	test -e coffcode.texi || test ! -f $(srcdir)/coffcode.texi || $(LN_S) $(srcdir)/coffcode.texi .
 	$(SHELL) $(srcdir)/../../move-if-change coffcode.tmp coffcode.texi
 	touch $@
 
 core.texi: core.stamp ; @true
 core.stamp: $(srcdir)/../corefile.c $(srcdir)/doc.str $(MKDOC)
 	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../corefile.c >core.tmp
-	test -e core.texi || test ! -f $(srcdir)/core.texi || cp -p $(srcdir)/core.texi .
+	test -e core.texi || test ! -f $(srcdir)/core.texi || $(LN_S) $(srcdir)/core.texi .
 	$(SHELL) $(srcdir)/../../move-if-change core.tmp core.texi
 	touch $@
 
 elf.texi: elf.stamp ; @true
 elf.stamp: $(srcdir)/../elf.c $(srcdir)/doc.str $(MKDOC)
 	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../elf.c >elf.tmp
-	test -e elf.texi || test ! -f $(srcdir)/elf.texi || cp -p $(srcdir)/elf.texi .
+	test -e elf.texi || test ! -f $(srcdir)/elf.texi || $(LN_S) $(srcdir)/elf.texi .
 	$(SHELL) $(srcdir)/../../move-if-change elf.tmp elf.texi
 	touch $@
 
 elfcode.texi: elfcode.stamp ; @true
 elfcode.stamp: $(srcdir)/../elfcode.h $(srcdir)/doc.str $(MKDOC)
 	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../elfcode.h >elfcode.tmp
-	test -e elfcode.texi || test ! -f $(srcdir)/elfcode.texi || cp -p $(srcdir)/elfcode.texi .
+	test -e elfcode.texi || test ! -f $(srcdir)/elfcode.texi || $(LN_S) $(srcdir)/elfcode.texi .
 	$(SHELL) $(srcdir)/../../move-if-change elfcode.tmp elfcode.texi
 	touch $@
 
 mmo.texi: mmo.stamp ; @true
 mmo.stamp: $(srcdir)/../mmo.c $(srcdir)/doc.str $(MKDOC)
 	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../mmo.c >mmo.tmp
-	test -e mmo.texi || test ! -f $(srcdir)/mmo.texi || cp -p $(srcdir)/mmo.texi .
+	test -e mmo.texi || test ! -f $(srcdir)/mmo.texi || $(LN_S) $(srcdir)/mmo.texi .
 	$(SHELL) $(srcdir)/../../move-if-change mmo.tmp mmo.texi
 	touch $@
 
 format.texi: format.stamp ; @true
 format.stamp: $(srcdir)/../format.c $(srcdir)/doc.str $(MKDOC)
 	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../format.c >format.tmp
-	test -e format.texi || test ! -f $(srcdir)/format.texi || cp -p $(srcdir)/format.texi .
+	test -e format.texi || test ! -f $(srcdir)/format.texi || $(LN_S) $(srcdir)/format.texi .
 	$(SHELL) $(srcdir)/../../move-if-change format.tmp format.texi
 	touch $@
 
 libbfd.texi: libbfd.stamp ; @true
 libbfd.stamp: $(srcdir)/../libbfd.c $(srcdir)/doc.str $(MKDOC)
 	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../libbfd.c >libbfd.tmp
-	test -e libbfd.texi || test ! -f $(srcdir)/libbfd.texi || cp -p $(srcdir)/libbfd.texi .
+	test -e libbfd.texi || test ! -f $(srcdir)/libbfd.texi || $(LN_S) $(srcdir)/libbfd.texi .
 	$(SHELL) $(srcdir)/../../move-if-change libbfd.tmp libbfd.texi
 	touch $@
 
 bfdio.texi: bfdio.stamp ; @true
 bfdio.stamp: $(srcdir)/../bfdio.c $(srcdir)/doc.str $(MKDOC)
 	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../bfdio.c >bfdio.tmp
-	test -e bfdio.texi || test ! -f $(srcdir)/bfdio.texi || cp -p $(srcdir)/bfdio.texi .
+	test -e bfdio.texi || test ! -f $(srcdir)/bfdio.texi || $(LN_S) $(srcdir)/bfdio.texi .
 	$(SHELL) $(srcdir)/../../move-if-change bfdio.tmp bfdio.texi
 	touch $@
 
 bfdwin.texi: bfdwin.stamp ; @true
 bfdwin.stamp: $(srcdir)/../bfdwin.c $(srcdir)/doc.str $(MKDOC)
 	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../bfdwin.c >bfdwin.tmp
-	test -e bfdwin.texi || test ! -f $(srcdir)/bfdwin.texi || cp -p $(srcdir)/bfdwin.texi .
+	test -e bfdwin.texi || test ! -f $(srcdir)/bfdwin.texi || $(LN_S) $(srcdir)/bfdwin.texi .
 	$(SHELL) $(srcdir)/../../move-if-change bfdwin.tmp bfdwin.texi
 	touch $@
 
 opncls.texi: opncls.stamp ; @true
 opncls.stamp: $(srcdir)/../opncls.c $(srcdir)/doc.str $(MKDOC)
 	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../opncls.c >opncls.tmp
-	test -e opncls.texi || test ! -f $(srcdir)/opncls.texi || cp -p $(srcdir)/opncls.texi .
+	test -e opncls.texi || test ! -f $(srcdir)/opncls.texi || $(LN_S) $(srcdir)/opncls.texi .
 	$(SHELL) $(srcdir)/../../move-if-change opncls.tmp opncls.texi
 	touch $@
 
 reloc.texi: reloc.stamp ; @true
 reloc.stamp: $(srcdir)/../reloc.c $(srcdir)/doc.str $(MKDOC)
 	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../reloc.c >reloc.tmp
-	test -e reloc.texi || test ! -f $(srcdir)/reloc.texi || cp -p $(srcdir)/reloc.texi .
+	test -e reloc.texi || test ! -f $(srcdir)/reloc.texi || $(LN_S) $(srcdir)/reloc.texi .
 	$(SHELL) $(srcdir)/../../move-if-change reloc.tmp reloc.texi
 	touch $@
 
 section.texi: section.stamp ; @true
 section.stamp: $(srcdir)/../section.c $(srcdir)/doc.str $(MKDOC)
 	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../section.c >section.tmp
-	test -e section.texi || test ! -f $(srcdir)/section.texi || cp -p $(srcdir)/section.texi .
+	test -e section.texi || test ! -f $(srcdir)/section.texi || $(LN_S) $(srcdir)/section.texi .
 	$(SHELL) $(srcdir)/../../move-if-change section.tmp section.texi
 	touch $@
 
 syms.texi: syms.stamp ; @true
 syms.stamp: $(srcdir)/../syms.c $(srcdir)/doc.str $(MKDOC)
 	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../syms.c >syms.tmp
-	test -e syms.texi || test ! -f $(srcdir)/syms.texi || cp -p $(srcdir)/syms.texi .
+	test -e syms.texi || test ! -f $(srcdir)/syms.texi || $(LN_S) $(srcdir)/syms.texi .
 	$(SHELL) $(srcdir)/../../move-if-change syms.tmp syms.texi
 	touch $@
 
 targets.texi: targets.stamp ; @true
 targets.stamp: $(srcdir)/../targets.c $(srcdir)/doc.str $(MKDOC)
 	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../targets.c >targets.tmp
-	test -e targets.texi || test ! -f $(srcdir)/targets.texi || cp -p $(srcdir)/targets.texi .
+	test -e targets.texi || test ! -f $(srcdir)/targets.texi || $(LN_S) $(srcdir)/targets.texi .
 	$(SHELL) $(srcdir)/../../move-if-change targets.tmp targets.texi
 	touch $@
 
 init.texi: init.stamp ; @true
 init.stamp: $(srcdir)/../init.c $(srcdir)/doc.str $(MKDOC)
 	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../init.c >init.tmp
-	test -e init.texi || test ! -f $(srcdir)/init.texi || cp -p $(srcdir)/init.texi .
+	test -e init.texi || test ! -f $(srcdir)/init.texi || $(LN_S) $(srcdir)/init.texi .
 	$(SHELL) $(srcdir)/../../move-if-change init.tmp init.texi
 	touch $@
 
 hash.texi: hash.stamp ; @true
 hash.stamp: $(srcdir)/../hash.c $(srcdir)/doc.str $(MKDOC)
 	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../hash.c >hash.tmp
-	test -e hash.texi || test ! -f $(srcdir)/hash.texi || cp -p $(srcdir)/hash.texi .
+	test -e hash.texi || test ! -f $(srcdir)/hash.texi || $(LN_S) $(srcdir)/hash.texi .
 	$(SHELL) $(srcdir)/../../move-if-change hash.tmp hash.texi
 	touch $@
 
 linker.texi: linker.stamp ; @true
 linker.stamp: $(srcdir)/../linker.c $(srcdir)/doc.str $(MKDOC)
 	./$(MKDOC) -f $(srcdir)/doc.str < $(srcdir)/../linker.c >linker.tmp
-	test -e linker.texi || test ! -f $(srcdir)/linker.texi || cp -p $(srcdir)/linker.texi .
+	test -e linker.texi || test ! -f $(srcdir)/linker.texi || $(LN_S) $(srcdir)/linker.texi .
 	$(SHELL) $(srcdir)/../../move-if-change linker.tmp linker.texi
 	touch $@