added: boost build command line script

[0.1.x] refactored: DbgPythonPath class
[0.1.x] added: FileExists function

[0.0.x] refactored: DbgPythonPath class 
[0.0.x] added: FileExists function

git-svn-id: https://pykd.svn.codeplex.com/svn@72409 9b283d60-5439-405e-af05-b73fd8c4d996
This commit is contained in:
SND\air_max_cp 2011-12-16 16:03:39 +00:00
parent c8c7fb0181
commit 69da8abdc9
5 changed files with 78 additions and 133 deletions

26
_boost_pykd_build.cmd Normal file
View File

@ -0,0 +1,26 @@
::
:: Copy to boost root dir
::
call :ExecBjam 32
call :ExecBjam 64
pause
goto :EOF
:ExecBjam
set arch=%1
set stagedir=stage
if "%arch%"=="64" set stagedir=stage64
bjam.exe ^
-j 4 ^
--toolset=msvc-9.0 ^
release debug ^
threading=multi link=static runtime-link=shared ^
address-model=%arch% ^
--with-python --with-date_time --with-regex --with-thread ^
python=2.6 ^
--stagedir=%stagedir% ^
stage
goto :EOF

View File

@ -844,11 +844,10 @@ py( PDEBUG_CLIENT4 client, PCSTR args)
// íàéòè ïóòü ê ôàéëó // íàéòè ïóòü ê ôàéëó
std::string fullFileName; std::string fullFileName;
std::string filePath;
DbgPythonPath dbgPythonPath; DbgPythonPath dbgPythonPath;
if ( dbgPythonPath.findPath( argsList[0], fullFileName, filePath ) ) if ( dbgPythonPath.getFullFileName( argsList[0], fullFileName ) )
{ {
try { try {

View File

@ -1,147 +1,71 @@
#include "stdafx.h" #include "stdafx.h"
#include "dbgpath.h" #include "dbgpath.h"
#include "utils.h"
#include <boost/tokenizer.hpp> #include <boost/tokenizer.hpp>
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
DbgPythonPath::DbgPythonPath() DbgPythonPath::DbgPythonPath()
{ {
DWORD enviromentSize = 0; boost::python::object sys = boost::python::import("sys");
enviromentSize = GetEnvironmentVariableA( "PYTHONPATH", NULL, enviromentSize );
std::vector<char> enviromentBuffer(enviromentSize); boost::python::list pathList(sys.attr("path"));
if (!enviromentBuffer.empty())
{
GetEnvironmentVariableA( "PYTHONPATH", &enviromentBuffer[0], enviromentSize );
typedef boost::escaped_list_separator<char> char_separator_t;
typedef boost::tokenizer< char_separator_t > char_tokenizer_t;
std::string pytonPath( &enviromentBuffer[0] );
char_tokenizer_t token( pytonPath, char_separator_t( "", "; \t", "\"" ) );
for ( char_tokenizer_t::iterator it = token.begin(); it != token.end(); ++it )
{
if ( *it != "" )
m_pathList.push_back( *it );
}
}
}
///////////////////////////////////////////////////////////////////////////////
std::string
DbgPythonPath::getStr() const
{
std::string str;
std::vector<std::string>::const_iterator it = m_pathList.begin();
for ( ; it != m_pathList.end(); ++it )
{
str += *it;
str += ";";
}
return str;
}
///////////////////////////////////////////////////////////////////////////////
bool
DbgPythonPath::findPath(
const std::string &fileName,
std::string &fullFileName,
std::string &filePath ) const
{
std::vector< std::string > extPathList;
boost::python::object sys = boost::python::import( "sys");
boost::python::list pathList( sys.attr("path") );
boost::python::ssize_t n = boost::python::len(pathList); boost::python::ssize_t n = boost::python::len(pathList);
for(boost::python::ssize_t i=0;i<n;i++)
extPathList.push_back( boost::python::extract<std::string>( pathList[i] ) );
bool pyExt = fileName.rfind( ".py" ) == fileName.length() - 3; for (boost::python::ssize_t i = 0; i < n ; i++)
m_extactedPathList.push_back(boost::python::extract<std::string>(pathList[i]));
}
// 1. Èùåì â ðàáî÷åé äèðåêòîðèè ///////////////////////////////////////////////////////////////////////////////
DWORD bufSize =
SearchPathA( bool DbgPythonPath::getFullFileName(const std::string &fileName, std::string &fullFileName) const
NULL, {
fileName.c_str(), bool fileHasPyExt = fileName.rfind(".py") == fileName.length() - 3;
pyExt ? NULL : ".py", fullFileName = fileName;
0,
NULL,
NULL );
if ( bufSize > 0 )
{
bufSize += 1;
std::vector<char> fullFileNameCStr(bufSize);
char *partFileNameCStr = NULL;
SearchPathA( if (!fileHasPyExt)
NULL, fullFileName += ".py";
fileName.c_str(),
pyExt ? NULL : ".py",
bufSize,
&fullFileNameCStr[0],
&partFileNameCStr );
fullFileName = std::string( &fullFileNameCStr[0] );
if ( !fullFileName.empty() )
{
filePath = std::string( &fullFileNameCStr[0], partFileNameCStr );
return true;
}
}
// 2. Èùåì âî âñåõ äèðåêòîðèÿõ, óêàçàííûõ â m_pathList
std::vector<std::string>::const_iterator it = extPathList.begin(); if (FileExists(fullFileName.c_str()))
return true;
for ( ; it != extPathList.end(); ++it )
std::vector<std::string>::const_iterator it = m_extactedPathList.begin();
for ( ; it != m_extactedPathList.end(); ++it)
{ {
DWORD bufSize = DWORD bufSize = SearchPathA(
SearchPathA( (*it).c_str(),
(*it).c_str(), fullFileName.c_str(),
fileName.c_str(), NULL,
pyExt ? NULL : ".py", 0,
0, NULL,
NULL, NULL);
NULL );
if ( bufSize > 0 ) if (bufSize > 0)
{ {
bufSize += 1; bufSize += 1;
std::vector<char> fullFileNameCStr(bufSize); std::vector<char> fullFileNameCStr(bufSize);
char *partFileNameCStr = NULL; char *partFileNameCStr = NULL;
bufSize = SearchPathA( bufSize = SearchPathA(
(*it).c_str(), (*it).c_str(),
fileName.c_str(), fullFileName.c_str(),
pyExt ? NULL : ".py", NULL,
bufSize, bufSize,
&fullFileNameCStr[0], &fullFileNameCStr[0],
&partFileNameCStr ); &partFileNameCStr);
fullFileName = std::string( &fullFileNameCStr[0] ); if (bufSize > 0)
if ( !fullFileName.empty() ) {
{ fullFileName = std::string(&fullFileNameCStr[0]);
filePath = std::string( &fullFileNameCStr[0], partFileNameCStr );
return true; return true;
} }
} }
} }
fullFileName = "";
return false; return false;
} }

View File

@ -1,32 +1,19 @@
#pragma once #pragma once
#include <string> #include <string>
#include <vector>
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
class DbgPythonPath class DbgPythonPath
{ {
public: public:
DbgPythonPath(); DbgPythonPath();
std::string bool getFullFileName(const std::string &fileName, std::string &fullFileName) const;
getStr() const;
bool
findPath(
const std::string &fileName,
std::string &fullFileName,
std::string &filePath ) const;
private: private:
std::vector<std::string> m_extactedPathList;
std::vector< std::string > m_pathList;
}; };
//extern DbgPythonPath& dbgPythonPath;
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////

9
pykd/utils.h Normal file
View File

@ -0,0 +1,9 @@
#pragma once
////////////////////////////////////////////////////////////////////////////////
inline
bool FileExists(LPCSTR lpFileName)
{
return ::GetFileAttributesA(lpFileName) != DWORD(-1);
}
////////////////////////////////////////////////////////////////////////////////