Aporte Scripts xDevStudio HB y xHB Con BCC y MSVC Parte 1

Aporte Scripts xDevStudio HB y xHB Con BCC y MSVC Parte 1

Postby nnicanor » Mon Nov 12, 2012 3:16 pm

Desde hace rato les quede debiendo estos scripts, con los cuales pueden configurar xDevStudio para compilar con Harbour y Xharbour con Borland y Microsoft Visual C, se muchos han tenido dificultades para compilar y tener las versiones de sus aplicaciones de manera fácil con xHarbour o Harbour pero no han logrado hacerlo, con xDev pueden lograrlo.

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

 
Nicanor Martinez M.
Auditoria y Sistemas Ltda.
MicroExpress Ltda.
FW + FWH + XHARBOUR + HARBOUR + PELLES C + XDEVSTUDIO + XEDIT + BCC + VC_X86 + VCC_X64 + MINGW + R&R Reports + FastReport + Tdolphin + ADO + MYSQL + MARIADB + ORACLE
nnicanor@yahoo.com
nnicanor
 
Posts: 295
Joined: Fri Apr 23, 2010 4:30 am
Location: Colombia

Re: Aporte Scripts xDevStudio HB y xHB Con BCC y MSVC Parte 2

Postby nnicanor » Mon Nov 12, 2012 3:17 pm

Script de compilacion para xHarbour y Microsoft Visual C++ Express 2010

FiveWinbM.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 & xHarbour MS Visual C++">
   <option icon="Icons.icl,8">
   <option source="FiveWinbM.xCompiler.prg">
   <option depends=".prg, .c, .obj, .rc, .res">
   <option compiler="harbour.exe">
   <option onbuild="MakeFW32_MSVC">

   <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 script de compilacion FiveWinbM.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( 'cl.exe', m_PreSetPath )
      MsgError( 'O arquivo requerido cl.EXE não foi localizado no sistema!' )
      return .f.
   end

   if !FileExists( 'link.exe', m_PreSetPath )
      MsgError( 'O arquivo requerido LINK.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, '/GA -c "' + m_sOutPut + '"')
*  AAdd( aLines,  m_sOutPut + '"')
*  AAdd( aLines, ' -c -i /D_CRT_SECURE_NO_WARNINGS -D__HARBOUR__ "' + m_sFileName + '" '+' /Fo'+ m_sOutPut )
   AAdd( aLines, ' -Gs15000 -c -W3 -GA /D_CRT_SECURE_NO_WARNINGS "' + m_sFileName + '" '+' /Fo'+ m_sOutPut )
*  AAdd( aLines, ' -TP -c -W3 -GA -D_CRT_SECURE_NO_WARNINGS -D__HARBOUR__ -D__FLAT__  "' + m_sFileName + '" '+' /Fo'+ m_sOutPut )


 * Salvamos e executamos o comando específico para compilar
   MemoWrite( 'msvc.tmp', aLines )
   runBat('cl @msvc.tmp')

   bOk := (ErrorLevel() == 0)
   return bOk

/*
 * Esta função é executada, sempre que a xDev precisar compilar um arquivo .RC
 */

function OnFileRC
   cmd := FindFile( 'rc.exe', m_PreSetPath )

   if Empty(cmd)
      cmd := FindFile( 'rc.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 +'"'
    cmd += ' -r -d__FLAT__  -i"' + m_PreSetInclude +'" -fo"' + m_sOutPut +'" "'+ m_sFileName+'" '

 * 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_MSVC
   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 & CL / MinGW" para criar estes arquivos.' ;
    //          )

      return BuildLib()
   end
   return BuildExe()

function BuildExe()
 * Preparamos a linha de comando
   aLines  := {}

*  AAdd( aLines, '-/i"' + m_PreSetInclude +'" +')
*  AAdd( aLines, '-L"' + m_PreSetLib + ';' +m_PreSetObj + '" +')
*  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, '/nologo /subsystem:windows /force:multiple /NODEFAULTLIB:libc +' )
*  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, 'kernel32.lib    ' )
   AADD( aLines, 'user32.lib      ' )
   AADD( aLines, 'gdi32.lib       ' )
   AADD( aLines, 'winspool.lib    ' )
   AADD( aLines, 'comctl32.lib    ' )
   AADD( aLines, 'comdlg32.lib    ' )
   AADD( aLines, 'advapi32.lib    ' )
   AADD( aLines, 'shell32.lib     ' )
   AADD( aLines, 'ole32.lib       ' )
   AADD( aLines, 'oleaut32.lib    ' )
   AADD( aLines, 'uuid.lib        ' )

   if SameText( RDD4, 'sim' )

      AADD( aLines, 'odbc32.lib ')
      AADD( aLines, 'odbccp32.lib ')

   end

