2009-07-07 01:31 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)

* bin/postinst.bat
  * bin/hb-func.sh
    + Added libpath= lines to generated hbmk2.cfg files.
    - Deleted arch=/comp= lines from generated hbmk.cfg files.

  * include/hbextern.ch
    + Added HB_PROCESSRUN().

  * contrib/hbtip/client.prg
    % Minor optimizations.
    * Formatting.

  * utils/hbmk2/hbmk2.prg
    % Changed to use hb_processRun() natively.
    ! Fixed doubly added resource stub when -icon is used.

  * source/rtl/hbproces.c
    * Really minor formatting.

  * source/rtl/hbprocfn.c
    ! Fixed to free memory of hb_storlen_buffer() returns failure.
    % Minor optimization: hb_storclen( "", 0, ... ) -> hb_storc( NULL, ... )
This commit is contained in:
Viktor Szakats
2009-07-06 23:32:38 +00:00
parent f69803bda9
commit eb6298aa30
8 changed files with 149 additions and 171 deletions

View File

@@ -17,6 +17,30 @@
past entries belonging to author(s): Viktor Szakats.
*/
2009-07-07 01:31 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* bin/postinst.bat
* bin/hb-func.sh
+ Added libpath= lines to generated hbmk2.cfg files.
- Deleted arch=/comp= lines from generated hbmk.cfg files.
* include/hbextern.ch
+ Added HB_PROCESSRUN().
* contrib/hbtip/client.prg
% Minor optimizations.
* Formatting.
* utils/hbmk2/hbmk2.prg
% Changed to use hb_processRun() natively.
! Fixed doubly added resource stub when -icon is used.
* source/rtl/hbproces.c
* Really minor formatting.
* source/rtl/hbprocfn.c
! Fixed to free memory of hb_storlen_buffer() returns failure.
% Minor optimization: hb_storclen( "", 0, ... ) -> hb_storc( NULL, ... )
2009-07-07 00:45 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/utils/hbmk2/hbmk2.prg
% use hb_processRun() to execute commands

View File

@@ -242,8 +242,12 @@ mk_hbtools()
echo "Generating ${hb_hbmkcfg}... "
echo "# Harbour Make configuration"> ${hb_hbmkcfg}
echo "# Generated by Harbour build process">> ${hb_hbmkcfg}
echo "arch=${HB_ARCHITECTURE}">> ${hb_hbmkcfg}
echo "comp=${HB_COMPILER}">> ${hb_hbmkcfg}
echo "">> ${hb_hbmkcfg}
echo "libpaths=../contrib/%%{hb_name}">> ${hb_hbmkcfg}
echo "libpaths=../contrib/rddsql/%%{hb_name}">> ${hb_hbmkcfg}
echo "libpaths=../addins/%%{hb_name}">> ${hb_hbmkcfg}
echo "libpaths=../examples/%%{hb_name}">> ${hb_hbmkcfg}
echo "">> ${hb_hbmkcfg}
if [ -n "${hb_gt_ori}" ]; then
echo "gtdef=${hb_mkdef}${hb_gt_ori}">> ${hb_hbmkcfg}
fi

View File

@@ -16,8 +16,6 @@ rem ---------------------------------------------------------------
echo Generating %HB_BIN_INSTALL%\hbmk.cfg...
echo # Harbour Make configuration> %HB_BIN_INSTALL%\hbmk.cfg
echo # Generated by Harbour build process>> %HB_BIN_INSTALL%\hbmk.cfg
echo arch=%HB_ARCHITECTURE%>> %HB_BIN_INSTALL%\hbmk.cfg
echo comp=%HB_COMPILER%>> %HB_BIN_INSTALL%\hbmk.cfg
echo.>> %HB_BIN_INSTALL%\hbmk.cfg
echo libpaths=../contrib/%%{hb_name}>> %HB_BIN_INSTALL%\hbmk.cfg
echo libpaths=../contrib/rddsql/%%{hb_name}>> %HB_BIN_INSTALL%\hbmk.cfg

View File

