1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
/////////////////////////////////////////////////////////////
// //
// Copyright (c) 2003-2011 by The University of Queensland //
// Earth Systems Science Computational Centre (ESSCC) //
// http://www.uq.edu.au/esscc //
// //
// Primary Business: Brisbane, Queensland, Australia //
// Licensed under the Open Software License version 3.0 //
// http://www.opensource.org/licenses/osl-3.0.php //
// //
/////////////////////////////////////////////////////////////
#include "Foundation/PathUtil.h"
#include <boost/filesystem/path.hpp>
#include <boost/filesystem/operations.hpp>
#include <boost/shared_ptr.hpp>
using namespace boost;
namespace esys
{
namespace lsm
{
void setPathEnv(int argc, char *argv[])
{
if (argc > 0)
{
setPathEnv(argv[0]);
}
}
/**
* Function which modifies the PATH environment variable according
* to the specified executable file. This is a work-around for the
* SGI MPT mpirun implementation which appears to alter the PATH environment
* variable of the executed processes.
*/
void setPathEnv(const std::string &exeName)
{
if (exeName.size() > 0)
{
std::string origPathValue = "";
const char *getenvVal = getenv("PATH");
if (getenvVal != NULL)
{
origPathValue = getenvVal;
}
#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2
filesystem::path exePath = filesystem::system_complete(filesystem::path(exeName, boost::filesystem::native));
std::string newPathValue = origPathValue + ":" + (exePath.branch_path().native_file_string());
#else
filesystem::path exePath = filesystem::system_complete(filesystem::path(exeName));
std::string newPathValue = origPathValue + ":" + (exePath.parent_path().string());
#endif
setenv("PATH", newPathValue.c_str(), 1);
}
}
}
}
|