// AADD( aLines, 'iphlpapi.lib  ' )
   AADD( aLines, 'mpr.lib       ' )
   AADD( aLines, 'winmm.lib     ' )
   AADD( aLines, 'libcpmt.lib   ' )
   AADD( aLines, 'oldnames.lib  ' )
   AADD( aLines, 'version.lib   ' )
   AADD( aLines, 'wsock32.lib   ' )
   AADD( aLines, 'msimg32.lib   ' )
   AADD( aLines, 'oledlg.lib    ' )
   AADD( aLines, 'psapi.lib     ' )

   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( 'mvc.tmp', aLines )
   runBat('LINK @mvc.tmp /subsystem:windows /nologo /FORCE:MULTIPLE /ignore:4006 /NODEFAULTLIB:libc /OUT:"'+m_sOutPut + '"')

   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' )
   if 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 BuildLib()
 * Preparamos a linha de comando
   aLines  := {}

 *  AAdd( aLines, '-/i"' + m_PreSetInclude +'" +')
 *  AAdd( aLines, '-L"' + m_PreSetLib + ';' +m_PreSetObj + '" +')
 *  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, '/nologo /subsystem:windows /force:multiple /NODEFAULTLIB:libc +' )
   * AADD( aLines, 'c0w32.obj +    ' )

   /*
    * Incluimos os arquivos .OBJ do projeto
    */

   aFiles := Project( "*.OBJ" )

   t := Len( aFiles )

   cLinea :=''

