1//===- CommandLine.cpp ----------------------------------------------------===// 2// 3// The MCLinker Project 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9#include "mcld/Support/CommandLine.h" 10#include <llvm/ADT/StringRef.h> 11 12using namespace llvm; 13using namespace llvm::cl; 14 15//-------------------------------------------------- 16// parser<mcld::sys::fs::Path> 17// 18bool parser<mcld::sys::fs::Path>::parse(llvm::cl::Option &O, 19 llvm::StringRef ArgName, 20 llvm::StringRef Arg, 21 mcld::sys::fs::Path &Val) 22{ 23 Val.assign<llvm::StringRef::const_iterator>(Arg.begin(), Arg.end()); 24 return false; 25} 26 27static const size_t MaxOptWidth = 8; // arbitrary spacing for printOptionDiff 28 29void parser<mcld::sys::fs::Path>::printOptionDiff(const llvm::cl::Option &O, 30 const mcld::sys::fs::Path &V, 31 parser<mcld::sys::fs::Path>::OptVal Default, 32 size_t GlobalWidth) const 33{ 34 printOptionName(O, GlobalWidth); 35 outs() << "= " << V; 36 size_t VSize = V.native().size(); 37 size_t NumSpaces = MaxOptWidth > VSize ? MaxOptWidth - VSize : 0; 38 outs().indent(NumSpaces) << " (default: "; 39 if (Default.hasValue()) 40 outs() << Default.getValue().c_str(); 41 else 42 outs() << "*no default*"; 43 outs() << ")\n"; 44} 45 46void parser<mcld::sys::fs::Path>::anchor() 47{ 48 // do nothing 49} 50 51//-------------------------------------------------- 52// parser<mcld::MCLDDirectory> 53// 54bool parser<mcld::MCLDDirectory>::parse(llvm::cl::Option &O, 55 llvm::StringRef ArgName, 56 llvm::StringRef Arg, 57 mcld::MCLDDirectory &Val) 58{ 59 Val.assign(Arg); 60 return false; 61} 62 63void parser<mcld::MCLDDirectory>::printOptionDiff(const llvm::cl::Option &O, 64 const mcld::MCLDDirectory &V, 65 parser<mcld::MCLDDirectory>::OptVal Default, 66 size_t GlobalWidth) const 67{ 68 printOptionName(O, GlobalWidth); 69 outs() << "= " << V.name(); 70 size_t VSize = V.name().size(); 71 size_t NumSpaces = MaxOptWidth > VSize ? MaxOptWidth - VSize : 0; 72 outs().indent(NumSpaces) << " (default: "; 73 if (Default.hasValue()) 74 outs() << Default.getValue().name(); 75 else 76 outs() << "*no default*"; 77 outs() << ")\n"; 78} 79 80void parser<mcld::MCLDDirectory>::anchor() 81{ 82 // do nothing 83} 84 85