Scripts for xDevStudio HB and xHB with BCC and MSVC Parte 1

Scripts for xDevStudio HB and xHB with BCC and MSVC Parte 1

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

For a long time these scripts end up owing them, with which you can configure to compile with xDevStudio Harbour and xHarbour with Borland and Microsoft Visual C, many have struggled to compile and have versions of their applications easily with xHarbour and Harbour but have failed to do so, with xdev can do.

Each build script found in the scripts folder consists of two files:

A configuration file: eg FiveWin32.xCompiler where you can set compiler options.
A Script File: eg FiveWin.xCompiler.prg which generates all script files and libraries including bath according to what is defined in the previous file options

At archvios. XCompiler did not modify any single change. XCompiler.prg then put the contents of each script

The association of each file. XCompliler with each script. XCompiler.prg makes the following statement: <option source="nombredearchivo.xCompiler.prg">

The configuration of programming environments are saved in the file Presets.xIni

Build Scripts for Harbour and Borland C + +

FiveWin32.xCompiler

Code: Select all  Expand view


<!--
### Standard xDev Config - Layout v1.5 #########
#                                              #
# Created @ 16/9/2006 09:38:10                 #
#                                              #
# xDevStudio Project - xdev@kssoftware.com.br  #
################################################
-->
<compiler name="FiveWin 32 Bits & Harbour + Borland C++">
   <option icon="Icons.icl,8">
   <option source="FiveWin.xCompiler.prg">
   <option depends=".prg, .c, .obj, .rc, .res">
   <option compiler="harbour.exe">
   <option onbuild="MakeFW32h_BCC">

   <parameters>
      /* Opçoes copiadas do Harbour.xCompiler */
      <option fFlagA="/A - auto declarar como MEMVAR"         default="Não" select="Sim,Não" values="/A," hint="Declara automaticamente os símbolos não definidos como MEMVAR">
      <option fFlagB="/B - Usar depurador?"                   default="Não" select="Sim,Não" values="/B," hint="Habilita o DEBUG em seu aplicativo, que poderá ser invocado, teclando-se ALT+D">
      <option fFlagL="/L - Excluir número de  linhas"         default="Não" select="Sim,Não" values="/L," hint="Exclui a referência interna dos números de linhas dos arquivos deste projeto">
      <option fFlagM="/M - Compilação individual dos PRGs"    default="Sim" select="Sim,Não" values="/M," hint="Determina (quando desativado) que o arquivo principal deve ser compilado junto com os arquivos PRGs referenciados com o comando DO. Se ativado todos os arquivos serão compilados separadamente.">
      <option fFlagN="/N - Não definir função inicial autom." default="Sim" select="Sim,Não" values="/N," hint="Faz com que não seja incluída a função inicial em cada arquivo compilado neste projeto">
      <option fFlagP="/P - Gerar arquivo pré-processado"      default="Não" select="Sim,Não" values="/P," hint="Informa se um arquivo pre-processado (.PPO) deve ser gerado ou nao.">
      <option fFlagZ="/Z - Suprimir optimização .AND./.OR."   default="Não" select="Sim,Não" values="/Z," hint="Desabilita a optimização de campos booleanos">


      <option fUseUPX="Compactar com UPX?"                    default="Não" select="Sim,Não" hint="Compacta o aplicativo atual com UPX (http://upx.sourceforge.net/). O UPX é um compressor de arquivos executáveis gratuito, com alta-performance para diversos formatos executáveis. Consegue uma relação excelente de compressão e seus executáveis não sofrem nenhum dano.">
      <option fUseMT="Habilitar MT"                           default="Não" select="Sim,Não" values="MT," hint="Habilita ou não a compilação multi thread">
      <option fForceCON="Forçar app. console?"                default="Não" select="Sim,Não" hint="Força a exibição da janela de console mesmo para um aplicativo gráfico"
