From a9197e72233988cc41e9ec92c455ef0eb478d90d Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Sat, 27 Jun 2009 07:48:26 +0000 Subject: [PATCH] 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. --- harbour/ChangeLog | 23 +++ harbour/include/hbapifs.h | 16 +- harbour/source/rtl/filebuf.c | 4 +- harbour/source/rtl/filesys.c | 16 +- harbour/utils/hbmk2/hbmk2.prg | 307 +++++++++++++++++++--------------- 5 files changed, 214 insertions(+), 152 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 0fcee230f9..b17db45a71 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -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 diff --git a/harbour/include/hbapifs.h b/harbour/include/hbapifs.h index c16d6f390f..b31af71eda 100644 --- a/harbour/include/hbapifs.h +++ b/harbour/include/hbapifs.h @@ -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 ); diff --git a/harbour/source/rtl/filebuf.c b/harbour/source/rtl/filebuf.c index fe1178c674..3d6b0ce7b7 100644 --- a/harbour/source/rtl/filebuf.c +++ b/harbour/source/rtl/filebuf.c @@ -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 ); diff --git a/harbour/source/rtl/filesys.c b/harbour/source/rtl/filesys.c index e56e7cdd61..1082c4e01b 100644 --- a/harbour/source/rtl/filesys.c +++ b/harbour/source/rtl/filesys.c @@ -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; diff --git a/harbour/utils/hbmk2/hbmk2.prg b/harbour/utils/hbmk2/hbmk2.prg index b7f48b9b8e..e136e0dc88 100644 --- a/harbour/utils/hbmk2/hbmk2.prg +++ b/harbour/utils/hbmk2/hbmk2.prg @@ -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, /etc/harbour, /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=[], 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=\nLines starting with '#' char are ignored" ),; + I_( ".hbc options (they should come in separate lines): libs=[], 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=\nLines starting with '#' char are ignored" ),; I_( "Platform filters are accepted in each .hbc line and with several options.\nFilter format: {[!][||]}. 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}, ${}. 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." ) }