2009-06-27 09:47 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)

* include/hbapifs.h
  * source/rtl/filebuf.c
  * source/rtl/filesys.c
    * Changed file I/O buffer parameters from
      '( [const] BYTE * )' to '( [const] void * )'

  * utils/hbmk2/hbmk2.prg
    + Added ${hb_curdir} macro support.
    + Added ${hb_first} macro support (will return first source name
      specced on cmdline)
    + Added support for 'sources=' line in .hbc files. This
      will accept .prg, .c/.cpp, .po/.pot, object and resources.
      For resources, also wildcards are supported. Files with
      no extension will be considered .prg.
      This also replaces former 'pos=' line.
      This can be useful to put some central sources into all
      project without using a lib (or when a lib isn't an option
      for some reason).

  - man
    - Dir deleted.
This commit is contained in:
Viktor Szakats
2009-06-27 07:48:26 +00:00
parent 07104ffa29
commit a9197e7223
5 changed files with 214 additions and 152 deletions

View File

@@ -17,6 +17,29 @@
past entries belonging to author(s): Viktor Szakats.
*/
2009-06-27 09:47 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* include/hbapifs.h
* source/rtl/filebuf.c
* source/rtl/filesys.c
* Changed file I/O buffer parameters from
'( [const] BYTE * )' to '( [const] void * )'
* utils/hbmk2/hbmk2.prg
+ Added ${hb_curdir} macro support.
+ Added ${hb_first} macro support (will return first source name
specced on cmdline)
+ Added support for 'sources=' line in .hbc files. This
will accept .prg, .c/.cpp, .po/.pot, object and resources.
For resources, also wildcards are supported. Files with
no extension will be considered .prg.
This also replaces former 'pos=' line.
This can be useful to put some central sources into all
project without using a lib (or when a lib isn't an option
for some reason).
- man
- Dir deleted.
2009-06-26 02:28 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* bin/postinst.bat
* mpkg_gnu.bat

View File