/*    <option fUseHBDLL="Usa HB.DLL?"                         default="Não" select="Sim,Não" hint="Habilita o uso da biblioteca dinâmica (HARBOUR.DLL) em seu aplicativo. Lembre-se que talvez seja necessário incluir o arquivo MAINWIN.C da pasta SOURCE do [x]HB para o correto funcionamento de sua aplicação.">*/

      <option fMiscOption1="Flags do Harbour"                 hint="Permite especificar parâmetros adicionais para o compilador Harbour">
      <option fMiscOption2="Flags do Compilador C"            hint="Permite especificar parâmetros adicionais para o compilador BCC ou GCC">
      <option fMiscOption3="Flags do Linker"                  hint="Permite especificar parâmetros adicionais para o compilador Linker ou MinGW">

      <option RDD1="Rdd SQL LIB?"                             default="Não" select="Sim,Não" hint="Linka junto ao aplicativo as LIBs para suporte ao RDD DBFCDX">
      <option RDD2="Rdd DBFCDX?"                              default="Não" select="Sim,Não" hint="Linka junto ao aplicativo as LIBs para suporte ao RDD DBFCDX">
      <option RDD3="Rdd ADS?"                                 default="Não" select="Sim,Não" hint="Linka junto ao aplicativo as LIBs para suporte ao RDD ADS">
      <option RDD4="ODBC Libs?"                               default="Não" select="Sim,Não" hint="Linka junto ao aplicativo as LIBs para suporte às funções de ODBC">

      <option CustomLIBs="LIBs customizadas?"                 select="Sim,Não" default="Não" hint="Determina que nenhum arquivo *.LIB será incluido por padrao no script do projeto, mas apenas aquelas que você adicionar">
      <option CustomDefines="Defines"                         hint="Define as diretrivas #DEFINE de pré-processamento para todos os módulos deste PROJETO">
   /* <option Linker="Linker"                                 default="Borland" select="Borland, MinGW"  hint="Especifica o lineditor para gerar o seu projeto">*/

      /* Opçoes específicas da MiniGUI */
      <option fUseSQLLIBFirst="SQL LIB Antes das LIBs do FW?" default="Sim" select="Sim,Não" hint="Determina se os arquivos .LIB da SQL LIB RDD devem preceder as LIBs do FW">
   </parameters>

   /*
    * Os arquivos que poderemos processar ...
    */


   /*                *.PRG                                           */
   <extension file=".prg" output=".c" group="Módulos" onbuild="OnFilePRG">
      <option PRG_Defines="Defines" hint="Define uma ou mais diretrivas #DEFINE de pre-processamento específicas para este ARQUIVO">
      <option PRG_DisableDebug="Disable Debug" default="Não" select="Sim,Não" hint="Desabilita a opção de DEBUG para este arquivo em específico">
   </extension>

   /*                *.C                                             */
   <extension file=".c" output=".obj" group="Módulos" onbuild="OnFileC">
      <option PRG_Defines="Defines" hint="Define uma ou mais diretrivas #DEFINE de pre-processamento específicas para este ARQUIVO">
      <option PRG_DisableDebug="Disable Debug" default="Não" select="Sim,Não" hint="Desabilita a opção de DEBUG para este arquivo em específico">
   </extension>

   /*                *.RC                                            */
   <extension file=".rc" output=".res" group="Recursos" onbuild="OnFileRC">
      <option PRG_Defines="Defines" hint="Define uma ou mais diretrivas #DEFINE de pre-processamento específicas para este ARQUIVO">
   </extension>
</compiler>

 


Script file FiveWin.xCompiler.prg

Code: Select all  Expand view

/*
 * São Paulo , 16/06/2006 @ 06:36
 * Revisado em 23/8/2006 17:00:02
 * -----------------------------
 * MiniGUI.xCompiler.prg
 *
 * Arquivo contendo os comandos de Script para processamento de um projeto
 * Harbour modo CONSOOLE com Borland BCC ou MinGW.
 */

#define CRLF Chr(13)+Chr(10)

function Prepare
   type := Project( 'TargetType' )

   if FileExists( 'harbour.exe', m_PreSetPath ) .or. ;
      FileExists( 'hb.exe', m_PreSetPath )
      *
   else
      MsgError( 'O arquivo principal do compilador não existe!' )
      return .f.
   end

   if !FileExists( 'bcc32.exe', m_PreSetPath )
      MsgError( 'O arquivo requerido BCC32.EXE não foi localizado no sistema!' )
      return .f.
   end

   if !FileExists( 'ilink32.exe', m_PreSetPath )
      MsgError( 'O arquivo requerido ILINK32.EXE não foi localizado no sistema!' )
      return .f.
   end

   return .t.

function UnPrepare
   return .t.

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

function OnFilePRG
 * Preparamos a linha de comando
   cmd := 'harbour.exe'
   cmd += ' "' + m_sFileName + '"'
   cmd += ' /q /o"' + m_sOutPut + '"'
   cmd += ' ' + fFlagA + ' ' + fFlagL + ' ' + fFlagM + ' ' + ;
          ' ' + fFlagN + ' ' + fFlagZ  + ' ' + fFlagP
 *
 * Verificarmos se ele nao quer desativar o DEBUG para este módulo em específico!
 * para isto usamos a funcao SameText() que compara os 2 argumentos ignorando
 * letras maiúsculas / minúsculas.
 *
   if !SameText( PRG_DisableDebug, 'sim' )
      cmd += ' ' + fFlagB
   end

 * Verificamos as diretrivas #DEFINEs e adicionamos ela na linha de comando!
   aDefs := Alltrim(CustomDefines) + ',' + ;   // Diretrivas gerais do projeto
            Alltrim(PRG_Defines)               // Diretrivas específicas deste arquivo

   aDefs := StrTran(aDefs, ';', ',' )
   aDefs := StrTran(aDefs, ' ', '' )
   aDefs := ListAsArray( aDefs, ',')
   cmd   := alltrim( cmd )

   for i := 0 to len( aDefs )
       if !Empty(aDefs[i])
         cmd += ' /D' + aDefs[i]
       end
   next

 * Colocamos os outros parametros (se houver)
   cmd := alltrim( cmd )
   cmd += " " + fMiscOption1

 * Executamos o comando específico para compilar
   runBat(cmd)

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

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

function OnFileC

 * Preparamos a linha de comando
   aLines := {}

 * Verificamos as diretrivas #DEFINEs e adicionamos ela na linha de comando!
   aDefs := Alltrim(CustomDefines) + ',' + ;   // Diretrivas gerais do projeto
            Alltrim(PRG_Defines)               // Diretrivas específicas deste arquivo

   aDefs := StrTran(aDefs, ';', ',' )
   aDefs := StrTran(aDefs, ' ', '' )
   aDefs := ListAsArray( aDefs, ',')
   cmd   := alltrim( cmd )

   for i := 0 to len( aDefs )
       if !Empty(aDefs[i])
          AAdd( aLines, '-D' + aDefs[i])
       end
   next

 * Ajustamos os outros parametros
   AAdd( aLines, '-I"' + m_PreSetInclude +'"')
   AAdd( aLines, '-L"' + m_PreSetLib + ';' +m_PreSetObj + '"')
   AAdd( aLines, '-o"' + m_sOutPut + '"')
   AAdd( aLines, '"' + m_sFileName + '"')

 * Salvamos e executamos o comando específico para compilar
   MemoWrite( 'b32.bc', aLines )
   runBat('BCC32 -M -c @B32.BC')

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

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

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

   if Empty(cmd)
      cmd := FindFile( 'porc.exe', m_PreSetPath )
   end

   if Empty(cmd)
      MsgError( 'Erro ao localizar o aplicativo necessário para compilar o módulo "'+m_sFileName+'"!' )
      return .f.
   end

 * Preparamos a linha de comando
  cmd += ' -r -fo"' + m_sOutPut + '" -i"' + m_PreSetInclude +'"'


 * Verificamos as diretrivas #DEFINEs e adicionamos ela na linha de comando!
   aDefs := Alltrim(CustomDefines) + ',' + ;   // Diretrivas gerais do projeto
            Alltrim(PRG_Defines)               // Diretrivas específicas deste arquivo

   aDefs := StrTran(aDefs, ';', ',' )
   aDefs := StrTran(aDefs, ' ', '' )
   aDefs := ListAsArray( aDefs, ',')
   cmd   := alltrim( cmd )

   for i := 0 to len( aDefs )
       if !Empty(aDefs[i])
          cmd += ' -D' + aDefs[i]
       end
   next

 * Ajustamos os outros parametros
   cmd += ' "' + m_sFileName + '"'

 * Executamos o comando específico para compilar
   run (cmd)

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

function MakeFW32h_BCC
   if SameText( type, 'LIB' ) .or. ;
      SameText( type, 'DLL' )
      MsgError( 'Arquivos *.' + type + ' não são suportados por este script (ainda)!'+;
                'Neste caso use o "Harbour 32 Bits & BCC / MinGW" para criar estes arquivos.' ;
              )
      return .F.
   end
   return BuildExe()

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

   AAdd( aLines, '-I"' + m_PreSetInclude +'" +')
   AAdd( aLines, '-L"' + m_PreSetLib + ';' +m_PreSetObj + '" +')

 * Usamos sempre a função SAMETEXT() pq ela compara removendo os espaços e
 * ignorando maiúsculas e minúsculas
   if SameText( fForceCON, 'Sim' )
      *
   else
      AADD( aLines, '-aa +' )
   end

   AADD( aLines, '-Gn -Tpe -s +' )
   AADD( aLines, 'c0w32.obj +    ' )

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

   aFiles := Project( "*.OBJ" )

   t := Len( aFiles )

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

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

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

   DefaultLibs()

   AADD( aLines, 'cw32.lib +     ' )
   AADD( aLines, 'import32.lib + ' )
   AADD( aLines, 'psapi.lib +     ' )

   if SameText( RDD4, 'sim' )
      AADD( aLines, 'odbc32.lib +')
   end

   if FileExists('nddeapi.lib', m_PreSetLib )
      AADD( aLines, 'nddeapi.lib +' )
   end

   if FileExists('iphlpapi.lib', m_PreSetLib )
      AADD( aLines, 'iphlpapi.lib +' )
   end

   if FileExists('rasapi32.lib', m_PreSetLib )
      AADD( aLines, 'rasapi32.lib +' )
   end

   AADD( aLines, ',' )

   /*
    * Põe os RCs do projeto
    */

   aFiles := Project( "*.RES" )

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

   MemoWrite( 'b32.bc', aLines )
   runBat('ILINK32 @B32.BC')

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

   if bOk .and. SameText( fUseUPX, 'Sim' )
      cmd := FindFile( 'upx.exe', m_PreSetPath )

   /*   if Empty(cmd)
         MsgError( 'Erro ao localizar o arquivo UPX.EXE necessário para compactar seu aplicativo!'+m_PreSetPath )
         return .f.
      end */


      aLines := {}
      AADD( aLines, 'ECHO xDev TITLE UPX' )
      AADD( aLines, 'ECHO xDev FILE '+ m_sOutPut +'' )
      AADD( aLines, 'c:\windows\UPX.EXE --compress-icons=0  --compress-exports=0 -9 "'+m_sOutPut + '"' )

      cmd := ListAsText( aLines )
      runBat( cmd )

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

function DefaultLibs()

   if FileExists('sqllib.lib', m_PreSetLib )
      sql_lib := 'sqllib.lib + '
   else
      sql_lib := ApplyMacros( 'sqllib_($hV).lib + ')
   end

   if SameText( CustomLIBs, 'Sim')
      /*
       * Se ele tem a lista de LIBs personalizadas não preenchemos isto...
       */

   else

      /*
       * A SQL LIB RDD deve preceder sobre as do FW?
       */

      if !SameText( RDD1, 'sim' )
         * Ele não quer usar a SQL LIB

      elseif SameText( fUseSQLLIBFirst, 'sim' )
         * Sim ele quer usar e é para ter precedência!!

         AADD( aLines, 'libmysql.lib +')

         if IsHarbour()
            AADD( aLines, 'sqllib.lib +' )
         else

            AADD( aLines, 'sqllib.lib +' )
         end
      end

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




      if IsHarbour()
         AADD( aLines, 'FiveH.lib FiveHC.lib +' )
      else
         AADD( aLines, 'FiveH.lib FiveHC.lib +' )

      end

      /*
       * Testamos se ele quer usar a HARBOUR.DLL se for, isto reduz o numero de LIBs
       * linkadas no projeto.
       */


      if SameText( fUseHBDLL, 'sim' )
         AADD( aLines, 'harbour.lib + ' )

         if SameText( RDD3, 'sim' )
            AADD( aLines, 'rddads.lib +')
            AADD( aLines, 'ace32.lib +')
         end

         if FileExists( 'bcc640.lib', m_PreSetLib )
            AADD( aLines, 'bcc640.lib +   ' )
         end

      else

         AADD( aLines, 'xhb.lib       + ' )
         AADD( aLines, 'hbrtl.lib     + ' )
         AADD( aLines, 'hbvm.lib      + ' )

         if FileExists( 'gtgui.lib', m_PreSetLib )
            AADD( aLines, 'gtgui.lib  + ' )
         else
            AADD( aLines, 'gtwin.lib  + ' )
         end

         AADD( aLines, 'hblang.lib     + ' )
         AADD( aLines, 'hbmacro.lib    + ' )
         AADD( aLines, 'hbrdd.lib      + ' )

         /*
          * Testa se o arquivo bcc640.lib existe no
          * PATH passado no segundo arqumento, neste caso m_PreSetLib
          */

         if FileExists( 'hbcpage.lib', m_PreSetLib )
            AADD( aLines, 'hbcpage.lib + ' )
         end

         AADD( aLines, 'rddntx.lib   + ' )

         if SameText( RDD2, 'sim' )
            AADD( aLines, 'rddcdx.lib  + ' )
          *  AADD( aLines, 'rddfpt.lib  + ' )

         end
         
         AADD( aLines, 'rddntx.lib +   ' )

         if SameText( RDD2, 'sim' )
            AADD( aLines, 'rddcdx.lib +   ' )
         end



         if SameText( RDD3, 'sim' )
            AADD( aLines, 'rddads.lib + ')
            AADD( aLines, 'ace32.lib + ')


         end

         if FileExists( 'bcc640.lib', m_PreSetLib )
          *  AADD( aLines, 'bcc640.lib  + ' )
         end

         if FileExists('rddfpt.lib', m_PreSetLib )
            AADD( aLines, 'rddfpt.lib   + ' )
         end

         if FileExists('hbsix.lib', m_PreSetLib )
            AADD( aLines, 'hbsix.lib    + ' )
         end
      end

      if !SameText( RDD1, 'sim' )
         * Ele não quer usar a SQL LIB

      elseif SameText( fUseSQLLIBFirst, 'sim' )
         * Já adicionamos isto lá encima.

      else
         AADD( aLines, 'libmysql.lib + ')
         AADD( aLines, 'sqllib.lib + ' )
      end

      AADD( aLines, 'hbcommon.lib   + ' )
      AADD( aLines, 'hbpp.lib       + ' )
      AADD( aLines, 'hbct.lib       + ' )
      AADD( aLines, 'hbwin.lib      + ' )
      AADD( aLines, 'hbcplr.lib     + ' )
      AADD( aLines, 'hbpcre.lib     + ' )
      AADD( aLines, 'hbmzip.lib     + ' )
      AADD( aLines, 'minizip.lib    + ' )
      AADD( aLines, 'hbzlib.lib     + ' )
      AADD( aLines, 'hbziparc.lib   + ' )
      AADD( aLines, 'png.lib        + ' )
   *  AADD( aLines, 'pcrepos.lib    + ' )
   end

   /*
    * Incluimos os arquivos .LIB no projeto
    */

   aFiles := Project( "*.LIB" )

   FOR i := 1 TO Len( aFiles )
       AADD( aLines, '"'+aFiles[i]+'" +  ' )
   End

   if SameText( CustomLIBs, 'Sim')
      /*
       * Se ele tem a lista de LIBs personalizada, caimos fora!
       */

   else
      if SameText( fFlagB, '/B' )
         AADD( aLines, 'debug.lib + ' )
      end
   end
   return

 


