1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
/*
Copyright (C) 2012-2021 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
DCP-o-matic is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
DCP-o-matic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
*/
#include "cross.h"
#include "log.h"
#include "version.h"
#include "warnings.h"
#include <dcp/compose.h>
#include <dcp/version.h>
#include <libssh/libssh.h>
DCPOMATIC_DISABLE_WARNINGS
extern "C" {
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libavfilter/avfilter.h>
#include <libswscale/swscale.h>
#include <libavutil/pixfmt.h>
}
DCPOMATIC_ENABLE_WARNINGS
#include <boost/thread.hpp>
#include "i18n.h"
using std::list;
using std::pair;
using std::shared_ptr;
using std::string;
/** @param v Version as used by FFmpeg.
* @return A string representation of v.
*/
static
string
ffmpeg_version_to_string (int v)
{
char buffer[64];
snprintf (buffer, sizeof(buffer), "%d.%d.%d", ((v & 0xff0000) >> 16), ((v & 0xff00) >> 8), (v & 0xff));
return buffer;
}
/** Return a user-readable string summarising the versions of our dependencies */
static
string
dependency_version_summary ()
{
char buffer[512];
snprintf (
buffer, sizeof(buffer), "libavcodec %s, libavfilter %s, libavformat %s, libavutil %s, libswscale %s, libssh %s, libdcp %s git %s",
ffmpeg_version_to_string(avcodec_version()).c_str(),
ffmpeg_version_to_string(avfilter_version()).c_str(),
ffmpeg_version_to_string(avformat_version()).c_str(),
ffmpeg_version_to_string(avutil_version()).c_str(),
ffmpeg_version_to_string(swscale_version()).c_str(),
ssh_version(0),
dcp::version, dcp::git_commit
);
return buffer;
}
list<string>
environment_info ()
{
list<string> info;
info.push_back (dcp::compose ("DCP-o-matic %1 git %2 using %3", dcpomatic_version, dcpomatic_git_commit, dependency_version_summary()));
{
char buffer[128];
gethostname (buffer, sizeof (buffer));
info.push_back (dcp::compose ("Host name %1", &buffer[0]));
}
#ifdef DCPOMATIC_DEBUG
info.push_back ("DCP-o-matic built in debug mode.");
#else
info.push_back ("DCP-o-matic built in optimised mode.");
#endif
#ifdef LIBDCP_DEBUG
info.push_back ("libdcp built in debug mode.");
#else
info.push_back ("libdcp built in optimised mode.");
#endif
#ifdef DCPOMATIC_WINDOWS
OSVERSIONINFO os_info;
os_info.dwOSVersionInfoSize = sizeof (os_info);
GetVersionEx (&os_info);
info.push_back (
dcp::compose (
"Windows version %1.%2.%3",
(int) os_info.dwMajorVersion, (int) os_info.dwMinorVersion, (int) os_info.dwBuildNumber
)
);
if (os_info.dwMajorVersion == 5 && os_info.dwMinorVersion == 0) {
info.push_back ("Windows 2000");
} else if (os_info.dwMajorVersion == 5 && os_info.dwMinorVersion == 1) {
info.push_back ("Windows XP");
} else if (os_info.dwMajorVersion == 5 && os_info.dwMinorVersion == 2) {
info.push_back ("Windows XP 64-bit or Windows Server 2003");
} else if (os_info.dwMajorVersion == 6 && os_info.dwMinorVersion == 0) {
info.push_back ("Windows Vista or Windows Server 2008");
} else if (os_info.dwMajorVersion == 6 && os_info.dwMinorVersion == 1) {
info.push_back ("Windows 7 or Windows Server 2008");
} else if (os_info.dwMajorVersion == 6 && (os_info.dwMinorVersion == 2 || os_info.dwMinorVersion == 3)) {
info.push_back ("Windows 8 or Windows Server 2012");
} else if (os_info.dwMajorVersion == 10 && os_info.dwMinorVersion == 0) {
info.push_back ("Windows 10 or Windows Server 2016");
}
#endif
#if __GNUC__
#if __x86_64__
info.push_back ("Built for x86 64-bit");
#elif __aarch64__
info.push_back ("Built for ARM 64-bit");
#else
info.push_back ("Built for x86 32-bit");
#endif
#endif
info.push_back (dcp::compose ("CPU: %1, %2 processors", cpu_info(), boost::thread::hardware_concurrency()));
for (auto const& i: mount_info()) {
info.push_back (dcp::compose("Mount: %1 %2", i.first, i.second));
}
return info;
}
|