3.0.1 : 2026-10-09T14:16:42-0400

  [INCOMPATIBLE CHANGE]

    * the perl, perl_hash, and yaml formats and SysArch.pm output
      list variables (e.g. os_versions) as arrays even if they have
      a single element; previously these were output as scalars.
      Other variables are never output as arrays; previously any
      value containing a colon was.

    * sysarch exits with an error if the kernel release or machine
      name (or on macOS, the version or machine type) contains a
      colon, as colons separate list elements.

    * the nul output format now marks list values with a trailing
      colon, so that a list with one element can be told from a
      scalar.

3.0.0 : 2026-10-09T13:44:08-0400

  [INCOMPATIBLE CHANGE]

    * Solaris is no longer supported; sysarch exits with an error
      on SunOS

    * Linux distributions are identified only via /etc/os-release.
      Systems without it (e.g. RHEL/CentOS 6 and earlier), or whose
      os-release has no numeric VERSION_ID (e.g. Debian testing),
      are no longer supported.  /etc/issue, lsb_release,
      /etc/redhat-release, and /etc/slackware-version are no
      longer consulted.

    * glibc versions no longer have a trailing period.  Recent
      glibc releases end their version banner with a period, which
      was kept in os_uversion and the platform names built from it
      (e.g. x86_64-linux-2.39.), and duplicated the version in
      os_uversions and the platform lists (2.39.:2.39:...).  These
      are now e.g. x86_64-linux-2.39 and 2.39:2.38:...

  [ENHANCEMENT]

    * Linux distributions are identified via /etc/os-release, which
      is faster and more reliable than the previous methods.

    * --help and --manual no longer require pod2usage; the
      documentation is embedded in sysarch

    * various speedups

    * --output -list lists the available output formats

    * -gmake_extract defines _SYSARCH, the sysarch it calls, as the
      installed sysarch, unless it is already defined.  Previously
      the including Makefile had to define it.

    * options which take a value (--output, --pfx) also accept it as
      --option=value.  Giving a value to an option which doesn't
      take one, or omitting a required value, is now an error.

    * new output format, nul, which NUL terminates each variable's
      name and value, so needs no quoting

    * SysArch.pm parses sysarch's nul output, rather than its YAML
      output (slow, and requires YAML::Tiny) or eval'ing its
      perl_hash output (a security risk)

  [BUG FIX]

    * -gmake_extract ignored --pfx.  The macros it defines are now
      prefixed, and the sysarch -gmake_cat call it generates is
      passed --pfx.

    * values are now escaped in the shell, Perl, YAML, and make output
      formats.  A ' (or a ! for csh) in a value broke the generated
      code, or allowed code injection.  Values which a format can't
      represent (e.g. a newline for csh, YAML, and make, or white
      space for gmake_cat) are an error.

    * YAML values are single quoted.  Unquoted, YAML parsers other
      than YAML::Tiny read versions such as 8.10 and 2.30 as the
      numbers 8.1 and 2.3.

    * --pfx must be a valid variable name prefix

    * Ubuntu systems without lsb_release were not identified

    * -gmake_extract printed its closing comment banner at the
      start of the output rather than the end

    * requesting an invalid variable name (e.g. foo-bar) printed a
      shell error but exited successfully, and the make formats
      generated output for it.  Unknown and invalid variable names
      now give the same error message in all output formats, and
      sysarch exits with an error before generating any output.

  [BUILD FIX]

    * tests now use bats, which is by default vendored into the
      distribution

    * GNU make is required

    * PDF documentation may be generated with groff's native PDF output

    * add bootstrap script for building outside of the MST build
      environment

    * sysarch is now a single source file, sysarch.in, rather than
      being assembled from several; the build appends only the
      generated manual

    * update autoconf & make snippets, revise Makefiles

  [INTERNALS]

    * removed dead code, including the unused compat.sh and
      buildvars.sh, and the mapping of Debian 5-8 pre-release
      codenames (e.g. lenny/sid) to versions

    * simplified the code; output is unchanged

    * each output format is implemented by a single format_<name>
      function, from which the option parsing and -list are derivare now
      prefixed, and the sysarch -gmake_cat call it generates is
      passed --pfx.

    * values are now escaped in the shell, Perl, YAML, and make output
      formats.  A ' (or a ! for csh) in a value broke the generated
      code, or allowed code injection.  Values which a format can't
      represent (e.g. a newline for csh, YAML, and make, or white
      space for gmake_cat) are an error.

    * YAML values are single quoted.  Unquoted, YAML parsers other
      than YAML::Tiny read versions such as 8.10 and 2.30 as the
      numbers 8.1 and 2.3.

    * --pfx must be a valid variable name prefix

    * Ubuntu systems without lsb_release were not identified

    * -gmake_extract printed its closing comment banner at the
      start of the output rather than the end

    * requesting an invalid variable name (e.g. foo-bar) printed a
      shell error but exited successfully, and the make formats
      generated output for it.  Unknown and invalid variable names
      now give the same error message in all output formats, and
      sysarch exits with an error before generating any output.

  [BUILD FIX]

    * tests now use bats, which may be vendored into the distribution

    * GNU make is required

    * PDF documentation may be generated with groff's native PDF output

    * add bootstrap script for building outside of the MST build
      environment

    * sysarch is now a single source file, sysarch.in, rather than
      being assembled from several; the build appends only the
      generated manual

    * update autoconf & make snippets, revise Makefiles

  [INTERNALS]

    * removed dead code, including the unused compat.sh and
      buildvars.sh, and the mapping of Debian 5-8 pre-release
      codenames (e.g. lenny/sid) to versions

    * simplified the code; output is unchanged

    * each output format is implemented by a single format_<name>
      function, from which the option parsing and -list are derived

