pts-core: Just mention PHP 5.3 as the new base requirement. Code still should largely...
[phoronix-test-suite.git] / pts-core / pts-core.php
blob3bc7705c3b8c5f29d098dce4c5fc4da90d5e919e
1 <?php
3 /*
4 Phoronix Test Suite
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)
36 static $defines;
38 if($name === -1)
40 return $defines;
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/');
96 // Misc Locations
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()
105 return array(
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()
126 return array(
127 // Sør-Trøndelag - Norway
128 '1.0' => 'Trondheim',
129 '1.2' => 'Malvik',
130 '1.4' => 'Orkdal',
131 '1.6' => 'Tydal',
132 '1.8' => 'Selbu',
133 // Troms - Norway
134 '2.0' => 'Sandtorg',
135 '2.2' => 'Bardu',
136 '2.4' => 'Lenvik',
137 '2.6' => 'Lyngen',
138 '2.8' => 'Torsken',
139 // Aust-Agder - Norway
140 '2.9' => 'Iveland', // early PTS3 development work
141 '3.0' => 'Iveland',
142 '3.2' => 'Grimstad',
143 '3.4' => 'Lillesand',
144 '3.6' => 'Arendal',
145 '3.8' => 'Bygland',
146 // Rogaland - Norway
147 '4.0' => 'Suldal',
148 '4.2' => 'Randaberg',
149 '4.4' => 'Forsand',
150 '4.6' => 'Utsira',
151 '4.8' => 'Sokndal',
152 // Tulskaya oblast / Tula Oblast region - Russia
153 '5.0' => 'Plavsk',
154 '5.2' => 'Khanino',
155 '5.4' => 'Lipki',
156 '5.6' => 'Dedilovo',
157 '5.8' => 'Belev',
158 // Finnmark - Norway
159 '6.0' => 'Hammerfest',
160 '6.2' => 'Gamvik',
161 '6.4' => 'Hasvik',
162 '6.6' => 'Loppa',
163 '6.8' => 'Tana',
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;
203 closedir($dh);
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)
223 $tz = 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()))
233 $tz = 'UTC';
236 date_default_timezone_set($tz);