//====== Copyright 1996-2005, Valve Corporation, All rights reserved. ======= // // Purpose: // //============================================================================= #include "vpc.h" #include "projectgenerator_codelite.h" #ifdef WIN32 #include #define mkdir(dir, mode) _mkdir(dir) #define getcwd _getcwd #endif static const char *k_pchSource = "Source Files"; static const char *k_pchHeaders = "Header Files"; static const char *k_pchResources = "Resources"; static const char *k_pchVPCFiles = "VPC Files"; void CProjectGenerator_CodeLite::GenerateCodeLiteProject( CBaseProjectDataCollector *pCollector, const char *pOutFilename, const char *pMakefileFilename ) { char szProjectFile[MAX_PATH]; sprintf( szProjectFile, "%s.project", pOutFilename ); g_pVPC->VPCStatus( true, "Saving CodeLite project for: '%s' File: '%s'", pCollector->GetProjectName().String(), szProjectFile ); m_fp = fopen( szProjectFile, "wt" ); m_nIndent = 0; m_pCollector = pCollector; m_pMakefileFilename = pMakefileFilename; Write( "\n" ); Write( "\n", pCollector->GetProjectName().String() ); { ++m_nIndent; Write( "\n" ); Write( "\n" ); Write( "\n" ); { ++m_nIndent; Write( "\n" ); ++m_nIndent; Write( "\n" ); ++m_nIndent; Write( "\n" ); --m_nIndent; Write( "\n" ); Write( "\n" ); ++m_nIndent; Write( "\n" ); --m_nIndent; Write( "\n" ); Write( "\n" ); --m_nIndent; Write( "\n" ); Write( "\n" ); { ++m_nIndent; Write( "\n" ); { ++m_nIndent; Write( "make CFG=debug -f %s clean all\n", pMakefileFilename ); Write( "make CFG=debug -f %s clean\n", pMakefileFilename ); Write( "make CFG=debug -f %s -j `getconf _NPROCESSORS_ONLN`\n", pMakefileFilename ); Write( "$(ProjectPath)\n" ); --m_nIndent; } Write( "\n" ); --m_nIndent; } Write( "\n" ); Write( "\n" ); { ++m_nIndent; Write( "\n" ); { ++m_nIndent; Write( "make -f %s clean all\n", pMakefileFilename ); Write( "make -f %s clean\n", pMakefileFilename ); Write( "make -f %s -j `getconf _NPROCESSORS_ONLN`\n", pMakefileFilename ); Write( "$(ProjectPath)\n" ); --m_nIndent; } Write( "\n" ); --m_nIndent; } Write( "\n" ); --m_nIndent; } Write( "\n" ); { ++m_nIndent; WriteFilesFolder( k_pchSource, "*.c;*.C;*.cc;*.cpp;*.cp;*.cxx;*.c++;*.prg;*.pas;*.dpr;*.asm;*.s;*.bas;*.java;*.cs;*.sc;*.e;*.cob;*.html;*.rc;*.tcl;*.py;*.pl;*.m;*.mm" ); WriteFilesFolder( k_pchHeaders, "*.h;*.H;*.hh;*.hpp;*.hxx;*.inc;*.sh;*.cpy;*.if" ); WriteFilesFolder( k_pchResources, "*.plist;*.strings;*.xib" ); WriteFilesFolder( k_pchVPCFiles, "*.vpc" ); --m_nIndent; } --m_nIndent; } Write( "\n" ); fclose( m_fp ); } void CProjectGenerator_CodeLite::WriteFilesFolder( const char *pFolderName, const char *pExtensions ) { CUtlVector extensions; V_SplitString( pExtensions, ";", extensions ); Write( "\n", pFolderName ); { ++m_nIndent; for ( int i=m_pCollector->m_Files.First(); i != m_pCollector->m_Files.InvalidIndex(); i=m_pCollector->m_Files.Next( i ) ) { const char *pFilename = m_pCollector->m_Files[i]->GetName(); // Make sure this file's extension is one of the extensions they're asking for. bool bValidExt = false; const char *pFileExtension = V_GetFileExtension( pFilename ); if ( pFileExtension ) { for ( int iExt=0; iExt < extensions.Count(); iExt++ ) { const char *pTestExt = extensions[iExt]; if ( pTestExt[0] == '*' && pTestExt[1] == '.' && V_stricmp( pTestExt+2, pFileExtension ) == 0 ) { bValidExt = true; break; } } } if ( bValidExt ) { char sFixedSlashes[MAX_PATH]; V_strncpy( sFixedSlashes, pFilename, sizeof( sFixedSlashes ) ); Write( "\n", sFixedSlashes ); } } --m_nIndent; } Write( "\n"); } void CProjectGenerator_CodeLite::Write( const char *pMsg, ... ) { char sOut[8192]; va_list marker; va_start( marker, pMsg ); V_vsnprintf( sOut, sizeof( sOut ), pMsg, marker ); va_end( marker ); for ( int i=0; i < m_nIndent; i++ ) fprintf( m_fp, " " ); fprintf( m_fp, "%s", sOut ); }