2.2.13 : 2026-05-08T11:52:20-0400

  [ENHANCEMENT]

    * add support for Rocky Linux

2.2.12 : 2023-04-21T10:15:34-0400

  [BUG FIX]

    * previous fix for Intel Core i? chips was broken

2.2.11 : 2023-01-20T22:54:14-0500

  [BUG FIX]

    * later Intel Core i? chips were not properly detected

  [BUILD FIX]

    * allow parallel make w/o recursive makefiles

2.2.10 : 2022-10-12T11:08:20-0400

  [ENHANCEMENT]

    * add support for AMD Epyc cpu

2.2.9 : 2020-05-29T08:40:41-0400

  [BUG FIX]

    * setting the environment variable CC to a non-compiler
      caused warnings under Debian

2.2.8 : 2017-06-22T10:02:46-0400

  [BUILD FIX]

    * update expected test results for machine "central"

2.2.7 : 2017-06-21T11:11:51-0400

  [BUG FIX]

    * SysPathSubst.pm contained the wrong embedded path to sysarch

2.2.6 : 2016-07-08T14:50:41-0400

  [ENHANCEMENT]

    * support multiarch on Debian based systems
    * minor speedups

2.2.5 : 2016-02-22T12:26:58-0500

  [ENHANCEMENT]

    * Variables with colon separated values are now output as arrays
      in Perl and YAML formats

2.2.4 : 2015-12-07T17:46:58-05:00

  [BuG FIX]

    * compact_paths: when called in a scalar context with an undefined
      delimiter, it should return the first element in the path.

2.2.3 : 2015-05-12T17:23:44-04:00

  [BUG FIX]

    * unrecognized CPU type is now always a warning; hw_cpu is now set
      to UNKNOWN in that instance.

  [ENHANCEMENT]
    * make detection of Intel Core i? family more general

2.2.2 : 2013-07-17T14:59:27-04:00

first steps towards not requiring a document generator on the
installation machine

* documentation for sysarch is now independent of the executable
* PDF is now createable by pod2pdf in addition to ps2pdf

2.2.1 : 2013-07-02T18:04:07-04:00

* the order of compatible platforms is now os_maj:os_versions... e.g.
  N N.M N.M-1 N.M-2
  so transitions from N.M to N are easier

2.2.0 : 2013-06-19T16:11:45-04:00

[INCOMPATIBLE CHANGE]

* debian now updates its minor version in /etc/debian_version.  since
  debian is compatible across minor versions, platform_os_generic is
  now the major version.

2.1.28 : 2012-10-09T17:42:27-04:00

* improved code for Debian hosts

* better support for detection of development versions without version
  numbers

* recognize Debian wheezy & Ubuntu quantal


2.1.27 : 2012-05-07T15:15:20-04:00

* minor optimizations

2.1.26 : 2012-05-02T20:23:50-04:00

* rebundle SysArch.pm to simplify installation of other code

2.1.25 : 2012-04-25T14:55:29-04:00

* recognize Slackware Linux

2.1.24 : 2012-03-20T11:48:50-04:00

* recognize Intel Core I5, Intel Atom, and "Virtual" CPUs

2.1.23 : 2012-01-12T17:44:16-05:00

* fixed typo which caused lsb_release to always be called when looking
  for the OS

* better short-circuit logic for determining os

2.1.22 : 2010-07-03T11:42:21-04:00

* pick up Diab's fixed os.sh.in (2.1.21 didn't 'take')

2.1.21 : 2010-07-02T16:10:34-04:00

* fix for Ubuntu running on Acer 1810t

2.1.20 : 2010-05-19T16:33:36-04:00

* previous release broke platforms with no minor os version

2.1.19 : 2010-05-17T16:44:15-04:00

