From 34a735a17886e781108b60d0a0b970310d418257 Mon Sep 17 00:00:00 2001 From: "James K. Lowden" <jklowden@symas.com> Date: Sun, 2 Feb 2025 12:02:41 -0500 Subject: [PATCH] fix "make install", honor NOT DEFINED, and doc markup fixes --- gcc/cobol/Make-lang.in | 38 +++++---- gcc/cobol/cdf.y | 6 +- gcc/cobol/gcobol.1 | 190 +++++++++++++++++++++++++++-------------- 3 files changed, 150 insertions(+), 84 deletions(-) diff --git a/gcc/cobol/Make-lang.in b/gcc/cobol/Make-lang.in index 034a3f9efeef..e5de58441260 100644 --- a/gcc/cobol/Make-lang.in +++ b/gcc/cobol/Make-lang.in @@ -56,21 +56,21 @@ LIB_SOURCE ?= $(srcdir)/../libgcobol # CPPFLAGS = \ - -std=c++17 \ + -std=c++17 \ $(MAX_ERRORS) \ -Iinclude \ -I$(BINCLUDE) \ - -I$(LIB_INCLUDE) \ + -I$(LIB_INCLUDE) \ -Wno-cpp \ -Wno-missing-field-initializers \ - -DEXEC_LIB=\"$(DESTDIR)$(libdir)\" + -DEXEC_LIB=\"$(PREFIX)/$(libdir)\" \ $(END) -YACC = bison +BISON = bison YFLAGS = -Werror -Wmidrule-values -Wno-yacc \ --debug --verbose -LEX = flex +FLEX = flex LFLAGS = -d -Ca # @@ -166,12 +166,12 @@ gcobol$(exeext): \ # parse.c in the list for scan.o because that's the one make(1) knows about. cobol/parse.c: cobol/parse.y - $(YACC) -o $@ $(YFLAGS) \ + $(BISON) -o $@ $(YFLAGS) \ --defines=cobol/parse.h \ --report-file=cobol/parser.out $< cobol/cdf.c: cobol/cdf.y - $(YACC) -o $@ $(YFLAGS) \ + $(BISON) -o $@ $(YFLAGS) \ --defines=cobol/cdf.h --report-file=cobol/cdf.out $< # See "Trailing context is getting confused with trailing optional patterns" @@ -179,9 +179,9 @@ cobol/cdf.c: cobol/cdf.y FLEX_WARNING = warning, dangerous trailing context cobol/scan.c: cobol/scan.l - $(LEX) -o$@ $(LFLAGS) $< >$@~ 2>&1 + $(FLEX) -o$@ $(LFLAGS) $< >$@~ 2>&1 awk '! /$(FLEX_WARNING)/ {print > "/dev/stderr"; nerr++} \ - END {print "$(LEX):", NR, "messages" > "/dev/stderr"; \ + END {print "$(FLEX):", NR, "messages" > "/dev/stderr"; \ exit nerr}' $@~ @rm $@~ @@ -264,10 +264,13 @@ cobol.start.encap: gcobol$(exeext) cobol.rest.encap: cobol.install-common: installdirs - $(INSTALL_PROGRAM) gcobol$(exeext) $(DESTDIR)$(bindir)/$(gcobol_INSTALL_NAME)$(exeext) - $(INSTALL) -m 755 $(srcdir)/cobol/gcobc $(DESTDIR)$(bindir)/ - mkdir -p $(DESTDIR)$(bindir)/udf/ - $(INSTALL_DATA) $(srcdir)/cobol/udf/* $(DESTDIR)$(datadir)/cobol/udf + $(INSTALL_PROGRAM) gcobol$(exeext) cobol1$(exeext) \ + $(DESTDIR)$(bindir)/ + $(INSTALL) -m 755 $(srcdir)/cobol/gcobc \ + $(DESTDIR)$(bindir)/ + mkdir -p $(DESTDIR)$(datadir)/gcobol/udf + $(INSTALL_DATA) $(srcdir)/cobol/udf/* \ + $(DESTDIR)$(datadir)/gcobol/udf/ cobol.install-man: installdirs $(INSTALL_DATA) $(srcdir)/cobol/gcobol.1 $(DESTDIR)$(man1dir)/ @@ -290,9 +293,12 @@ cobol.pdf: cobol.html: cobol.uninstall: - -rm -f gcobol$(exeext) cobol1$(exeext) - -rm -f $(cobol_OBJS) - + rm -rf $(DESTDIR)$(bindir)/$(gcobol_INSTALL_NAME)$(exeext) \ + $(DESTDIR)$(bindir)/$(cobol1_INSTALL_NAME)$(exeext) \ + $(DESTDIR)$(bindir)/gcobc \ + $(DESTDIR)$(datadir)/gcobol/udf/ \ + $(DESTDIR)$(man1dir)/gcobol.1 \ + $(DESTDIR)$(man3dir)/gcobol.3 cobol.man: cobol.mostlyclean: diff --git a/gcc/cobol/cdf.y b/gcc/cobol/cdf.y index e296f79d2e60..08b53412b26f 100644 --- a/gcc/cobol/cdf.y +++ b/gcc/cobol/cdf.y @@ -526,10 +526,12 @@ cdf_eval_obj: cdf_cond_expr ; cdf_cond_expr: BOOL - | NAME DEFINED + | NAME DEFINED[maybe] { auto p = dictionary.find($1); - if( p == dictionary.end() ) { + bool found = p != dictionary.end(); + if( !$maybe ) found = ! found; + if( ! found ) { $$ = !$2; dbgmsg("CDF: %s not found in dictionary (result %s)", $1, $$? "true" : "false"); diff --git a/gcc/cobol/gcobol.1 b/gcc/cobol/gcobol.1 index 71f334ece6fa..583d24935d71 100644 --- a/gcc/cobol/gcobol.1 +++ b/gcc/cobol/gcobol.1 @@ -1,7 +1,7 @@ .ds lang COBOL .ds gcobol GCC\ \*[lang]\ Front-end .ds isostd ISO/IEC 1989:2023 -.Dd \& December 2022 +.Dd \& February 2025 .Dt GCOBOL 1\& "GCC \*[lang] Compiler" .Os Linux .Sh NAME @@ -283,7 +283,7 @@ may be .Bl -tag -compact .It ibm to indicate IBM COBOL 6.3 syntax, specifically -.D1 STOP <number> . +.D1 STOP <number>. .It gnu to indicate GnuCOBOL syntax .It mf @@ -371,19 +371,19 @@ option shows the shift and reduce actions taken by the parser. .El . .Sh COMPILATION SCENARIOS -.Ss gcobol Pa xyz.cob -.Ss gcobol -main Pa xyz.cob -.Ss gcobol -main= Ns Pa xyz.cob Pa xyz.cob +.D1 gcobol Ar xyz.cob +.D1 gcobol -main Ar xyz.cob +.D1 gcobol -main= Ns Ar xyz.cob Ar xyz.cob These are equivalent. The -.Pa xyz.cob +.Ar xyz.cob code is compiled and a .Fn main function is inserted that calls the first PROGRAM-ID in the -.Pa xyz.cob +.Ar xyz.cob source file. - -.Ss gcobol -nomain Pa xyz.cob Pa elsewhere.o +.Pp +.D1 gcobol -nomain Ar xyz.cob Ar elsewhere.o The .Fl nomain option prevents a @@ -392,50 +392,49 @@ function from being generated by the gcobol compiler. A .Fn main entry point must be present in the -.Pa elsewhere.o +.Ar elsewhere.o module; without it the linker will report a .Dq "missing main" error. - -.Ss gcobol Pa aaa.cob Pa bbb.cob Pa ccc.cob -.Ss gcobol -main Pa aaa.cob Pa bbb.cob Pa ccc.cob +.Pp +.D1 gcobol Ar aaa.cob Ar bbb.cob Ar ccc.cob +.D1 gcobol -main Ar aaa.cob Ar bbb.cob Ar ccc.cob The two commands are equivalent. The three source code modules are compiled and linked together along with a generated .Fn main function that calls the first PROGRAM-ID in the -.Pa aaa.cob +.Ar aaa.cob module. - -.Ss gcobol Pa aaa.cob Pa bbb.cob Fl main Pa ccc.cob -.Ss gcobol -main Ns = Ns Pa ccc.cob Pa aaa.cob Pa bbb.cob Pa ccc.cob +.Pp +.D1 gcobol Ar aaa.cob Ar bbb.cob Fl main Ar ccc.cob +.D1 gcobol -main Ns = Ns Ar ccc.cob Ar aaa.cob Ar bbb.cob Ar ccc.cob These two commands have the same result: An -.Pa a.out +.Ar a.out executable is created that starts executing at the first PROGRAM-ID in -.Pa ccc.cob . - -.Ss gcobol -main Ns = Ns Pa bbb.cob:b-entry Pa aaa.cob Pa bbb.cob Pa ccc.cob +.Ar ccc.cob . +.Pp +.D1 gcobol -main Ns = Ns Ar bbb.cob:b-entry Ar aaa.cob Ar bbb.cob Ar ccc.cob An -.Pa a.out +.Ar a.out executable is created that starts executing at the PROGRAM-ID .Ar "b-entry" . - -.Ss gcobol -c Pa aaa.cob -.Ss gcobol -c -main Pa bbb.cob -.Ss gcobol -c Pa ccc.cob -.Ss gcobol Pa aaa.o Pa bbb.o Pa ccc.o +.Pp +.D1 gcobol -c Ar aaa.cob +.D1 gcobol -c -main Ar bbb.cob +.D1 gcobol -c Ar ccc.cob +.D1 gcobol Ar aaa.o Ar bbb.o Ar ccc.o The first three commands each create a .o file. The -.Pa bbb.o +.Ar bbb.o file will contain a .Fn main entry point that calls the first PROGRAM-ID in -.Pa bbb . -The fourth links the -three .o files into an -.Pa a.out. - +.Ar bbb . +The fourth links the three .o files into an +.Ar a.out . +. .Sh EBCDIC The .Fl finternal-ebcdic @@ -584,13 +583,22 @@ The following are implemented: .Pp .Bl -tag -offset 5n -compact .It EC-FUNCTION-ARGUMENT +for the following functions: .Bl -item -compact -.It ACOS.It ANNUITY -.It ASIN -.It LOG -.It LOG10 -.It PRESENT-VALUE -.It SQRT +.It +ACOS +.It +ANNUITY +.It +ASIN +.It +LOG +.It +LOG10 +.It +PRESENT-VALUE +.It +SQRT .El .It EC-SORT-MERGE-FILE-OPEN .It EC-BOUND-SUBSCRIPT @@ -895,31 +903,49 @@ has no effect; the two are interchangeable. .. . .Ss Compiler-Directing Facility (CDF) -The CDF is partially implemented, and should be used with caution -because no comprehensive test suite has been identified. The status -of CDF directives and statements is shown below. +The CDF should be used with caution because no comprehensive test +suite has been identified. . .Ss Conditional Compilation .Bl -tag -width >>DEFINE -.It >> Ns Sy DEFINE Ar name Li = Ar expression +.It >> Ns Sy DEFINE Ar name Sy AS Bro Ar expression Li | Sy PARAMETER Brc Op Sy OVERRIDE Define .Ar name -to have the value -.Ar expression -for the purposes of conditional compilation. +as a compilation variable to have the value +.Ar expression . +If +.Ar name +was previously defined, +.Sy OVERRIDE +is required, else the directive is invalid. .Sy AS PARAMETER -is unimplemented. -.It >> Ns Sy IF Ar expression Li ... >> Ns Sy END-IF +is accepted, but has no effect in +.Nm . +. +.It >> Ns Sy DEFINE Ar name AS Sy OFF +releases the definition +.Ar name , +making it subsequently invalid for use. +.\" ISO requires AS; cdf.y does not. +. +.It >> Ns Sy IF Ar cce Ar text Oo >> Ns Sy ELSE Ar alt-text Oc Li >> Ns Sy END-IF evaluates -.Ar expression +.Ar cce , +a +.Em "constant conditional expression\/" , for conditional compilation. If a name, -.Ar expression +.Ar cce may be defined with the .Fl D -command-line parameter. +command-line parameter. If true, the \*[lang] text +.Ar text +is compiled. If false, +.Ar else-text , +if present, is compiled. .Bo Sy IS Bo Sy NOT Bc Bc Sy DEFINED is supported. Boolean literals are not supported. +. .It >> Ns Sy EVALUATE Not implemented. .El @@ -1121,27 +1147,59 @@ was invoked. .Nm implements all intrinsic functions defined by \*[isostd], plus a few others. They are listed alphabetically below. -.Pp -ABS ACOS ANNUITY ASIN ATAN BASECONVERT BIT_OF BIT_TO_CHAR -BOOLEAN_OF_INTEGER BYTE_LENGTH CHAR CHAR_NATIONAL COMBINED_DATETIME -CONCAT CONVERT COS CURRENT_DATE DATE_OF_INTEGER DATE_TO_YYYYMMDD -DAY_OF_INTEGER DAY_TO_YYYYDDD DISPLAY_OF E EXCEPTION_FILE +.Bl -item -compact +.It +ABS ACOS ANNUITY ASIN ATAN +.It +BASECONVERT BIT_OF BIT_TO_CHAR BOOLEAN_OF_INTEGER BYTE_LENGTH +.It +CHAR CHAR_NATIONAL COMBINED_DATETIME CONCAT CONVERT COS CURRENT_DATE +.It +DATE_OF_INTEGER DATE_TO_YYYYMMDD DAY_OF_INTEGER DAY_TO_YYYYDDD DISPLAY_OF +.It +E EXCEPTION_FILE EXCEPTION_FILE_N EXCEPTION_LOCATION EXCEPTION_LOCATION_N -EXCEPTION_STATEMENT EXCEPTION_STATUS EXP EXP10 FACTORIAL FIND_STRING +EXCEPTION_STATEMENT EXCEPTION_STATUS EXP EXP10 +.It +FACTORIAL FIND_STRING FORMATTED_CURRENT_DATE FORMATTED_DATE FORMATTED_DATETIME -FORMATTED_TIME FRACTION_PART HEX_OF HEX_TO_CHAR HIGHEST_ALGEBRAIC +FORMATTED_TIME FRACTION_PART +.It +HEX_OF HEX_TO_CHAR HIGHEST_ALGEBRAIC +.It INTEGER INTEGER_OF_BOOLEAN INTEGER_OF_DATE INTEGER_OF_DAY -INTEGER_OF_FORMATTED_DATE INTEGER_PART LENGTH LOCALE_COMPARE +INTEGER_OF_FORMATTED_DATE INTEGER_PART +.It +LENGTH LOCALE_COMPARE LOCALE_DATE LOCALE_TIME LOCALE_TIME_FROM_SECONDS LOG LOG10 LOWER_CASE -LOWEST_ALGEBRAIC MAX MEAN MEDIAN MIDRANGE MIN MOD MODULE_NAME -NATIONAL_OF NUMVAL NUMVAL_C NUMVAL_F ORD ORD_MAX ORD_MIN PI -PRESENT_VALUE RANDOM RANGE REM REVERSE SECONDS_FROM_FORMATTED_TIME +LOWEST_ALGEBRAIC +.It +MAX MEAN MEDIAN MIDRANGE MIN MOD MODULE_NAME +.It +NATIONAL_OF NUMVAL NUMVAL_C NUMVAL_F ORD +.It +ORD_MAX ORD_MIN +.It +PI PRESENT_VALUE +.It +RANDOM RANGE REM REVERSE +.It +SECONDS_FROM_FORMATTED_TIME SECONDS_PAST_MIDNIGHT SIGN SIN SMALLEST_ALGEBRAIC SQRT -STANDARD_COMPARE STANDARD_DEVIATION SUBSTITUTE SUM TAN -TEST_DATE_YYYYMMDD TEST_DAY_YYYYDDD TEST_FORMATTED_DATETIME -TEST_NUMVAL TEST_NUMVAL_C TEST_NUMVAL_F TRIM ULENGTH UPOS UPPER_CASE -USUBSTR USUPPLEMENTARY UUID4 UVALID UWIDTH VARIANCE WHEN_COMPILED +STANDARD_COMPARE STANDARD_DEVIATION SUBSTITUTE SUM +.It +TAN TEST_DATE_YYYYMMDD TEST_DAY_YYYYDDD TEST_FORMATTED_DATETIME +TEST_NUMVAL TEST_NUMVAL_C TEST_NUMVAL_F TRIM +.It +ULENGTH UPOS UPPER_CASE +USUBSTR USUPPLEMENTARY UUID4 UVALID UWIDTH +.It +VARIANCE +.It +WHEN_COMPILED +.It YEAR_TO_YYYY +.Bl . .Ss Binary floating point DISPLAY How the DISPLAY presents binary floating point numbers depends on the value. -- GitLab