@@ -7,7 +7,6 @@
* TIP Class oriented Internet protocol library
*
* Copyright 2003 Giancarlo Niccolai <gian@niccolai.ws>
*
* www - http://www.harbour-project.org
*
* This program is free software; you can redistribute it and/or modify
@@ -68,62 +67,60 @@
Added support for proxy connection
*/
#include "hbclass.ch"
#include "common.ch"
#include "error.ch"
#include "fileio.ch"
#include "hbclass.ch"
#include "tip.ch"
#DEFINE RCV_BUF_SIZE Int( ::InetRcvBufSize( ::SocketCon ) / 2 )
#DEFINE SND_BUF_SIZE Int( ::InetSndBufSize( ::SocketCon ) / 2 )
#define RCV_BUF_SIZE Int( ::InetRcvBufSize( ::SocketCon ) / 2 )
#define SND_BUF_SIZE Int( ::InetSndBufSize( ::SocketCon ) / 2 )
/**
* Inet Client class
*/
CLASS tIPClient
CREATE CLASS tIPClient
CLASSDATA bInitSocks INIT .F.
CLASSDATA cCRLF INIT HB_InetCRLF()
DATA oUrl /* url to wich to connect */
DATA oCredentials /* credential needed to access the service */
DATA nStatus /* basic status */
DATA SocketCon
Data lTrace
Data nHandle
CLASS VAR bInitSocks INIT .F.
CLASS VAR cCRLF INIT hb_inetCRLF()
DATA nDefaultRcvBuffSize
DATA nDefaultSndBuffSize
VAR oUrl /* url to wich to connect */
VAR oCredentials /* credential needed to access the service */
VAR nStatus /* basic status */
VAR SocketCon
VAR lTrace
VAR nHandle
/* Input stream length */
DATA nLength
/* Input stream data read by the app*/
DATA nRead
/* Last physical read amount */
DATA nLastRead
VAR nDefaultRcvBuffSize
VAR nDefaultSndBuffSize
DATA nDefaultPort
DATA nConnTimeout
DATA bInitialized
VAR nLength /* Input stream length */
VAR nRead /* Input stream data read by the app*/
VAR nLastRead /* Last physical read amount */
DATA cReply
DATA nAccessMode
DATA nWrite
DATA nLastWrite
VAR nDefaultPort
VAR nConnTimeout
VAR bInitialized
DATA bEof
DATA isOpen INIT .F.
VAR cReply
VAR nAccessMode
VAR nWrite
VAR nLastWrite
/* Gauge control; it can be a codeblock or a function pointer. */
DATA exGauge
VAR bEof
VAR isOpen INIT .F.
DATA Cargo
VAR exGauge /* Gauge control; it can be a codeblock or a function pointer. */
VAR Cargo
/* Data for proxy connection */
DATA cProxyHost
DATA nProxyPort INIT 0
DATA cProxyUser
DATA cProxyPassword
VAR cProxyHost
VAR nProxyPort INIT 0
VAR cProxyUser
VAR cProxyPassword
METHOD New( oUrl, lTrace, oCredentials )
METHOD Open()
@@ -148,7 +145,7 @@ CLASS tIPClient
PROTECTED:
DATA nLastError INIT 0
VAR nLastError INIT 0
METHOD OpenProxy( cServer, nPort, cProxy, nProxyPort, cResp, cUserName, cPassWord, nTimeOut, cUserAgent )
METHOD ReadHTTPProxyResponse()
@@ -167,14 +164,13 @@ CLASS tIPClient
ENDCLASS
METHOD New( oUrl, lTrace, oCredentials ) CLASS tIPClient
LOCAL oErr
DEFAULT lTrace TO .F.
IF ! ::bInitSocks
HB_InetInit()
hb_inetInit()
::bInitSocks := .T.
ENDIF
@@ -190,7 +186,7 @@ METHOD New( oUrl, lTrace, oCredentials ) CLASS tIPClient
oErr:CanSubstitute := .T.
oErr:Description := "unsupported protocol"
oErr:GenCode := EG_UNSUPPORTED
oErr:Operation := ::className()+":new()"
oErr:Operation := ::className() + ":new()"
oErr:Severity := ES_ERROR
oErr:SubCode := 1081
oErr:SubSystem := "BASE"
@@ -209,12 +205,9 @@ METHOD New( oUrl, lTrace, oCredentials ) CLASS tIPClient
::bEof := .F.
::lTrace := lTrace
RETURN self
RETURN self
METHOD Open( cUrl ) CLASS tIPClient
LOCAL nPort
LOCAL cResp
@@ -228,9 +221,9 @@ METHOD Open( cUrl ) CLASS tIPClient
nPort := ::oUrl:nPort
ENDIF
::SocketCon := HB_InetCreate()
::SocketCon := hb_inetCreate()
HB_InetTimeout( ::SocketCon, ::nConnTimeout )
hb_inetTimeout( ::SocketCon, ::nConnTimeout )
IF ! Empty( ::cProxyHost )
cResp := ""
IF ! ::OpenProxy( ::oUrl:cServer, nPort, ::cProxyHost, ::nProxyPort, @cResp, ::cProxyUser, ::cProxyPassword, ::nConnTimeout, "Mozilla/3.0 compatible" )
@@ -244,8 +237,7 @@ METHOD Open( cUrl ) CLASS tIPClient
ENDIF
ENDIF
::isOpen := .T.
RETURN .T.
RETURN .T.
METHOD OpenProxy( cServer, nPort, cProxy, nProxyPort, cResp, cUserName, cPassWord, nTimeOut, cUserAgent ) CLASS tIPClient
LOCAL cRequest := ""
@@ -258,7 +250,7 @@ METHOD OpenProxy( cServer, nPort, cProxy, nProxyPort, cResp, cUserName, cPassWor
::InetConnect( cProxy, nProxyPort, ::SocketCon )
IF ( tmp := ::InetErrorCode( ::SocketCon ) ) == 0
cRequest += "CONNECT " + cServer + ":" + hb_ntos( nPort ) + " HTTP/1.0" + Chr( 13 ) + Chr( 10 )
cRequest += "CONNECT " + cServer + ":" + hb_ntos( nPort ) + " HTTP/1.1" + Chr( 13 ) + Chr( 10 )
IF ! Empty( cUserAgent )
cRequest += "User-agent: " + cUserAgent + Chr( 13 ) + Chr( 10 )
ENDIF
@@ -286,10 +278,10 @@ METHOD OpenProxy( cServer, nPort, cProxy, nProxyPort, cResp, cUserName, cPassWor
cResp := hb_ntos( tmp )
lRet := .F.
ENDIF
RETURN lRet
METHOD ReadHTTPProxyResponse( dwTimeout, sResponse ) CLASS tIPClient
LOCAL bMoreDataToRead := .T.
LOCAL nLength, nData
LOCAL szResponse
@@ -314,34 +306,26 @@ METHOD ReadHTTPProxyResponse( dwTimeout, sResponse ) CLASS tIPClient
RETURN .T.
METHOD Close() CLASS tIPClient
LOCAL nRet := -1
IF ! Empty( ::SocketCon )
nRet := HB_InetClose( ::SocketCon )
nRet := hb_inetClose( ::SocketCon )
::SocketCon := NIL
::isOpen := .F.
ENDIF
RETURN nRet
RETURN nRet
METHOD Reset() CLASS tIPClient
::bInitialized := .F.
::bEof := .F.
RETURN .T.
RETURN .T.
METHOD Commit() CLASS tIPClient
RETURN .T.
RETURN .T.
METHOD Read( nLen ) CLASS tIPClient
LOCAL cStr0
@@ -351,7 +335,7 @@ METHOD Read( nLen ) CLASS tIPClient
RETURN NIL
ENDIF
IF Empty( nLen ) .OR. nLen < 0 .OR.( ::nLength > 0 .AND. nLen > ::nLength - ::nRead )
IF Empty( nLen ) .OR. nLen < 0 .OR. ( ::nLength > 0 .AND. nLen > ::nLength - ::nRead )
nLen := ::nLength - ::nRead
ENDIF
@@ -362,7 +346,7 @@ METHOD Read( nLen ) CLASS tIPClient
::nLastRead := ::InetRecv( ::SocketCon, @cStr1, RCV_BUF_SIZE )
DO WHILE ::nLastRead > 0
::nRead += ::nLastRead
cStr0 += Substr( cStr1, 1, ::nLastRead )
cStr0 += Left( cStr1, ::nLastRead )
::nLastRead := ::InetRecv( ::SocketCon, @cStr1, RCV_BUF_SIZE )
ENDDO
::bEof := .T.
@@ -370,8 +354,8 @@ METHOD Read( nLen ) CLASS tIPClient
// read an amount of data
cStr0 := Space( nLen )
// S.R. if len of file is less than RCV_BUF_SIZE HB_InetRecvAll return 0
// ::nLastRead := HB_InetRecvAll( ::SocketCon, @cStr0, nLen )
// S.R. if len of file is less than RCV_BUF_SIZE hb_inetRecvAll return 0
// ::nLastRead := hb_inetRecvAll( ::SocketCon, @cStr0, nLen )
::InetRecvAll( ::SocketCon, @cStr0, nLen )
::nLastRead := ::InetCount( ::SocketCon )
@@ -379,18 +363,16 @@ METHOD Read( nLen ) CLASS tIPClient
IF ::nLastRead != nLen
::bEof := .T.
cStr0 := Substr( cStr0, 1, ::nLastRead )
cStr0 := Left( cStr0, ::nLastRead )
// S.R. RETURN NIL
ENDIF
IF ::nRead == ::nLength
::bEof := .T.
ENDIF
ENDIF
RETURN cStr0
RETURN cStr0
METHOD ReadToFile( cFile, nMode, nSize ) CLASS tIPClient
LOCAL nFout
@@ -416,11 +398,7 @@ METHOD ReadToFile( cFile, nMode, nSize ) CLASS tIPClient
IF nFout != NIL
FClose( nFout )
ENDIF
IF ::InetErrorCode( ::SocketCon ) > 0
RETURN .F.
ELSE
RETURN .T.
ENDIF
RETURN ::InetErrorCode( ::SocketCon ) == 0
ENDIF
IF nFout == NIL
nFout := FCreate( cFile, nMode )
@@ -436,7 +414,7 @@ METHOD ReadToFile( cFile, nMode, nSize ) CLASS tIPClient
ENDIF
nSent += Len( cData )
IF !Empty( ::exGauge )
IF ! Empty( ::exGauge )
HB_ExecFromArray( ::exGauge, { nSent, nSize, Self } )
ENDIF
@@ -449,9 +427,7 @@ METHOD ReadToFile( cFile, nMode, nSize ) CLASS tIPClient
::nStatus := 2
FClose( nFout )
RETURN .T.
RETURN .T.
METHOD WriteFromFile( cFile ) CLASS tIPClient
LOCAL nFin
@@ -465,7 +441,7 @@ METHOD WriteFromFile( cFile ) CLASS tIPClient
IF nFin < 0
RETURN .F.
ENDIF
nSize := FSeek( nFin, 0, 2 )
nSize := FSeek( nFin, 0, FS_END )
FSeek( nFin, 0 )
nBufSize := SND_BUF_SIZE
@@ -473,7 +449,7 @@ METHOD WriteFromFile( cFile ) CLASS tIPClient
// allow initialization of the gauge
nSent := 0
IF ! Empty( ::exGauge )
HB_ExecFromArray( ::exGauge, {nSent, nSize, Self} )
HB_ExecFromArray( ::exGauge, { nSent, nSize, Self } )
ENDIF
::nStatus := 1
@@ -498,11 +474,10 @@ METHOD WriteFromFile( cFile ) CLASS tIPClient
::nStatus := 2
FClose( nFin )
RETURN .T.
RETURN .T.
/*
HZ: METHOD :getOk() is not declared in TIpClient
HZ: METHOD :getOk() is not declared in tIPClient
METHOD Data( cData ) CLASS tIPClient
::InetSendall( ::SocketCon, "DATA" + ::cCRLF )
@@ -510,10 +485,9 @@ METHOD Data( cData ) CLASS tIPClient
RETURN .F.
ENDIF
::InetSendall(::SocketCon, cData + ::cCRLF + "." + ::cCRLF )
RETURN ::GetOk()
RETURN ::GetOk()
*/
METHOD Write( cData, nLen, bCommit ) CLASS tIPClient
IF Empty( nLen )
@@ -528,9 +502,7 @@ METHOD Write( cData, nLen, bCommit ) CLASS tIPClient
::nWrite += ::nLastWrite
RETURN ::nLastWrite
RETURN ::nLastWrite
METHOD InetSendAll( SocketCon, cData, nLen ) CLASS tIPClient
LOCAL nRet
@@ -539,79 +511,60 @@ METHOD InetSendAll( SocketCon, cData, nLen ) CLASS tIPClient
nLen := Len( cData )
ENDIF
nRet := HB_InetSendAll( SocketCon, cData, nLen )
nRet := hb_inetSendAll( SocketCon, cData, nLen )
IF ::lTrace
::Log( SocketCon, nlen, cData, nRet )
ENDIF
RETURN nRet
RETURN nRet
METHOD InetCount( SocketCon ) CLASS tIPClient
LOCAL nRet
nRet := HB_InetCount( SocketCon )
LOCAL nRet := hb_inetCount( SocketCon )
IF ::lTrace
::Log( SocketCon, nRet )
ENDIF
RETURN nRet
RETURN nRet
METHOD InetRecv( SocketCon, cStr1, len ) CLASS tIPClient
LOCAL nRet
nRet := HB_InetRecv( SocketCon, @cStr1, len )
LOCAL nRet := hb_inetRecv( SocketCon, @cStr1, len )
IF ::lTrace
::Log( SocketCon, "", len, iif( nRet >= 0, cStr1, nRet ) )
ENDIF
RETURN nRet
RETURN nRet
METHOD InetRecvLine( SocketCon, nLen, size ) CLASS tIPClient
LOCAL cRet
cRet := HB_InetRecvLine( SocketCon, @nLen, size )
LOCAL cRet := hb_inetRecvLine( SocketCon, @nLen, size )
IF ::lTrace
::Log( SocketCon, "", size, cRet )
ENDIF
RETURN cRet
RETURN cRet
METHOD InetRecvAll( SocketCon, cStr1, len ) CLASS tIPClient
LOCAL nRet
nRet := HB_InetRecvAll( SocketCon, @cStr1, len )
LOCAL nRet := hb_inetRecvAll( SocketCon, @cStr1, len )
IF ::lTrace
::Log( SocketCon, "", len, iif( nRet >= 0, cStr1, nRet ) )
ENDIF
RETURN nRet
RETURN nRet
METHOD InetErrorCode( SocketCon ) CLASS tIPClient
LOCAL nRet
LOCAL nRet := hb_inetErrorCode( SocketCon )
::nLastError := nRet := HB_InetErrorCode( SocketCon )
::nLastError := nRet
IF ::lTrace
::Log( SocketCon, nRet )
ENDIF
RETURN nRet
RETURN nRet
METHOD InetErrorDesc( SocketCon ) CLASS tIPClient
LOCAL cMsg := ""
@@ -619,16 +572,15 @@ METHOD InetErrorDesc( SocketCon ) CLASS tIPClient
DEFAULT SocketCon TO ::SocketCon
IF ! Empty( SocketCon )
cMsg := HB_InetErrorDesc( SocketCon )
cMsg := hb_inetErrorDesc( SocketCon )
ENDIF
RETURN cMsg
RETURN cMsg
/* BROKEN, should test number of parameters and act accordingly, see doc\inet.txt */
METHOD InetConnect( cServer, nPort, SocketCon ) CLASS tIPClient
HB_InetConnect( cServer, nPort, SocketCon )
hb_inetConnect( cServer, nPort, SocketCon )
IF ! Empty( ::nDefaultSndBuffSize )
::InetSndBufSize( SocketCon, ::nDefaultSndBuffSize )
@@ -642,20 +594,20 @@ METHOD InetConnect( cServer, nPort, SocketCon ) CLASS tIPClient
::Log( cServer, nPort, SocketCon )
ENDIF
RETURN NIL
RETURN NIL
/* Methods to manage buffers */
METHOD InetRcvBufSize( SocketCon, nSizeBuff ) CLASS tIPClient
IF ! Empty( nSizeBuff )
HB_InetSetRcvBufSize( SocketCon, nSizeBuff )
hb_inetSetRcvBufSize( SocketCon, nSizeBuff )
ENDIF
RETURN HB_InetGetRcvBufSize( SocketCon )
RETURN hb_inetGetRcvBufSize( SocketCon )
METHOD InetSndBufSize( SocketCon, nSizeBuff ) CLASS tIPClient
IF ! Empty( nSizeBuff )
HB_InetSetSndBufSize( SocketCon, nSizeBuff )
hb_inetSetSndBufSize( SocketCon, nSizeBuff )
ENDIF
RETURN HB_InetGetSndBufSize( SocketCon )
RETURN hb_inetGetSndBufSize( SocketCon )
/* Called from another method with list of parameters and, as last parameter, return code
of function being logged.
@@ -678,25 +630,24 @@ METHOD Log( ... ) CLASS tIPClient
cMsg += hb_CStr( xVar )
ENDIF
cMsg += iif ( xVar:__enumIndex() < PCount() - 1, ", ", "" )
cMsg += iif( xVar:__enumIndex() < PCount() - 1, ", ", "" )
IF xVar:__enumIndex() == PCount() - 1
cMsg += " )" + hb_OsNewLine() + ">> "
cMsg += " )" + hb_osNewLine() + ">> "
ELSEIF xVar:__enumIndex() == PCount()
cMsg += " <<" + hb_OsNewLine() + hb_OsNewLine()
cMsg += " <<" + hb_osNewLine() + hb_osNewLine()
ENDIF
NEXT
FWrite( ::nHandle, cMsg )
RETURN Self
RETURN Self
METHOD SetProxy( cProxyHost, nProxyPort, cProxyUser, cProxyPassword ) CLASS tIPClient
::cProxyHost := cProxyHost
::nProxyPort := nProxyPort
::cProxyUser := cProxyUser
::cProxyPassword := cProxyPassword
RETURN Self

View File

@@ -1202,6 +1202,7 @@ EXTERNAL HB_DIRSCAN
EXTERNAL HB_PROCESSOPEN
EXTERNAL HB_PROCESSVALUE
EXTERNAL HB_PROCESSCLOSE
EXTERNAL HB_PROCESSRUN
EXTERNAL HB_GCSTEP
EXTERNAL HB_GCALL
EXTERNAL HB_KEYCLEAR

View File

@@ -906,7 +906,7 @@ BOOL hb_fsProcessClose( HB_FHANDLE hProcess, BOOL fGentle )
#define HB_STD_BUFFER_SIZE 4096
int hb_fsProcessRun( const char *pszFilename,
int hb_fsProcessRun( const char * pszFilename,
const char * pStdInBuf, ULONG ulStdInLen,
char ** pStdOutPtr, ULONG * pulStdOut,
char ** pStdErrPtr, ULONG * pulStdErr,

View File

@@ -122,8 +122,8 @@ HB_FUNC( HB_PROCESSCLOSE )
[ <lDetach> ] ) -> <nResult> */
HB_FUNC( HB_PROCESSRUN )
{
const char *szName = hb_parc( 1 );
const char *szStdIn = hb_parc( 2 );
const char * szName = hb_parc( 1 );
const char * szStdIn = hb_parc( 2 );
PHB_ITEM pStdOut = hb_param( 3, HB_IT_BYREF );
PHB_ITEM pStdErr = hb_param( 4, HB_IT_BYREF );
BOOL fDetach = hb_parl( 5 );
@@ -149,14 +149,20 @@ HB_FUNC( HB_PROCESSRUN )
fDetach );
if( pStdOutBuf )
hb_storclen_buffer( pStdOutBuf, ulStdOut, 3 );
{
if( ! hb_storclen_buffer( pStdOutBuf, ulStdOut, 3 ) )
hb_xfree( pStdOutBuf );
}
else if( pStdOut )
hb_storclen( "", 0, 3 );
hb_storc( NULL, 3 );
if( pStdErrBuf )
hb_storclen_buffer( pStdErrBuf, ulStdErr, 4 );
{
if( ! hb_storclen_buffer( pStdErrBuf, ulStdErr, 4 ) )
hb_xfree( pStdErrBuf );
}
else if( pStdErr )
hb_storclen( "", 0, 4 );
hb_storc( NULL, 4 );
hb_retni( iResult );
}

View File

@@ -417,14 +417,6 @@ PROCEDURE Main( ... )
#endif
STATIC FUNCTION hbmk_run( hbmk, cCmd, cStdOut )
HB_SYMBOL_UNUSED( hbmk )
IF PCount() >= 3
RETURN hb_processRun( cCmd,, @cStdOut )
ENDIF
RETURN hb_processRun( cCmd )
STATIC PROCEDURE hbmk_COMP_Setup( cARCH, cCOMP, cBasePath )
/* TODO: Use HB_CCPREFIX instead of PATH modification, where possible. */
@@ -3222,7 +3214,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
OutStd( cCommand + hb_osNewLine() )
ENDIF
IF ! hbmk[ _HBMK_lDONTEXEC ] .AND. ( tmp := hbmk_run( hbmk, cCommand ) ) != 0
IF ! hbmk[ _HBMK_lDONTEXEC ] .AND. ( tmp := hb_processRun( cCommand ) ) != 0
hbmk_OutErr( hbmk, hb_StrFormat( I_( "Error: Running Harbour compiler. %1$s" ), hb_ntos( tmp ) ) )
IF ! hbmk[ _HBMK_lQuiet ]
OutErr( cCommand + hb_osNewLine() )
@@ -3428,7 +3420,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
ENDIF
NEXT
ELSE
l_aRESSRC_TODO := hbmk[ _HBMK_aRESSRC ]
l_aRESSRC_TODO := AClone( hbmk[ _HBMK_aRESSRC ] )
ENDIF
IF hbmk[ _HBMK_nHBMODE ] != _HBMODE_RAW_C
@@ -3511,7 +3503,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
OutStd( cCommand + hb_osNewLine() )
ENDIF
IF ! hbmk[ _HBMK_lDONTEXEC ] .AND. ( tmp1 := hbmk_run( hbmk, cCommand ) ) != 0
IF ! hbmk[ _HBMK_lDONTEXEC ] .AND. ( tmp1 := hb_processRun( cCommand ) ) != 0
hbmk_OutErr( hbmk, hb_StrFormat( I_( "Error: Running resource compiler. %1$s" ), hb_ntos( tmp1 ) ) )
IF ! hbmk[ _HBMK_lQuiet ]
OutErr( cCommand + hb_osNewLine() )
@@ -3550,7 +3542,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
ENDIF
ENDIF
IF ! hbmk[ _HBMK_lDONTEXEC ] .AND. ( tmp := hbmk_run( hbmk, cCommand ) ) != 0
IF ! hbmk[ _HBMK_lDONTEXEC ] .AND. ( tmp := hb_processRun( cCommand ) ) != 0
hbmk_OutErr( hbmk, hb_StrFormat( I_( "Error: Running resource compiler. %1$s" ), hb_ntos( tmp ) ) )
IF ! hbmk[ _HBMK_lQuiet ]
OutErr( cCommand + hb_osNewLine() )
@@ -3680,9 +3672,9 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
IF ! hbmk[ _HBMK_lDONTEXEC ]
IF hb_mtvm() .AND. Len( aTODO:__enumBase() ) > 1
AAdd( aThreads, { hb_threadStart( @hbmk_run(), hbmk, cCommand ), cCommand } )
AAdd( aThreads, { hb_threadStart( @hb_processRun(), cCommand ), cCommand } )
ELSE
IF ( tmp := hbmk_run( hbmk, cCommand ) ) != 0
IF ( tmp := hb_processRun( cCommand ) ) != 0
hbmk_OutErr( hbmk, hb_StrFormat( I_( "Error: Running C compiler. %1$s" ), hb_ntos( tmp ) ) )
IF ! hbmk[ _HBMK_lQuiet ]
OutErr( cCommand + hb_osNewLine() )
@@ -3830,7 +3822,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
ENDIF
ENDIF
IF ! hbmk[ _HBMK_lDONTEXEC ] .AND. ( tmp := hbmk_run( hbmk, cCommand ) ) != 0
IF ! hbmk[ _HBMK_lDONTEXEC ] .AND. ( tmp := hb_processRun( cCommand ) ) != 0
hbmk_OutErr( hbmk, hb_StrFormat( I_( "Error: Running linker. %1$s" ), hb_ntos( tmp ) ) )
IF ! hbmk[ _HBMK_lQuiet ]
OutErr( cCommand + hb_osNewLine() )
@@ -3913,7 +3905,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
ENDIF
ENDIF
IF ! hbmk[ _HBMK_lDONTEXEC ] .AND. ( tmp := hbmk_run( hbmk, cCommand ) ) != 0
IF ! hbmk[ _HBMK_lDONTEXEC ] .AND. ( tmp := hb_processRun( cCommand ) ) != 0
hbmk_OutErr( hbmk, hb_StrFormat( I_( "Error: Running lib command. %1$s" ), hb_ntos( tmp ) ) )
IF ! hbmk[ _HBMK_lQuiet ]
OutErr( cCommand + hb_osNewLine() )
@@ -3973,7 +3965,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
ENDIF
ENDIF
IF ! hbmk[ _HBMK_lDONTEXEC ] .AND. ( tmp := hbmk_run( hbmk, cCommand ) ) != 0
IF ! hbmk[ _HBMK_lDONTEXEC ] .AND. ( tmp := hb_processRun( cCommand ) ) != 0
hbmk_OutErr( hbmk, hb_StrFormat( I_( "Error: Running dynamic lib link command. %1$s" ), hb_ntos( tmp ) ) )
IF ! hbmk[ _HBMK_lQuiet ]
OutErr( cCommand + hb_osNewLine() )
@@ -4031,7 +4023,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
OutStd( cCommand + hb_osNewLine() )
ENDIF
IF ! hbmk[ _HBMK_lDONTEXEC ] .AND. ( tmp := hbmk_run( hbmk, cCommand ) ) != 0
IF ! hbmk[ _HBMK_lDONTEXEC ] .AND. ( tmp := hb_processRun( cCommand ) ) != 0
hbmk_OutErr( hbmk, hb_StrFormat( I_( "Warning: Running post processor command. %1$s:" ), hb_ntos( tmp ) ) )
IF ! hbmk[ _HBMK_lQuiet ]
OutErr( cCommand + hb_osNewLine() )
@@ -4095,7 +4087,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
OutStd( cCommand + hb_osNewLine() )
ENDIF
IF ! hbmk[ _HBMK_lDONTEXEC ] .AND. ( tmp := hbmk_run( hbmk, cCommand ) ) != 0
IF ! hbmk[ _HBMK_lDONTEXEC ] .AND. ( tmp := hb_processRun( cCommand ) ) != 0
hbmk_OutErr( hbmk, hb_StrFormat( I_( "Warning: Running compression command. %1$s:" ), hb_ntos( tmp ) ) )
IF ! hbmk[ _HBMK_lQuiet ]
OutErr( cCommand + hb_osNewLine() )
@@ -4207,7 +4199,7 @@ STATIC FUNCTION CompileCLoop( hbmk, aTODO, cBin_CompC, cOpt_CompC, cWorkDir, cOb
OutStd( cCommand + hb_osNewLine() )
ENDIF
IF ! hbmk[ _HBMK_lDONTEXEC ] .AND. ( tmp1 := hbmk_run( hbmk, cCommand ) ) != 0
IF ! hbmk[ _HBMK_lDONTEXEC ] .AND. ( tmp1 := hb_processRun( cCommand ) ) != 0
IF nJobs > 1
hbmk_OutErr( hbmk, hb_StrFormat( I_( "Error: Running C compiler job #%1$s. %2$s" ), hb_ntos( nJob ), hb_ntos( tmp1 ) ) )
ELSE
@@ -5681,7 +5673,9 @@ STATIC FUNCTION MacroProc( hbmk, cString, cFileName, lLateMode )
( nEnd := hb_At( _CMDSUBST_CLOSE, cString, nStart + Len( _CMDSUBST_OPEN ) ) ) > 0
cMacro := SubStr( cString, nStart + Len( _CMDSUBST_OPEN ), nEnd - nStart - Len( _CMDSUBST_OPEN ) )
cStdOut := ""
hbmk_run( hbmk, cMacro, @cStdOut )
IF ! Empty( cMacro )
hb_processRun( cMacro,, @cStdOut )
ENDIF
cString := Left( cString, nStart - 1 ) + cStdOut + SubStr( cString, nEnd + Len( _CMDSUBST_CLOSE ) )
ENDDO
@@ -5743,7 +5737,7 @@ STATIC FUNCTION getFirstFunc( hbmk, cFile )
NEXT
ELSEIF ! Empty( cExecNM := FindInPath( hbmk[ _HBMK_cCCPREFIX ] + "nm" ) )
cFuncList := ""
hbmk_run( hbmk, cExecNM + " " + cFile + " -g -n --defined-only -C", @cFuncList )
hb_processRun( cExecNM + " " + cFile + " -g -n --defined-only -C",, @cFuncList )
IF ( n := At( " T HB_FUN_", cFuncList ) ) != 0
n += 10
DO WHILE ( c := SubStr( cFuncList, n++, 1 ) ) == "_" .OR. ;