* CentOS & RHEL versions are (supposedly) compatible across minor versions
  update os_versions to support that, and make platform_os_generic be just
  the major version

2.1.18 : 2010-04-30T12:41:14-04:00

* remove i686 from the x86_64 CPU compatibility list for Linux.

2.1.17 : 2010-04-13T15:32:07-04:00

* use /etc/issue on Linux systems if available
* preliminary support for squeeze/sid
* more robust os vendor and version determination on Linux

2.1.16 : 2010-03-10T09:58:05-05:00

* support Mac OS X where there's no sub version (e.g. 10.6 instead of 10.6.0)

2.1.15 : 2009-07-16T10:45:36-04:00

* *really* add geri.exp to tests.
* recognize Intel Core i7
* add moon.exp to tests

2.1.14 : 2009-06-24T20:40:59-04:00

* add geri.exp to tests

2.1.13 : 2009-06-24T18:11:36-04:00

* Better checks for test dependencies; --disable-testdeps now works
  for all dependencies

2.1.12 : 2009-06-24T17:53:48-04:00

* remove YAML::Tiny check

2.1.11 : 2009-04-13T11:31:43-04:00

* handle newly introduced extra level in Debian version

2.1.10 : 2008-11-28T23:51:46-05:00

* speed up on Debian at expense of abstraction

2.1.9 : 2008-08-28T13:26:19-04:00

* add provisional support for Debian Lenny

2.1.8 : 2008-07-11T14:56:09-04:00

* correct vendor id for Fedora > 8

2.1.7 : 2008-07-11T14:44:36-04:00

* recognize Intel Core 2 CPU

2.1.6 : 2008-06-24T22:53:18-04:00

* moved SysArch.pm to CXC::SysArch to avoid test failures which
require an installed sysarch
* tweaks to support Fedora four component kernel versions

2.1.5 : 2008-06-05T08:47:42-04:00

* add support for old Red Hat Linux distributions

2.1.4 : 2008-01-15T18:02:25-05:00

* 2.1.3 uses YAML::Tiny exclusively; fall back to the old Perl hash
  mode if YAML::Tiny is not available.

2.1.3 : 2008-01-15T11:08:13-05:00

* make SysArch.pm more secure

2.1.2 : 2007-12-16T00:23:27-05:00

* add support for Apple Xeon boxes
* add test results for Apple PPC OS X boxes

2.1.1 : 2007-10-26T10:49:16-04:00

* several files should have been distributed but weren't

2.1.0 : 2007-09-07T12:37:41-04:00

* Solaris os_version encoding has been changed; previously
  os_version_maj was "5". now it's "5.X" as this is the true major
  version.  The "5" just means Solaris rather than SunOS.

2.0.2 : 2007-08-07T14:23:42-04:00

* added recognition of Pentium D CPUs

2.0.1 : 2007-05-09T12:30:15-04:00

* make backwards compatible with bash 2.03.0(1)

2.0.0 : 2007-05-08T17:12:31-04:00

Major update. not very backwards compatible

* new format for platform descriptions
* new output variables.  most old variables no longer work
* new utility syspathsubst

1.8.7 : 2007-01-30T16:24:32-05:00

* permanently fix path problems
* remove redundant components for platforms where OS == OSdist

1.8.6 : 2007-01-30T11:29:36-05:00

* output which required uppercasing (-gmake_extract, -gmake_cat) was
broken on Solaris if the user had /usr/ucb first in their path.

1.8.5 : 2007-01-16T11:12:47-05:00

* update test output to match test hosts

1.8.4 : 2006-08-30T17:20:57-04:00

* replace slashes in Debian distribution names (e.g. testing/unstable)

1.8.3 : 2006-05-31T10:37:26-04:00

* the platforms variable now includes distribution specific entries

1.8.2 : 2006-05-30T18:13:50-04:00

* added buildgenericdist and buildspecificdist variables

1.8.1 : 2006-04-14T10:27:16-04:00

* everything MST related is now in a separate package, mst_envs, in
order to simplify use of the MST build tools (which require sysarch,
but not the other bits, necessarily)

* added --yaml option

* new buildtargetdist output variable includes specific os
  distribution information


1.8.0 : 2006-03-08T16:11:44-05:00

* configure uses and requires environmental variables AXAF_ROOT and
  AXAF_SIMUL_ROOT to set defaults, rather than hardwiring to /proj/axaf/

* MST::envs allows AXAF_ROOT and AXAF_SIMUL_ROOT
  environmental variables to override defaults.


1.7.8 : 2006-03-01T23:58:14-05:00

* now manages script specific environment setup (mst_envs.XXX)
* MST environment now includes INFOPATH

1.7.7 :  2006-01-25T16:26:53-05:00

first public release
