How to use create_compiler_mask method of pts_test_installer class

Best Phoronix-test-suite code snippet using pts_test_installer.create_compiler_mask

pts_test_installer.php

Source:pts_test_installer.php Github

copy

Full Screen

...401 }402 pts_module_manager::module_process('__post_test_download', $identifier);403 return true;404 }405 public static function create_compiler_mask(&$test_install_request)406 {407 if(phodevi::is_bsd() || getenv('PTS_NO_COMPILER_MASK'))408 {409 // XXX: Using the compiler-mask causes a number of tests to fail to properly install due to compiler issues with at least PC-BSD 10.0410 return false;411 }412 // or pass false to $test_install_request to bypass the test checks413 $compilers = array();414 $external_dependencies = $test_install_request != false ? $test_install_request->test_profile->get_external_dependencies() : false;415 if($test_install_request === false || in_array('build-utilities', $external_dependencies))416 {417 // Handle C/C++ compilers for this external dependency418 $compilers['CC'] = array(pts_strings::first_in_string(pts_client::read_env('CC'), ' '), 'gcc', 'clang', 'icc', 'pcc');419 $compilers['CXX'] = array(pts_strings::first_in_string(pts_client::read_env('CXX'), ' '), 'g++', 'clang++', 'cpp');420 }421 if($test_install_request === false || in_array('fortran-compiler', $external_dependencies))422 {423 // Handle Fortran for this external dependency424 $compilers['F9X'] = array(pts_strings::first_in_string(pts_client::read_env('F9X'), ' '), pts_strings::first_in_string(pts_client::read_env('F95'), ' '), 'gfortran', 'f90', 'f95', 'fortran');425 }426 if(empty($compilers))427 {428 // If the test profile doesn't request a compiler external dependency, probably not compiling anything429 return false;430 }431 foreach($compilers as $compiler_type => $possible_compilers)432 {433 // Compilers to check for, listed in order of priority434 $compiler_found = false;435 foreach($possible_compilers as $i => $possible_compiler)436 {437 // first check to ensure not null sent to executable_in_path from env variable438 if($possible_compiler && (($compiler_path = is_executable($possible_compiler)) || ($compiler_path = pts_client::executable_in_path($possible_compiler, 'ccache'))))439 {440 // Replace the array of possible compilers with a string to the detected compiler executable441 $compilers[$compiler_type] = $compiler_path;442 $compiler_found = true;443 break;444 }445 }446 if($compiler_found == false)447 {448 unset($compilers[$compiler_type]);449 }450 }451 if(!empty($compilers))452 {453 // Create a temporary directory that will be at front of PATH and serve for masking the actual compiler454 if($test_install_request instanceof pts_test_install_request)455 {456 $mask_dir = pts_client::temporary_directory() . '/pts-compiler-mask-' . $test_install_request->test_profile->get_identifier_base_name() . $test_install_request->test_profile->get_test_profile_version() . '/';457 }458 else459 {460 $mask_dir = pts_client::temporary_directory() . '/pts-compiler-mask-' . rand(100, 999) . '/';461 }462 pts_file_io::mkdir($mask_dir);463 $compiler_extras = array(464 'CC' => array('safeguard-names' => array('gcc', 'cc'), 'environment-variables' => 'CFLAGS'),465 'CXX' => array('safeguard-names' => array('g++', 'c++'), 'environment-variables' => 'CXXFLAGS'),466 'F9X' => array('safeguard-names' => array('gfortran', 'f95'), 'environment-variables' => 'F9XFLAGS')467 );468 foreach($compilers as $compiler_type => $compiler_path)469 {470 $compiler_name = basename($compiler_path);471 $main_compiler = $mask_dir . $compiler_name;472 // take advantage of environment-variables to be sure they're found in the string473 $env_var_check = PHP_EOL;474 /*475 foreach(pts_arrays::to_array($compiler_extras[$compiler_type]['environment-variables']) as $env_var)476 {477 // since it's a dynamic check in script could probably get rid of this check...478 if(true || getenv($env_var))479 {480 $env_var_check .= 'if [[ $COMPILER_OPTIONS != "*$' . $env_var . '*" ]]' . PHP_EOL . 'then ' . PHP_EOL . 'COMPILER_OPTIONS="$COMPILER_OPTIONS $' . $env_var . '"' . PHP_EOL . 'fi' . PHP_EOL;481 }482 }483 */484 // Write the main mask for the compiler485 file_put_contents($main_compiler,486 '#!/bin/bash' . PHP_EOL . 'COMPILER_OPTIONS="$@"' . PHP_EOL . $env_var_check . PHP_EOL . 'echo $COMPILER_OPTIONS >> ' . $mask_dir . $compiler_type . '-options-' . $compiler_name . PHP_EOL . $compiler_path . ' "$@"' . PHP_EOL);487 // Make executable488 chmod($main_compiler, 0755);489 // The two below code chunks ensure the proper compiler is always hit490 if($test_install_request instanceof pts_test_install_request && !in_array($compiler_name, pts_arrays::to_array($compiler_extras[$compiler_type]['safeguard-names'])) && getenv($compiler_type) == false)491 {492 // So if e.g. clang becomes the default compiler, since it's not GCC, it will ensure CC is also set to clang beyond the masking below493 $test_install_request->special_environment_vars[$compiler_type] = $compiler_name;494 }495 // Just in case any test profile script is statically always calling 'gcc' or anything not CC, try to make sure it hits one of the safeguard-names so it redirects to the intended compiler under test496 foreach(pts_arrays::to_array($compiler_extras[$compiler_type]['safeguard-names']) as $safe_name)497 {498 if(!is_file($mask_dir . $safe_name))499 {500 symlink($main_compiler, $mask_dir . $safe_name);501 }502 }503 }504 if($test_install_request instanceof pts_test_install_request)505 {506 $test_install_request->compiler_mask_dir = $mask_dir;507 // Appending the rest of the path will be done automatically within call_test_script508 $test_install_request->special_environment_vars['PATH'] = $mask_dir;509 }510 return $mask_dir;511 }512 return false;513 }514 public static function end_compiler_mask(&$test_install_request)515 {516 if($test_install_request->compiler_mask_dir == false && !is_dir($test_install_request->compiler_mask_dir))517 {518 return false;519 }520 $compiler = false;521 foreach(pts_file_io::glob($test_install_request->compiler_mask_dir . '*-options-*') as $compiler_output)522 {523 $output_name = basename($compiler_output);524 $compiler_type = substr($output_name, 0, strpos($output_name, '-'));525 $compiler_choice = substr($output_name, (strrpos($output_name, 'options-') + 8));526 $compiler_lines = explode(PHP_EOL, pts_file_io::file_get_contents($compiler_output));527 // Clean-up / reduce the compiler options that are important528 $compiler_options = null;529 $compiler_backup_line = null;530 foreach($compiler_lines as $l => $compiler_line)531 {532 $compiler_line .= ' '; // allows for easier/simplified detection in a few checks below533 $o = strpos($compiler_line, '-o ');534 if($o === false)535 {536 unset($compiler_lines[$l]);537 continue;538 }539 $o = substr($compiler_line, ($o + 3), (strpos($compiler_line, ' ', ($o + 3)) - $o - 3));540 $o_l = strlen($o);541 // $o now has whatever is set for the -o output542 if(($o_l > 2 && substr(basename($o), 0, 3) == 'lib') || ($o_l > 3 && substr($o, -4) == 'test'))543 {544 // If it's a lib, probably not what is the actual target545 unset($compiler_lines[$l]);546 continue;547 }548 else if(($o_l > 2 && substr($o, -2) == '.o'))549 {550 // If it's outputting to a .o should not be the proper compile command we want551 // but back it up in case... keep overwriting temp variable to get the last one552 $compiler_backup_line = $compiler_line;553 unset($compiler_lines[$l]);554 continue;555 }556 }557 if(!empty($compiler_lines))558 {559 $compiler_line = array_pop($compiler_lines);560 if(strpos($compiler_line, '-O') === false && strpos($compiler_line, '-f') === false && (strpos($compiler_backup_line, '-f') !== false || strpos($compiler_backup_line, '-O')))561 {562 $compiler_line .= ' ' . $compiler_backup_line;563 }564 $compiler_options = explode(' ', $compiler_line);565 foreach($compiler_options as $i => $option)566 {567 // Decide what to include and what not... D?568 if(!isset($option[2]) || $option[0] != '-' || $option[1] == 'L' || $option[1] == 'D' || $option[1] == 'I' || $option[1] == 'W' || isset($option[20]))569 {570 unset($compiler_options[$i]);571 }572 if(isset($option[1]) && $option[1] == 'l')573 {574 // If you're linking a library it's also useful for other purposes575 $library = substr($option, 1);576 // TODO XXX: scan the external dependencies to make sure $library is covered if not alert test profile maintainer...577 //unset($compiler_options[$i]);578 }579 }580 $compiler_options = implode(' ', array_unique($compiler_options));581 //sort($compiler_options);582 // TODO: right now just keep overwriting $compiler to take the last compiler.. so TODO add support for multiple compiler reporting or decide what todo583 $compiler = array('compiler-type' => $compiler_type, 'compiler' => $compiler_choice, 'compiler-options' => $compiler_options);584 //echo PHP_EOL . 'DEBUG: ' . $compiler_type . ' ' . $compiler_choice . ' :: ' . $compiler_options . PHP_EOL;585 }586 }587 pts_file_io::delete($test_install_request->compiler_mask_dir, null, true);588 return $compiler;589 }590 protected static function install_test_process(&$test_install_request, $no_prompts)591 {592 // Install a test593 $identifier = $test_install_request->test_profile->get_identifier();594 $test_install_directory = $test_install_request->test_profile->get_install_dir();595 pts_file_io::mkdir(dirname($test_install_directory));596 pts_file_io::mkdir($test_install_directory);597 $installed = false;598 if(ceil(disk_free_space($test_install_directory) / 1048576) < ($test_install_request->test_profile->get_download_size() + 128))599 {600 self::test_install_error(null, $test_install_request, 'There is not enough space at ' . $test_install_directory . ' for the test files.');601 }602 else if(ceil(disk_free_space($test_install_directory) / 1048576) < ($test_install_request->test_profile->get_environment_size(false) + 128))603 {604 self::test_install_error(null, $test_install_request, 'There is not enough space at ' . $test_install_directory . ' for this test.');605 }606 else607 {608 pts_test_installer::setup_test_install_directory($test_install_request, true);609 // Download test files610 $download_test_files = pts_test_installer::download_test_files($test_install_request, false, $no_prompts);611 if($download_test_files == false)612 {613 self::test_install_error(null, $test_install_request, 'Downloading of needed test files failed.');614 return false;615 }616 if($test_install_request->test_profile->get_file_installer() != false)617 {618 self::create_compiler_mask($test_install_request);619 pts_module_manager::module_process('__pre_test_install', $identifier);620 pts_client::$display->test_install_begin($test_install_request);621 $pre_install_message = $test_install_request->test_profile->get_pre_install_message();622 $post_install_message = $test_install_request->test_profile->get_post_install_message();623 $install_agreement = $test_install_request->test_profile->get_installation_agreement_message();624 if(!empty($install_agreement))625 {626 if(pts_strings::is_url($install_agreement))627 {628 $install_agreement = pts_network::http_get_contents($install_agreement);629 if(empty($install_agreement))630 {631 self::test_install_error(null, $test_install_request, 'The user agreement could not be found. Test installation aborted.');632 return false;...

Full Screen

Full Screen

create_compiler_mask

Using AI Code Generation

copy

Full Screen

1require_once('pts-test-installer.php');2$test_installer = new pts_test_installer();3$mask = $test_installer->create_compiler_mask();4echo $mask;5Compiler name (GCC, ICC, CLANG, PGI, etc.)6Compiler version (4.8, 5.0, etc.)7Compiler architecture (x86_64, i686, etc.)8Compiler vendor (Ubuntu, Debian, etc.)9Compiler flags (CFLAGS, CXXFLAGS, etc.)

Full Screen

Full Screen

create_compiler_mask

Using AI Code Generation

copy

Full Screen

1$compiler_mask = pts_test_installer::create_compiler_mask('gcc');2$test_profile = new pts_test_profile('x264');3$test_profile->set_test_installation($compiler_mask);4$test_profile->save_profile_to_file();5$compiler_mask = pts_test_installer::create_compiler_mask('gcc');6$test_profile = new pts_test_profile('x264');7$test_profile->set_test_installation($compiler_mask);8$test_profile->save_profile_to_file();9$compiler_mask = pts_test_installer::create_compiler_mask('gcc');10$test_profile = new pts_test_profile('x264');11$test_profile->set_test_installation($compiler_mask);12$test_profile->save_profile_to_file();

Full Screen

Full Screen

create_compiler_mask

Using AI Code Generation

copy

Full Screen

1include_once('pts_test_installer.php');2$test_installer = new pts_test_installer();3$compilers = array('gcc-4.4', 'gcc-4.5', 'gcc-4.6', 'gcc-4.7', 'gcc-4.8', 'gcc-4.9');4$test_profiles = array('pts/ffmpeg-1.2', 'pts/ffmpeg-1.3');5$compiler_mask = $test_installer->create_compiler_mask($compilers, $test_profiles);6print_r($compiler_mask);7 (8 (9 (10 (11 (12 (13 (14 (

Full Screen

Full Screen

create_compiler_mask

Using AI Code Generation

copy

Full Screen

1$mask = pts_test_installer::create_compiler_mask('gcc');2if($mask == 'not installed')3{4echo 'gcc is not installed';5}6{7echo 'gcc is installed, version: ' . $mask;8}9$mask = pts_test_installer::create_compiler_mask('g++');10if($mask == 'not installed')11{12echo 'g++ is not installed';13}14{15echo 'g++ is installed, version: ' . $mask;16}17$mask = pts_test_installer::create_compiler_mask('clang');18if($mask == 'not installed')19{20echo 'clang is not installed';21}22{23echo 'clang is installed, version: ' . $mask;24}25$mask = pts_test_installer::create_compiler_mask('clang++');26if($mask ==

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Phoronix-test-suite automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Trigger create_compiler_mask code on LambdaTest Cloud Grid

Execute automation tests with create_compiler_mask on a cloud-based Grid of 3000+ real browsers and operating systems for both web and mobile applications.

Test now for Free

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful