/* * FOZ DO IGUAÇU - PR 29-09-23 @ 18:41 * MODIFICADO POR DEIVID SOUZA * COMPILAR EM HARBOUR 3.0 OU SUPERIOR * BCC / MINGW * --------------------------------------- * Harbour.xCompiler.prg / xDevStudio 0.70 * --------------------------------------- * * Arquivo contendo os comandos de Script para processamento de um projeto * Harbour modo CONSOLE com Borland BCC ou MinGW. */ #define CRLF Chr(13)+Chr(10) function Prepare type := Project( 'TargetType' ) if FileExists( 'harbour.exe', m_PreSetPath ) .or. ; FileExists( 'hb.exe', m_PreSetPath ) else MsgError( 'O arquivo principal do compilador não existe!' ) return .f. end if !FileExists( 'bcc32.exe', m_PreSetPath ) MsgError( 'O arquivo requerido BCC32.EXE não foi localizado no sistema!' ) return .f. end if !FileExists( 'hbmk2.exe', m_PreSetPath ) MsgError( 'O arquivo requerido hbmk2.EXE não foi localizado no sistema!' ) return .f. end /* * 30/9/2006 21:02:35 * Aqui neste ponto setamos a variavel abaixo como SIM, indicando * que desejamos recompilar todo o projeto. Caso o valor dela seja .F. * a xDev irá compilar e linkar usando o padrao solicitado pelo * programador que estiver usando a xDev. */ m_bCompileAll := SameText( fForceCompileAll, 'sim' ) return .t. function UnPrepare return .t. /* * Esta função é executada, sempre que a xDev precisar compilar um arquivo .PRG */ function OnFilePRG * Preparamos a linha de comando cmd := 'harbour.exe' cmd += ' ' + m_sFileName + '' cmd += ' /q /o' + m_sOutPut cmd += ' ' + fFlagA + ' ' + fFlagL + ' ' + fFlagM + ' ' + ; ' ' + fFlagN + ' ' + fFlagZ + ' ' + fFlagP * Verificarmos se ele nao quer desativar o DEBUG para este módulo em específico! * para isto usamos a funcao SameText() que compara os 2 argumentos ignorando * letras maiúsculas / minúsculas. * if !SameText( PRG_DisableDebug, 'sim' ) cmd += ' ' + fFlagB end */ * Verificamos as diretrivas #DEFINEs e adicionamos ela na linha de comando! aDefs := Alltrim(CustomDefines) + ',' + ; // Diretrivas gerais do projeto Alltrim(PRG_Defines) + ',' + ; // Diretrivas específicas deste arquivo Alltrim(m_PreSetDefines) // Estas sao as diretrivas do PROJETO e do PRESET atual aDefs := StrTran(aDefs, ';', ',' ) aDefs := StrTran(aDefs, ' ', '' ) aDefs := ListAsArray( aDefs, ',') cmd := alltrim( cmd ) for i := 0 to len( aDefs ) if !Empty(aDefs[i]) cmd += ' /D' + aDefs[i] end next * Isto inclui os #DEFINEs de cada versao do xHb e do HB específicas if !Empty(m_PresetConstants) cmd += m_PresetConstants end * Colocamos os outros parametros (se houver) cmd := alltrim( cmd ) cmd += " " + fMiscOption1 * Executamos o comando específico para compilar runBat(cmd) bOk := (ErrorLevel() == 0) return bOk /* * Esta função é executada, sempre que a xDev precisar compilar um arquivo .C/.CPP */ function OnFileC * Preparamos a linha de comando aLines := {} * Verificamos as diretrivas #DEFINEs e adicionamos ela na linha de comando! aDefs := Alltrim(CustomDefines) + ',' + ; // Diretrivas gerais do projeto Alltrim(PRG_Defines) + ',' + ; // Diretrivas específicas deste arquivo Alltrim(m_PreSetDefines) // Estas sao as diretrivas do PROJETO e do PRESET atual aDefs := StrTran(aDefs, ';', ',' ) aDefs := StrTran(aDefs, ' ', '' ) aDefs := ListAsArray( aDefs, ',') cmd := alltrim( cmd ) for i := 0 to len( aDefs ) if !Empty(aDefs[i]) AAdd( aLines, '-D' + aDefs[i]) end next * Isto inclui os #DEFINEs de cada versao do xHb e do HB específicas if !Empty(m_PresetConstants) AAdd( aLines, m_PresetConstants) end * Ajustamos os outros parametros AAdd( aLines, '-I' + m_PreSetInclude) AAdd( aLines, '-L' + m_PreSetLib + ';' +m_PreSetObj) AAdd( aLines, '-o' + m_sOutPut) AAdd( aLines, m_sFileName ) bOk := (ErrorLevel() == 0) return bOk /* * Esta função é executada, sempre que a xDev precisar compilar um arquivo .RC */ function OnFileRC cmd := FindFile( 'brc32.exe', m_PreSetPath ) if Empty(cmd) cmd := FindFile( 'porc.exe', m_PreSetPath ) end if Empty(cmd) MsgError( 'Erro ao localizar o aplicativo necessário para compilar o módulo "'+m_sFileName+'"!' ) return .f. end * Preparamos a linha de comando cmd += ' -r -fo"' + m_sOutPut + '" -i"' + m_PreSetInclude +'"' * Verificamos as diretrivas #DEFINEs e adicionamos ela na linha de comando! aDefs := Alltrim(CustomDefines) + ',' + ; // Diretrivas gerais do projeto Alltrim(PRG_Defines) + ',' + ; // Diretrivas específicas deste arquivo Alltrim(m_PreSetDefines) // Estas sao as diretrivas do PROJETO e do PRESET atual aDefs := StrTran(aDefs, ';', ',' ) aDefs := StrTran(aDefs, ' ', '' ) aDefs := ListAsArray( aDefs, ',') cmd := alltrim( cmd ) for i := 0 to len( aDefs ) if !Empty(aDefs[i]) cmd += ' -D' + aDefs[i] end next * Isto inclui os #DEFINEs de cada versao do xHb e do HB específicas if !Empty(m_PresetConstants) cmd += m_PresetConstants end * Ajustamos os outros parametros cmd += ' "' + m_sFileName + '"' * Executamos o comando específico para compilar run (cmd) bOk := (ErrorLevel() == 0) return bOk function OnBuild return BuildExe() function BuildExe() * Preparamos a linha de comando aLines := {} AAdd( aLines, '-I' + m_PreSetInclude) AAdd( aLines, '-L' + m_PreSetLib + ';' +m_PreSetObj) AAdd( aLines, '-o' + m_sOutPut) aFiles := Project( "*.PRG" ) t := Len( aFiles ) FOR i := 1 TO t IF i == t AADD( aLines, aFiles[i] ) ELSE AADD( aLines, aFiles[i] ) End End //################################ //## AJUSTE DA COMPILAÇÃO # //################################ AADD( aLines, '-workdir=./obj' ) // PASTA OBJ AADD( aLines, '-inc' ) // COMPILA SOMENTE .PRG MODIFICADOS AADD( aLines, '-mt' ) AADD( aLines, '-lhbwin' ) AADD( aLines, '-lhbct' ) AADD( aLines, '-dhb' ) //################################ //## DEBUG # //################################ if !SameText( PRG_DisableDebug, 'sim' ) AADD( aLines, '-b' ) AADD( aLines, '-debug' ) endif /* * Chamamos a função que pega o nome das libs corretas */ DefaultLibs() /* * Põe os RCs project files */ aFiles := Project( "*.RES" ) FOR i := 1 TO Len( aFiles ) IF i == t AADD( aLines, aFiles[i] ) else AADD( aLines, aFiles[i] ) End End //################################ //## COMPILA A APLICAÇÃO # //################################ MemoWrite( 'b32.hbp', aLines ) runBat('hbmk2 @B32.HBP') bOk := (ErrorLevel() == 0) //################################ //## TENTA COMPACTAR EXECUTAVEL # //################################ if bOk .and. SameText( fUseUPX, 'Sim' ) cmd := FindFile( 'upx.exe', m_PreSetPath ) if Empty(cmd) MsgError( 'Erro ao localizar o arquivo UPX.EXE necessário para compactar seu aplicativo!' ) return .f. end aLines := {} AADD( aLines, 'ECHO xDev TITLE UPX' ) AADD( aLines, 'ECHO xDev FILE '+ m_sOutPut +'' ) AADD( aLines, 'UPX.EXE "'+m_sOutPut + '"' ) cmd := ListAsText( aLines ) runBat( cmd ) bOk := (ErrorLevel() == 0) end return bOk function DefaultLibs() Libs := .T. //ADICIONA LIBS AADD( aLines, 'xhb.hbc' ) AADD( aLines, 'hbct.hbc' ) AADD( aLines, 'hbhpdf.hbc' ) /* * Incluimos os arquivos .LIB no projeto. O segundo parametro .T. indica que * queremos TODOS os arquivos ATÉ MESMO AQUELES MARCADOS com a opção * compile=FALSE, por isto usamos um parametro .T. * * Quando omitimos o segundo parametro, ele puxará apenas os arquivos * marcados como COMPILE=TRUE e desde modo, irá ignorar os arquivos .LIB */ aFiles := Project( "*.LIB" ) FOR i := 1 TO Len( aFiles ) AADD( aLines, '"'+aFiles[i]+'" + ' ) End if SameText( CustomLIBs, 'Sim') /* * Se ele tem a lista de LIBs personalizada, caimos fora! */ else if SameText( fFlagB, '/B' ) AADD( aLines, '-b' ) end if SameText( fUseHBDLL, 'sim' ) *** elseif !Libs *** else if SameText( fGUILib, 'Gtwvg' ) * AADD( aLines, 'gtwvg.hbc' ) elseif SameText( fGUILib, 'Gtwvw' ) * AADD( aLines, 'gtwvw.hbc' ) * end end end return