Each build script found in the scripts folder consists of two files:
A configuration file: eg FiveWin32.xCompiler where you can set compiler options.
A Script File: eg FiveWin.xCompiler.prg which generates all script files and libraries including bath according to what is defined in the previous file options
At archvios. XCompiler did not modify any single change. XCompiler.prg then put the contents of each script
The association of each file. XCompliler with each script. XCompiler.prg makes the following statement: <option source="nombredearchivo.xCompiler.prg">
The configuration of programming environments are saved in the file Presets.xIni
Build Scripts for Harbour and Borland C + +
FiveWin32.xCompiler
- Code: Select all Expand view
<!--
### Standard xDev Config - Layout v1.5 #########
# #
# Created @ 16/9/2006 09:38:10 #
# #
# xDevStudio Project - xdev@kssoftware.com.br #
################################################
-->
<compiler name="FiveWin 32 Bits & Harbour + Borland C++">
<option icon="Icons.icl,8">
<option source="FiveWin.xCompiler.prg">
<option depends=".prg, .c, .obj, .rc, .res">
<option compiler="harbour.exe">
<option onbuild="MakeFW32h_BCC">
<parameters>
/* Opçoes copiadas do Harbour.xCompiler */
<option fFlagA="/A - auto declarar como MEMVAR" default="Não" select="Sim,Não" values="/A," hint="Declara automaticamente os símbolos não definidos como MEMVAR">
<option fFlagB="/B - Usar depurador?" default="Não" select="Sim,Não" values="/B," hint="Habilita o DEBUG em seu aplicativo, que poderá ser invocado, teclando-se ALT+D">
<option fFlagL="/L - Excluir número de linhas" default="Não" select="Sim,Não" values="/L," hint="Exclui a referência interna dos números de linhas dos arquivos deste projeto">
<option fFlagM="/M - Compilação individual dos PRGs" default="Sim" select="Sim,Não" values="/M," hint="Determina (quando desativado) que o arquivo principal deve ser compilado junto com os arquivos PRGs referenciados com o comando DO. Se ativado todos os arquivos serão compilados separadamente.">
<option fFlagN="/N - Não definir função inicial autom." default="Sim" select="Sim,Não" values="/N," hint="Faz com que não seja incluída a função inicial em cada arquivo compilado neste projeto">
<option fFlagP="/P - Gerar arquivo pré-processado" default="Não" select="Sim,Não" values="/P," hint="Informa se um arquivo pre-processado (.PPO) deve ser gerado ou nao.">
<option fFlagZ="/Z - Suprimir optimização .AND./.OR." default="Não" select="Sim,Não" values="/Z," hint="Desabilita a optimização de campos booleanos">
<option fUseUPX="Compactar com UPX?" default="Não" select="Sim,Não" hint="Compacta o aplicativo atual com UPX (http://upx.sourceforge.net/). O UPX é um compressor de arquivos executáveis gratuito, com alta-performance para diversos formatos executáveis. Consegue uma relação excelente de compressão e seus executáveis não sofrem nenhum dano.">
<option fUseMT="Habilitar MT" default="Não" select="Sim,Não" values="MT," hint="Habilita ou não a compilação multi thread">
<option fForceCON="Forçar app. console?" default="Não" select="Sim,Não" hint="Força a exibição da janela de console mesmo para um aplicativo gráfico"
/* <option fUseHBDLL="Usa HB.DLL?" default="Não" select="Sim,Não" hint="Habilita o uso da biblioteca dinâmica (HARBOUR.DLL) em seu aplicativo. Lembre-se que talvez seja necessário incluir o arquivo MAINWIN.C da pasta SOURCE do [x]HB para o correto funcionamento de sua aplicação.">*/
<option fMiscOption1="Flags do Harbour" hint="Permite especificar parâmetros adicionais para o compilador Harbour">
<option fMiscOption2="Flags do Compilador C" hint="Permite especificar parâmetros adicionais para o compilador BCC ou GCC">
<option fMiscOption3="Flags do Linker" hint="Permite especificar parâmetros adicionais para o compilador Linker ou MinGW">
<option RDD1="Rdd SQL LIB?" default="Não" select="Sim,Não" hint="Linka junto ao aplicativo as LIBs para suporte ao RDD DBFCDX">
<option RDD2="Rdd DBFCDX?" default="Não" select="Sim,Não" hint="Linka junto ao aplicativo as LIBs para suporte ao RDD DBFCDX">
<option RDD3="Rdd ADS?" default="Não" select="Sim,Não" hint="Linka junto ao aplicativo as LIBs para suporte ao RDD ADS">
<option RDD4="ODBC Libs?" default="Não" select="Sim,Não" hint="Linka junto ao aplicativo as LIBs para suporte às funções de ODBC">
<option CustomLIBs="LIBs customizadas?" select="Sim,Não" default="Não" hint="Determina que nenhum arquivo *.LIB será incluido por padrao no script do projeto, mas apenas aquelas que você adicionar">
<option CustomDefines="Defines" hint="Define as diretrivas #DEFINE de pré-processamento para todos os módulos deste PROJETO">
/* <option Linker="Linker" default="Borland" select="Borland, MinGW" hint="Especifica o lineditor para gerar o seu projeto">*/
/* Opçoes específicas da MiniGUI */
<option fUseSQLLIBFirst="SQL LIB Antes das LIBs do FW?" default="Sim" select="Sim,Não" hint="Determina se os arquivos .LIB da SQL LIB RDD devem preceder as LIBs do FW">
</parameters>
/*
* Os arquivos que poderemos processar ...
*/
/* *.PRG */
<extension file=".prg" output=".c" group="Módulos" onbuild="OnFilePRG">
<option PRG_Defines="Defines" hint="Define uma ou mais diretrivas #DEFINE de pre-processamento específicas para este ARQUIVO">
<option PRG_DisableDebug="Disable Debug" default="Não" select="Sim,Não" hint="Desabilita a opção de DEBUG para este arquivo em específico">
</extension>
/* *.C */
<extension file=".c" output=".obj" group="Módulos" onbuild="OnFileC">
<option PRG_Defines="Defines" hint="Define uma ou mais diretrivas #DEFINE de pre-processamento específicas para este ARQUIVO">
<option PRG_DisableDebug="Disable Debug" default="Não" select="Sim,Não" hint="Desabilita a opção de DEBUG para este arquivo em específico">
</extension>
/* *.RC */
<extension file=".rc" output=".res" group="Recursos" onbuild="OnFileRC">
<option PRG_Defines="Defines" hint="Define uma ou mais diretrivas #DEFINE de pre-processamento específicas para este ARQUIVO">
</extension>
</compiler>
Script file FiveWin.xCompiler.prg
- Code: Select all Expand view
/*
* São Paulo , 16/06/2006 @ 06:36
* Revisado em 23/8/2006 17:00:02
* -----------------------------
* MiniGUI.xCompiler.prg
*
* Arquivo contendo os comandos de Script para processamento de um projeto
* Harbour modo CONSOOLE 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( 'ilink32.exe', m_PreSetPath )
MsgError( 'O arquivo requerido ILINK32.EXE não foi localizado no sistema!' )
return .f.
end
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
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
* 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
*/
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
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
* 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 + '"')
* Salvamos e executamos o comando específico para compilar
MemoWrite( 'b32.bc', aLines )
runBat('BCC32 -M -c @B32.BC')
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
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
* Ajustamos os outros parametros
cmd += ' "' + m_sFileName + '"'
* Executamos o comando específico para compilar
run (cmd)
bOk := (ErrorLevel() == 0)
return bOk
function MakeFW32h_BCC
if SameText( type, 'LIB' ) .or. ;
SameText( type, 'DLL' )
MsgError( 'Arquivos *.' + type + ' não são suportados por este script (ainda)!'+;
'Neste caso use o "Harbour 32 Bits & BCC / MinGW" para criar estes arquivos.' ;
)
return .F.
end
return BuildExe()
function BuildExe()
* Preparamos a linha de comando
aLines := {}
AAdd( aLines, '-I"' + m_PreSetInclude +'" +')
AAdd( aLines, '-L"' + m_PreSetLib + ';' +m_PreSetObj + '" +')
* Usamos sempre a função SAMETEXT() pq ela compara removendo os espaços e
* ignorando maiúsculas e minúsculas
if SameText( fForceCON, 'Sim' )
*
else
AADD( aLines, '-aa +' )
end
AADD( aLines, '-Gn -Tpe -s +' )
AADD( aLines, 'c0w32.obj + ' )
/*
* Incluimos os arquivos .OBJ do projeto
*/
aFiles := Project( "*.OBJ" )
t := Len( aFiles )
FOR i := 1 TO t
IF i == t
AADD( aLines, '"'+aFiles[i]+'", + ' )
ELSE
AADD( aLines, '"'+aFiles[i]+'" + ' )
End
End
AADD( aLines, '"'+m_sOutPut + '", + ' )
AADD( aLines, '"'+ChangeFileExt( m_sOutPut, '.map')+'", + ' )
/*
* Chamamos a função que pega o nome das libs corretas
*/
DefaultLibs()
AADD( aLines, 'cw32.lib + ' )
AADD( aLines, 'import32.lib + ' )
AADD( aLines, 'psapi.lib + ' )
if SameText( RDD4, 'sim' )
AADD( aLines, 'odbc32.lib +')
end
if FileExists('nddeapi.lib', m_PreSetLib )
AADD( aLines, 'nddeapi.lib +' )
end
if FileExists('iphlpapi.lib', m_PreSetLib )
AADD( aLines, 'iphlpapi.lib +' )
end
if FileExists('rasapi32.lib', m_PreSetLib )
AADD( aLines, 'rasapi32.lib +' )
end
AADD( aLines, ',' )
/*
* Põe os RCs do projeto
*/
aFiles := Project( "*.RES" )
FOR i := 1 TO Len( aFiles )
IF i == t
AADD( aLines, '"'+aFiles[i]+'" ' )
else
AADD( aLines, '"'+aFiles[i]+'" + ' )
End
End
MemoWrite( 'b32.bc', aLines )
runBat('ILINK32 @B32.BC')
bOk := (ErrorLevel() == 0)
/*
* Testamos se ele quer compactar o aplicativo gerado usando UPX
* 22/01/2008 - 10:35:49
*/
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!'+m_PreSetPath )
return .f.
end */
aLines := {}
AADD( aLines, 'ECHO xDev TITLE UPX' )
AADD( aLines, 'ECHO xDev FILE '+ m_sOutPut +'' )
AADD( aLines, 'c:\windows\UPX.EXE --compress-icons=0 --compress-exports=0 -9 "'+m_sOutPut + '"' )
cmd := ListAsText( aLines )
runBat( cmd )
bOk := (ErrorLevel() == 0)
end
return bOk
function DefaultLibs()
if FileExists('sqllib.lib', m_PreSetLib )
sql_lib := 'sqllib.lib + '
else
sql_lib := ApplyMacros( 'sqllib_($hV).lib + ')
end
if SameText( CustomLIBs, 'Sim')
/*
* Se ele tem a lista de LIBs personalizadas não preenchemos isto...
*/
else
/*
* A SQL LIB RDD deve preceder sobre as do FW?
*/
if !SameText( RDD1, 'sim' )
* Ele não quer usar a SQL LIB
elseif SameText( fUseSQLLIBFirst, 'sim' )
* Sim ele quer usar e é para ter precedência!!
AADD( aLines, 'libmysql.lib +')
if IsHarbour()
AADD( aLines, 'sqllib.lib +' )
else
AADD( aLines, 'sqllib.lib +' )
end
end
/*
* É Harbour ou xHabour() ?
*/
if IsHarbour()
AADD( aLines, 'FiveH.lib FiveHC.lib +' )
else
AADD( aLines, 'FiveH.lib FiveHC.lib +' )
end
/*
* Testamos se ele quer usar a HARBOUR.DLL se for, isto reduz o numero de LIBs
* linkadas no projeto.
*/
if SameText( fUseHBDLL, 'sim' )
AADD( aLines, 'harbour.lib + ' )
if SameText( RDD3, 'sim' )
AADD( aLines, 'rddads.lib +')
AADD( aLines, 'ace32.lib +')
end
if FileExists( 'bcc640.lib', m_PreSetLib )
AADD( aLines, 'bcc640.lib + ' )
end
else
AADD( aLines, 'xhb.lib + ' )
AADD( aLines, 'hbrtl.lib + ' )
AADD( aLines, 'hbvm.lib + ' )
if FileExists( 'gtgui.lib', m_PreSetLib )
AADD( aLines, 'gtgui.lib + ' )
else
AADD( aLines, 'gtwin.lib + ' )
end
AADD( aLines, 'hblang.lib + ' )
AADD( aLines, 'hbmacro.lib + ' )
AADD( aLines, 'hbrdd.lib + ' )
/*
* Testa se o arquivo bcc640.lib existe no
* PATH passado no segundo arqumento, neste caso m_PreSetLib
*/
if FileExists( 'hbcpage.lib', m_PreSetLib )
AADD( aLines, 'hbcpage.lib + ' )
end
AADD( aLines, 'rddntx.lib + ' )
if SameText( RDD2, 'sim' )
AADD( aLines, 'rddcdx.lib + ' )
* AADD( aLines, 'rddfpt.lib + ' )
end
AADD( aLines, 'rddntx.lib + ' )
if SameText( RDD2, 'sim' )
AADD( aLines, 'rddcdx.lib + ' )
end
if SameText( RDD3, 'sim' )
AADD( aLines, 'rddads.lib + ')
AADD( aLines, 'ace32.lib + ')
end
if FileExists( 'bcc640.lib', m_PreSetLib )
* AADD( aLines, 'bcc640.lib + ' )
end
if FileExists('rddfpt.lib', m_PreSetLib )
AADD( aLines, 'rddfpt.lib + ' )
end
if FileExists('hbsix.lib', m_PreSetLib )
AADD( aLines, 'hbsix.lib + ' )
end
end
if !SameText( RDD1, 'sim' )
* Ele não quer usar a SQL LIB
elseif SameText( fUseSQLLIBFirst, 'sim' )
* Já adicionamos isto lá encima.
else
AADD( aLines, 'libmysql.lib + ')
AADD( aLines, 'sqllib.lib + ' )
end
AADD( aLines, 'hbcommon.lib + ' )
AADD( aLines, 'hbpp.lib + ' )
AADD( aLines, 'hbct.lib + ' )
AADD( aLines, 'hbwin.lib + ' )
AADD( aLines, 'hbcplr.lib + ' )
AADD( aLines, 'hbpcre.lib + ' )
AADD( aLines, 'hbmzip.lib + ' )
AADD( aLines, 'minizip.lib + ' )
AADD( aLines, 'hbzlib.lib + ' )
AADD( aLines, 'hbziparc.lib + ' )
AADD( aLines, 'png.lib + ' )
* AADD( aLines, 'pcrepos.lib + ' )
end
/*
* Incluimos os arquivos .LIB no projeto
*/
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, 'debug.lib + ' )
end
end
return
Scripts to compile with xHarbour and Borland FiveWinb.xCompiler.prg
- Code: Select all Expand view
<!--
### Standard xDev Config - Layout v1.5 #########
# #
# Created @ 16/9/2006 09:38:10 #
# #
# xDevStudio Project - xdev@kssoftware.com.br #
################################################
-->
<compiler name="FiveWin 32 Bits & xHarbour + Borland C++">
<option icon="Icons.icl,8">
<option source="FiveWinb.xCompiler.prg">
<option depends=".prg, .c, .obj, .rc, .res">
<option compiler="harbour.exe">
<option onbuild="MakeFW32_BCC">
<parameters>
/* Opçoes copiadas do Harbour.xCompiler */
<option fFlagA="/A - auto declarar como MEMVAR" default="Não" select="Sim,Não" values="/A," hint="Declara automaticamente os símbolos não definidos como MEMVAR">
<option fFlagB="/B - Usar depurador?" default="Não" select="Sim,Não" values="/B," hint="Habilita o DEBUG em seu aplicativo, que poderá ser invocado, teclando-se ALT+D">
<option fFlagL="/L - Excluir número de linhas" default="Não" select="Sim,Não" values="/L," hint="Exclui a referência interna dos números de linhas dos arquivos deste projeto">
<option fFlagM="/M - Compilação individual dos PRGs" default="Sim" select="Sim,Não" values="/M," hint="Determina (quando desativado) que o arquivo principal deve ser compilado junto com os arquivos PRGs referenciados com o comando DO. Se ativado todos os arquivos serão compilados separadamente.">
<option fFlagN="/N - Não definir função inicial autom." default="Sim" select="Sim,Não" values="/N," hint="Faz com que não seja incluída a função inicial em cada arquivo compilado neste projeto">
<option fFlagP="/P - Gerar arquivo pré-processado" default="Não" select="Sim,Não" values="/P," hint="Informa se um arquivo pre-processado (.PPO) deve ser gerado ou nao.">
<option fFlagZ="/Z - Suprimir optimização .AND./.OR." default="Não" select="Sim,Não" values="/Z," hint="Desabilita a optimização de campos booleanos">
<option fUseUPX="Compactar com UPX?" default="Não" select="Sim,Não" hint="Compacta o aplicativo atual com UPX (http://upx.sourceforge.net/). O UPX é um compressor de arquivos executáveis gratuito, com alta-performance para diversos formatos executáveis. Consegue uma relação excelente de compressão e seus executáveis não sofrem nenhum dano.">
<option fUseMT="Habilitar MT" default="Não" select="Sim,Não" values="MT," hint="Habilita ou não a compilação multi thread">
<option fForceCON="Forçar app. console?" default="Não" select="Sim,Não" hint="Força a exibição da janela de console mesmo para um aplicativo gráfico"
/* <option fUseHBDLL="Usa HB.DLL?" default="Não" select="Sim,Não" hint="Habilita o uso da biblioteca dinâmica (HARBOUR.DLL) em seu aplicativo. Lembre-se que talvez seja necessário incluir o arquivo MAINWIN.C da pasta SOURCE do [x]HB para o correto funcionamento de sua aplicação.">*/
<option fMiscOption1="Flags do Harbour" hint="Permite especificar parâmetros adicionais para o compilador Harbour">
<option fMiscOption2="Flags do Compilador C" hint="Permite especificar parâmetros adicionais para o compilador BCC ou GCC">
<option fMiscOption3="Flags do Linker" hint="Permite especificar parâmetros adicionais para o compilador Linker ou MinGW">
<option RDD1="Rdd SQL LIB?" default="Não" select="Sim,Não" hint="Linka junto ao aplicativo as LIBs para suporte ao RDD DBFCDX">
<option RDD2="Rdd DBFCDX?" default="Não" select="Sim,Não" hint="Linka junto ao aplicativo as LIBs para suporte ao RDD DBFCDX">
<option RDD3="Rdd ADS?" default="Não" select="Sim,Não" hint="Linka junto ao aplicativo as LIBs para suporte ao RDD ADS">
<option RDD4="ODBC Libs?" default="Não" select="Sim,Não" hint="Linka junto ao aplicativo as LIBs para suporte às funções de ODBC">
<option CustomLIBs="LIBs customizadas?" select="Sim,Não" default="Não" hint="Determina que nenhum arquivo *.LIB será incluido por padrao no script do projeto, mas apenas aquelas que você adicionar">
<option CustomDefines="Defines" hint="Define as diretrivas #DEFINE de pré-processamento para todos os módulos deste PROJETO">
/* <option Linker="Linker" default="Borland" select="Borland, MinGW" hint="Especifica o lineditor para gerar o seu projeto">*/
/* Opçoes específicas da MiniGUI */
<option fUseSQLLIBFirst="SQL LIB Antes das LIBs do FW?" default="Sim" select="Sim,Não" hint="Determina se os arquivos .LIB da SQL LIB RDD devem preceder as LIBs do FW">
</parameters>
/*
* Os arquivos que poderemos processar ...
*/
/* *.PRG */
<extension file=".prg" output=".c" group="Módulos" onbuild="OnFilePRG">
<option PRG_Defines="Defines" hint="Define uma ou mais diretrivas #DEFINE de pre-processamento específicas para este ARQUIVO">
<option PRG_DisableDebug="Disable Debug" default="Não" select="Sim,Não" hint="Desabilita a opção de DEBUG para este arquivo em específico">
</extension>
/* *.C */
<extension file=".c" output=".obj" group="Módulos" onbuild="OnFileC">
<option PRG_Defines="Defines" hint="Define uma ou mais diretrivas #DEFINE de pre-processamento específicas para este ARQUIVO">
<option PRG_DisableDebug="Disable Debug" default="Não" select="Sim,Não" hint="Desabilita a opção de DEBUG para este arquivo em específico">
</extension>
/* *.RC */
<extension file=".rc" output=".res" group="Recursos" onbuild="OnFileRC">
<option PRG_Defines="Defines" hint="Define uma ou mais diretrivas #DEFINE de pre-processamento específicas para este ARQUIVO">
</extension>
</compiler>
Script FiveWinb.xCompiler.prg
- Code: Select all Expand view
/*
* São Paulo , 16/06/2006 @ 06:36
* Revisado em 23/8/2006 17:00:02
* -----------------------------
* MiniGUI.xCompiler.prg
*
* Arquivo contendo os comandos de Script para processamento de um projeto
* Harbour modo CONSOOLE 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( 'ilink32.exe', m_PreSetPath )
MsgError( 'O arquivo requerido ILINK32.EXE não foi localizado no sistema!' )
return .f.
end
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
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
* 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
*/
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
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
* 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 + '"')
* Salvamos e executamos o comando específico para compilar
MemoWrite( 'b32.bc', aLines )
runBat('BCC32 -M -c @B32.BC')
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
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
* Ajustamos os outros parametros
cmd += ' "' + m_sFileName + '"'
* Executamos o comando específico para compilar
run (cmd)
bOk := (ErrorLevel() == 0)
return bOk
function MakeFW32_BCC
if SameText( type, 'LIB' ) .or. ;
SameText( type, 'DLL' )
MsgError( 'Arquivos *.' + type + ' não são suportados por este script (ainda)!'+;
'Neste caso use o "Harbour 32 Bits & BCC / MinGW" para criar estes arquivos.' ;
)
return .F.
end
return BuildExe()
function BuildExe()
* Preparamos a linha de comando
aLines := {}
AAdd( aLines, '-I"' + m_PreSetInclude +'" +')
AAdd( aLines, '-L"' + m_PreSetLib + ';' +m_PreSetObj + '" +')
* Usamos sempre a função SAMETEXT() pq ela compara removendo os espaços e
* ignorando maiúsculas e minúsculas
if SameText( fForceCON, 'Sim' )
*
else
AADD( aLines, '-aa +' )
end
AADD( aLines, '-Gn -Tpe -s +' )
AADD( aLines, 'c0w32.obj + ' )
/*
* Incluimos os arquivos .OBJ do projeto
*/
aFiles := Project( "*.OBJ" )
t := Len( aFiles )
FOR i := 1 TO t
IF i == t
AADD( aLines, '"'+aFiles[i]+'", + ' )
ELSE
AADD( aLines, '"'+aFiles[i]+'" + ' )
End
End
AADD( aLines, '"'+m_sOutPut + '", + ' )
AADD( aLines, '"'+ChangeFileExt( m_sOutPut, '.map')+'", + ' )
/*
* Chamamos a função que pega o nome das libs corretas
*/
DefaultLibs()
AADD( aLines, 'cw32.lib + ' )
AADD( aLines, 'import32.lib + ' )
AADD( aLines, 'psapi.lib + ' )
if SameText( RDD4, 'sim' )
AADD( aLines, 'odbc32.lib +')
end
if FileExists('nddeapi.lib', m_PreSetLib )
AADD( aLines, 'nddeapi.lib +' )
end
if FileExists('iphlpapi.lib', m_PreSetLib )
AADD( aLines, 'iphlpapi.lib +' )
end
if FileExists('rasapi32.lib', m_PreSetLib )
AADD( aLines, 'rasapi32.lib +' )
end
AADD( aLines, ',' )
/*
* Põe os RCs do projeto
*/
aFiles := Project( "*.RES" )
FOR i := 1 TO Len( aFiles )
IF i == t
AADD( aLines, '"'+aFiles[i]+'" ' )
else
AADD( aLines, '"'+aFiles[i]+'" + ' )
End
End
MemoWrite( 'b32.bc', aLines )
runBat('ILINK32 @B32.BC')
bOk := (ErrorLevel() == 0)
/*
* Testamos se ele quer compactar o aplicativo gerado usando UPX
* 22/01/2008 - 10:35:49
*/
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, 'c:\windows\UPX.EXE --compress-icons=0 --compress-exports=0 -9 "'+m_sOutPut + '"' )
cmd := ListAsText( aLines )
runBat( cmd )
bOk := (ErrorLevel() == 0)
end
return bOk
function DefaultLibs()
if FileExists('sqllib.lib', m_PreSetLib )
sql_lib := 'sqllib.lib + '
else
sql_lib := ApplyMacros( 'sqllib_($hV).lib + ')
end
if SameText( CustomLIBs, 'Sim')
/*
* Se ele tem a lista de LIBs personalizadas não preenchemos isto...
*/
else
/*
* A SQL LIB RDD deve preceder sobre as do FW?
*/
if !SameText( RDD1, 'sim' )
* Ele não quer usar a SQL LIB
elseif SameText( fUseSQLLIBFirst, 'sim' )
* Sim ele quer usar e é para ter precedência!!
AADD( aLines, 'libmysql.lib +')
if IsHarbour()
AADD( aLines, 'sqllib.lib +' )
else
AADD( aLines, 'sqllibx.lib +' )
end
end
/*
* É Harbour ou xHabour() ?
*/
if IsHarbour()
AADD( aLines, 'FiveH.lib FiveHC.lib +' )
else
AADD( aLines, 'FiveHx.lib FiveHC.lib +' )
end
/*
* Testamos se ele quer usar a HARBOUR.DLL se for, isto reduz o numero de LIBs
* linkadas no projeto.
*/
if SameText( fUseHBDLL, 'sim' )
AADD( aLines, 'harbour.lib + ' )
if SameText( RDD3, 'sim' )
AADD( aLines, 'rddads.lib +')
AADD( aLines, 'ace32.lib +')
end
if FileExists( 'bcc640.lib', m_PreSetLib )
AADD( aLines, 'bcc640.lib + ' )
end
else
AADD( aLines, 'rtl.lib + ' )
AADD( aLines, 'vm.lib + ' )
if FileExists( 'gtgui.lib', m_PreSetLib )
AADD( aLines, 'gtgui.lib + ' )
else
AADD( aLines, 'gtwin.lib + ' )
end
AADD( aLines, 'lang.lib + ' )
AADD( aLines, 'macro.lib + ' )
AADD( aLines, 'rdd.lib + ' )
/*
* Testa se o arquivo bcc640.lib existe no
* PATH passado no segundo arqumento, neste caso m_PreSetLib
*/
if FileExists( 'codepage.lib', m_PreSetLib )
AADD( aLines, 'codepage.lib + ' )
end
AADD( aLines, 'dbfntx.lib + ' )
if SameText( RDD2, 'sim' )
AADD( aLines, 'dbfcdx.lib + ' )
end
if SameText( RDD3, 'sim' )
AADD( aLines, 'rddads.lib +')
AADD( aLines, 'ace32.lib +')
end
if FileExists( 'bcc640.lib', m_PreSetLib )
AADD( aLines, 'bcc640.lib + ' )
end
if FileExists('dbfdbt.lib', m_PreSetLib )
AADD( aLines, 'dbfdbt.lib + ' )
end
if FileExists('dbffpt.lib', m_PreSetLib )
AADD( aLines, 'dbffpt.lib + ' )
end
if FileExists('hbsix.lib', m_PreSetLib )
AADD( aLines, 'hbsix.lib + ' )
end
end
if !SameText( RDD1, 'sim' )
* Ele não quer usar a SQL LIB
elseif SameText( fUseSQLLIBFirst, 'sim' )
* Já adicionamos isto lá encima.
else
AADD( aLines, 'libmysql.lib +')
AADD( aLines, 'sqllibx.lib +' )
end
AADD( aLines, 'common.lib + ' )
AADD( aLines, 'pp.lib + ' )
AADD( aLines, 'ct.lib + ' )
AADD( aLines, 'hbzip.lib + ' )
AADD( aLines, 'zlib.lib + ' )
AADD( aLines, 'pcrepos.lib + ' )
AADD( aLines, 'png.lib + ' )
end
/*
* Incluimos os arquivos .LIB no projeto
*/
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, 'debug.lib + ' )
end
end
return