newsGnuCOBOL (formerly OpenCOBOL) - News: Release of GnuCOBOL 3.1.2

Latest News
Release of GnuCOBOL 3.2 posted by mensch, Mon 14 Aug 2023 09:43:02 PM UTC
Release of GnuCOBOL 3.1.2 posted by mensch, Tue 05 Jan 2021 06:24:20 PM UTC
GnuCOBOL 3.1-rc-1 on posted by mensch, Thu 02 Jul 2020 07:13:19 AM UTC
GnuCOBOL 2.2 released! posted by edwardhart, Thu 07 Sep 2017 11:42:02 AM UTC
GnuCOBOL 2.2rc on posted by btiffin, Sat 22 Jul 2017 03:14:18 PM UTC

Release of GnuCOBOL 3.1.2

Item posted by Simon Sobisch <mensch> on Tue 05 Jan 2021 06:24:20 PM UTC.

New GnuCOBOL features

  • XML GENERATE statement

   (note: runtime support needs additional library libxml2)

  • JSON GENERATE statement

   (note: runtime support needs additional library cJSON or JSON-C)

  • CONTINUE AFTER statement (COBOL 202x) implemented, also handle fractions

   of seconds in C$SLEEP now

  • TYPEDEF and SAME AS (COBOL 2002) implemented, including the MicroFocus

   and RM/COBOL variants

  • >>TURN (COBOL 2002) directive implemented, allowing some exception checks

   to be turned on/off per source as desired

  • Improved support for different compiler extensions (ACUCOBOL, IBM,

   Fujitsu, MicroFocus COBOL, Microsoft COBOL, RM/COBOL, CA Realia and more)

  • file handling: include support for a callable EXTFH interface also provided

   by several compilers including Micro Focus
   This allows users to insert an external file handler while retaining
   all of the normal COBOL I/O functions with a possible callback to libcob.
   To have the compiled program call `yourfh()` for file I/O use:
   `cobc -fcallfh=yourfh`
   In turn `yourfh()` may call `EXTFH()` to use I/O functions from GnuCOBOL.
   The external file handler can also be directly invoked from COBOL, too,
   using `CALL "EXTFH"`.
    Note: Not each flag contained in the FCD3 is handled already 

  • file handling: added support for [RE]WRITE FILE file FROM source

  • file handling: name mapping adjusted (improved MF and ACU-compatibility):

   entries starting with a period or number are not resolved any more,
   periods in the external identifier are always replaced by underscore
    -> MY.FILE is resolved by DD_MY_FILE, dd_MY_FILE, MIFILE now;
   prefixes "-F " and "-D " are removed from external names;
   if filename is not absolute after translation, COB_FILE_PATH is now
   still applied;
   File name mapping now applies both to COBOL statements and CALLable
   CBL_ and C$ file routines.

  • Screen I/O: initial mouse support (for details see runtime.cfg),

   use of CURSOR clause in SPECIAL-NAMES for positioning on ACCEPT

  • on abort a stack trace will be genereated, this can be suppressed by

   runtime configuration option COB_STRACK_TRACE

  • the dump that is generated on abort (depending on -fdump at compile-time)

   was heavily improved and combines consecutive identical OCCURS items,
   leading to smaller dump files

  • changes in handling COPY statement:

   * copybook names that contain an extension aren't searched with additional
     extensions [as post-rc1-change this may be set to old behaviour by
     defining COB_MULTI_EXTENSION when building GnuCOBOL/cobc]
   * library names are now tested for environment "COB_COPY_LIB_libname",
     allowing the directory to specified externally (also as no-directory
     by exporting with empty value) and has a fallback (with a warning) to
     be effectively ignored (as previous versions did this)

Removed functions

  • SCREEN SECTION, REPORT-WRITER module: removed non-standard extension

   "LINE / COL signed-integer" (inadvertently available since 2.2/3.0rc1);
   which will now raise an error "unsigned integer expected";
   if used replace by standard "LINE / COL +/- integer"

Obsolete features

(will be removed in the next version if no explicit user requests are raised)

  • support for Borland C compiler and linker
  • -fif-cutoff flag for cobc (currently disabled, see entry below in 3.0rc1)
  • old OpenCOBOL-only-EXTFH

Changes to the COBOL compiler (cobc) options

  • new options:

   -f[no]-ec=exception-name to tune the exception checks similar to the >>TURN
       directive, you may also leave out the "EC-" prefix here, example to
       enable all checks but disable all bound checks but OCCURS DEPENDING ON:
       cobc -debug -fno-ec=bound -fec=bound-odo

  • adjustments to warning options:

   -Wextra "new" option to enable every possible warning that is not dialect
       specific (this option used to be called -W)
   -Wadditional  new warning group for all warnings that don't have a group
       on their own
   -Wno-error and -Wno-error=<warning> to treat (specific <warning>s) not as error
   -Wdangling-text for raising the warning "source text after program area",
       not included in -Wall any more
   -Wno-ignored-error allows to suppress messages that normally would be an
       error and are only allowed because they are never executed
   -Wcorresponding is now enabled by default

   -f[no]-diagnostics-show-option, enabled by default, shows the
    command line option responsible for the diagnostic message

   extra information to a warning (or error) is now marked as "note:"

  • the interal Xref got a huge speedup, has all references in ascending order

   now and includes the total amount of direct references

  • the interal listing got a speedup and has all error references in

   ascending order now

  • cobc -g (and configure --enable-debug) use the most expressive

   debugging options available on the system

  • cobc -g now auto-includes references to the COBOL source file and to

   all ENTRY and SECTION elements to ease source level debugging

