forked from OSchip/llvm-project
<rdar://problem/12903081>
When looking for the Python script to load for a given module, replace dots with underscores if there are any after stripping the extension This means that for a module named foo.devel.xyz a file named foo_devel.py will be what we try to load llvm-svn: 170633
This commit is contained in:
parent
7bdc45b570
commit
04e92149a1
|
@ -58,6 +58,9 @@ PlatformDarwin::LocateExecutableScriptingResource (const ModuleSpec &module_spec
|
|||
const UUID *uuid = module_spec.GetUUIDPtr();
|
||||
|
||||
const char* module_directory = exec_fspec->GetDirectory().GetCString();
|
||||
// XXX some extensions might be meaningful and should not be stripped - if this ever bites us
|
||||
// we should be ready to deal with it accordingly (i.e. by having a per-platform list of those
|
||||
// magic special extensions that actually mean something)
|
||||
const char* module_basename = exec_fspec->GetFileNameStrippingExtension().GetCString();
|
||||
|
||||
if (!module_directory || !module_basename)
|
||||
|
@ -69,6 +72,21 @@ PlatformDarwin::LocateExecutableScriptingResource (const ModuleSpec &module_spec
|
|||
arch ? arch->GetArchitectureName() : "<NULL>",
|
||||
uuid);
|
||||
|
||||
// FIXME: for Python, we cannot allow dots in the middle of the filenames we import
|
||||
// theoretically, different scripting languages will have different sets of
|
||||
// forbidden tokens in filenames, and that should be dealt with by each ScriptInterpreter
|
||||
// for now, we just replace dots with underscores, but if we ever support anything
|
||||
// other than Python we will need to rework this
|
||||
std::auto_ptr<char> module_basename_fixed_ap(new char[strlen(module_basename)+1]);
|
||||
char* module_basename_fixed = module_basename_fixed_ap.get();
|
||||
strcpy(module_basename_fixed, module_basename);
|
||||
while (*module_basename_fixed)
|
||||
{
|
||||
if (*module_basename_fixed == '.')
|
||||
*module_basename_fixed = '_';
|
||||
module_basename_fixed++;
|
||||
}
|
||||
module_basename_fixed = module_basename_fixed_ap.get();
|
||||
|
||||
FileSpec symbol_fspec (Symbols::LocateExecutableSymbolFile(module_spec));
|
||||
|
||||
|
@ -80,7 +98,7 @@ PlatformDarwin::LocateExecutableScriptingResource (const ModuleSpec &module_spec
|
|||
{
|
||||
// for OSX we are going to be in .dSYM/Contents/Resources/DWARF/<basename>
|
||||
// let us go to .dSYM/Contents/Resources/Python/<basename>.py and see if the file exists
|
||||
path_string.Printf("%s/../Python/%s.py",symbol_fspec.GetDirectory().AsCString(""),module_basename);
|
||||
path_string.Printf("%s/../Python/%s.py",symbol_fspec.GetDirectory().AsCString(""),module_basename_fixed);
|
||||
script_fspec.SetFile(path_string.GetData(), true);
|
||||
if (!script_fspec.Exists())
|
||||
script_fspec.Clear();
|
||||
|
@ -96,7 +114,7 @@ PlatformDarwin::LocateExecutableScriptingResource (const ModuleSpec &module_spec
|
|||
// we are going to be in foo.framework/Versions/X/foo
|
||||
path_string.Clear();
|
||||
// let's go to foo.framework/Versions/X/Resources/Python/foo.py
|
||||
path_string.Printf("%s/Resources/Python/%s.py",module_directory,module_basename);
|
||||
path_string.Printf("%s/Resources/Python/%s.py",module_directory,module_basename_fixed);
|
||||
script_fspec.SetFile(path_string.GetData(), true);
|
||||
if (!script_fspec.Exists())
|
||||
script_fspec.Clear();
|
||||
|
|
Loading…
Reference in New Issue