add target_information()
Print from: pvxinfo -D and new iocsh iocsh pvxs_target_info()
This commit is contained in:
@@ -0,0 +1,132 @@
|
||||
/**
|
||||
* Copyright - See the COPYRIGHT that is included with this distribution.
|
||||
* pvxs is distributed subject to a Software License Agreement found
|
||||
* in file LICENSE that is included with this distribution.
|
||||
*/
|
||||
|
||||
#if !defined(_WIN32)
|
||||
# include <sys/utsname.h>
|
||||
#endif
|
||||
|
||||
#include <osiSock.h>
|
||||
#include <dbDefs.h>
|
||||
#include <epicsThread.h>
|
||||
|
||||
#include <pvxs/util.h>
|
||||
#include <pvxs/client.h>
|
||||
#include <pvxs/server.h>
|
||||
|
||||
#include "evhelper.h"
|
||||
#include "describe.h"
|
||||
|
||||
namespace pvxs {
|
||||
|
||||
std::ostream& target_information(std::ostream& strm)
|
||||
{
|
||||
strm<<indent{}<<"Host: "<<EPICS_HOST_ARCH<<"\n";
|
||||
strm<<indent{}<<"Target: "<<T_A<<" "<<OS_CLASS;
|
||||
#if EPICS_VERSION_INT>=VERSION_INT(3,15,0,1)
|
||||
strm<<" "<<CMPLR_CLASS;
|
||||
#endif
|
||||
strm<<"\n";
|
||||
|
||||
{
|
||||
strm<<indent{}<<"Toolchain\n";
|
||||
Indented I(strm);
|
||||
|
||||
// standard
|
||||
strm<<indent{}<<"__cplusplus = "<<__cplusplus<<"\n";
|
||||
|
||||
// compiler
|
||||
#ifdef __clang__
|
||||
strm<<indent{}<<"clang "<<__clang_version__<<"\n";
|
||||
#endif
|
||||
#ifdef __GNUC__
|
||||
strm<<indent{}<<"GCC "<<__GNUC__<<"."<<__GNUC_MINOR__<<"."<<__GNUC_PATCHLEVEL__<<"\n";
|
||||
#endif
|
||||
#ifdef _GLIBCXX_USE_CXX11_ABI
|
||||
strm<<indent{}<<"_GLIBCXX_USE_CXX11_ABI = "<<_GLIBCXX_USE_CXX11_ABI<<"\n";
|
||||
#endif
|
||||
#ifdef _MSC_VER
|
||||
strm<<indent{}<<"MSVC "<<_MSC_FULL_VER<<"\n";
|
||||
#endif
|
||||
|
||||
// library
|
||||
#ifdef __GLIBC__
|
||||
strm<<indent{}<<"GLIBC "<<__GLIBC__<<"."<<__GLIBC_MINOR__<<"\n";
|
||||
#endif
|
||||
#ifdef __UCLIBC__
|
||||
strm<<indent{}<<"GLIBC "<<__UCLIBC_MAJOR__<<"."<<__UCLIBC_MINOR__<<"."<<__UCLIBC_SUBLEVEL__<<"\n";
|
||||
#endif
|
||||
#ifdef _CPPLIB_VER
|
||||
// Dinkumware c++
|
||||
strm<<indent{}<<"_CPPLIB_VER "<<_CPPLIB_VER<<"\n";
|
||||
#endif
|
||||
#ifdef __GLIBCXX__
|
||||
strm<<indent{}<<"__GLIBCXX__ "<<__GLIBCXX__<<"\n";
|
||||
#endif
|
||||
#ifdef _LIBCPP_VERSION
|
||||
// clang c++
|
||||
strm<<indent{}<<"_LIBCPP_VERSION "<<_LIBCPP_VERSION<<"\n";
|
||||
#endif
|
||||
}
|
||||
|
||||
{
|
||||
strm<<"Versions\n";
|
||||
Indented I(strm);
|
||||
strm<<indent{}<<version_str()<<"\n";
|
||||
strm<<indent{}<<EPICS_VERSION_STRING<<"\n";
|
||||
strm<<indent{}<<"libevent "<<event_get_version()<<"\n";
|
||||
}
|
||||
|
||||
{
|
||||
strm<<indent{}<<"Runtime\n";
|
||||
Indented I(strm);
|
||||
|
||||
SockAttach attach;
|
||||
evsocket dummy(AF_INET, SOCK_DGRAM, 0);
|
||||
|
||||
#if !defined(_WIN32)
|
||||
utsname info;
|
||||
if(uname(&info)==0) {
|
||||
strm<<indent{}<<"uname() -> "<<info.sysname<<" "<<info.nodename<<" "<<info.release<<" "<<info.version<<" "<<info.machine<<"\n";
|
||||
} else {
|
||||
strm<<indent{}<<"uname() error "<<errno<<"\n";
|
||||
}
|
||||
#endif
|
||||
|
||||
#if EPICS_VERSION_INT>=VERSION_INT(3,15,0,2)
|
||||
strm<<indent{}<<"epicsThreadGetCPUs() -> "<<epicsThreadGetCPUs()<<"\n";
|
||||
#endif
|
||||
|
||||
auto localaddr(osiLocalAddr(dummy.sock));
|
||||
strm<<indent{}<<"osiLocalAddr() -> "<<SockAddr(&localaddr.sa, sizeof(localaddr)).tostring()<<"\n";
|
||||
|
||||
strm<<indent{}<<"osiSockDiscoverBroadcastAddresses() ->\n";
|
||||
Indented J(strm);
|
||||
for(auto& addr : dummy.interfaces()) {
|
||||
strm<<indent{}<<addr.tostring()<<"\n";
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
strm<<indent{}<<"Effective Client config from environment\n";
|
||||
Indented I(strm);
|
||||
auto conf(client::Config::fromEnv());
|
||||
conf.expand();
|
||||
strm<<conf;
|
||||
}
|
||||
|
||||
{
|
||||
strm<<indent{}<<"Effective Server config from environment\n";
|
||||
Indented I(strm);
|
||||
auto conf(server::Config::fromEnv());
|
||||
conf.expand();
|
||||
strm<<conf;
|
||||
}
|
||||
|
||||
strm.flush();
|
||||
return strm;
|
||||
}
|
||||
|
||||
} // namespace pvxs
|
||||
Reference in New Issue
Block a user