Scripts to compile with xHarbour and Borland FiveWinb.xCompiler.prg

Code: Select all  Expand view


<!--
### Standard xDev Config - Layout v1.5 #########
#                                              #
# Created @ 16/9/2006 09:38:10                 #
#                                              #
# xDevStudio Project - xdev@kssoftware.com.br  #
################################################
-->
<compiler name="FiveWin 32 Bits & xHarbour + Borland C++">
   <option icon="Icons.icl,8">
   <option source="FiveWinb.xCompiler.prg">
   <option depends=".prg, .c, .obj, .rc, .res">
   <option compiler="harbour.exe">
   <option onbuild="MakeFW32_BCC">

   <parameters>
      /* Opçoes copiadas do Harbour.xCompiler */
      <option fFlagA="/A - auto declarar como MEMVAR"         default="Não" select="Sim,Não" values="/A," hint="Declara automaticamente os símbolos não definidos como MEMVAR">
      <option fFlagB="/B - Usar depurador?"                   default="Não" select="Sim,Não" values="/B," hint="Habilita o DEBUG em seu aplicativo, que poderá ser invocado, teclando-se ALT+D">
      <option fFlagL="/L - Excluir número de  linhas"         default="Não" select="Sim,Não" values="/L," hint="Exclui a referência interna dos números de linhas dos arquivos deste projeto">
      <option fFlagM="/M - Compilação individual dos PRGs"    default="Sim" select="Sim,Não" values="/M," hint="Determina (quando desativado) que o arquivo principal deve ser compilado junto com os arquivos PRGs referenciados com o comando DO. Se ativado todos os arquivos serão compilados separadamente.">
      <option fFlagN="/N - Não definir função inicial autom." default="Sim" select="Sim,Não" values="/N," hint="Faz com que não seja incluída a função inicial em cada arquivo compilado neste projeto">
      <option fFlagP="/P - Gerar arquivo pré-processado"      default="Não" select="Sim,Não" values="/P," hint="Informa se um arquivo pre-processado (.PPO) deve ser gerado ou nao.">      
      <option fFlagZ="/Z - Suprimir optimização .AND./.OR."   default="Não" select="Sim,Não" values="/Z," hint="Desabilita a optimização de campos booleanos">
     

      <option fUseUPX="Compactar com UPX?"                    default="Não" select="Sim,Não" hint="Compacta o aplicativo atual com UPX (http://upx.sourceforge.net/). O UPX é um compressor de arquivos executáveis gratuito, com alta-performance para diversos formatos executáveis. Consegue uma relação excelente de compressão e seus executáveis não sofrem nenhum dano.">
      <option fUseMT="Habilitar MT"                           default="Não" select="Sim,Não" values="MT," hint="Habilita ou não a compilação multi thread">
      <option fForceCON="Forçar app. console?"                default="Não" select="Sim,Não" hint="Força a exibição da janela de console mesmo para um aplicativo gráfico"
