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." ) }