15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- MCLDDirectory.cpp --------------------------------------------------===// 25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// The MCLinker Project 45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source 65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details. 75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===// 937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/MC/MCLDDirectory.h" 1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/FileSystem.h" 115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1237b74a387bb3993387029859c2d9d051c41c724eStephen Hinesnamespace mcld { 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 14f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines//===----------------------------------------------------------------------===// 155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// MCLDDirectory 16f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines//===----------------------------------------------------------------------===// 1737b74a387bb3993387029859c2d9d051c41c724eStephen HinesMCLDDirectory::MCLDDirectory() : Directory(), m_Name(), m_bInSysroot(false) { 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2037b74a387bb3993387029859c2d9d051c41c724eStephen HinesMCLDDirectory::MCLDDirectory(const char* pName) : Directory(), m_Name(pName) { 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Directory::m_Path.assign(pName); 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (!Directory::m_Path.empty()) 2437b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_bInSysroot = (Directory::m_Path.native()[0] == '='); 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Directory::m_Path.m_append_separator_if_needed(); 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (m_bInSysroot) 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Directory::m_Path.native().erase(Directory::m_Path.native().begin()); 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao else 3037b74a387bb3993387029859c2d9d051c41c724eStephen Hines sys::fs::detail::open_dir(*this); 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3337b74a387bb3993387029859c2d9d051c41c724eStephen HinesMCLDDirectory::MCLDDirectory(const std::string& pName) 3437b74a387bb3993387029859c2d9d051c41c724eStephen Hines : Directory(), m_Name(pName) { 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Directory::m_Path.assign(pName); 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (!Directory::m_Path.empty()) 3837b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_bInSysroot = (Directory::m_Path.native()[0] == '='); 395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Directory::m_Path.m_append_separator_if_needed(); 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (m_bInSysroot) 425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Directory::m_Path.native().erase(Directory::m_Path.native().begin()); 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao else 4437b74a387bb3993387029859c2d9d051c41c724eStephen Hines sys::fs::detail::open_dir(*this); 455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoMCLDDirectory::MCLDDirectory(llvm::StringRef pName) 4837b74a387bb3993387029859c2d9d051c41c724eStephen Hines : Directory(), m_Name(pName.data(), pName.size()) { 495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Directory::m_Path.assign(pName.str()); 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (!Directory::m_Path.empty()) 5237b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_bInSysroot = (Directory::m_Path.native()[0] == '='); 535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Directory::m_Path.m_append_separator_if_needed(); 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (m_bInSysroot) 565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Directory::m_Path.native().erase(Directory::m_Path.native().begin()); 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao else 5837b74a387bb3993387029859c2d9d051c41c724eStephen Hines sys::fs::detail::open_dir(*this); 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 6137b74a387bb3993387029859c2d9d051c41c724eStephen HinesMCLDDirectory& MCLDDirectory::assign(llvm::StringRef pName) { 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_Name.assign(pName.data(), pName.size()); 635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Directory::m_Path.assign(pName.str()); 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (!Directory::m_Path.empty()) 6637b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_bInSysroot = (Directory::m_Path.native()[0] == '='); 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Directory::m_Path.m_append_separator_if_needed(); 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (m_bInSysroot) 705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Directory::m_Path.native().erase(Directory::m_Path.native().begin()); 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao else 7237b74a387bb3993387029859c2d9d051c41c724eStephen Hines sys::fs::detail::open_dir(*this); 7337b74a387bb3993387029859c2d9d051c41c724eStephen Hines Directory::m_FileStatus = sys::fs::FileStatus(); 7437b74a387bb3993387029859c2d9d051c41c724eStephen Hines Directory::m_SymLinkStatus = sys::fs::FileStatus(); 755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Directory::m_Cache.clear(); 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Directory::m_Handler = 0; 775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return (*this); 785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 8037b74a387bb3993387029859c2d9d051c41c724eStephen HinesMCLDDirectory::~MCLDDirectory() { 815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 8337b74a387bb3993387029859c2d9d051c41c724eStephen Hinesbool MCLDDirectory::isInSysroot() const { 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_bInSysroot; 855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 8737b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid MCLDDirectory::setSysroot(const sys::fs::Path& pSysroot) { 885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (m_bInSysroot) { 895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao std::string old_path = Directory::m_Path.native(); 905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Directory::m_Path.native() = pSysroot.native(); 915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Directory::m_Path.m_append_separator_if_needed(); 925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Directory::m_Path.native() += old_path; 9337b74a387bb3993387029859c2d9d051c41c724eStephen Hines sys::fs::detail::canonicalize(Directory::m_Path.native()); 9437b74a387bb3993387029859c2d9d051c41c724eStephen Hines sys::fs::detail::open_dir(*this); 955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 9837b74a387bb3993387029859c2d9d051c41c724eStephen Hines} // namespace mcld 99