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 1222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <string> 1322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/Support/FileHandle.h> 1422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 1522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaonamespace llvm { 1622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass formatted_raw_ostream; 1722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} // end of namespace llvm 1822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 1922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaonamespace mcld { 2022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 2122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass Path; 2222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass FileHandle; 2322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 2422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao/** \class ToolOutputFile 2587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines * \brief ToolOutputFile has the following features: 2622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao * - The file is automatically deleted if the process is killed. 2722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao * - The file is automatically deleted when the TooOutputFile object is 2822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao * destoryed unless the client calls keep(). 2922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao */ 3022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass ToolOutputFile 3122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{ 3222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaopublic: 3387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ToolOutputFile(const sys::fs::Path& pPath, 3422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao FileHandle::OpenMode pMode, 3522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao FileHandle::Permission pPermission); 3622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 3722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ~ToolOutputFile(); 3822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 3987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines /// fd - Retutn the output file handle 4087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines FileHandle& fd() { return m_FileHandle; } 4122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 4287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines /// os - Return the contained raw_fd_ostream 4387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines llvm::raw_fd_ostream& os(); 4422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 4587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines /// formatted_os - Return the contained formatted_raw_ostream 4687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines llvm::formatted_raw_ostream& formatted_os(); 4722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 4822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// keep - Indicate that the tool's job wrt this output file has been 4922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// successful and the file should not be deleted. 5022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao void keep(); 5122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 5222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoprivate: 5322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao class CleanupInstaller 5422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { 5522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao public: 5687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines explicit CleanupInstaller(const sys::fs::Path& pPath); 5722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 5822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ~CleanupInstaller(); 5922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// Keep - The flag which indicates whether we should not delete the file. 6122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool Keep; 6222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao private: 6487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines sys::fs::Path m_Path; 65551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines }; 6622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoprivate: 6822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao FileHandle m_FileHandle; 6922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao CleanupInstaller m_Installer; 7087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines llvm::raw_fd_ostream* m_pFdOstream; 7187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines llvm::formatted_raw_ostream* m_pFormattedOstream; 7222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao}; 7322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 7422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} // namespace of mcld 7522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 7622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#endif 77