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