On Mon, 10 Mar 2025 17:34:40 +0100
Richard Biener <richard.guent...@gmail.com> wrote:

> index 10a42cb1dd7..8e666618ef1 100644
> --- a/gcc/Makefile.in
> +++ b/gcc/Makefile.in
> ...
> +# user-defined functions for GCOBOL
> +udfdir = $(datadir)/gcobol/udf
> ..
> @@ -4031,7 +4035,9 @@ installdirs:
>         $(mkinstalldirs) $(DESTDIR)$(includedir)
>         $(mkinstalldirs) $(DESTDIR)$(infodir)
>         $(mkinstalldirs) $(DESTDIR)$(man1dir)
> +       $(mkinstalldirs) $(DESTDIR)$(man3dir)
>         $(mkinstalldirs) $(DESTDIR)$(man7dir)
> +       $(mkinstalldirs) $(DESTDIR)$(udfdir)
> 
> while generating man3dir is probably OK when not configuring COBOL
> the udfdir creation looks spurious and is repeated(?) in
> cobol/Make-lang.in:
> 
> cobol.install-common: installdirs
>         $(INSTALL_PROGRAM) gcobol$(exeext)      $(DESTDIR)$(bindir)/
>         $(INSTALL_PROGRAM) cobol1$(exeext)      $(DESTDIR)
> $(libexecsubdir)/ $(INSTALL) -m 755 $(srcdir)/cobol/gcobc $(DESTDIR)
> $(bindir)/ mkdir -p $(DESTDIR)$(datadir)/gcobol/udf
>         $(INSTALL_DATA) $(srcdir)/cobol/udf/*   $(DESTDIR)
> $(datadir)/gcobol/udf/
> 
> I don't know exactly what UDF is, but I'm going to prune the
> gcc/Makefile.in UDF changes.  Does that analysis look OK?

We need the UDF directory, but it's enough to create it jjst once, and only for 
cobol.  

UDF stands for "user defined function".  COBOL, which used to define
only "intrinsic functions", supplied with the compiler (similar to a
standard library), and otherwise had no functions.  For the last 20
years or so, COBOL has also allowed the user to define functions himself
in COBOL, and invoke them the same way intrinsic functions have always
been invoked.  

Because their use is syntactically identical, we supply UDFs to
emulate functions that other COBOL compiler supply as non-standard
intrinstic functions.  So far, that set is small; we supply only one
UDF to date: 

        $ ls /tmp/build-try/share/gcobol/udf/
        stored-char-length.cbl

I think you're suggesting it would be better *not* to create the udf
directory in gcc/Makefile.in, since that would leave an empty directory
unless the user built gcobol.  

This patch seems to work, and uses mkinstalldirs instead of "mkdir -p":

[snip]
diff --git a/gcc/cobol/Make-lang.in b/gcc/cobol/Make-lang.in
index de967e3d78e..7447118ab3e 100644
--- a/gcc/cobol/Make-lang.in
+++ b/gcc/cobol/Make-lang.in
@@ -281,7 +281,7 @@ cobol.install-common: installdirs
        $(INSTALL_PROGRAM) gcobol$(exeext)      $(DESTDIR)$(bindir)/
        $(INSTALL_PROGRAM) cobol1$(exeext)      $(DESTDIR)$(libexecsubdir)/
        $(INSTALL) -m 755 $(srcdir)/cobol/gcobc $(DESTDIR)$(bindir)/
-       mkdir -p $(DESTDIR)$(datadir)/gcobol/udf
+       $(mkinstalldirs) $(DESTDIR)$(datadir)/gcobol/udf
        $(INSTALL_DATA) $(srcdir)/cobol/udf/*   $(DESTDIR)$(datadir)/gcobol/udf/
 
 cobol.install-man: installdirs
@@ -291,7 +291,6 @@ cobol.install-man: installdirs
 cobol.install-info:
 
 cobol.install-pdf: installdirs gcobol.pdf gcobol-io.pdf
-       mkdir -p $(DESTDIR)$(datadir)/gcobol/pdf
        $(INSTALL_DATA) gcobol.pdf gcobol-io.pdf $(DESTDIR)$(pdfdir)/
 
 cobol.install-plugin:
[pins]

That leaves the creation of all directories up to Makefile.in, except for the 
udf directory, which cobol creates for itself if configured.  

> Building gcobol with GCC 7 shows
> 
> gcc/cobol/except.cc:285:70: sorry, unimplemented: non-trivial
> designated initializers not supported

I'm surprised that's the only occurence!  For example, in
gcc/cobol/symbols.cc, 

        static symbol_elem_t
        elementize( cbl_field_t& field ) {
          symbol_elem_t elem = { .type = SymField, .elem = {.field = field} };
          return elem;
        }

What is the right answer?  Designated initializers are part of C99, but
weren't added to C++ until C++20
(https://en.cppreference.com/w/cpp/language/initialization).  Strictly
speaking, we should remove all of them, because our baseline is C++14.  

> that needs to be sorted out (post-merge is OK).
> 
> I'm preparing a branch with squashed merged from cobol-patched and
> will push that later
> today to a branch on gcc.gnu.org git and tomorrow from there to trunk.

Excellent, excellent news.  Thank you for your patience and guidance.  

Regards, 

--jkl

Reply via email to