2009-02-16 20:54 UTC+0100 Viktor Szakats (harbour.01 syenar hu)

* utils/hbmk/hbmk.prg
    + Added support for '#' comment lines in .hbm files.
    + Added support to automatically convert slashes/backslashes
      in passed libnames and prg options.
    * Cleanup on computing Harbour location. I didn't test all
      situations here. This should fix previous versions not
      honoring explicit HB_*_INSTALL envvars.
    + Added support for POCC (untested).

   + contrib/hbct/tests/hbct.hbp
   + contrib/examples/terminal/terminal.hbp
   + contrib/examples/terminal/trm_appn.hbm
     + Added new hbmk files to show what it takes to replace
       the current system, but this time fully supporting
       all Harbour platforms.
       To use these just run hbmk, either from the path, or
       by directly pointing to it:
       ..\..\..\bin\hbmk.exe <test.prg>
       ..\..\..\bin\hbmk.exe trm_appn.hbm
       .exe can be dropped as soon as we delete out hbmk.bat file.
This commit is contained in:
Viktor Szakats
2009-02-15 20:14:40 +00:00
parent 3be140b2ec
commit 50d7dbd784
5 changed files with 124 additions and 27 deletions

View File

@@ -8,6 +8,28 @@
2009-12-31 13:59 UTC+0100 Foo Bar (foo.bar foobar.org)
*/
2009-02-16 20:54 UTC+0100 Viktor Szakats (harbour.01 syenar hu)
* utils/hbmk/hbmk.prg
+ Added support for '#' comment lines in .hbm files.
+ Added support to automatically convert slashes/backslashes
in passed libnames and prg options.
* Cleanup on computing Harbour location. I didn't test all
situations here. This should fix previous versions not
honoring explicit HB_*_INSTALL envvars.
+ Added support for POCC (untested).
+ contrib/hbct/tests/hbct.hbp
+ contrib/examples/terminal/terminal.hbp
+ contrib/examples/terminal/trm_appn.hbm
+ Added new hbmk files to show what it takes to replace
the current system, but this time fully supporting
all Harbour platforms.
To use these just run hbmk, either from the path, or
by directly pointing to it:
..\..\..\bin\hbmk.exe <test.prg>
..\..\..\bin\hbmk.exe trm_appn.hbm
.exe can be dropped as soon as we delete out hbmk.bat file.
2009-02-16 18:37 UTC+0100 Viktor Szakats (harbour.01 syenar hu)
* utils/hbmk/hbmk.prg
+ Added POCC and DMC autodetection.
@@ -141,7 +163,7 @@
- Filtering foreign system libs passed on the command
line for platforms not needing them. The goal is to
be able to use as simple and _portable_ hbmk command
lines as possible.
lines as possible. [DONE]
- Support for POCC, DM.
; TODO:
- Switch to portable command lines in hbmk.bat files.

View File

@@ -0,0 +1,7 @@
#
# $Id$
#
libs=gtwvg hbwin xhb comdlg32 comctl32 shell32 ole32 oleaut32
mt=yes
gui=yes

View File

@@ -0,0 +1,5 @@
#
# $Id$
#
trm_appn.prg terminal.prg

View File

@@ -0,0 +1,5 @@
#
# $Id$
#
libs=hbct

View File

