16b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen//===-- main.cpp ------------------------------------------------*- C++ -*-===// 26b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen// 36b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen// The LLVM Compiler Infrastructure 46b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen// 56b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen// This file is distributed under the University of Illinois Open Source 66b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen// License. See LICENSE.TXT for details. 76b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen// 86b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen//===----------------------------------------------------------------------===// 96b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen 106b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen#include <cstdlib> 116b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen#include <string> 126b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen#include <fstream> 13d00cfb721761c7c789dae3f9fccbd2bbe0f79cc8Johnny Chen#include <iostream> 146b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen 15c590c679663f093bc74355572ccfa8d40284d065Daniel Maleaint numberfn() 16c590c679663f093bc74355572ccfa8d40284d065Daniel Malea{ 17c590c679663f093bc74355572ccfa8d40284d065Daniel Malea return 0x5a; 18c590c679663f093bc74355572ccfa8d40284d065Daniel Malea} 19c590c679663f093bc74355572ccfa8d40284d065Daniel Malea 206b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chenint 216b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chenmain(int argc, char const *argv[]) 226b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen{ 23a50971fb1a2aa5bf3e826f0750f906f06a702de0Johnny Chen // The program writes its output to the following file: 24a50971fb1a2aa5bf3e826f0750f906f06a702de0Johnny Chen // 25a50971fb1a2aa5bf3e826f0750f906f06a702de0Johnny Chen // o "output1.txt" for test_pass_host_env_vars() test case 26a50971fb1a2aa5bf3e826f0750f906f06a702de0Johnny Chen // o "output2.txt" for test_run_args_and_env_vars_with_dsym() test case 27a50971fb1a2aa5bf3e826f0750f906f06a702de0Johnny Chen // o "output2.txt" for test_run_args_and_env_vars_with_dwarf() test case 28a50971fb1a2aa5bf3e826f0750f906f06a702de0Johnny Chen std::ofstream outfile; 29a50971fb1a2aa5bf3e826f0750f906f06a702de0Johnny Chen if (argc == 1) 30a50971fb1a2aa5bf3e826f0750f906f06a702de0Johnny Chen outfile.open("output1.txt"); 31a50971fb1a2aa5bf3e826f0750f906f06a702de0Johnny Chen else 32a50971fb1a2aa5bf3e826f0750f906f06a702de0Johnny Chen outfile.open("output2.txt"); 336b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen 34d00cfb721761c7c789dae3f9fccbd2bbe0f79cc8Johnny Chen for (unsigned i = 0; i < argc; ++i) { 35d00cfb721761c7c789dae3f9fccbd2bbe0f79cc8Johnny Chen std::string theArg(argv[i]); 36d00cfb721761c7c789dae3f9fccbd2bbe0f79cc8Johnny Chen if (i == 1 && "A" == theArg) 376b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen outfile << "argv[1] matches\n"; 386b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen 39d00cfb721761c7c789dae3f9fccbd2bbe0f79cc8Johnny Chen if (i == 2 && "B" == theArg) 406b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen outfile << "argv[2] matches\n"; 416b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen 42d00cfb721761c7c789dae3f9fccbd2bbe0f79cc8Johnny Chen if (i == 3 && "C" == theArg) 436b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen outfile << "argv[3] matches\n"; 446b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen } 456b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen 46fee88866dea96fc619f0b54c055ba4009c8be54eJohnny Chen // For passing environment vars from the debugger to the launched process. 476b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen if (::getenv("MY_ENV_VAR")) { 486b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen std::string MY_ENV_VAR(getenv("MY_ENV_VAR")); 496b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen if ("YES" == MY_ENV_VAR) { 506b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen outfile << "Environment variable 'MY_ENV_VAR' successfully passed.\n"; 516b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen } 526b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen } 536b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen 54fee88866dea96fc619f0b54c055ba4009c8be54eJohnny Chen 55fee88866dea96fc619f0b54c055ba4009c8be54eJohnny Chen // For passing host environment vars to the launched process. 56fee88866dea96fc619f0b54c055ba4009c8be54eJohnny Chen if (::getenv("MY_HOST_ENV_VAR1")) { 57fee88866dea96fc619f0b54c055ba4009c8be54eJohnny Chen std::string MY_HOST_ENV_VAR1(getenv("MY_HOST_ENV_VAR1")); 58fee88866dea96fc619f0b54c055ba4009c8be54eJohnny Chen if ("VAR1" == MY_HOST_ENV_VAR1) { 59fee88866dea96fc619f0b54c055ba4009c8be54eJohnny Chen outfile << "The host environment variable 'MY_HOST_ENV_VAR1' successfully passed.\n"; 60fee88866dea96fc619f0b54c055ba4009c8be54eJohnny Chen } 61fee88866dea96fc619f0b54c055ba4009c8be54eJohnny Chen } 62fee88866dea96fc619f0b54c055ba4009c8be54eJohnny Chen 63fee88866dea96fc619f0b54c055ba4009c8be54eJohnny Chen if (::getenv("MY_HOST_ENV_VAR2")) { 64fee88866dea96fc619f0b54c055ba4009c8be54eJohnny Chen std::string MY_HOST_ENV_VAR2(getenv("MY_HOST_ENV_VAR2")); 65fee88866dea96fc619f0b54c055ba4009c8be54eJohnny Chen if ("VAR2" == MY_HOST_ENV_VAR2) { 66fee88866dea96fc619f0b54c055ba4009c8be54eJohnny Chen outfile << "The host environment variable 'MY_HOST_ENV_VAR2' successfully passed.\n"; 67fee88866dea96fc619f0b54c055ba4009c8be54eJohnny Chen } 68fee88866dea96fc619f0b54c055ba4009c8be54eJohnny Chen } 69fee88866dea96fc619f0b54c055ba4009c8be54eJohnny Chen 704b179b698d40cb791ce5a147fd20c7d3cb2e2cf7Johnny Chen std::cerr << "This message should go to standard error.\n"; 71d00cfb721761c7c789dae3f9fccbd2bbe0f79cc8Johnny Chen std::cout << "This message should go to standard out.\n"; 72d00cfb721761c7c789dae3f9fccbd2bbe0f79cc8Johnny Chen 73a50971fb1a2aa5bf3e826f0750f906f06a702de0Johnny Chen outfile.close(); 74c590c679663f093bc74355572ccfa8d40284d065Daniel Malea return numberfn(); 756b5f988566b0cc5c73b54107bcebd7a2c3eea524Johnny Chen} 76