/*    <option fUseHBDLL="Usa HB.DLL?"                         default="Não" select="Sim,Não" hint="Habilita o uso da biblioteca dinâmica (HARBOUR.DLL) em seu aplicativo. Lembre-se que talvez seja necessário incluir o arquivo MAINWIN.C da pasta SOURCE do [x]HB para o correto funcionamento de sua aplicação.">*/

      <option fMiscOption1="Flags do Harbour"                 hint="Permite especificar parâmetros adicionais para o compilador Harbour">
      <option fMiscOption2="Flags do Compilador C"            hint="Permite especificar parâmetros adicionais para o compilador BCC ou GCC">
      <option fMiscOption3="Flags do Linker"                  hint="Permite especificar parâmetros adicionais para o compilador Linker ou MinGW">

      <option RDD1="Rdd SQL LIB?"                             default="Não" select="Sim,Não" hint="Linka junto ao aplicativo as LIBs para suporte ao RDD DBFCDX">
      <option RDD2="Rdd DBFCDX?"                              default="Não" select="Sim,Não" hint="Linka junto ao aplicativo as LIBs para suporte ao RDD DBFCDX">
      <option RDD3="Rdd ADS?"                                 default="Não" select="Sim,Não" hint="Linka junto ao aplicativo as LIBs para suporte ao RDD ADS">
      <option RDD4="ODBC Libs?"                               default="Não" select="Sim,Não" hint="Linka junto ao aplicativo as LIBs para suporte às funções de ODBC">

      <option CustomLIBs="LIBs customizadas?"                 select="Sim,Não" default="Não" hint="Determina que nenhum arquivo *.LIB será incluido por padrao no script do projeto, mas apenas aquelas que você adicionar">
      <option CustomDefines="Defines"                         hint="Define as diretrivas #DEFINE de pré-processamento para todos os módulos deste PROJETO">
   /* <option Linker="Linker"                                 default="Borland" select="Borland, MinGW"  hint="Especifica o lineditor para gerar o seu projeto">*/

      /* Opçoes específicas da MiniGUI */
      <option fUseSQLLIBFirst="SQL LIB Antes das LIBs do FW?" default="Sim" select="Sim,Não" hint="Determina se os arquivos .LIB da SQL LIB RDD devem preceder as LIBs do FW">
   </parameters>

   /*
    * Os arquivos que poderemos processar ...
    */

   
   /*                *.PRG                                           */
   <extension file=".prg" output=".c" group="Módulos" onbuild="OnFilePRG">
      <option PRG_Defines="Defines" hint="Define uma ou mais diretrivas #DEFINE de pre-processamento específicas para este ARQUIVO">
      <option PRG_DisableDebug="Disable Debug" default="Não" select="Sim,Não" hint="Desabilita a opção de DEBUG para este arquivo em específico">
   </extension>

   /*                *.C                                             */
   <extension file=".c" output=".obj" group="Módulos" onbuild="OnFileC">
      <option PRG_Defines="Defines" hint="Define uma ou mais diretrivas #DEFINE de pre-processamento específicas para este ARQUIVO">
      <option PRG_DisableDebug="Disable Debug" default="Não" select="Sim,Não" hint="Desabilita a opção de DEBUG para este arquivo em específico">
   </extension>                                

   /*                *.RC                                            */
   <extension file=".rc" output=".res" group="Recursos" onbuild="OnFileRC">
      <option PRG_Defines="Defines" hint="Define uma ou mais diretrivas #DEFINE de pre-processamento específicas para este ARQUIVO">
   </extension>
</compiler>

 


Script FiveWinb.xCompiler.prg

Code: Select all  Expand view


/*
 * São Paulo , 16/06/2006 @ 06:36
 * Revisado em 23/8/2006 17:00:02
 * -----------------------------
 * MiniGUI.xCompiler.prg
 *
 * Arquivo contendo os comandos de Script para processamento de um projeto
 * Harbour modo CONSOOLE com Borland BCC ou MinGW.
 */

#define CRLF Chr(13)+Chr(10)

function Prepare
   type := Project( 'TargetType' )

   if FileExists( 'harbour.exe', m_PreSetPath ) .or. ;
      FileExists( 'hb.exe', m_PreSetPath )
      *
   else
      MsgError( 'O arquivo principal do compilador não existe!' )
      return .f.
   end

   if !FileExists( 'bcc32.exe', m_PreSetPath )
      MsgError( 'O arquivo requerido BCC32.EXE não foi localizado no sistema!' )
      return .f.
   end

   if !FileExists( 'ilink32.exe', m_PreSetPath )
      MsgError( 'O arquivo requerido ILINK32.EXE não foi localizado no sistema!' )
      return .f.
   end

   return .t.

function UnPrepare
   return .t.

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

function OnFilePRG
 * Preparamos a linha de comando
   cmd := 'harbour.exe'
   cmd += ' "' + m_sFileName + '"'
   cmd += ' /q /o"' + m_sOutPut + '"'
   cmd += ' ' + fFlagA + ' ' + fFlagL + ' ' + fFlagM + ' ' + ;
          ' ' + fFlagN + ' ' + fFlagZ  + ' ' + fFlagP
 *
 * Verificarmos se ele nao quer desativar o DEBUG para este módulo em específico!
 * para isto usamos a funcao SameText() que compara os 2 argumentos ignorando
 * letras maiúsculas / minúsculas.
 *
   if !SameText( PRG_DisableDebug, 'sim' )
      cmd += ' ' + fFlagB
   end

 * Verificamos as diretrivas #DEFINEs e adicionamos ela na linha de comando!
   aDefs := Alltrim(CustomDefines) + ',' + ;   // Diretrivas gerais do projeto
            Alltrim(PRG_Defines)               // Diretrivas específicas deste arquivo

   aDefs := StrTran(aDefs, ';', ',' )
   aDefs := StrTran(aDefs, ' ', '' )
   aDefs := ListAsArray( aDefs, ',')
   cmd   := alltrim( cmd )

   for i := 0 to len( aDefs )
       if !Empty(aDefs[i])
         cmd += ' /D' + aDefs[i]
       end
   next

 * Colocamos os outros parametros (se houver)
   cmd := alltrim( cmd )
   cmd += " " + fMiscOption1

 * Executamos o comando específico para compilar
   runBat(cmd)

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

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