@@ -184,9 +184,9 @@ extern HB_EXPORT BOOL hb_fsLockLarge ( HB_FHANDLE hFileHandle, HB_FOFFSE
HB_FOFFSET ulLength, USHORT uiMode ); /* request a lock on a portion of a file using 64bit API */
extern HB_EXPORT BOOL hb_fsMkDir ( const char * pszDirName ); /* create a directory */
extern HB_EXPORT HB_FHANDLE hb_fsOpen ( const char * pszFileName, USHORT uiFlags ); /* open a file */
extern HB_EXPORT USHORT hb_fsRead ( HB_FHANDLE hFileHandle, BYTE * pBuff, USHORT ulCount ); /* read contents of a file into a buffer (<=64K) */
extern HB_EXPORT ULONG hb_fsReadLarge ( HB_FHANDLE hFileHandle, BYTE * pBuff, ULONG ulCount ); /* read contents of a file into a buffer (>64K) */
extern HB_EXPORT ULONG hb_fsReadAt ( HB_FHANDLE hFileHandle, BYTE * pBuff, ULONG ulCount, HB_FOFFSET llOffset ); /* read from given offset contents of a file into a buffer (>64K) */
extern HB_EXPORT USHORT hb_fsRead ( HB_FHANDLE hFileHandle, void * pBuff, USHORT ulCount ); /* read contents of a file into a buffer (<=64K) */
extern HB_EXPORT ULONG hb_fsReadLarge ( HB_FHANDLE hFileHandle, void * pBuff, ULONG ulCount ); /* read contents of a file into a buffer (>64K) */
extern HB_EXPORT ULONG hb_fsReadAt ( HB_FHANDLE hFileHandle, void * pBuff, ULONG ulCount, HB_FOFFSET llOffset ); /* read from given offset contents of a file into a buffer (>64K) */
extern HB_EXPORT BOOL hb_fsRmDir ( const char * pszDirName ); /* remove a directory */
extern HB_EXPORT BOOL hb_fsRename ( const char * pszOldName, const char * pszNewName ); /* rename a file */
extern HB_EXPORT ULONG hb_fsSeek ( HB_FHANDLE hFileHandle, LONG lOffset, USHORT uiMode ); /* reposition an open file */
@@ -200,9 +200,9 @@ extern HB_EXPORT BOOL hb_fsSetAttr ( const char * pszFileName, ULONG u
extern HB_EXPORT void hb_fsSetError ( USHORT uiError ); /* set the file system DOS error number */
extern HB_EXPORT void hb_fsSetIOError ( BOOL fResult, USHORT uiOperation ); /* set the file system error number after IO operation */
extern HB_EXPORT BOOL hb_fsTruncAt ( HB_FHANDLE hFileHandle, HB_FOFFSET llOffset ); /* truncate file to given size */
extern HB_EXPORT USHORT hb_fsWrite ( HB_FHANDLE hFileHandle, const BYTE * pBuff, USHORT ulCount ); /* write to an open file from a buffer (<=64K) */
extern HB_EXPORT ULONG hb_fsWriteLarge ( HB_FHANDLE hFileHandle, const BYTE * pBuff, ULONG ulCount ); /* write to an open file from a buffer (>64K) */
extern HB_EXPORT ULONG hb_fsWriteAt ( HB_FHANDLE hFileHandle, const BYTE * pBuff, ULONG ulCount, HB_FOFFSET llOffset ); /* write to an open file at given offset from a buffer (>64K) */
extern HB_EXPORT USHORT hb_fsWrite ( HB_FHANDLE hFileHandle, const void * pBuff, USHORT ulCount ); /* write to an open file from a buffer (<=64K) */
extern HB_EXPORT ULONG hb_fsWriteLarge ( HB_FHANDLE hFileHandle, const void * pBuff, ULONG ulCount ); /* write to an open file from a buffer (>64K) */
extern HB_EXPORT ULONG hb_fsWriteAt ( HB_FHANDLE hFileHandle, const void * pBuff, ULONG ulCount, HB_FOFFSET llOffset ); /* write to an open file at given offset from a buffer (>64K) */
extern HB_EXPORT HB_FHANDLE hb_fsPOpen ( const char * pFilename, const char * pMode );
extern HB_EXPORT HB_FHANDLE hb_fsGetOsHandle ( HB_FHANDLE hFileHandle );
extern HB_EXPORT USHORT hb_fsGetFError ( void ); /* get FERROR() flag */
@@ -326,8 +326,8 @@ HB_EXPORT PHB_FILE hb_fileCreateTempEx( char * pszName,
ULONG ulAttr );
HB_EXPORT void hb_fileClose( PHB_FILE pFile );
HB_EXPORT BOOL hb_fileLock( PHB_FILE pFile, HB_FOFFSET ulStart, HB_FOFFSET ulLen, int iType );
HB_EXPORT ULONG hb_fileReadAt( PHB_FILE pFile, BYTE * buffer, ULONG ulSize, HB_FOFFSET llOffset );
HB_EXPORT ULONG hb_fileWriteAt( PHB_FILE pFile, const BYTE * buffer, ULONG ulSize, HB_FOFFSET llOffset );
HB_EXPORT ULONG hb_fileReadAt( PHB_FILE pFile, void * buffer, ULONG ulSize, HB_FOFFSET llOffset );
HB_EXPORT ULONG hb_fileWriteAt( PHB_FILE pFile, const void * buffer, ULONG ulSize, HB_FOFFSET llOffset );
HB_EXPORT BOOL hb_fileTruncAt( PHB_FILE pFile, HB_FOFFSET llOffset );
HB_EXPORT HB_FOFFSET hb_fileSize( PHB_FILE pFile );
HB_EXPORT void hb_fileCommit( PHB_FILE pFile );

View File

@@ -460,13 +460,13 @@ BOOL hb_fileLock( PHB_FILE pFile, HB_FOFFSET ulStart, HB_FOFFSET ulLen,
return fResult;
}
ULONG hb_fileReadAt( PHB_FILE pFile, BYTE * buffer, ULONG ulSize,
ULONG hb_fileReadAt( PHB_FILE pFile, void * buffer, ULONG ulSize,
HB_FOFFSET llOffset )
{
return hb_fsReadAt( pFile->hFile, buffer, ulSize, llOffset );
}
ULONG hb_fileWriteAt( PHB_FILE pFile, const BYTE * buffer, ULONG ulSize,
ULONG hb_fileWriteAt( PHB_FILE pFile, const void * buffer, ULONG ulSize,
HB_FOFFSET llOffset )
{
return hb_fsWriteAt( pFile->hFile, buffer, ulSize, llOffset );

View File

@@ -1372,7 +1372,7 @@ BOOL hb_fsSetAttr( const char * pszFileName, ULONG ulAttr )
return fResult;
}
USHORT hb_fsRead( HB_FHANDLE hFileHandle, BYTE * pBuff, USHORT uiCount )
USHORT hb_fsRead( HB_FHANDLE hFileHandle, void * pBuff, USHORT uiCount )
{
USHORT uiRead;
@@ -1412,7 +1412,7 @@ USHORT hb_fsRead( HB_FHANDLE hFileHandle, BYTE * pBuff, USHORT uiCount )
return uiRead;
}
USHORT hb_fsWrite( HB_FHANDLE hFileHandle, const BYTE * pBuff, USHORT uiCount )
USHORT hb_fsWrite( HB_FHANDLE hFileHandle, const void * pBuff, USHORT uiCount )
{
USHORT uiWritten;
@@ -1472,7 +1472,7 @@ USHORT hb_fsWrite( HB_FHANDLE hFileHandle, const BYTE * pBuff, USHORT uiCount )
return uiWritten;
}
ULONG hb_fsReadLarge( HB_FHANDLE hFileHandle, BYTE * pBuff, ULONG ulCount )
ULONG hb_fsReadLarge( HB_FHANDLE hFileHandle, void * pBuff, ULONG ulCount )
{
ULONG ulRead;
@@ -1501,7 +1501,7 @@ ULONG hb_fsReadLarge( HB_FHANDLE hFileHandle, BYTE * pBuff, ULONG ulCount )
ULONG ulLeftToRead = ulCount;
USHORT uiToRead;
USHORT uiRead;
BYTE * pPtr = pBuff;
BYTE * pPtr = ( BYTE * ) pBuff;
ulRead = 0;
@@ -1552,7 +1552,7 @@ ULONG hb_fsReadLarge( HB_FHANDLE hFileHandle, BYTE * pBuff, ULONG ulCount )
return ulRead;
}
ULONG hb_fsWriteLarge( HB_FHANDLE hFileHandle, const BYTE * pBuff, ULONG ulCount )
ULONG hb_fsWriteLarge( HB_FHANDLE hFileHandle, const void * pBuff, ULONG ulCount )
{
ULONG ulWritten;
@@ -1590,7 +1590,7 @@ ULONG hb_fsWriteLarge( HB_FHANDLE hFileHandle, const BYTE * pBuff, ULONG ulCount
ULONG ulLeftToWrite = ulCount;
USHORT uiToWrite;
USHORT uiWritten;
const BYTE * pPtr = pBuff;
const BYTE * pPtr = ( const BYTE * ) pBuff;
ulWritten = 0;
@@ -1654,7 +1654,7 @@ ULONG hb_fsWriteLarge( HB_FHANDLE hFileHandle, const BYTE * pBuff, ULONG ulCount
return ulWritten;
}
ULONG hb_fsReadAt( HB_FHANDLE hFileHandle, BYTE * pBuff, ULONG ulCount, HB_FOFFSET llOffset )
ULONG hb_fsReadAt( HB_FHANDLE hFileHandle, void * pBuff, ULONG ulCount, HB_FOFFSET llOffset )
{
ULONG ulRead;
@@ -1713,7 +1713,7 @@ ULONG hb_fsReadAt( HB_FHANDLE hFileHandle, BYTE * pBuff, ULONG ulCount, HB_FOFFS
return ulRead;
}
ULONG hb_fsWriteAt( HB_FHANDLE hFileHandle, const BYTE * pBuff, ULONG ulCount, HB_FOFFSET llOffset )
ULONG hb_fsWriteAt( HB_FHANDLE hFileHandle, const void * pBuff, ULONG ulCount, HB_FOFFSET llOffset )
{
ULONG ulWritten;

View File

@@ -252,24 +252,31 @@ REQUEST hbmk_KEYW
#define _HBMK_lUNICODE 48
#define _HBMK_nCONF 49
#define _HBMK_aPO 50
#define _HBMK_cHBL 51
#define _HBMK_cHBLDir 52
#define _HBMK_aLNG 53
#define _HBMK_cPO 54
#define _HBMK_cFIRST 50
#define _HBMK_aPRG 51
#define _HBMK_aC 52
#define _HBMK_aRESSRC 53
#define _HBMK_aRESCMP 54
#define _HBMK_aOBJUSER 55
#define _HBMK_lDEBUGTIME 55
#define _HBMK_lDEBUGINC 56
#define _HBMK_lDEBUGSTUB 57
#define _HBMK_lDEBUGI18N 58
#define _HBMK_aPO 56
#define _HBMK_cHBL 57
#define _HBMK_cHBLDir 58
#define _HBMK_aLNG 59
#define _HBMK_cPO 60
#define _HBMK_cCCPATH 59
#define _HBMK_cCCPREFIX 60
#define _HBMK_cCCPOSTFIX 61
#define _HBMK_lDEBUGTIME 61
#define _HBMK_lDEBUGINC 62
#define _HBMK_lDEBUGSTUB 63
#define _HBMK_lDEBUGI18N 64
#define _HBMK_lUTF8 62
#define _HBMK_cCCPATH 65
#define _HBMK_cCCPREFIX 66
#define _HBMK_cCCPOSTFIX 67
#define _HBMK_MAX_ 62
#define _HBMK_lUTF8 68
#define _HBMK_MAX_ 68
#ifndef _HBMK_EMBEDDED_
@@ -495,15 +502,11 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
LOCAL l_cHB_DYN_INSTALL
LOCAL l_cHB_INC_INSTALL
LOCAL l_aPRG
LOCAL l_aPRG_TODO
LOCAL l_aPRG_DONE
LOCAL l_aC
LOCAL l_aC_TODO
LOCAL l_aC_DONE
LOCAL l_aRESSRC
LOCAL l_aRESSRC_TODO
LOCAL l_aRESCMP
LOCAL l_aLIBSHARED
LOCAL l_aLIBSHAREDPOST := {}
LOCAL l_aLIB
@@ -518,10 +521,8 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
LOCAL l_aOPTRUN
LOCAL l_cPROGDIR
LOCAL l_cPROGNAME
LOCAL l_cFIRST
LOCAL l_aOBJ
LOCAL l_aOBJA
LOCAL l_aOBJUSER
LOCAL l_aCLEAN
LOCAL l_lHB_PCRE := .T.
LOCAL l_lHB_ZLIB := .T.
@@ -1302,8 +1303,8 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
/* Process command line */
l_aPRG := {}
l_aC := {}
hbmk[ _HBMK_aPRG ] := {}
hbmk[ _HBMK_aC ] := {}
hbmk[ _HBMK_aOPTPRG ] := {}
hbmk[ _HBMK_aOPTC ] := {}
hbmk[ _HBMK_aOPTRES ] := {}
@@ -1311,17 +1312,17 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
hbmk[ _HBMK_aOPTA ] := {}
hbmk[ _HBMK_aOPTD ] := {}
l_aOPTRUN := {}
l_aRESSRC := {}
l_aRESCMP := {}
hbmk[ _HBMK_aRESSRC ] := {}
hbmk[ _HBMK_aRESCMP ] := {}
hbmk[ _HBMK_aINCTRYPATH ] := {}
hbmk[ _HBMK_aLIBUSER ] := {}
hbmk[ _HBMK_aLIBUSERGT ] := {}
hbmk[ _HBMK_aLIBDYNHAS ] := {}
l_aOBJUSER := {}
hbmk[ _HBMK_aOBJUSER ] := {}
l_aOBJA := {}
l_cPROGDIR := NIL
l_cPROGNAME := NIL
l_cFIRST := NIL
hbmk[ _HBMK_cFIRST ] := NIL
hbmk[ _HBMK_aPO ] := {}
hbmk[ _HBMK_cHBL ] := NIL
hbmk[ _HBMK_cHBLDir ] := ""
@@ -1349,9 +1350,9 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
cParam := FN_ExtSet( cParam, ".hbm" )
ENDIF
IF !( Lower( FN_ExtGet( cParam ) ) == ".hbm" ) .AND. lAcceptLDClipper
rtlnk_process( hbmk, MemoRead( cParam ), @l_cPROGNAME, @l_aOBJUSER, @hbmk[ _HBMK_aLIBUSER ] )
IF ! Empty( l_aOBJUSER )
DEFAULT l_cFIRST TO l_aOBJUSER[ 1 ]
rtlnk_process( hbmk, MemoRead( cParam ), @l_cPROGNAME, @hbmk[ _HBMK_aOBJUSER ], @hbmk[ _HBMK_aLIBUSER ] )
IF ! Empty( hbmk[ _HBMK_aOBJUSER ] )
DEFAULT hbmk[ _HBMK_cFIRST ] TO hbmk[ _HBMK_aOBJUSER ][ 1 ]
ENDIF
ELSE
HBM_Load( hbmk, aParams, cParam, 1 ) /* Load parameters from script file */
@@ -1739,18 +1740,18 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
DO CASE
CASE lAcceptLDFlag
AAddNotEmpty( hbmk[ _HBMK_aOPTL ] , ArchCompFilter( hbmk, PathSepToTarget( hbmk, cParam, 2 ) ) )
AAddNotEmpty( hbmk[ _HBMK_aOPTL ], ArchCompFilter( hbmk, PathSepToTarget( hbmk, cParam, 2 ) ) )
CASE lAcceptCFlag
IF SubStr( cParamL, 2 ) == "c"
lStopAfterCComp := .T.
ELSE
AAddNotEmpty( hbmk[ _HBMK_aOPTC ] , ArchCompFilter( hbmk, PathSepToTarget( hbmk, cParam, 2 ) ) )
AAddNotEmpty( hbmk[ _HBMK_aOPTC ], ArchCompFilter( hbmk, PathSepToTarget( hbmk, cParam, 2 ) ) )
ENDIF
OTHERWISE
IF SubStr( cParamL, 2 ) == "gh"
lStopAfterHarbour := .T.
ENDIF
AAddNotEmpty( hbmk[ _HBMK_aOPTPRG ] , PathSepToTarget( hbmk, cParam, 2 ) )
AAddNotEmpty( hbmk[ _HBMK_aOPTPRG ], PathSepToTarget( hbmk, cParam, 2 ) )
ENDCASE
CASE FN_ExtGet( cParamL ) == ".lib" .OR. ;
@@ -1787,8 +1788,8 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
cParam := ArchCompFilter( hbmk, cParam )
IF ! Empty( cParam )
FOR EACH cParam IN FN_Expand( PathProc( cParam, aParam[ _PAR_cFileName ] ), Empty( aParam[ _PAR_cFileName ] ) )
AAdd( l_aPRG , PathSepToTarget( hbmk, cParam ) )
DEFAULT l_cFIRST TO PathSepToSelf( cParam )
AAdd( hbmk[ _HBMK_aPRG ], PathSepToTarget( hbmk, cParam ) )
DEFAULT hbmk[ _HBMK_cFIRST ] TO PathSepToSelf( cParam )
NEXT
ENDIF
@@ -1797,7 +1798,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
cParam := ArchCompFilter( hbmk, cParam )
IF ! Empty( cParam )
FOR EACH cParam IN FN_Expand( PathProc( cParam, aParam[ _PAR_cFileName ] ), Empty( aParam[ _PAR_cFileName ] ) )
AAdd( l_aRESSRC , PathSepToTarget( hbmk, cParam ) )
AAdd( hbmk[ _HBMK_aRESSRC ], PathSepToTarget( hbmk, cParam ) )
NEXT
ENDIF
@@ -1810,11 +1811,11 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
will need to be converted to coff format with windres (just
like plain .rc files) before feeding them to gcc. */
FOR EACH cParam IN FN_Expand( PathProc( cParam, aParam[ _PAR_cFileName ] ), Empty( aParam[ _PAR_cFileName ] ) )
AAdd( l_aRESSRC , PathSepToTarget( hbmk, cParam ) )
AAdd( hbmk[ _HBMK_aRESSRC ], PathSepToTarget( hbmk, cParam ) )
NEXT
ELSE
FOR EACH cParam IN FN_Expand( PathProc( cParam, aParam[ _PAR_cFileName ] ), Empty( aParam[ _PAR_cFileName ] ) )
AAdd( l_aRESCMP , PathSepToTarget( hbmk, cParam ) )
AAdd( hbmk[ _HBMK_aRESCMP ], PathSepToTarget( hbmk, cParam ) )
NEXT
ENDIF
ENDIF
@@ -1822,7 +1823,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
CASE FN_ExtGet( cParamL ) == ".a"
cParam := PathProc( cParam, aParam[ _PAR_cFileName ] )
AAdd( l_aOBJA , PathSepToTarget( hbmk, cParam ) )
AAdd( l_aOBJA, PathSepToTarget( hbmk, cParam ) )
CASE FN_ExtGet( cParamL ) == ".o" .OR. ;
FN_ExtGet( cParamL ) == ".obj"
@@ -1830,8 +1831,8 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
cParam := ArchCompFilter( hbmk, cParam )
IF ! Empty( cParam )
FOR EACH cParam IN FN_Expand( PathProc( cParam, aParam[ _PAR_cFileName ] ), Empty( aParam[ _PAR_cFileName ] ) )
AAdd( l_aOBJUSER, PathSepToTarget( hbmk, cParam ) )
DEFAULT l_cFIRST TO PathSepToSelf( cParam )
AAdd( hbmk[ _HBMK_aOBJUSER ], PathSepToTarget( hbmk, cParam ) )
DEFAULT hbmk[ _HBMK_cFIRST ] TO PathSepToSelf( cParam )
NEXT
ENDIF
@@ -1841,8 +1842,8 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
cParam := ArchCompFilter( hbmk, cParam )
IF ! Empty( cParam )
FOR EACH cParam IN FN_Expand( PathProc( cParam, aParam[ _PAR_cFileName ] ), Empty( aParam[ _PAR_cFileName ] ) )
AAdd( l_aC , PathSepToTarget( hbmk, cParam ) )
DEFAULT l_cFIRST TO PathSepToSelf( cParam )
AAdd( hbmk[ _HBMK_aC ], PathSepToTarget( hbmk, cParam ) )
DEFAULT hbmk[ _HBMK_cFIRST ] TO PathSepToSelf( cParam )
NEXT
ENDIF
@@ -1863,8 +1864,8 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
cParam := ArchCompFilter( hbmk, cParam )
IF ! Empty( cParam )
cParam := PathProc( cParam, aParam[ _PAR_cFileName ] )
AAdd( l_aPRG , PathSepToTarget( hbmk, cParam ) )
DEFAULT l_cFIRST TO PathSepToSelf( cParam )
AAdd( hbmk[ _HBMK_aPRG ], PathSepToTarget( hbmk, cParam ) )
DEFAULT hbmk[ _HBMK_cFIRST ] TO PathSepToSelf( cParam )
ENDIF
ENDCASE
@@ -1881,7 +1882,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
ENDIF
/* Start doing the make process. */
IF ! lStopAfterInit .AND. ( Len( l_aPRG ) + Len( l_aC ) + Len( l_aOBJUSER ) + Len( l_aOBJA ) ) == 0
IF ! lStopAfterInit .AND. ( Len( hbmk[ _HBMK_aPRG ] ) + Len( hbmk[ _HBMK_aC ] ) + Len( hbmk[ _HBMK_aOBJUSER ] ) + Len( l_aOBJA ) ) == 0
hbmk_OutErr( hbmk, I_( "Error: No source files were specified." ) )
IF hbmk[ _HBMK_lBEEP ]
DoBeep( hbmk, .F. )
@@ -1894,7 +1895,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
/* If -o with full name wasn't specified, let's
make it the first source file specified. */
DEFAULT l_cPROGNAME TO FN_NameGet( l_cFIRST )
DEFAULT l_cPROGNAME TO FN_NameGet( hbmk[ _HBMK_cFIRST ] )
/* Combine output dir with output name. */
IF ! Empty( l_cPROGDIR )
@@ -2108,7 +2109,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
ENDIF
ENDIF
IF lStopAfterCComp
IF ! lCreateLib .AND. ! lCreateDyn .AND. ( Len( l_aPRG ) + Len( l_aC ) ) == 1
IF ! lCreateLib .AND. ! lCreateDyn .AND. ( Len( hbmk[ _HBMK_aPRG ] ) + Len( hbmk[ _HBMK_aC ] ) ) == 1
IF hbmk[ _HBMK_cARCH ] == "darwin"
AAdd( hbmk[ _HBMK_aOPTC ], "-o {OO}" )
ELSE
@@ -2265,7 +2266,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
AAdd( hbmk[ _HBMK_aOPTL ], "-s" )
ENDIF
IF lStopAfterCComp
IF ! lCreateLib .AND. ! lCreateDyn .AND. ( Len( l_aPRG ) + Len( l_aC ) ) == 1
IF ! lCreateLib .AND. ! lCreateDyn .AND. ( Len( hbmk[ _HBMK_aPRG ] ) + Len( hbmk[ _HBMK_aC ] ) ) == 1
AAdd( hbmk[ _HBMK_aOPTC ], "-o{OO}" )
ENDIF
ELSE
@@ -2288,7 +2289,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
l_aLIBSHAREDPOST := { "hbmainstd", "hbmainwin" }
IF hbmk[ _HBMK_cCOMP ] $ "mingw|mingw64|mingwarm" .AND. Len( l_aRESSRC ) > 0
IF hbmk[ _HBMK_cCOMP ] $ "mingw|mingw64|mingwarm" .AND. Len( hbmk[ _HBMK_aRESSRC ] ) > 0
cBin_Res := hbmk[ _HBMK_cCCPREFIX ] + "windres" + cCCEXT_mingw
cResExt := ".reso"
cOpt_Res := "{FR} {IR} -O coff -o {OS}"
@@ -2340,7 +2341,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
ENDIF
/* OS/2 needs a space between -o and file name following it */
IF lStopAfterCComp
IF ! lCreateLib .AND. ! lCreateDyn .AND. ( Len( l_aPRG ) + Len( l_aC ) ) == 1
IF ! lCreateLib .AND. ! lCreateDyn .AND. ( Len( hbmk[ _HBMK_aPRG ] ) + Len( hbmk[ _HBMK_aC ] ) ) == 1
AAdd( hbmk[ _HBMK_aOPTC ], "-o {OO}" )
ENDIF
ELSE
@@ -2390,7 +2391,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
AAdd( hbmk[ _HBMK_aOPTL ], "-s" )
ENDIF
IF lStopAfterCComp
IF ! lCreateLib .AND. ! lCreateDyn .AND. ( Len( l_aPRG ) + Len( l_aC ) ) == 1
IF ! lCreateLib .AND. ! lCreateDyn .AND. ( Len( hbmk[ _HBMK_aPRG ] ) + Len( hbmk[ _HBMK_aC ] ) ) == 1
AAdd( hbmk[ _HBMK_aOPTC ], "-o{OO}" )
ENDIF
ELSE
@@ -2428,7 +2429,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
cOpt_CompC += " {LC}"
ENDIF
IF lStopAfterCComp .AND. ! lCreateLib .AND. ! lCreateDyn
IF ( Len( l_aPRG ) + Len( l_aC ) ) == 1
IF ( Len( hbmk[ _HBMK_aPRG ] ) + Len( hbmk[ _HBMK_aC ] ) ) == 1
AAdd( hbmk[ _HBMK_aOPTC ], "-fo={OO}" )
ELSE
AAdd( hbmk[ _HBMK_aOPTC ], "-fo={OD}" )
@@ -2482,7 +2483,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
cOpt_CompC += " {LC}"
ENDIF
IF lStopAfterCComp .AND. ! lCreateLib .AND. ! lCreateDyn
IF ( Len( l_aPRG ) + Len( l_aC ) ) == 1
IF ( Len( hbmk[ _HBMK_aPRG ] ) + Len( hbmk[ _HBMK_aC ] ) ) == 1
AAdd( hbmk[ _HBMK_aOPTC ], "-fo={OO}" )
ELSE
AAdd( hbmk[ _HBMK_aOPTC ], "-fo={OD}" )
@@ -2523,7 +2524,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
AAdd( hbmk[ _HBMK_aOPTL ], "FILE " + FN_ExtSet( l_cHB_LIB_INSTALL + hb_osPathSeparator() + iif( hbmk[ _HBMK_lGUI ], "hbmainwin", "hbmainstd" ), cLibExt ) )
ENDIF
IF Len( l_aRESSRC ) > 0
IF Len( hbmk[ _HBMK_aRESSRC ] ) > 0
cBin_Res := "wrc"
cResExt := ".res"
cOpt_Res := "-r {FR} -zm {IR} -fo={OS}"
@@ -2560,7 +2561,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
cOpt_CompC += " {LC}"
ENDIF
IF lStopAfterCComp .AND. ! lCreateLib .AND. ! lCreateDyn
IF ( Len( l_aPRG ) + Len( l_aC ) ) == 1
IF ( Len( hbmk[ _HBMK_aPRG ] ) + Len( hbmk[ _HBMK_aC ] ) ) == 1
AAdd( hbmk[ _HBMK_aOPTC ], "-fo={OO}" )
ELSE
AAdd( hbmk[ _HBMK_aOPTC ], "-fo={OD}" )
@@ -2613,7 +2614,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
cOpt_CompC += " {LC}"
ENDIF
IF lStopAfterCComp .AND. ! lCreateLib .AND. ! lCreateDyn
IF ( Len( l_aPRG ) + Len( l_aC ) ) == 1
IF ( Len( hbmk[ _HBMK_aPRG ] ) + Len( hbmk[ _HBMK_aC ] ) ) == 1
AAdd( hbmk[ _HBMK_aOPTC ], "-fo={OO}" )
ELSE
AAdd( hbmk[ _HBMK_aOPTC ], "-fo={OD}" )
@@ -2687,7 +2688,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
ENDIF
ELSE
IF lStopAfterCComp .AND. ! lCreateLib .AND. ! lCreateDyn
IF ( Len( l_aPRG ) + Len( l_aC ) ) == 1
IF ( Len( hbmk[ _HBMK_aPRG ] ) + Len( hbmk[ _HBMK_aC ] ) ) == 1
AAdd( hbmk[ _HBMK_aOPTC ], "-o{OO}" )
ELSE
AAdd( hbmk[ _HBMK_aOPTC ], "-n{OD}" )
@@ -2816,7 +2817,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
ENDIF
ELSE
IF lStopAfterCComp .AND. ! lCreateLib .AND. ! lCreateDyn
IF ( Len( l_aPRG ) + Len( l_aC ) ) == 1
IF ( Len( hbmk[ _HBMK_aPRG ] ) + Len( hbmk[ _HBMK_aC ] ) ) == 1
AAdd( hbmk[ _HBMK_aOPTC ], "-Fo{OO}" )
ELSE
AAdd( hbmk[ _HBMK_aOPTC ], "-Fo{OD}" )
@@ -3056,7 +3057,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
IF hbmk[ _HBMK_lINC ] .AND. ! hbmk[ _HBMK_lREBUILD ]
l_aC_TODO := {}
l_aC_DONE := {}
FOR EACH tmp IN l_aC
FOR EACH tmp IN hbmk[ _HBMK_aC ]
IF hbmk[ _HBMK_lDEBUGINC ]
hbmk_OutStd( hbmk, hb_StrFormat( "debuginc: C %1$s %2$s", tmp, FN_DirExtSet( tmp, cWorkDir, cObjExt ) ) )
ENDIF
@@ -3070,7 +3071,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
ENDIF
NEXT
ELSE
l_aC_TODO := AClone( l_aC )
l_aC_TODO := AClone( hbmk[ _HBMK_aC ] )
l_aC_DONE := {}
ENDIF
@@ -3090,7 +3091,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
IF hbmk[ _HBMK_lINC ] .AND. ! hbmk[ _HBMK_lREBUILD ]
l_aPRG_TODO := {}
FOR EACH tmp IN l_aPRG
FOR EACH tmp IN hbmk[ _HBMK_aPRG ]
IF hbmk[ _HBMK_lDEBUGINC ]
hbmk_OutStd( hbmk, hb_StrFormat( "debuginc: PRG %1$s %2$s",;
FN_ExtSet( tmp, ".prg" ),;
@@ -3104,10 +3105,10 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
ENDIF
NEXT
ELSE
l_aPRG_TODO := l_aPRG
l_aPRG_TODO := hbmk[ _HBMK_aPRG ]
ENDIF
ELSE
l_aPRG_TODO := l_aPRG
l_aPRG_TODO := hbmk[ _HBMK_aPRG ]
ENDIF
/* Harbour compilation */
@@ -3224,7 +3225,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
/* Do entry function detection on platform required and supported */
IF ! hbmk[ _HBMK_lDONTEXEC ] .AND. ! lStopAfterCComp .AND. l_cMAIN == NIL
tmp := iif( Lower( FN_ExtGet( l_cFIRST ) ) == ".prg" .OR. Empty( FN_ExtGet( l_cFIRST ) ), FN_ExtSet( l_cFIRST, ".c" ), l_cFIRST )
tmp := iif( Lower( FN_ExtGet( hbmk[ _HBMK_cFIRST ] ) ) == ".prg" .OR. Empty( FN_ExtGet( hbmk[ _HBMK_cFIRST ] ) ), FN_ExtSet( hbmk[ _HBMK_cFIRST ], ".c" ), hbmk[ _HBMK_cFIRST ] )
IF ! Empty( tmp := getFirstFunc( hbmk, tmp ) )
l_cMAIN := tmp
ENDIF
@@ -3351,14 +3352,14 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
ELSE
hbmk_OutErr( hbmk, I_( "Warning: Stub helper .c program couldn't be created." ) )
IF ! hbmk[ _HBMK_lINC ]
AEval( ListDirExt( l_aPRG, cWorkDir, ".c" ), {|tmp| FErase( tmp ) } )
AEval( ListDirExt( hbmk[ _HBMK_aPRG ], cWorkDir, ".c" ), {|tmp| FErase( tmp ) } )
ENDIF
IF hbmk[ _HBMK_lBEEP ]
DoBeep( hbmk, .F. )
ENDIF
RETURN 5
ENDIF
AAdd( l_aC, l_cCSTUB )
AAdd( hbmk[ _HBMK_aC ], l_cCSTUB )
AAdd( l_aC_TODO, l_cCSTUB )
ENDIF
@@ -3380,7 +3381,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
ELSE
l_aLIBHB := {}
l_aLIBSHARED := {}
l_aPRG := {}
hbmk[ _HBMK_aPRG ] := {}
ENDIF
/* Merge lib lists. */
@@ -3392,12 +3393,12 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
l_aLIB := ArrayJoin( ListCookLib( hbmk, l_aLIBSHARED ), l_aLIB )
ENDIF
/* Dress obj names. */
l_aOBJ := ListDirExt( ArrayJoin( l_aPRG, l_aC ), cWorkDir, cObjExt )
l_aOBJUSER := ListCook( l_aOBJUSER, cObjExt )
l_aOBJ := ListDirExt( ArrayJoin( hbmk[ _HBMK_aPRG ], hbmk[ _HBMK_aC ] ), cWorkDir, cObjExt )
hbmk[ _HBMK_aOBJUSER ] := ListCook( hbmk[ _HBMK_aOBJUSER ], cObjExt )
IF hbmk[ _HBMK_lINC ] .AND. ! hbmk[ _HBMK_lREBUILD ]
l_aRESSRC_TODO := {}
FOR EACH tmp IN l_aRESSRC
FOR EACH tmp IN hbmk[ _HBMK_aRESSRC ]
IF hbmk[ _HBMK_lDEBUGINC ]
hbmk_OutStd( hbmk, hb_StrFormat( "debuginc: RESSRC %1$s %2$s", tmp, FN_DirExtSet( tmp, cWorkDir, cResExt ) ) )
ENDIF
@@ -3409,13 +3410,13 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
ENDIF
NEXT
ELSE
l_aRESSRC_TODO := l_aRESSRC
l_aRESSRC_TODO := hbmk[ _HBMK_aRESSRC ]
ENDIF
IF hbmk[ _HBMK_nHBMODE ] != _HBMODE_RAW_C
IF hbmk[ _HBMK_lREBUILDPO ]
IF ! Empty( hbmk[ _HBMK_cPO ] ) .AND. ! Empty( l_aPRG )
RebuildPO( hbmk, ListDirExt( l_aPRG, cWorkDir, ".pot" ) )
IF ! Empty( hbmk[ _HBMK_cPO ] ) .AND. ! Empty( hbmk[ _HBMK_aPRG ] )
RebuildPO( hbmk, ListDirExt( hbmk[ _HBMK_aPRG ], cWorkDir, ".pot" ) )
ENDIF
ELSE
IF ! Empty( hbmk[ _HBMK_cPO ] ) .AND. Len( l_aPRG_TODO ) > 0
@@ -3526,7 +3527,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
IF hbmk[ _HBMK_lINC ] .AND. ! hbmk[ _HBMK_lREBUILD ]
l_aPRG_TODO := {}
l_aPRG_DONE := {}
FOR EACH tmp IN l_aPRG
FOR EACH tmp IN hbmk[ _HBMK_aPRG ]
IF hbmk[ _HBMK_lDEBUGINC ]
hbmk_OutStd( hbmk, hb_StrFormat( "debuginc: CPRG %1$s %2$s",;
FN_DirExtSet( tmp, cWorkDir, ".c" ),;
@@ -3541,12 +3542,12 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
ENDIF
NEXT
ELSE
l_aPRG_TODO := l_aPRG
l_aPRG_TODO := hbmk[ _HBMK_aPRG ]
l_aPRG_DONE := {}
ENDIF
ENDIF
IF nErrorLevel == 0 .AND. ( Len( l_aPRG_TODO ) + Len( l_aC_TODO ) + iif( Empty( cBin_Link ), Len( l_aOBJUSER ) + Len( l_aOBJA ), 0 ) ) > 0 .AND. ! l_lCLEAN
IF nErrorLevel == 0 .AND. ( Len( l_aPRG_TODO ) + Len( l_aC_TODO ) + iif( Empty( cBin_Link ), Len( hbmk[ _HBMK_aOBJUSER ] ) + Len( l_aOBJA ), 0 ) ) > 0 .AND. ! l_lCLEAN
IF ! Empty( cBin_CompC )
@@ -3563,9 +3564,9 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
GetEnv( "HB_USER_CFLAGS" ) + " " + ArrayToList( hbmk[ _HBMK_aOPTC ] ) )
cOpt_CompC := StrTran( cOpt_CompC, "{FL}" , iif( l_lBLDFLGL, cSelfFlagL + " ", "" ) +;
GetEnv( "HB_USER_LDFLAGS" ) + " " + ArrayToList( hbmk[ _HBMK_aOPTL ] ) )
cOpt_CompC := StrTran( cOpt_CompC, "{LR}" , ArrayToList( ArrayJoin( ListDirExt( l_aRESSRC, cWorkDir, cResExt ), l_aRESCMP ),, nOpt_Esc ) )
cOpt_CompC := StrTran( cOpt_CompC, "{LO}" , ArrayToList( ArrayAJoin( { l_aOBJUSER, ListCook( l_aPRG_DONE, cObjExt ), ListCook( l_aC_DONE, cObjExt ) } ),, nOpt_Esc, cObjPrefix ) )
cOpt_CompC := StrTran( cOpt_CompC, "{LS}" , ArrayToList( ArrayJoin( ListDirExt( l_aRESSRC, "", cResExt ), l_aRESCMP ),, nOpt_Esc, cResPrefix ) )
cOpt_CompC := StrTran( cOpt_CompC, "{LR}" , ArrayToList( ArrayJoin( ListDirExt( hbmk[ _HBMK_aRESSRC ], cWorkDir, cResExt ), hbmk[ _HBMK_aRESCMP ] ),, nOpt_Esc ) )
cOpt_CompC := StrTran( cOpt_CompC, "{LO}" , ArrayToList( ArrayAJoin( { hbmk[ _HBMK_aOBJUSER ], ListCook( l_aPRG_DONE, cObjExt ), ListCook( l_aC_DONE, cObjExt ) } ),, nOpt_Esc, cObjPrefix ) )
cOpt_CompC := StrTran( cOpt_CompC, "{LS}" , ArrayToList( ArrayJoin( ListDirExt( hbmk[ _HBMK_aRESSRC ], "", cResExt ), hbmk[ _HBMK_aRESCMP ] ),, nOpt_Esc, cResPrefix ) )
cOpt_CompC := StrTran( cOpt_CompC, "{LA}" , ArrayToList( l_aOBJA,, nOpt_Esc ) )
cOpt_CompC := StrTran( cOpt_CompC, "{LL}" , ArrayToList( l_aLIB,, nOpt_Esc, cLibPrefix ) )
cOpt_CompC := StrTran( cOpt_CompC, "{OD}" , FN_Escape( PathSepToTarget( hbmk, FN_DirGet( l_cPROGNAME ) ), nOpt_Esc ) )
@@ -3690,7 +3691,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
lTargetUpToDate := .T.
IF lTargetUpToDate
FOR EACH tmp IN ArrayAJoin( { l_aOBJ, l_aOBJUSER, l_aOBJA, l_aRESSRC, l_aRESCMP } )
FOR EACH tmp IN ArrayAJoin( { l_aOBJ, hbmk[ _HBMK_aOBJUSER ], l_aOBJA, hbmk[ _HBMK_aRESSRC ], hbmk[ _HBMK_aRESCMP ] } )
IF hbmk[ _HBMK_lDEBUGINC ]
hbmk_OutStd( hbmk, hb_StrFormat( "debuginc: EXEDEP %1$s", tmp ) )
ENDIF
@@ -3718,7 +3719,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
ENDIF
ENDIF
IF nErrorLevel == 0 .AND. ( Len( l_aOBJ ) + Len( l_aOBJUSER ) + Len( l_aOBJA ) ) > 0 .AND. ! l_lCLEAN
IF nErrorLevel == 0 .AND. ( Len( l_aOBJ ) + Len( hbmk[ _HBMK_aOBJUSER ] ) + Len( l_aOBJA ) ) > 0 .AND. ! l_lCLEAN
IF lTargetUpToDate
hbmk_OutStd( hbmk, hb_StrFormat( I_( "Target up to date: %1$s" ), l_cPROGNAME ) )
@@ -3749,8 +3750,8 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
/* Order is significant */
cOpt_Link := StrTran( cOpt_Link, "{FL}" , iif( l_lBLDFLGL, cSelfFlagL + " ", "" ) +;
GetEnv( "HB_USER_LDFLAGS" ) + " " + ArrayToList( hbmk[ _HBMK_aOPTL ] ) )
cOpt_Link := StrTran( cOpt_Link, "{LO}" , ArrayToList( ArrayJoin( l_aOBJ, l_aOBJUSER ),, nOpt_Esc, cObjPrefix ) )
cOpt_Link := StrTran( cOpt_Link, "{LS}" , ArrayToList( ArrayJoin( ListDirExt( l_aRESSRC, cWorkDir, cResExt ), l_aRESCMP ),, nOpt_Esc, cResPrefix ) )
cOpt_Link := StrTran( cOpt_Link, "{LO}" , ArrayToList( ArrayJoin( l_aOBJ, hbmk[ _HBMK_aOBJUSER ] ),, nOpt_Esc, cObjPrefix ) )
cOpt_Link := StrTran( cOpt_Link, "{LS}" , ArrayToList( ArrayJoin( ListDirExt( hbmk[ _HBMK_aRESSRC ], cWorkDir, cResExt ), hbmk[ _HBMK_aRESCMP ] ),, nOpt_Esc, cResPrefix ) )
cOpt_Link := StrTran( cOpt_Link, "{LA}" , ArrayToList( l_aOBJA,, nOpt_Esc ) )
cOpt_Link := StrTran( cOpt_Link, "{LL}" , ArrayToList( l_aLIB,, nOpt_Esc, cLibPrefix ) )
cOpt_Link := StrTran( cOpt_Link, "{OE}" , FN_Escape( PathSepToTarget( hbmk, l_cPROGNAME ), nOpt_Esc ) )
@@ -3809,7 +3810,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
/* Order is significant */
cOpt_Lib := StrTran( cOpt_Lib, "{FA}" , GetEnv( "HB_USER_AFLAGS" ) + " " + ArrayToList( hbmk[ _HBMK_aOPTA ] ) )
cOpt_Lib := StrTran( cOpt_Lib, "{LO}" , ArrayToList( ArrayJoin( l_aOBJ, l_aOBJUSER ),, nOpt_Esc, cLibObjPrefix ) )
cOpt_Lib := StrTran( cOpt_Lib, "{LO}" , ArrayToList( ArrayJoin( l_aOBJ, hbmk[ _HBMK_aOBJUSER ] ),, nOpt_Esc, cLibObjPrefix ) )
cOpt_Lib := StrTran( cOpt_Lib, "{LL}" , ArrayToList( l_aLIB,, nOpt_Esc, cLibPrefix ) )
cOpt_Lib := StrTran( cOpt_Lib, "{OL}" , FN_Escape( PathSepToTarget( hbmk, l_cPROGNAME ), nOpt_Esc ) )
cOpt_Lib := StrTran( cOpt_Lib, "{DL}" , ArrayToList( hbmk[ _HBMK_aLIBPATH ], cLibPathSep, nOpt_Esc, cLibPathPrefix ) )
@@ -3866,8 +3867,8 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
/* Order is significant */
cOpt_Dyn := StrTran( cOpt_Dyn, "{FD}" , GetEnv( "HB_USER_DFLAGS" ) + " " + ArrayToList( hbmk[ _HBMK_aOPTD ] ) )
cOpt_Dyn := StrTran( cOpt_Dyn, "{LO}" , ArrayToList( ArrayJoin( l_aOBJ, l_aOBJUSER ),, nOpt_Esc, cDynObjPrefix ) )
cOpt_Dyn := StrTran( cOpt_Dyn, "{LS}" , ArrayToList( ArrayJoin( ListDirExt( l_aRESSRC, cWorkDir, cResExt ), l_aRESCMP ),, nOpt_Esc, cResPrefix ) )
cOpt_Dyn := StrTran( cOpt_Dyn, "{LO}" , ArrayToList( ArrayJoin( l_aOBJ, hbmk[ _HBMK_aOBJUSER ] ),, nOpt_Esc, cDynObjPrefix ) )
cOpt_Dyn := StrTran( cOpt_Dyn, "{LS}" , ArrayToList( ArrayJoin( ListDirExt( hbmk[ _HBMK_aRESSRC ], cWorkDir, cResExt ), hbmk[ _HBMK_aRESCMP ] ),, nOpt_Esc, cResPrefix ) )
cOpt_Dyn := StrTran( cOpt_Dyn, "{LL}" , ArrayToList( l_aLIB,, nOpt_Esc, cLibPrefix ) )
cOpt_Dyn := StrTran( cOpt_Dyn, "{OD}" , FN_Escape( PathSepToTarget( hbmk, l_cPROGNAME ), nOpt_Esc ) )
cOpt_Dyn := StrTran( cOpt_Dyn, "{OM}" , FN_Escape( PathSepToTarget( hbmk, FN_ExtSet( l_cPROGNAME, ".map" ) ), nOpt_Esc ) )
@@ -3924,12 +3925,12 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
FErase( FN_DirExtSet( l_cCSTUB, cWorkDir, cObjExt ) )
ENDIF
IF ! hbmk[ _HBMK_lINC ] .OR. l_lCLEAN
AEval( ListDirExt( l_aPRG, cWorkDir, ".c" ), {|tmp| FErase( tmp ) } )
AEval( ListDirExt( hbmk[ _HBMK_aPRG ], cWorkDir, ".c" ), {|tmp| FErase( tmp ) } )
ENDIF
IF ! lStopAfterCComp .OR. lCreateLib .OR. lCreateDyn
IF ! hbmk[ _HBMK_lINC ] .OR. l_lCLEAN
IF ! Empty( cResExt )
AEval( ListDirExt( l_aRESSRC, cWorkDir, cResExt ), {|tmp| FErase( tmp ) } )
AEval( ListDirExt( hbmk[ _HBMK_aRESSRC ], cWorkDir, cResExt ), {|tmp| FErase( tmp ) } )
ENDIF
AEval( l_aOBJ, {|tmp| FErase( tmp ) } )
ENDIF
@@ -5032,11 +5033,41 @@ STATIC FUNCTION HBC_ProcessOne( hbmk, cFileName, nNestingLevel )
EXIT
ENDIF
CASE Lower( Left( cLine, Len( "pos=" ) ) ) == "pos=" ; cLine := SubStr( cLine, Len( "pos=" ) + 1 )
CASE Lower( Left( cLine, Len( "sources=" ) ) ) == "sources=" ; cLine := SubStr( cLine, Len( "sources=" ) + 1 )
FOR EACH cItem IN hb_ATokens( cLine,, .T. )
cItem := PathSepToTarget( hbmk, PathProc( StrStripQuote( cItem ), FN_DirGet( cFileName ) ) )
IF AScan( hbmk[ _HBMK_aPO ], {|tmp| tmp == cItem } ) == 0
AAddNotEmpty( hbmk[ _HBMK_aPO ], cItem )
cItem := PathNormalize( PathSepToSelf( PathProc( MacroProc( hbmk, StrStripQuote( cItem ), cFileName ), FN_DirGet( cFileName ) ) ) )
IF ! Empty( cItem )
DO CASE
CASE FN_ExtGet( cItem ) == ".o" .OR. ;
FN_ExtGet( cItem ) == ".obj"
AAddNew( hbmk[ _HBMK_aOBJUSER ], PathSepToTarget( hbmk, cItem ) )
CASE FN_ExtGet( cItem ) == ".c" .OR. ;
FN_ExtGet( cItem ) == ".cpp" /* .cc, .cxx, .cx */
AAddNew( hbmk[ _HBMK_aC ], PathSepToTarget( hbmk, cItem ) )
CASE FN_ExtGet( cItem ) == ".po" .OR. ;
FN_ExtGet( cItem ) == ".pot"
AAddNew( hbmk[ _HBMK_aPO ], PathSepToTarget( hbmk, cItem ) )
CASE FN_ExtGet( cItem ) == ".rc"
FOR EACH tmp IN FN_Expand( cItem )
AAddNew( hbmk[ _HBMK_aRESSRC ], PathSepToTarget( hbmk, tmp ) )
NEXT
CASE FN_ExtGet( cItem ) == ".res"
IF hbmk[ _HBMK_cCOMP ] $ "mingw|mingw64|mingwarm"
/* For MinGW family add .res files as source input, as they
will need to be converted to coff format with windres (just
like plain .rc files) before feeding them to gcc. */
FOR EACH tmp IN FN_Expand( cItem )
AAddNew( hbmk[ _HBMK_aRESSRC ], PathSepToTarget( hbmk, tmp ) )
NEXT
ELSE
FOR EACH tmp IN FN_Expand( cItem )
AAddNew( hbmk[ _HBMK_aRESCMP ], PathSepToTarget( hbmk, tmp ) )
NEXT
ENDIF
OTHERWISE /* .prg */
AAddNew( hbmk[ _HBMK_aPRG ], PathSepToTarget( hbmk, cItem ) )
ENDCASE
ENDIF
NEXT
@@ -5469,6 +5500,11 @@ STATIC FUNCTION ArchCompFilter( hbmk, cItem )
RETURN cItem
#define hb_CurDrive() CurDrive()
STATIC FUNCTION hb_pwd()
RETURN DirAddPathSep( hb_CurDrive() + hb_osDriveSeparator() + hb_osPathSeparator() + CurDir() )
STATIC FUNCTION MacroProc( hbmk, cString, cFileName, lLateMode )
LOCAL nStart
LOCAL nEnd
@@ -5487,48 +5523,51 @@ STATIC FUNCTION MacroProc( hbmk, cString, cFileName, lLateMode )
cMacro := Upper( SubStr( cString, nStart + 2, nEnd - nStart - 2 ) )
DO CASE
CASE cMacro == "HB_ROOT"
cMacro := PathSepToSelf( DirAddPathSep( hb_DirBase() ) )
CASE cMacro == "HB_DIR"
cMacro := PathSepToSelf( FN_DirGet( cFileName ) )
CASE cMacro == "HB_NAME"
cMacro := PathSepToSelf( FN_NameGet( cFileName ) )
CASE cMacro == "HB_ARCH" .OR. ;
cMacro == "HB_ARCHITECTURE"
cMacro := hbmk[ _HBMK_cARCH ]
CASE cMacro == "HB_COMP" .OR. ;
cMacro == "HB_COMPILER"
cMacro := hbmk[ _HBMK_cCOMP ]
CASE cMacro == "HB_CPU"
cMacro := hbmk_CPU( hbmk )
CASE cMacro == "HB_WORK"
cMacro := _WORKDIR_BASE_
CASE cMacro == "HB_MAJOR"
cMacro := hb_ntos( hb_Version( HB_VERSION_MAJOR ) )
CASE cMacro == "HB_MINOR"
cMacro := hb_ntos( hb_Version( HB_VERSION_MINOR ) )
CASE cMacro == "HB_RELEASE"
cMacro := hb_ntos( hb_Version( HB_VERSION_RELEASE ) )
CASE cMacro == "HB_STATUS"
cMacro := hb_Version( HB_VERSION_STATUS )
CASE cMacro == "HB_REVISION"
cMacro := hb_ntos( hb_Version( HB_VERSION_REVISION ) )
CASE cMacro == "HB_BIN"
cMacro := hbmk[ _HBMK_cHB_BIN_INSTALL ]
CASE cMacro == "HB_LIB"
cMacro := hbmk[ _HBMK_cHB_LIB_INSTALL ]
CASE cMacro == "HB_DYN"
cMacro := hbmk[ _HBMK_cHB_DYN_INSTALL ]
CASE cMacro == "HB_INC"
cMacro := hbmk[ _HBMK_cHB_INC_INSTALL ]
CASE ! Empty( GetEnv( cMacro ) )
cMacro := GetEnv( cMacro )
SWITCH cMacro
CASE "HB_ROOT"
cMacro := PathSepToSelf( DirAddPathSep( hb_DirBase() ) ) ; EXIT
CASE "HB_DIR"
cMacro := PathSepToSelf( FN_DirGet( cFileName ) ) ; EXIT
CASE "HB_NAME"
cMacro := PathSepToSelf( FN_NameGet( cFileName ) ) ; EXIT
CASE "HB_CURDIR"
cMacro := hb_pwd() ; EXIT
CASE "HB_ARCH"
CASE "HB_ARCHITECTURE"
cMacro := hbmk[ _HBMK_cARCH ] ; EXIT
CASE "HB_COMP"
CASE "HB_COMPILER"
cMacro := hbmk[ _HBMK_cCOMP ] ; EXIT
CASE "HB_CPU"
cMacro := hbmk_CPU( hbmk ) ; EXIT
CASE "HB_WORK"
cMacro := _WORKDIR_BASE_ ; EXIT
CASE "HB_MAJOR"
cMacro := hb_ntos( hb_Version( HB_VERSION_MAJOR ) ) ; EXIT
CASE "HB_MINOR"
cMacro := hb_ntos( hb_Version( HB_VERSION_MINOR ) ) ; EXIT
CASE "HB_RELEASE"
cMacro := hb_ntos( hb_Version( HB_VERSION_RELEASE ) ) ; EXIT
CASE "HB_STATUS"
cMacro := hb_Version( HB_VERSION_STATUS ) ; EXIT
CASE "HB_REVISION"
cMacro := hb_ntos( hb_Version( HB_VERSION_REVISION ) ) ; EXIT
CASE "HB_BIN"
cMacro := hbmk[ _HBMK_cHB_BIN_INSTALL ] ; EXIT
CASE "HB_LIB"
cMacro := hbmk[ _HBMK_cHB_LIB_INSTALL ] ; EXIT
CASE "HB_DYN"
cMacro := hbmk[ _HBMK_cHB_DYN_INSTALL ] ; EXIT
CASE "HB_INC"
cMacro := hbmk[ _HBMK_cHB_INC_INSTALL ] ; EXIT
CASE "HB_FIRST"
cMacro := FN_NameGet( hbmk[ _HBMK_cFIRST ] ) ; EXIT
OTHERWISE
/* NOTE: Macro not found, completely ignore it
(for now without warning) [vszakats] */
cMacro := ""
ENDCASE
/* NOTE: If macro not found, try to interpret as
envvar. If it doesn't exist, empty string
will be returned (without warning) [vszakats] */
cMacro := GetEnv( cMacro )
ENDSWITCH
cString := Left( cString, nStart - 1 ) + cMacro + SubStr( cString, nEnd + 1 )
ENDDO
@@ -6585,7 +6624,7 @@ STATIC PROCEDURE ShowHelp( hbmk, lLong )
hb_StrFormat( I_( "%1$s option file in hbmk directory is always processed if it exists. On *nix platforms ~/.harbour, /etc/harbour, <base>/etc/harbour, <base>/etc are checked (in that order) before the hbmk directory. The file format is the same as .hbc." ), _HBMK_CFG_NAME ),;
hb_StrFormat( I_( "%1$s make script in current directory is always processed if it exists." ), _HBMK_AUTOHBM_NAME ),;
I_( ".hbc config files in current dir are automatically processed." ),;
I_( ".hbc options (they should come in separate lines): libs=[<libname[s]>], hbcs=[<.hbc file[s]>], gt=[gtname], prgflags=[Harbour flags], cflags=[C compiler flags], resflags=[resource compiler flags], ldflags=[linker flags], libpaths=[paths], pos=[.po files], incpaths=[paths], inctrypaths=[paths], instpaths=[paths], gui|mt|shared|nulrdd|debug|opt|map|strip|run|inc=[yes|no], compr=[yes|no|def|min|max], head=[off|partial|full], skip=[yes|no], echo=<text>\nLines starting with '#' char are ignored" ),;
I_( ".hbc options (they should come in separate lines): libs=[<libname[s]>], hbcs=[<.hbc file[s]>], gt=[gtname], prgflags=[Harbour flags], cflags=[C compiler flags], resflags=[resource compiler flags], ldflags=[linker flags], libpaths=[paths], sources=[source files], incpaths=[paths], inctrypaths=[paths], instpaths=[paths], gui|mt|shared|nulrdd|debug|opt|map|strip|run|inc=[yes|no], compr=[yes|no|def|min|max], head=[off|partial|full], skip=[yes|no], echo=<text>\nLines starting with '#' char are ignored" ),;
I_( "Platform filters are accepted in each .hbc line and with several options.\nFilter format: {[!][<arch>|<comp>|<keyword>]}. Filters can be combined using '&', '|' operators and grouped by parantheses. Ex.: {win}, {gcc}, {linux|darwin}, {win&!pocc}, {(win|linux)&!watcom}, {unix&mt&gui}, -cflag={win}-DMYDEF, -stop{dos}, -stop{!allwin}, {allpocc|allgcc|allmingw|unix}, {allmsvc}, {x86|x86_64|ia64|arm}, {debug|nodebug|gui|std|mt|st|xhb}" ),;
I_( "Certain .hbc lines (libs=, hbcs=, prgflags=, cflags=, ldflags=, libpaths=, inctrypaths=, instpaths=, echo=) and corresponding command line parameters will accept macros: ${hb_root}, ${hb_dir}, ${hb_name}, ${hb_arch}, ${hb_comp}, ${hb_cpu}, ${hb_bin}, ${hb_lib}, ${hb_dyn}, ${hb_inc}, ${<envvar>}. libpaths= also accepts %{hb_name} which translates to the name of the .hbc file under search." ),;
I_( "Defaults and feature support vary by architecture/compiler." ) }