1 //===- raw_ostream.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/raw_ostream.h>
10
11 using namespace mcld;
12
13 //===----------------------------------------------------------------------===//
14 // raw_ostream
raw_fd_ostream(const char * pFilename,std::string & pErrorInfo,unsigned int pFlags,const MCLDInfo * pLDInfo)15 mcld::raw_fd_ostream::raw_fd_ostream(const char *pFilename,
16 std::string &pErrorInfo,
17 unsigned int pFlags,
18 const MCLDInfo* pLDInfo)
19 : llvm::raw_fd_ostream(pFilename, pErrorInfo, pFlags), m_pLDInfo(pLDInfo) {
20 }
21
raw_fd_ostream(int pFD,bool pShouldClose,bool pUnbuffered,const MCLDInfo * pLDInfo)22 mcld::raw_fd_ostream::raw_fd_ostream(int pFD,
23 bool pShouldClose,
24 bool pUnbuffered,
25 const MCLDInfo* pLDInfo)
26 : llvm::raw_fd_ostream(pFD, pShouldClose, pUnbuffered), m_pLDInfo(pLDInfo) {
27 }
28
~raw_fd_ostream()29 mcld::raw_fd_ostream::~raw_fd_ostream()
30 {
31 }
32
setLDInfo(const MCLDInfo & pLDInfo)33 void mcld::raw_fd_ostream::setLDInfo(const MCLDInfo& pLDInfo)
34 {
35 m_pLDInfo = &pLDInfo;
36 }
37
38 llvm::raw_ostream &
changeColor(enum llvm::raw_ostream::Colors pColor,bool pBold,bool pBackground)39 mcld::raw_fd_ostream::changeColor(enum llvm::raw_ostream::Colors pColor,
40 bool pBold,
41 bool pBackground)
42 {
43 if (!is_displayed())
44 return *this;
45 return llvm::raw_fd_ostream::changeColor(pColor, pBold, pBackground);
46 }
47
resetColor()48 llvm::raw_ostream& mcld::raw_fd_ostream::resetColor()
49 {
50 if (!is_displayed())
51 return *this;
52 return llvm::raw_fd_ostream::resetColor();
53 }
54
55 // FIXME: migrate to newer LLVM
56 /**
57 llvm::raw_ostream& mcld::raw_fd_ostream::reverseColor()
58 {
59 if (!is_displayed())
60 return *this;
61 return llvm::raw_ostream::reverseColor();
62 }
63 **/
64
is_displayed() const65 bool mcld::raw_fd_ostream::is_displayed() const
66 {
67 if (NULL == m_pLDInfo)
68 return llvm::raw_fd_ostream::is_displayed();
69
70 return m_pLDInfo->options().color();
71 }
72
73 //===----------------------------------------------------------------------===//
74 // outs(), errs(), nulls()
75 //===----------------------------------------------------------------------===//
outs()76 mcld::raw_fd_ostream& mcld::outs() {
77 // Set buffer settings to model stdout behavior.
78 // Delete the file descriptor when the program exists, forcing error
79 // detection. If you don't want this behavior, don't use outs().
80 static mcld::raw_fd_ostream S(STDOUT_FILENO, true, NULL);
81 return S;
82 }
83
errs()84 mcld::raw_fd_ostream& mcld::errs() {
85 // Set standard error to be unbuffered by default.
86 static mcld::raw_fd_ostream S(STDERR_FILENO, false, true, NULL);
87 return S;
88 }
89
InitializeOStreams(const MCLDInfo & pLDInfo)90 void mcld::InitializeOStreams(const MCLDInfo& pLDInfo)
91 {
92 outs().setLDInfo(pLDInfo);
93 errs().setLDInfo(pLDInfo);
94 }
95
96