Changes in the COBOL runtime (libcob)

  • Messages from the COBOL runtime are also translated now (if installed).

   To prevent this disable translations in general with using the configure
   option --disable-nls (or by deactivating ENABLE_NLS in config.h).

  • libcob.h does no longer auto-include gmp.h (behavior since 2.x), if you link

   against libcob and need cob_decimal include gmp.h/mpir.h yourself before;
   otherwise you do not need it in your include path any more

  • execution times of INSPECT and INITIALIZE with OCCURS were heavily cut down

  • convenience functions for direct C access to COBOL fields and for debugging

   were added, see new C-API documentation

  • first-time file-locking under Win32

  • Breaking change: previously the return-code of registered error handlers

   (by CBL_ERROR_PROC) were ignored. This was changed according to the
   documentation for CBL_ERROR_PROC -> a RETURN-VALUE of ZERO skips further
   error handlers to be called, including the internal one.

New build features

  • Running the internal tests by make check now fails if the testsuite has any

   unexpected result.

  • The modules and test programs in the NIST COBOL-85 test suite (tests/cobol85)

   may now be build and/or tested and/or the test results checked separately.
   You now may also run the tests with a previous installed version of GnuCOBOL
   (or a version specified by a manual temporary setup).
   For details see tests/cobol85/README.

  • new configure option --with-math=ARG to specify which math multiple precision

   library is to be used, where ARG may be: check (default), gmp, mpir

  • new configure options --with-xml2 / -without-xml2 to explicit force/disable

   XML runtime support, otherwise it will be included if found as working

  • new configure option --with-json / -without-json to explicit force/disable

   JSON runtime support, otherwise it will be included if found as working
   Note: As a special case you may built-in cJSON by placing its source in
   the folder "libcob". If it is included there, this version will be compiled
   into libcob. It may be enforced with --with-json=local,
   like --with-json=cjson and --with-json=json-c enforce the given library.

  • To adjust the build system for GMP/MPIR you may use the new variables

   If unset configure will try pkg-config.

  • To adjust configure to use libxml2 you may use the new variables XML2_CFLAGS

   and XML2_LIBS. If unset configure will use pkg-config / xml2-config.

  • To adjust configure to use libcjson you may use the new variables CJSON_CFLAGS

   and CJSON_LIBS, similar JSON_C_CFLAGS and JSON_C_LIBS for libjson-c.
   If unset configure will use pkg-config.

  • new configure option --enable-hardening to either enable GNU C's

   hardening options or leave as-is, or disable (which previous versions
   effectively did)

  • build system: defaults.h is not created or included any more, all configure

   provided defines are now found in the single header config.h

  • Any time after `make` you can call `pre-inst-env` script to use the still-

   uninstalled binaries. Samples:
   pre-inst-env cobc -xj prog.cob
   pre-inst-env cobcrun -M prog start
   pre-inst-env may also be called without parameters to start a new shell
   session with the environment adjusted to use the uninstalled version.


  • Too much bug fixes to list here (please check ChangeLogs for full details),

  includes the following CVEs:
   compiler (may be triggered with special crafted source files)
   CVE-2019-14468, CVE-2019-14486, CVE-2019-14528, CVE-2019-14541,
   CVE-2019-16396, CVE-2019-16395

  • GnuCOBOL's getopt implementation honors POSIXLY_CORRECT now:

  if set to any value the option parsing in cobc, cobcrun and CBL_GC_GETOPT
  stops at the first nonoption, otherwise it stays with the old behaviour and
  re-orders nonoptions to the end)

Known issues in 3.1

  • testsuite:

  * if built with vbisam, cisam or disam, depending on the version used, some
    tests will lead to UNEXPECTED PASS, while others may fail
  * possibly failing tests (false positives):
    * temporary path invalid
    * compiler outputs (assembler)
    * compile from stdin
  * NIST: OBNC1M.CBL false positive (the test runner uses a nonportable way of
    emulating a program kill)

  • the recent additions of ">> TURN" and "variable LIKE variable" may not work

   as expected in all cases

  • features that are known to not be portable to every environment yet

   (especially when using a different compiler than GCC)
    * function with variable-length RETURNING item
    * USAGE POINTER, which may need to be manually aligned


Back to the top

Powered by Savane 3.13-9f0e.
Corresponding source code