//===- MsgHandling.cpp ----------------------------------------------------===//
//
//                     The MCLinker Project
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include <mcld/LD/DiagnosticEngine.h>
#include <mcld/LD/DiagnosticLineInfo.h>
#include <mcld/LD/DiagnosticPrinter.h>
#include <mcld/LD/MsgHandler.h>
#include <mcld/Support/MsgHandling.h>
#include <llvm/Support/ManagedStatic.h>
#include <llvm/Support/raw_ostream.h>

using namespace mcld;

//===----------------------------------------------------------------------===//
// static variables
//===----------------------------------------------------------------------===//
static llvm::ManagedStatic<DiagnosticEngine> g_pEngine;

void
mcld::InitializeDiagnosticEngine(const mcld::MCLDInfo& pLDInfo,
                                 DiagnosticLineInfo* pLineInfo,
                                 DiagnosticPrinter* pPrinter)
{
  g_pEngine->reset(pLDInfo);
  if (NULL != pLineInfo)
    g_pEngine->setLineInfo(*pLineInfo);

  if (NULL != pPrinter)
    g_pEngine->setPrinter(*pPrinter, false);
  else {
    DiagnosticPrinter* printer = new DiagnosticPrinter();
    g_pEngine->setPrinter(*printer, true);
  }
}

DiagnosticEngine& mcld::getDiagnosticEngine()
{
  return *g_pEngine;
}