Cada Script de compilación se encuentra en la carpeta scripts esta compuesto de 2 Archivos:
Un archivo de configuración: Ej: FiveWin32.xCompiler donde se pueden configurar opciones de compilación.
Un Archivo Script: Ej: FiveWin.xCompiler.prg donde se genera todo el script y los archivos bath inclusión de librerías de acuerdo a lo que se defina en el las opciones archivo anterior
A los archvios .xCompiler no les hice ningún cambio solo modifique los .xCompiler.prg a continuación coloco el contenido de cada script
La asociacion de cada archivo .xCompliler con cada script .xCompiler.prg lo hace con la siguiente instruccion: <option source="nombredearchivo.xCompiler.prg">
La configuración de los entornos de programación se guarda en el archivo Presets.xIni
Scripts de compilación para habour y 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>
Archivo de Script que acompaña 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 para compilar con xHarbour y 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 de Complilacion 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