/*   FOR i := 1 TO t
       IF i == t
          AADD( aLines, '"'+aFiles[i]+'" ' )
       ELSE
          AADD( aLines, '"'+aFiles[i]+'"   ' )
       End
   End

*/


   FOR i := 1 TO t
      cLinea := cLinea+ ' '+aFiles[i]
   End

 //  AADD( aLines, '"'+m_sOutPut + '"    ' )
 //  AADD( aLines, '"'+ChangeFileExt( m_sOutPut, '.map')+'"   ' )

   /*
    * Chamamos a função que pega o nome das libs corretas
    */


 //  MemoWrite( 'mvc.tmp', aLines )
   runBat('LIB /OUT:'+m_sOutPut +' '+cLinea )

   bOk := (ErrorLevel() == 0)
   /*
    * Testamos se ele quer compactar o aplicativo gerado usando UPX
    * 22/01/2008 - 10:35:49
    */

   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, 'libmysqlm.lib ')
         if IsHarbour()
            AADD( aLines, 'sqllib.lib ' )
         else
            AADD( aLines, 'sqllibx.lib ' )
         end
      end

      /*
       * É Harbour ou xHabour() ?
       */



      if IsHarbour()
         AADD( aLines, 'FiveH32.lib FiveHC32.lib ' )

      else
         AADD( aLines, 'FiveHMx.lib FiveHC32.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, 'sqllib.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

 


Srcripts de compilacion para Microsoft Vusual C++ Expres 2010 y Harbour

FiveWinMvc.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 + Microsoft Visual C++">
   <option icon="Icons.icl,8">
   <option source="FiveWinMvc.xCompiler.prg">
   <option depends=".prg, .c, .obj, .rc, .res">
   <option compiler="harbour.exe">
   <option onbuild="MakeFW32_MVC">

   <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 los símbolos no definidos como MEMVAR">
      <option fFlagB="/B - Usar depurador?"                   default="Não" select="Sim,Não" values="/B," hint="Habilita el DEBUG en su aplicativo, que podrá ser invocado, tecleando ALT+D">
      <option fFlagL="/L - Excluir número de  lineas"         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 - Compilacion individual de 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 - No definir funcion 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 - Generar archivo pré-procesado"     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 optimizacion .AND./.OR."  default="Não" select="Sim,Não" values="/Z," hint="Desabilita a optimização de campos booleanos">

      <option fUseUPX="Comprimir con 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="Forzar app. consola?"                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 de Harbour"                 hint="Permite especificar parâmetros adicionais para o compilador Harbour">
      <option fMiscOption2="Flags de Compilador C"            hint="Permite especificar parâmetros adicionais para o compilador BCC ou GCC">
      <option fMiscOption3="Flags de 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 compilacion FiveWinMvc.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( 'cl.exe', m_PreSetPath )
      MsgError( 'O arquivo requerido cl.EXE não foi localizado no sistema!' )
      return .f.
   end

   if !FileExists( 'link.exe', m_PreSetPath )
      MsgError( 'O arquivo requerido LINK.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, '/GA -c "' + m_sOutPut + '"')
*  AAdd( aLines,  m_sOutPut + '"')
*  AAdd( aLines, ' -c -i /D_CRT_SECURE_NO_WARNINGS -D__HARBOUR__ "' + m_sFileName + '" '+' /Fo'+ m_sOutPut )
   AAdd( aLines, ' -Gs15000 -c -W3 -GA /D_CRT_SECURE_NO_WARNINGS "' + m_sFileName + '" '+' /Fo'+ m_sOutPut )
*  AAdd( aLines, ' -TP -c -W3 -GA -D_CRT_SECURE_NO_WARNINGS -D__HARBOUR__ -D__FLAT__  "' + m_sFileName + '" '+' /Fo'+ m_sOutPut )


 * Salvamos e executamos o comando específico para compilar
   MemoWrite( 'msvc.tmp', aLines )
   runBat('cl @msvc.tmp')

   bOk := (ErrorLevel() == 0)
   return bOk

/*
 * Esta função é executada, sempre que a xDev precisar compilar um arquivo .RC
 */

function OnFileRC
   cmd := FindFile( 'rc.exe', m_PreSetPath )

   if Empty(cmd)
      cmd := FindFile( 'rc.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 +'"'
    cmd += ' -r -d__FLAT__  -i"' + m_PreSetInclude +'" -fo"' + m_sOutPut +'" "'+ m_sFileName+'" '

 * 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_MVC
   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 & CL / MinGW" para criar estes arquivos.' ;
    //          )

      return BuildLib()
   end
   return BuildExe()

function BuildExe()
 * Preparamos a linha de comando
   aLines  := {}

*  AAdd( aLines, '-/i"' + m_PreSetInclude +'" +')
*  AAdd( aLines, '-L"' + m_PreSetLib + ';' +m_PreSetObj + '" +')
*  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, '/nologo /subsystem:windows /force:multiple /NODEFAULTLIB:libc +' )
*  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, 'kernel32.lib    ' )
   AADD( aLines, 'user32.lib      ' )
   AADD( aLines, 'gdi32.lib       ' )
   AADD( aLines, 'winspool.lib    ' )
   AADD( aLines, 'comctl32.lib    ' )
   AADD( aLines, 'comdlg32.lib    ' )
   AADD( aLines, 'advapi32.lib    ' )
   AADD( aLines, 'shell32.lib     ' )
   AADD( aLines, 'ole32.lib       ' )
   AADD( aLines, 'oleaut32.lib    ' )
   AADD( aLines, 'uuid.lib        ' )

   if SameText( RDD4, 'sim' )

      AADD( aLines, 'odbc32.lib ')
      AADD( aLines, 'odbccp32.lib ')

   end

// AADD( aLines, 'iphlpapi.lib  ' )
   AADD( aLines, 'mpr.lib       ' )
   AADD( aLines, 'winmm.lib     ' )
   AADD( aLines, 'libcpmt.lib   ' )
   AADD( aLines, 'oldnames.lib  ' )
   AADD( aLines, 'version.lib   ' )
   AADD( aLines, 'wsock32.lib   ' )
   AADD( aLines, 'msimg32.lib   ' )
   AADD( aLines, 'oledlg.lib    ' )
   AADD( aLines, 'psapi.lib     ' )

   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( 'mvc.tmp', aLines )
   runBat('LINK @mvc.tmp /subsystem:windows /nologo /FORCE:MULTIPLE /ignore:4006 /NODEFAULTLIB:libc /OUT:"'+m_sOutPut + '"')

   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' )
   if 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 BuildLib()
 * Preparamos a linha de comando
   aLines  := {}

 *  AAdd( aLines, '-/i"' + m_PreSetInclude +'" +')
 *  AAdd( aLines, '-L"' + m_PreSetLib + ';' +m_PreSetObj + '" +')
 *  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, '/nologo /subsystem:windows /force:multiple /NODEFAULTLIB:libc +' )
   * AADD( aLines, 'c0w32.obj +    ' )

   /*
    * Incluimos os arquivos .OBJ do projeto
    */

   aFiles := Project( "*.OBJ" )

   t := Len( aFiles )

   cLinea :=''

