ToolOutputFile.h revision 551ae4ebd3e9d137ea668fb83ae4a55b8cfba451
122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===- ToolOutputFile.h ---------------------------------------------------===// 222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// 322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// The MCLinker Project 422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// 522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// This file is distributed under the University of Illinois Open Source 622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// License. See LICENSE.TXT for details. 722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// 822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===// 987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#ifndef MCLD_SUPPORT_TOOLOUTPUTFILE_H 1087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#define MCLD_SUPPORT_TOOLOUTPUTFILE_H 1122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#ifdef ENABLE_UNITTEST 1222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <gtest.h> 1322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#endif 1422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 1522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <string> 1622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/Support/FileHandle.h> 1722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 1822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaonamespace llvm { 1922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass formatted_raw_ostream; 2022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} // end of namespace llvm 2122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 2222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaonamespace mcld { 2322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 2422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass Path; 2522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass FileHandle; 2622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 2722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao/** \class ToolOutputFile 2887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines * \brief ToolOutputFile has the following features: 2922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao * - The file is automatically deleted if the process is killed. 3022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao * - The file is automatically deleted when the TooOutputFile object is 3122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao * destoryed unless the client calls keep(). 3222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao */ 3322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass ToolOutputFile 3422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{ 3522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaopublic: 3687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ToolOutputFile(const sys::fs::Path& pPath, 3722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao FileHandle::OpenMode pMode, 3822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao FileHandle::Permission pPermission); 3922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 4022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ~ToolOutputFile(); 4122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 4287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines /// fd - Retutn the output file handle 4387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines FileHandle& fd() { return m_FileHandle; } 4422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 4587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines /// os - Return the contained raw_fd_ostream 4687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines llvm::raw_fd_ostream& os(); 4722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 4887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines /// formatted_os - Return the contained formatted_raw_ostream 4987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines llvm::formatted_raw_ostream& formatted_os(); 5022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 5122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// keep - Indicate that the tool's job wrt this output file has been 5222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// successful and the file should not be deleted. 5322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao void keep(); 5422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 5522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoprivate: 5622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao class CleanupInstaller 5722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { 5822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao public: 5987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines explicit CleanupInstaller(const sys::fs::Path& pPath); 6022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ~CleanupInstaller(); 6222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// Keep - The flag which indicates whether we should not delete the file. 6422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool Keep; 6522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao private: 6787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines sys::fs::Path m_Path; 68551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines }; 6922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 7022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoprivate: 7122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao FileHandle m_FileHandle; 7222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao CleanupInstaller m_Installer; 7387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines llvm::raw_fd_ostream* m_pFdOstream; 7487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines llvm::formatted_raw_ostream* m_pFormattedOstream; 7522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao}; 7622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 7722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} // namespace of mcld 7822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 7922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#endif 80