function OnFileC

 * Preparamos a linha de comando
   aLines := {}

 * Verificamos as diretrivas #DEFINEs e adicionamos ela na linha de comando!
   aDefs := Alltrim(CustomDefines) + ',' + ;   // Diretrivas gerais do projeto
            Alltrim(PRG_Defines)               // Diretrivas específicas deste arquivo

   aDefs := StrTran(aDefs, ';', ',' )
   aDefs := StrTran(aDefs, ' ', '' )
   aDefs := ListAsArray( aDefs, ',')
   cmd   := alltrim( cmd )

   for i := 0 to len( aDefs )
       if !Empty(aDefs[i])
          AAdd( aLines, '-D' + aDefs[i])
       end
   next

 * Ajustamos os outros parametros
   AAdd( aLines, '-I"' + m_PreSetInclude +'"')
   AAdd( aLines, '-L"' + m_PreSetLib + ';' +m_PreSetObj + '"')
   AAdd( aLines, '-o"' + m_sOutPut + '"')
   AAdd( aLines, '"' + m_sFileName + '"')

 * Salvamos e executamos o comando específico para compilar
   MemoWrite( 'b32.bc', aLines )
   runBat('BCC32 -M -c @B32.BC')

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

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

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

   if Empty(cmd)
      cmd := FindFile( 'porc.exe', m_PreSetPath )
   end

   if Empty(cmd)
      MsgError( 'Erro ao localizar o aplicativo necessário para compilar o módulo "'+m_sFileName+'"!' )
      return .f.
   end

 * Preparamos a linha de comando
  cmd += ' -r -fo"' + m_sOutPut + '" -i"' + m_PreSetInclude +'"'

 * Verificamos as diretrivas #DEFINEs e adicionamos ela na linha de comando!
   aDefs := Alltrim(CustomDefines) + ',' + ;   // Diretrivas gerais do projeto
            Alltrim(PRG_Defines)               // Diretrivas específicas deste arquivo

   aDefs := StrTran(aDefs, ';', ',' )
   aDefs := StrTran(aDefs, ' ', '' )
   aDefs := ListAsArray( aDefs, ',')
   cmd   := alltrim( cmd )

   for i := 0 to len( aDefs )
       if !Empty(aDefs[i])
          cmd += ' -D' + aDefs[i]
       end
   next

 * Ajustamos os outros parametros
   cmd += ' "' + m_sFileName + '"'

 * Executamos o comando específico para compilar
   run (cmd)

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

function MakeFW32_BCC
   if SameText( type, 'LIB' ) .or. ;
      SameText( type, 'DLL' )
      MsgError( 'Arquivos *.' + type + ' não são suportados por este script (ainda)!'+;
                'Neste caso use o "Harbour 32 Bits & BCC / MinGW" para criar estes arquivos.' ;
              )
      return .F.
   end
   return BuildExe()

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

   AAdd( aLines, '-I"' + m_PreSetInclude +'" +')
   AAdd( aLines, '-L"' + m_PreSetLib + ';' +m_PreSetObj + '" +')

 * Usamos sempre a função SAMETEXT() pq ela compara removendo os espaços e
 * ignorando maiúsculas e minúsculas
   if SameText( fForceCON, 'Sim' )
      *
   else
      AADD( aLines, '-aa +' )
   end

   AADD( aLines, '-Gn -Tpe -s +' )
   AADD( aLines, 'c0w32.obj +    ' )

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

   aFiles := Project( "*.OBJ" )

   t := Len( aFiles )

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

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

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

   DefaultLibs()

   AADD( aLines, 'cw32.lib +     ' )
   AADD( aLines, 'import32.lib + ' )
   AADD( aLines, 'psapi.lib +     ' )

   if SameText( RDD4, 'sim' )
      AADD( aLines, 'odbc32.lib +')
   end

   if FileExists('nddeapi.lib', m_PreSetLib )
      AADD( aLines, 'nddeapi.lib +' )
   end

   if FileExists('iphlpapi.lib', m_PreSetLib )
      AADD( aLines, 'iphlpapi.lib +' )
   end

   if FileExists('rasapi32.lib', m_PreSetLib )
      AADD( aLines, 'rasapi32.lib +' )
   end

   AADD( aLines, ',' )

   /*
    * Põe os RCs do projeto
    */

   aFiles := Project( "*.RES" )

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

   MemoWrite( 'b32.bc', aLines )
   runBat('ILINK32 @B32.BC')

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

   if bOk .and. SameText( fUseUPX, 'Sim' )
      cmd := FindFile( 'upx.exe', m_PreSetPath )

   /*   if Empty(cmd)
         MsgError( 'Erro ao localizar o arquivo UPX.EXE necessário para compactar seu aplicativo!' )
         return .f.
      end */


      aLines := {}
      AADD( aLines, 'ECHO xDev TITLE UPX' )
      AADD( aLines, 'ECHO xDev FILE '+ m_sOutPut +'' )
      AADD( aLines, 'c:\windows\UPX.EXE --compress-icons=0  --compress-exports=0 -9 "'+m_sOutPut + '"' )

      cmd := ListAsText( aLines )
      runBat( cmd )

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

