PLATFORM_TELL - Display information about the platform and environment

works back to very old Matlab (R2011b at least)

function json = platform_tell()



raw = struct('matlab_arch', computer('arch'));

if ~stdlib.isoctave()
  try
    r = matlabRelease().Release;
  catch
    r = ['R' version('-release')];
  end
  raw.matlab_release = r;

  m = stdlib.matlab_bin_path();
  raw.matlab_extern_bin = m.extern_bin;
  raw.matlab_root = m.root;
  raw.matlab_arch_bin = m.arch_bin;
  raw.matlab_bin = m.bin;
end

h5v = stdlib.h5get_version();
if ~isempty(h5v)
  raw.hdf5 = h5v;
end

ncv = stdlib.nc_get_version();
if ~isempty(ncv)
  raw.netcdf = ncv;
end

if stdlib.has_java()
  raw.java_vendor = stdlib.java_vendor();
  raw.java_version = stdlib.java_version();
  raw.java_home = stdlib.java_home();
end

if stdlib.has_dotnet()
  raw.dotnet_version = stdlib.dotnet_version();
end

if stdlib.has_perl()
  raw.perl_version = sprintf('%d.%d.%d', stdlib.perl_version());
  raw.perl_exe = stdlib.perl_exe();
end

if stdlib.has_python()
  raw.python_version = sprintf('%d.%d.%d', stdlib.python_version());
  raw.python_home = stdlib.python_home();
end

if ismac()
  raw.xcode_version = stdlib.xcode_version();
end

if ~stdlib.isoctave()

langs = {'C', 'Cpp', 'Fortran'};
for i = 1:length(langs)
  lang = langs{i};
  co = mex.getCompilerConfigurations(lang);
  ct = ['compiler_' lang];
  vt = ['compiler_' lang '_version'];
  raw.(ct) = '';
  raw.(vt) = '';

  if ~isempty(co)
    raw.(ct) = co.Name;
    raw.(vt) = co.Version;
  end
end

end

try
  json = jsonencode(raw, 'PrettyPrint', true);
catch e
  switch e.identifier
    case {'MATLAB:json:UnmatchedParameter', 'MATLAB:maxrhs'}
      json = jsonencode(raw);
    case 'MATLAB:UndefinedFunction'
      json = raw;
    otherwise
      rethrow(e)
  end
end

end