/*   FOR i := 1 TO t
       IF i == t
          AADD( aLines, '"'+aFiles[i]+'" ' )
       ELSE
          AADD( aLines, '"'+aFiles[i]+'"   ' )
       End
   End

*/


   FOR i := 1 TO t
      cLinea := cLinea+ ' '+aFiles[i]
   End

 //  AADD( aLines, '"'+m_sOutPut + '"    ' )
 //  AADD( aLines, '"'+ChangeFileExt( m_sOutPut, '.map')+'"   ' )

   /*
    * Chamamos a função que pega o nome das libs corretas
    */


 //  MemoWrite( 'mvc.tmp', aLines )
   runBat('LIB /OUT:'+m_sOutPut +' '+cLinea )

   bOk := (ErrorLevel() == 0)
   /*
    * Testamos se ele quer compactar o aplicativo gerado usando UPX
    * 22/01/2008 - 10:35:49
    */

   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, 'libmysqlm.lib ')
         if IsHarbour()
            AADD( aLines, 'sqllib.lib ' )
         else
            AADD( aLines, 'sqllib.lib ' )
         end
      end

      /*
       * É Harbour ou xHabour() ?
       */



      if IsHarbour()
         AADD( aLines, 'FiveH32.lib FiveHC32.lib ' )

      else
         AADD( aLines, 'FiveH32.lib FiveHC32.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


         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, 'libmysqlm.lib ')
         AADD( aLines, 'dolphinhm.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, 'hbdebug.lib  ' )
      end
   end
   return  .t.

 
Nicanor Martinez M.
Auditoria y Sistemas Ltda.
MicroExpress Ltda.
FW + FWH + XHARBOUR + HARBOUR + PELLES C + XDEVSTUDIO + XEDIT + BCC + VC_X86 + VCC_X64 + MINGW + R&R Reports + FastReport + Tdolphin + ADO + MYSQL + MARIADB + ORACLE
nnicanor@yahoo.com
nnicanor
 
Posts: 295
Joined: Fri Apr 23, 2010 4:30 am
Location: Colombia

Re: Aporte Scripts xDevStudio HB y xHB Con BCC y MSVC Parte 3

Postby nnicanor » Mon Nov 12, 2012 3:22 pm

Archivo de Configuracion de entornos de programacion Presets.xIni

Code: Select all  Expand view


[FiveWin32.xCompiler]
Version=FWH HB 3.2 BCC 5.8|PATH=c:\bcc58\BIN;c:\hb32\bin\bcc|INCLUDE=c:\bcc58\include;c:\HB32\include;C:\FWH\INCLUDE|LIB=c:\bcc58\lib;c:\bcc58\lib\psdk;c:\hb32\lib\bcc;c:\fwh\lib|OBJ=|DEFINES=|ID=414768|COMPILER=(Arquivos de versão não encontrados) & BCC 5.82 & FW 12.02

[FiveWin32b.xCompiler]
Version=FWH XHB 1.2 BCC 5.8|PATH=c:\bcc58\BIN;c:\XHB12\bin\bcc|INCLUDE=c:\bcc58\include;c:\XHB12\include;c:\fwh\include|LIB=c:\bcc58\lib;c:\bcc58\lib\psdk;c:\XHB12\lib\bcc;c:\fwh\lib|OBJ=|DEFINES=|ID=301669|COMPILER=(Arquivos de versão não encontrados) & BCC 5.82 & FW 12.02

[FiveWin32bM.xCompiler]
Version=FWH XHB 1.2 MVC++ Express 2010|PATH=c:\VC2010\bin;c:\XHB12\bin\mvc|INCLUDE=c:\XHB12\include;c:\fwh\include;c:\VC2010\include;c:\VC2010\SDK\Include|LIB=c:\VC2010\lib;c:\XHB12\lib\mvc;c:\fwh\lib;c:\VC2010\sdk\lib|OBJ=|DEFINES=|ID=750797|COMPILER=(Arquivos de versão não encontrados) & FW 12.02

[FiveWin32mvc.xCompiler]
Version=FWH HB 3.2 MSVC++ Express 2010|PATH=c:\VC2010\bin;c:\hb32\bin\mvc|INCLUDE=c:\fwh\include;c:\hb32\include;c:\VC2010\include;c:\VC2010\SDK\Include|LIB=c:\VC2010\lib;c:\hb32\lib\mvc;c:\fwh\lib;c:\VC2010\sdk\lib|OBJ=|DEFINES=|ID=314668|COMPILER=(Arquivos de versão não encontrados) & FW 12.02


 
Nicanor Martinez M.
Auditoria y Sistemas Ltda.
MicroExpress Ltda.
FW + FWH + XHARBOUR + HARBOUR + PELLES C + XDEVSTUDIO + XEDIT + BCC + VC_X86 + VCC_X64 + MINGW + R&R Reports + FastReport + Tdolphin + ADO + MYSQL + MARIADB + ORACLE
nnicanor@yahoo.com
nnicanor
 
Posts: 295
Joined: Fri Apr 23, 2010 4:30 am
Location: Colombia

Re: Aporte Scripts xDevStudio HB y xHB Con BCC y MSVC Parte 1

Postby horacio » Wed Nov 14, 2012 7:25 pm

Nicanor, muchísimas gracias por estos aportes. Estoy utilizando la versión 0.7, funcionan en esta versión o solo es para la versión Black o es indistinto ??

Saludos
horacio
 
Posts: 1358
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Aporte Scripts xDevStudio HB y xHB Con BCC y MSVC Parte 1

Postby nnicanor » Thu Nov 15, 2012 7:02 pm

Hola,

En teoria funciona para cualquier version de xDevStudio ....

Slds
Nicanor Martinez M.
Auditoria y Sistemas Ltda.
MicroExpress Ltda.
FW + FWH + XHARBOUR + HARBOUR + PELLES C + XDEVSTUDIO + XEDIT + BCC + VC_X86 + VCC_X64 + MINGW + R&R Reports + FastReport + Tdolphin + ADO + MYSQL + MARIADB + ORACLE
nnicanor@yahoo.com
nnicanor
 
Posts: 295
Joined: Fri Apr 23, 2010 4:30 am
Location: Colombia


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 87 guests

cron