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