diff options
author | John Criswell <criswell@uiuc.edu> | 2005-11-02 18:05:50 +0000 |
---|---|---|
committer | John Criswell <criswell@uiuc.edu> | 2005-11-02 18:05:50 +0000 |
commit | cfa435f79bf39fead32263a8b71c9ae440b55214 (patch) | |
tree | 2f1ef0a4c3fb5549b8bbb014891f92866d46e042 /lib/System/Path.cpp |
Mark these as failing on sparc instead of sparcv9.
The configure script no longer tells us that we're configuring for SparcV9
specifically.
2004-06-17-UnorderedCompares may work on SparcV8, but it's experiental
anyway.
2005-02-20-AggregateSAVEEXPR should fail on any Solaris machine, as Solaris
doesn't provide complex number support.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_16@24155 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/System/Path.cpp')
-rw-r--r-- | lib/System/Path.cpp | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/lib/System/Path.cpp b/lib/System/Path.cpp new file mode 100644 index 0000000000..9ee0a3e852 --- /dev/null +++ b/lib/System/Path.cpp @@ -0,0 +1,109 @@ +//===-- Path.cpp - Implement OS Path Concept --------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file was developed by Reid Spencer and is distributed under the +// University of Illinois Open Source License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This header file implements the operating system Path concept. +// +//===----------------------------------------------------------------------===// + +#include "llvm/System/Path.h" +#include "llvm/Config/config.h" +#include <cassert> + +namespace llvm { +using namespace sys; + +//===----------------------------------------------------------------------===// +//=== WARNING: Implementation here must contain only TRULY operating system +//=== independent code. +//===----------------------------------------------------------------------===// + +Path +Path::GetLLVMConfigDir() { + Path result; +#ifdef LLVM_ETCDIR + if (result.set(LLVM_ETCDIR)) + return result; +#endif + return GetLLVMDefaultConfigDir(); +} + +LLVMFileType +sys::IdentifyFileType(const char*magic, unsigned length) { + assert(magic && "Invalid magic number string"); + assert(length >=4 && "Invalid magic number length"); + switch (magic[0]) { + case 'l': + if (magic[1] == 'l' && magic[2] == 'v') { + if (magic[3] == 'c') + return CompressedBytecodeFileType; + else if (magic[3] == 'm') + return BytecodeFileType; + } + break; + + case '!': + if (length >= 8) { + if (memcmp(magic,"!<arch>\n",8) == 0) + return ArchiveFileType; + } + break; + + default: + break; + } + return UnknownFileType; +} + +bool +Path::isArchive() const { + if (canRead()) + return hasMagicNumber("!<arch>\012"); + return false; +} + +bool +Path::isDynamicLibrary() const { + if (canRead()) + return hasMagicNumber("\177ELF"); + return false; +} + +Path +Path::FindLibrary(std::string& name) { + std::vector<sys::Path> LibPaths; + GetSystemLibraryPaths(LibPaths); + for (unsigned i = 0; i < LibPaths.size(); ++i) { + sys::Path FullPath(LibPaths[i]); + FullPath.appendComponent("lib" + name + LTDL_SHLIB_EXT); + if (FullPath.isDynamicLibrary()) + return FullPath; + FullPath.eraseSuffix(); + FullPath.appendSuffix("a"); + if (FullPath.isArchive()) + return FullPath; + } + return sys::Path(); +} + +std::string +Path::GetDLLSuffix() { + return LTDL_SHLIB_EXT; +} + +} + +// Include the truly platform-specific parts of this class. + +#if defined(LLVM_ON_UNIX) +#include "Unix/Path.inc" +#endif +#if defined(LLVM_ON_WIN32) +#include "Win32/Path.inc" +#endif + |