5 URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
6 Copyright (C) 2008 - 2015, Phoronix Media
7 Copyright (C) 2008 - 2015, Michael Larabel
8 pts-core.php: To boot-strap the Phoronix Test Suite start-up
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3 of the License, or
13 (at your option) any later version.
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with this program. If not, see <http://www.gnu.org/licenses/>.
24 function pts_codename($full_string = false)
26 $codename = ucwords(strtolower(PTS_CODENAME
));
28 return ($full_string ?
'PhoronixTestSuite/' : null) . $codename;
30 function pts_title($show_codename = false)
32 return 'Phoronix Test Suite v' . PTS_VERSION
. ($show_codename ?
' (' . pts_codename() . ')' : null);
34 function pts_define($name, $value = null)
43 $defines[$name] = $value;
44 define($name, $value);
46 function pts_define_directories()
48 // User's home directory for storing results, module files, test installations, etc.
49 pts_define('PTS_CORE_PATH', PTS_PATH
. 'pts-core/');
50 pts_define('PTS_IS_DAEMONIZED_SERVER_PROCESS', PTS_IS_CLIENT
&& is_dir('/var/lib/') && is_writable('/') ?
true : false);
52 if(PTS_IS_DAEMONIZED_SERVER_PROCESS
)
54 if(!is_dir('/var/cache/phoronix-test-suite/'))
56 mkdir('/var/cache/phoronix-test-suite/');
59 pts_define('PTS_USER_PATH', '/var/lib/phoronix-test-suite/');
60 pts_define('PTS_CORE_STORAGE', PTS_USER_PATH
. 'core.pt2so');
61 pts_define('PTS_TEMP_STORAGE', PTS_USER_PATH
. 'temp.pt2so');
62 pts_define('PTS_MODULE_LOCAL_PATH', PTS_USER_PATH
. 'modules/');
63 pts_define('PTS_MODULE_DATA_PATH', PTS_USER_PATH
. 'modules-data/');
64 pts_define('PTS_DOWNLOAD_CACHE_PATH', '/var/cache/phoronix-test-suite/download-cache/');
65 pts_define('PTS_OPENBENCHMARKING_SCRATCH_PATH', '/var/cache/phoronix-test-suite/openbenchmarking.org/');
66 pts_define('PTS_TEST_PROFILE_PATH', PTS_USER_PATH
. 'test-profiles/');
67 pts_define('PTS_TEST_SUITE_PATH', PTS_USER_PATH
. 'test-suites/');
68 pts_define('PTS_RESULTS_VIEWER_PATH', PTS_CORE_PATH
. 'results-viewer/');
70 else if(PTS_IS_CLIENT
)
72 pts_define('PTS_USER_PATH', pts_client
::user_home_directory() . '.phoronix-test-suite' . DIRECTORY_SEPARATOR
);
73 pts_define('PTS_CORE_STORAGE', PTS_USER_PATH
. 'core.pt2so');
74 pts_define('PTS_TEMP_STORAGE', PTS_USER_PATH
. 'temp.pt2so');
75 pts_define('PTS_MODULE_LOCAL_PATH', PTS_USER_PATH
. 'modules/');
76 pts_define('PTS_MODULE_DATA_PATH', PTS_USER_PATH
. 'modules-data/');
77 pts_define('PTS_DOWNLOAD_CACHE_PATH', PTS_USER_PATH
. 'download-cache/');
78 pts_define('PTS_OPENBENCHMARKING_SCRATCH_PATH', PTS_USER_PATH
. 'openbenchmarking.org/');
79 pts_define('PTS_TEST_PROFILE_PATH', PTS_USER_PATH
. 'test-profiles/');
80 pts_define('PTS_TEST_SUITE_PATH', PTS_USER_PATH
. 'test-suites/');
81 pts_define('PTS_RESULTS_VIEWER_PATH', PTS_CORE_PATH
. 'results-viewer/');
83 else if(defined('PTS_STORAGE_PATH'))
85 pts_define('PTS_OPENBENCHMARKING_SCRATCH_PATH', PTS_STORAGE_PATH
. 'openbenchmarking.org/');
86 pts_define('PTS_TEST_PROFILE_PATH', PTS_STORAGE_PATH
. 'test-profiles/');
87 pts_define('PTS_TEST_SUITE_PATH', PTS_STORAGE_PATH
. 'test-suites/');
89 else if(defined('PATH_TO_PHOROMATIC_STORAGE'))
91 pts_define('PTS_OPENBENCHMARKING_SCRATCH_PATH', PATH_TO_PHOROMATIC_STORAGE
. 'openbenchmarking.org/');
92 pts_define('PTS_TEST_PROFILE_PATH', PATH_TO_PHOROMATIC_STORAGE
. 'test-profiles/');
93 pts_define('PTS_TEST_SUITE_PATH', PATH_TO_PHOROMATIC_STORAGE
. 'test-suites/');
97 pts_define('PTS_MODULE_PATH', PTS_CORE_PATH
. 'modules/');
98 pts_define('PTS_CORE_STATIC_PATH', PTS_CORE_PATH
. 'static/');
99 pts_define('PTS_COMMAND_PATH', PTS_CORE_PATH
. 'commands/');
100 pts_define('PTS_EXDEP_PATH', PTS_CORE_PATH
. 'external-test-dependencies/');
101 pts_define('PTS_OPENBENCHMARKING_PATH', PTS_CORE_PATH
. 'openbenchmarking.org/');
103 function pts_needed_extensions()
106 // Required? - The Check If In Place - Name - Description
107 // Required extesnions denoted by 1 at [0]
108 array(1, extension_loaded('dom'), 'DOM', 'The PHP Document Object Model (DOM) is required for XML operations.'),
109 array(1, extension_loaded('zip') ||
extension_loaded('zlib'), 'ZIP', 'PHP Zip support is required for file compression and decompression.'),
110 array(1, function_exists('json_decode'), 'JSON', 'PHP JSON support is required for OpenBenchmarking.org communication.'),
111 array(1, function_exists('simplexml_load_string'), 'SimpleXML', 'PHP SimpleXML is required for the Phoronix Test Suite'),
112 // Optional but recommended extensions
113 array(0, extension_loaded('openssl'), 'OpenSSL', 'PHP OpenSSL support is recommended to support HTTPS traffic.'),
114 array(0, extension_loaded('gd'), 'GD', 'The PHP GD library is recommended for improved graph rendering.'),
115 array(0, extension_loaded('zlib'), 'Zlib', 'The PHP Zlib extension can be used for greater file compression.'),
116 array(0, extension_loaded('sqlite3'), 'SQLite3', 'The PHP SQLite3 extension is required when running a Phoromatic server.'),
117 array(0, function_exists('pcntl_fork'), 'PCNTL', 'PHP PCNTL is highly recommended as it is required by some tests.'),
118 array(0, function_exists('posix_getpwuid'), 'POSIX', 'PHP POSIX support is highly recommended.'),
119 array(0, function_exists('curl_init'), 'CURL', 'PHP CURL is recommended for an enhanced download experience.'),
120 //array(0, is_file('/usr/share/php/fpdf/fpdf.php'), 'PHP FPDF', 'PHP FPDF is recommended if wishing to generate PDF reports.'),
121 array(0, function_exists('socket_create_listen'), 'Sockets', 'PHP Sockets is needed when running the Phoromatic Server.'),
124 function pts_version_codenames()
127 // Sør-Trøndelag - Norway
128 '1.0' => 'Trondheim',
139 // Aust-Agder - Norway
140 '2.9' => 'Iveland', // early PTS3 development work
143 '3.4' => 'Lillesand',
148 '4.2' => 'Randaberg',
152 // Tulskaya oblast / Tula Oblast region - Russia
159 '6.0' => 'Hammerfest',
167 pts_define('PTS_VERSION', '6.0.0m1');
168 pts_define('PTS_CORE_VERSION', 5910);
169 pts_define('PTS_CODENAME', 'HAMMERFEST');
170 pts_define('PTS_IS_CLIENT', (defined('PTS_MODE') && strstr(PTS_MODE
, 'CLIENT') !== false));
171 pts_define('PTS_IS_WEB_CLIENT', (defined('PTS_MODE') && PTS_MODE
== 'WEB_CLIENT'));
172 pts_define('PTS_IS_DEV_BUILD', (substr(PTS_VERSION
, -2, 1) == 'm'));
174 if(!defined('PTS_PATH'))
176 pts_define('PTS_PATH', dirname(dirname(__FILE__
)) . '/');
179 pts_define('PTS_PHP_VERSION', phpversion());
181 if(PTS_IS_CLIENT ||
defined('PTS_AUTO_LOAD_OBJECTS'))
183 function pts_build_dir_php_list($dir, &$files)
185 if($dh = opendir($dir))
187 while(($file = readdir($dh)) !== false)
189 if($file != '.' && $file != '..')
191 if(is_dir($dir . '/' . $file) && (PTS_IS_CLIENT ||
$file != 'client'))
193 // The client folder should contain classes exclusively used by the client
194 pts_build_dir_php_list($dir . '/' . $file, $files);
196 else if(substr($file, -4) == '.php')
198 $files[substr($file, 0, -4)] = $dir . '/' . $file;
205 function __autoload($to_load)
207 static $obj_files = null;
209 if($obj_files == null)
211 pts_build_dir_php_list(PTS_PATH
. 'pts-core/objects', $obj_files);
214 if(isset($obj_files[$to_load]))
216 include($obj_files[$to_load]);
217 unset($obj_files[$to_load]);
221 if(PTS_IS_CLIENT
&& ini_get('date.timezone') == null)
225 // timezone_name_from_abbr was added in PHP 5.1.3. pre-5.2 really isn't supported by PTS, but don't at least error out here but let it get to proper checks...
226 if(is_executable('/bin/date') && function_exists('timezone_name_from_abbr'))
228 $tz = timezone_name_from_abbr(trim(shell_exec('date +%Z 2> /dev/null')));
231 if($tz == null ||
!in_array($tz, timezone_identifiers_list()))
236 date_default_timezone_set($tz);