@@ -280,6 +280,10 @@ FUNCTION Main( ... )
/* Autodetect Harbour environment */
s_cHB_BIN_INSTALL := DirAdaptPathSep( GetEnv( "HB_BIN_INSTALL" ) )
s_cHB_LIB_INSTALL := DirAdaptPathSep( GetEnv( "HB_LIB_INSTALL" ) )
s_cHB_INC_INSTALL := DirAdaptPathSep( GetEnv( "HB_INC_INSTALL" ) )
IF Empty( GetEnv( "HB_INSTALL_PREFIX" ) )
DO CASE
@@ -294,13 +298,13 @@ FUNCTION Main( ... )
CASE hb_ProgName() == "/usr/local/bin/hbmk"
IF Empty( GetEnv( "HB_BIN_INSTALL" ) )
IF Empty( s_cHB_BIN_INSTALL )
s_cHB_BIN_INSTALL := "/usr/local/bin"
ENDIF
IF Empty( GetEnv( "HB_LIB_INSTALL" ) )
IF Empty( s_cHB_LIB_INSTALL )
s_cHB_LIB_INSTALL := "/usr/local/include/harbour"
ENDIF
IF Empty( GetEnv( "HB_INC_INSTALL" ) )
IF Empty( s_cHB_INC_INSTALL )
s_cHB_INC_INSTALL := "/usr/local/lib/harbour"
ENDIF
@@ -315,24 +319,34 @@ FUNCTION Main( ... )
s_cHB_INSTALL_PREFIX := DirAddPathSep( hb_DirBase() )
CASE hb_FileExists( DirAddPathSep( hb_DirBase() ) + ".." + hb_osPathSeparator() + ".." + hb_osPathSeparator() + "bin" + hb_osPathSeparator() + cBin_CompPRG )
s_cHB_INSTALL_PREFIX := DirAddPathSep( hb_DirBase() ) + ".." + hb_osPathSeparator() + ".."
CASE hb_FileExists( DirAddPathSep( hb_DirBase() ) + ".." + hb_osPathSeparator() + ".." + hb_osPathSeparator() + ".." + hb_osPathSeparator() + "bin" + hb_osPathSeparator() + cBin_CompPRG )
s_cHB_INSTALL_PREFIX := DirAddPathSep( hb_DirBase() ) + ".." + hb_osPathSeparator() + ".." + hb_osPathSeparator() + ".."
OTHERWISE
OutErr( "hbmk: Error: HB_INSTALL_PREFIX not set, failed to autodetect." + hb_osNewLine() )
PauseForKey()
RETURN 3
ENDCASE
ELSE
s_cHB_INSTALL_PREFIX := GetEnv( "HB_INSTALL_PREFIX" )
s_cHB_INSTALL_PREFIX := DirAdaptPathSep( GetEnv( "HB_INSTALL_PREFIX" ) )
ENDIF
IF Empty( GetEnv( "HB_BIN_INSTALL" ) )
IF Empty( s_cHB_INSTALL_PREFIX ) .AND. ;
( Empty( s_cHB_BIN_INSTALL ) .OR. Empty( s_cHB_LIB_INSTALL ) .OR. Empty( s_cHB_INC_INSTALL ) )
OutErr( "hbmk: Error: Harbour locations couldn't be determined." + hb_osNewLine() )
PauseForKey()
RETURN 3
ENDIF
IF Empty( s_cHB_BIN_INSTALL )
s_cHB_BIN_INSTALL := DirAddPathSep( s_cHB_INSTALL_PREFIX ) + "bin"
ENDIF
IF Empty( GetEnv( "HB_LIB_INSTALL" ) )
IF Empty( s_cHB_LIB_INSTALL )
s_cHB_LIB_INSTALL := DirAddPathSep( s_cHB_INSTALL_PREFIX ) + "lib"
ENDIF
IF Empty( GetEnv( "HB_INC_INSTALL" ) )
IF Empty( s_cHB_INC_INSTALL )
s_cHB_INC_INSTALL := DirAddPathSep( s_cHB_INSTALL_PREFIX ) + "include"
ENDIF
OutStd( "hbmk: Using Harbour: " + s_cHB_BIN_INSTALL + " " + s_cHB_INC_INSTALL + " " + s_cHB_LIB_INSTALL + hb_osNewLine() )
/* Process environment */
IF Lower( GetEnv( "HB_GUI" ) ) == "yes" ; s_lGUI := .T. ; ENDIF
@@ -424,17 +438,17 @@ FUNCTION Main( ... )
CASE Lower( cParam ) == "-trace-" ; s_lTRACE := .F.
CASE Lower( cParam ) == "-notrace" ; s_lTRACE := .F.
CASE Lower( Left( cParam, 3 ) ) == "-gt" ; DEFAULT s_cGT TO SubStr( cParam, 2 )
CASE Left( cParam, 2 ) == "-o" ; s_cPROGNAME := SubStr( cParam, 3 )
CASE Left( cParam, 2 ) == "-o" ; s_cPROGNAME := DirAdaptPathSep( SubStr( cParam, 3 ) )
CASE Left( cParam, 2 ) == "-l" .AND. ;
Len( cParam ) > 2 ; AAddNotEmpty( s_aLIBUSER, ArchCompFilter( SubStr( cParam, 3 ) ) )
CASE Left( cParam, 1 ) == "-" ; AAdd( s_aOPTPRG , cParam )
CASE Lower( ExtGet( cParam ) ) == ".prg" ; AAdd( s_aPRG , cParam ) ; DEFAULT s_cPROGNAME TO cParam
CASE Lower( ExtGet( cParam ) ) == ".rc" ; AAdd( s_aRESSRC , cParam )
CASE Lower( ExtGet( cParam ) ) == ".res" ; AAdd( s_aRESCMP , cParam )
CASE Lower( ExtGet( cParam ) ) $ ".o|.obj" ; AAdd( s_aOBJUSER, cParam )
CASE Lower( ExtGet( cParam ) ) $ ".c|.cpp" ; AAdd( s_aC , cParam ) ; DEFAULT s_cPROGNAME TO cParam
CASE Lower( ExtGet( cParam ) ) $ ".a|.lib" ; AAddNotEmpty( s_aLIBUSER, ArchCompFilter( cParam ) )
OTHERWISE ; AAdd( s_aPRG , cParam ) ; DEFAULT s_cPROGNAME TO cParam
Len( cParam ) > 2 ; AAddNotEmpty( s_aLIBUSER, DirAdaptPathSep( ArchCompFilter( SubStr( cParam, 3 ) ) ) )
CASE Left( cParam, 1 ) == "-" ; AAdd( s_aOPTPRG , DirAdaptPathSep( cParam ) )
CASE Lower( ExtGet( cParam ) ) == ".prg" ; AAdd( s_aPRG , DirAdaptPathSep( cParam ) ) ; DEFAULT s_cPROGNAME TO DirAdaptPathSep( cParam )
CASE Lower( ExtGet( cParam ) ) == ".rc" ; AAdd( s_aRESSRC , DirAdaptPathSep( cParam ) )
CASE Lower( ExtGet( cParam ) ) == ".res" ; AAdd( s_aRESCMP , DirAdaptPathSep( cParam ) )
CASE Lower( ExtGet( cParam ) ) $ ".o|.obj" ; AAdd( s_aOBJUSER, DirAdaptPathSep( cParam ) )
CASE Lower( ExtGet( cParam ) ) $ ".c|.cpp" ; AAdd( s_aC , DirAdaptPathSep( cParam ) ) ; DEFAULT s_cPROGNAME TO DirAdaptPathSep( cParam )
CASE Lower( ExtGet( cParam ) ) $ ".a|.lib" ; AAddNotEmpty( s_aLIBUSER, DirAdaptPathSep( ArchCompFilter( cParam ) ) )
OTHERWISE ; AAdd( s_aPRG , DirAdaptPathSep( cParam ) ) ; DEFAULT s_cPROGNAME TO DirAdaptPathSep( cParam )
ENDCASE
NEXT
@@ -699,7 +713,7 @@ FUNCTION Main( ... )
cObjExt := ".obj"
cBin_CompC := "cl"
/* odbc32 ole32 oleaut32 comdlg32 comctl32 shell32 winspool user32 wsock32 advapi32 gdi32 */
/* kernel32 user32 gdi32 winspool comctl32 comdlg32 advapi32 shell32 ole32 oleaut32 uuid odbc32 odbccp32 mpr winmm wsock32 schannel */
cOpt_CompC := "-nologo -W3 {OPTC} -I{I} {C} -Fe{E} /link /libpath:{A} {OPTL} {L}"
IF s_lMAP
@@ -719,15 +733,49 @@ FUNCTION Main( ... )
cObjExt := ".obj"
cBin_CompC := "icc"
cOpt_CompC := "/Gs+ /W2 /Se /Sd+ /Ti+ /C- /Tp {OPTC} -I{I} {C}"
IF s_lDEBUG
AAdd( s_aOPTC, "-MTd -Zi" )
ENDIF
IF s_lGUI
AAdd( s_aOPTL, "/subsystem:windows" )
ELSE
AAdd( s_aOPTL, "/subsystem:console" )
ENDIF
CASE t_cARCH == "win" .AND. t_cCOMP == "pocc"
IF s_lGUI
AAdd( s_aOPTL, "/subsystem:windows" )
ELSE
AAdd( s_aOPTL, "/subsystem:console" )
ENDIF
cLibPrefix := NIL
cLibExt := ".lib"
cObjExt := ".obj"
cBin_CompC := "pocc"
cOpt_CompC := "/Ze /Go /Ot /Tx86-coff {OPTC} /I{I} {C}"
IF s_lMT
AAdd( s_aOPTC, "/MT" )
ENDIF
cBin_Link := "polink"
cOpt_Link := "{O} /libpath:{A} {OPTL} {L}"
IF s_lSHARED
AAdd( s_aOPTL, "/libpath:{B}" )
ENDIF
IF s_lMAP
AAdd( s_aOPTL, "/map" )
ENDIF
IF s_lDEBUG
AAdd( s_aOPTL, "/debug" )
ENDIF
s_aLIBSYS := ArrayJoin( s_aLIBSYS, { "user32", "wsock32", "advapi32", "gdi32" } )
/* TODO */
CASE t_cARCH == "win" .AND. t_cCOMP == "pocc64"
CASE t_cARCH == "win" .AND. t_cCOMP == "poccce"
CASE t_cARCH == "win" .AND. t_cCOMP == "dm"
CASE t_cARCH == "win" .AND. t_cCOMP == "icc"
CASE t_cARCH == "win" .AND. t_cCOMP == "mingwce"
CASE t_cARCH == "win" .AND. t_cCOMP == "msvcce"
CASE t_cARCH == "win" .AND. t_cCOMP == "pocc"
CASE t_cARCH == "win" .AND. t_cCOMP == "pocc64"
CASE t_cARCH == "win" .AND. t_cCOMP == "poccce"
CASE t_cARCH == "win" .AND. t_cCOMP == "rsxnt"
CASE t_cARCH == "win" .AND. t_cCOMP == "xcc"
ENDCASE
@@ -936,6 +984,14 @@ STATIC FUNCTION AAddNotEmpty( aArray, xItem )
RETURN aArray
STATIC FUNCTION DirAdaptPathSep( cFileName )
IF t_cARCH $ "win|dos|os2" .AND. !( t_cCOMP == "mingw" )
RETURN StrTran( cFileName, "/", "\" )
ENDIF
RETURN StrTran( cFileName, "\", "/" )
STATIC FUNCTION ListDelExt( array )
LOCAL tmp
@@ -1093,14 +1149,14 @@ STATIC PROCEDURE HBP_ProcessOne( cFile,;
CASE Lower( Left( cLine, Len( "libs=" ) ) ) == "libs=" ; cLine := SubStr( cLine, Len( "libs=" ) + 1 )
FOR EACH cItem IN hb_ATokens( cLine, " " )
IF AScan( aLIBS, {| tmp | tmp == cItem } ) == 0
AAdd( aLIBS, cItem )
AAdd( aLIBS, DirAdaptPathSep( cItem ) )
ENDIF
NEXT
CASE Lower( Left( cLine, Len( "prgflags=" ) ) ) == "prgflags=" ; cLine := SubStr( cLine, Len( "prgflags=" ) + 1 )
FOR EACH cItem IN hb_ATokens( cLine, " " )
IF AScan( aOPTPRG, {| tmp | tmp == cItem } ) == 0
AAdd( aOPTPRG, cItem )
AAdd( aOPTPRG, DirAdaptPathSep( cItem ) )
ENDIF
NEXT
@@ -1187,9 +1243,11 @@ STATIC PROCEDURE HBM_Load( aParams, cFileName )
ENDIF
FOR EACH cLine IN hb_ATokens( cFile, _EOL )
FOR EACH cOption IN hb_ATokens( cLine, " " )
AAddNotEmpty( aParams, cOption )
NEXT
IF !( Left( cLine, 1 ) == "#" )
FOR EACH cOption IN hb_ATokens( cLine, " " )
AAddNotEmpty( aParams, cOption )
NEXT
ENDIF
NEXT
RETURN