function DefaultLibs()

   if FileExists('sqllib.lib', m_PreSetLib )
      sql_lib := 'sqllib.lib + '
   else
      sql_lib := ApplyMacros( 'sqllib_($hV).lib + ')
   end

   if SameText( CustomLIBs, 'Sim')
      /*
       * Se ele tem a lista de LIBs personalizadas não preenchemos isto...
       */

   else

      /*
       * A SQL LIB RDD deve preceder sobre as do FW?
       */

      if !SameText( RDD1, 'sim' )
         * Ele não quer usar a SQL LIB

      elseif SameText( fUseSQLLIBFirst, 'sim' )
         * Sim ele quer usar e é para ter precedência!!

         AADD( aLines, 'libmysql.lib +')
         if IsHarbour()
            AADD( aLines, 'sqllib.lib +' )
         else
            AADD( aLines, 'sqllibx.lib +' )
         end
      end

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



      if IsHarbour()
         AADD( aLines, 'FiveH.lib FiveHC.lib +' )
      else
         AADD( aLines, 'FiveHx.lib FiveHC.lib +' )

      end

      /*
       * Testamos se ele quer usar a HARBOUR.DLL se for, isto reduz o numero de LIBs
       * linkadas no projeto.
       */


      if SameText( fUseHBDLL, 'sim' )
         AADD( aLines, 'harbour.lib + ' )

         if SameText( RDD3, 'sim' )
            AADD( aLines, 'rddads.lib +')
            AADD( aLines, 'ace32.lib +')
         end

         if FileExists( 'bcc640.lib', m_PreSetLib )
            AADD( aLines, 'bcc640.lib +   ' )
         end

      else
         AADD( aLines, 'rtl.lib +      ' )
         AADD( aLines, 'vm.lib +       ' )

         if FileExists( 'gtgui.lib', m_PreSetLib )
            AADD( aLines, 'gtgui.lib + ' )
         else
            AADD( aLines, 'gtwin.lib + ' )
         end

         AADD( aLines, 'lang.lib +     ' )
         AADD( aLines, 'macro.lib +    ' )
         AADD( aLines, 'rdd.lib +      ' )

         /*
          * Testa se o arquivo bcc640.lib existe no
          * PATH passado no segundo arqumento, neste caso m_PreSetLib
          */

         if FileExists( 'codepage.lib', m_PreSetLib )
            AADD( aLines, 'codepage.lib + ' )
         end

         AADD( aLines, 'dbfntx.lib +   ' )

         if SameText( RDD2, 'sim' )
            AADD( aLines, 'dbfcdx.lib +   ' )
         end


         if SameText( RDD3, 'sim' )
            AADD( aLines, 'rddads.lib +')
            AADD( aLines, 'ace32.lib +')


         end

         if FileExists( 'bcc640.lib', m_PreSetLib )
            AADD( aLines, 'bcc640.lib +   ' )
         end

         if FileExists('dbfdbt.lib', m_PreSetLib )
            AADD( aLines, 'dbfdbt.lib +   ' )
         end

         if FileExists('dbffpt.lib', m_PreSetLib )
            AADD( aLines, 'dbffpt.lib +   ' )
         end

         if FileExists('hbsix.lib', m_PreSetLib )
            AADD( aLines, 'hbsix.lib +    ' )
         end
      end

      if !SameText( RDD1, 'sim' )
         * Ele não quer usar a SQL LIB

      elseif SameText( fUseSQLLIBFirst, 'sim' )
         * Já adicionamos isto lá encima.

      else
         AADD( aLines, 'libmysql.lib +')
         AADD( aLines, 'sqllibx.lib +' )
      end

      AADD( aLines, 'common.lib +   ' )
      AADD( aLines, 'pp.lib +       ' )
      AADD( aLines, 'ct.lib +       ' )
      AADD( aLines, 'hbzip.lib +     ' )
      AADD( aLines, 'zlib.lib +     ' )
      AADD( aLines, 'pcrepos.lib +   ' )
      AADD( aLines, 'png.lib +       ' )

   end

   /*
    * Incluimos os arquivos .LIB no projeto
    */

   aFiles := Project( "*.LIB" )

   FOR i := 1 TO Len( aFiles )
       AADD( aLines, '"'+aFiles[i]+'" +  ' )
   End

   if SameText( CustomLIBs, 'Sim')
      /*
       * Se ele tem a lista de LIBs personalizada, caimos fora!
       */

   else
      if SameText( fFlagB, '/B' )
         AADD( aLines, 'debug.lib + ' )
      end
   end
   return

 
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: Scripts for xDevStudio HB and xHB with BCC and MSVC Parte 2

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

Script for compile with xHarbour and 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>

 


Script for 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: Scripts for xDevStudio HB and xHB with BCC and MSVC Parte 1

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

Configuration file for compilers environments 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


Return to FiveWin for Harbour/xHarbour

Who is online

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