1affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//===- raw_ostream.cpp ----------------------------------------------------===//
2affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//
3affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//                     The MCLinker Project
4affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//
5affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// This file is distributed under the University of Illinois Open Source
6affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// License. See LICENSE.TXT for details.
7affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//
8affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//===----------------------------------------------------------------------===//
9f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines#include <mcld/Config/Config.h>
10affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <mcld/Support/raw_ostream.h>
11affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
1222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#if defined(HAVE_UNISTD_H)
1322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao# include <unistd.h>
1422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#endif
1522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
16f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines#if defined(__CYGWIN__)
17f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines#include <io.h>
18f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines#endif
19f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
20f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines#if defined(_MSC_VER) || defined(__MINGW32__)
2122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <io.h>
2222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#ifndef STDIN_FILENO
2322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao# define STDIN_FILENO 0
2422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#endif
2522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#ifndef STDOUT_FILENO
2622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao# define STDOUT_FILENO 1
2722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#endif
2822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#ifndef STDERR_FILENO
2922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao# define STDERR_FILENO 2
3022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#endif
3122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#endif
3222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
33affc150dc44fab1911775a49636d0ce85333b634Zonr Changusing namespace mcld;
34affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
35affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//===----------------------------------------------------------------------===//
36affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// raw_ostream
3722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===//
38affc150dc44fab1911775a49636d0ce85333b634Zonr Changmcld::raw_fd_ostream::raw_fd_ostream(const char *pFilename,
3922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao                                     std::string &pErrorInfo,
4071f514dd456a45a0dea9c1c71a56f3a807cfbfb8Brian Carlstrom                                     llvm::sys::fs::OpenFlags pFlags)
4122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  : llvm::raw_fd_ostream(pFilename, pErrorInfo, pFlags),
4222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao    m_bConfigColor(false),
4322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao    m_bSetColor(false) {
44affc150dc44fab1911775a49636d0ce85333b634Zonr Chang}
45affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
46affc150dc44fab1911775a49636d0ce85333b634Zonr Changmcld::raw_fd_ostream::raw_fd_ostream(int pFD,
47affc150dc44fab1911775a49636d0ce85333b634Zonr Chang                               bool pShouldClose,
4822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao                               bool pUnbuffered)
4922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  : llvm::raw_fd_ostream(pFD, pShouldClose, pUnbuffered),
5022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao    m_bConfigColor(false),
5122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao    m_bSetColor(false) {
52affc150dc44fab1911775a49636d0ce85333b634Zonr Chang}
53affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
54affc150dc44fab1911775a49636d0ce85333b634Zonr Changmcld::raw_fd_ostream::~raw_fd_ostream()
55affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{
56affc150dc44fab1911775a49636d0ce85333b634Zonr Chang}
57affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
5822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaovoid mcld::raw_fd_ostream::setColor(bool pEnable)
59affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{
6022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  m_bConfigColor = true;
6122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  m_bSetColor = pEnable;
62affc150dc44fab1911775a49636d0ce85333b634Zonr Chang}
63affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
64affc150dc44fab1911775a49636d0ce85333b634Zonr Changllvm::raw_ostream &
65affc150dc44fab1911775a49636d0ce85333b634Zonr Changmcld::raw_fd_ostream::changeColor(enum llvm::raw_ostream::Colors pColor,
66affc150dc44fab1911775a49636d0ce85333b634Zonr Chang                                  bool pBold,
67affc150dc44fab1911775a49636d0ce85333b634Zonr Chang                                  bool pBackground)
68affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{
69affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  if (!is_displayed())
70affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    return *this;
71affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  return llvm::raw_fd_ostream::changeColor(pColor, pBold, pBackground);
72affc150dc44fab1911775a49636d0ce85333b634Zonr Chang}
73affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
74affc150dc44fab1911775a49636d0ce85333b634Zonr Changllvm::raw_ostream& mcld::raw_fd_ostream::resetColor()
75affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{
76affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  if (!is_displayed())
77affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    return *this;
78affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  return llvm::raw_fd_ostream::resetColor();
79affc150dc44fab1911775a49636d0ce85333b634Zonr Chang}
80affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
81affc150dc44fab1911775a49636d0ce85333b634Zonr Changllvm::raw_ostream& mcld::raw_fd_ostream::reverseColor()
82affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{
83affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  if (!is_displayed())
84affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    return *this;
85affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  return llvm::raw_ostream::reverseColor();
86affc150dc44fab1911775a49636d0ce85333b634Zonr Chang}
87affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
88affc150dc44fab1911775a49636d0ce85333b634Zonr Changbool mcld::raw_fd_ostream::is_displayed() const
89affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{
9022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  if (m_bConfigColor)
9122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao    return m_bSetColor;
92affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
9322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  return llvm::raw_fd_ostream::is_displayed();
94affc150dc44fab1911775a49636d0ce85333b634Zonr Chang}
95affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
96affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//===----------------------------------------------------------------------===//
97affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//  outs(), errs(), nulls()
98affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//===----------------------------------------------------------------------===//
99affc150dc44fab1911775a49636d0ce85333b634Zonr Changmcld::raw_fd_ostream& mcld::outs() {
100affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  // Set buffer settings to model stdout behavior.
101f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  static mcld::raw_fd_ostream S(STDOUT_FILENO, false);
102affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  return S;
103affc150dc44fab1911775a49636d0ce85333b634Zonr Chang}
104affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
105affc150dc44fab1911775a49636d0ce85333b634Zonr Changmcld::raw_fd_ostream& mcld::errs() {
106affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  // Set standard error to be unbuffered by default.
10722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  static mcld::raw_fd_ostream S(STDERR_FILENO, false, true);
108affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  return S;
109affc150dc44fab1911775a49636d0ce85333b634Zonr Chang}
110affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
111