From 15ba3068e376aa341e4fe14697f3be07eb32145d Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Sun, 15 Feb 2009 07:58:03 +0000 Subject: [PATCH] 2009-02-15 08:56 UTC+0100 Viktor Szakats (harbour.01 syenar hu) * utils/hbmk/hbmk.prg + Added -bldflags option which tells hbmk to also apply user build flags (HB_USER_*FLAGS) used when building Harbour. * Minor internal cleanups. ! Typo in help screen. --- harbour/ChangeLog | 8 +++++++ harbour/utils/hbmk/hbmk.prg | 48 ++++++++++++++++++++++++------------- 2 files changed, 40 insertions(+), 16 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index ddfe946367..0d5765c9c8 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,14 @@ 2009-12-31 13:59 UTC+0100 Foo Bar (foo.bar foobar.org) */ +2009-02-15 08:56 UTC+0100 Viktor Szakats (harbour.01 syenar hu) + * utils/hbmk/hbmk.prg + + Added -bldflags option which tells hbmk to also + apply user build flags (HB_USER_*FLAGS) used when + building Harbour. + * Minor internal cleanups. + ! Typo in help screen. + 2009-02-15 02:30 UTC+0100 Viktor Szakats (harbour.01 syenar hu) * utils/hbmk/hbmk.prg ! Fix to previous commit. diff --git a/harbour/utils/hbmk/hbmk.prg b/harbour/utils/hbmk/hbmk.prg index d7200c9b2d..f335b828b7 100644 --- a/harbour/utils/hbmk/hbmk.prg +++ b/harbour/utils/hbmk/hbmk.prg @@ -54,6 +54,7 @@ #include "directry.ch" #include "fileio.ch" #include "hbgtinfo.ch" +#include "hbver.ch" /* TODO: Add support for more hbmk script features. */ @@ -133,6 +134,7 @@ FUNCTION Main( ... ) LOCAL s_lNULRDD := .F. LOCAL s_lSTRIP := .F. LOCAL s_lTRACE := .F. + LOCAL s_lBLDFLG := .F. LOCAL aCOMPDET LOCAL aCOMPSUP @@ -156,6 +158,8 @@ FUNCTION Main( ... ) LOCAL aParams LOCAL cParam + LOCAL cDL_Version := hb_ntos( hb_Version( HB_VERSION_MAJOR ) ) + hb_ntos( hb_Version( HB_VERSION_MINOR ) ) + IF PCount() == 0 ShowHeader() ShowHelp() @@ -382,6 +386,7 @@ FUNCTION Main( ... ) CASE Lower( cParam ) == "-st" ; s_lMT := .F. CASE Lower( cParam ) == "-shared" ; s_lSHARED := .T. CASE Lower( cParam ) == "-static" ; s_lSHARED := .F. + CASE Lower( cParam ) == "-bldflags" ; s_lBLDFLG := .T. CASE Lower( cParam ) == "-debug" ; s_lDEBUG := .T. CASE Lower( cParam ) == "-nodebug" ; s_lDEBUG := .F. CASE Lower( cParam ) == "-nulrdd" ; s_lNULRDD := .T. @@ -427,6 +432,12 @@ FUNCTION Main( ... ) ListDelExt( s_aLIBUSER ) ListDelExt( s_aOBJUSER ) + /* Strip extension from output name. */ + s_cPROGNAME := DirNameGet( s_cPROGNAME ) + IF s_cARCH $ "os2|win|dos" + s_cPROGNAME := ExtSet( s_cPROGNAME, ".exe" ) + ENDIF + /* TOFIX: s_aLIBSHARED to be fixed for some *IX platforms. */ DO CASE CASE s_cARCH $ "bsd|linux|sunos" @@ -443,8 +454,6 @@ FUNCTION Main( ... ) /* Harbour compilation */ - s_cPROGNAME := DirNameGet( s_cPROGNAME ) - IF Len( s_aPRG ) > 0 cCommand := DirAddPathSep( s_cHB_BIN_INSTALL ) +; @@ -452,9 +461,12 @@ FUNCTION Main( ... ) " " + ArrayToList( s_aPRG ) +; " -n -q0" +; " -i" + s_cHB_INC_INSTALL +; + iif( s_lBLDFLG, " " + hb_Version(HB_VERSION_FLAG_PRG), "" ) +; iif( ! Empty( GetEnv( "HB_USER_PRGFLAGS" ) ), " " + GetEnv( "HB_USER_PRGFLAGS" ), "" ) +; iif( ! Empty( s_aOPTP ), " " + ArrayToList( s_aOPTP ), "" ) + cCommand := AllTrim( cCommand ) + IF s_lTRACE OutErr( "hbmk: Harbour compiler command: '" + cCommand + "'" + hb_osNewLine() ) ENDIF @@ -531,7 +543,7 @@ FUNCTION Main( ... ) cLibExt := NIL cObjExt := ".o" cBin_CompC := "gcc" - cOpt_CompC := "{C} -O3 -mno-cygwin -o{E}.exe {OPTC} -I{I} -L{A}" + cOpt_CompC := "{C} -O3 -mno-cygwin -o{E} {OPTC} -I{I} -L{A}" IF s_lSHARED cOpt_CompC += " -L{B}" ENDIF @@ -547,7 +559,7 @@ FUNCTION Main( ... ) cLibExt := NIL cObjExt := ".o" cBin_CompC := "gcc" - cOpt_CompC := "{C} -O3 -o{E}.exe {OPTC} -I{I} -L{A} {L}{SCRIPT}" + cOpt_CompC := "{C} -O3 -o{E} {OPTC} -I{I} -L{A} {L}{SCRIPT}" s_aLIBSYS := ArrayJoin( s_aLIBSYS, { "m" } ) aLIB_BASE2 := ArrayAJoin( { aLIB_BASE2, { "hbcommon", "hbrtl" }, s_aLIBVM } ) IF s_lSTRIP @@ -560,7 +572,7 @@ FUNCTION Main( ... ) cLibExt := NIL cObjExt := ".o" cBin_CompC := "gcc" - cOpt_CompC := "{C} -O3 -Zrsx32 -o{E}.exe {OPTC} -I{I} -L{A} {L}" + cOpt_CompC := "{C} -O3 -Zrsx32 -o{E} {OPTC} -I{I} -L{A} {L}" aLIB_BASE2 := ArrayAJoin( { aLIB_BASE2, { "hbcommon", "hbrtl" }, s_aLIBVM } ) IF s_lSTRIP AAdd( s_aOPTC, "-s" ) @@ -574,7 +586,7 @@ FUNCTION Main( ... ) cBin_CompC := "wpp386" cOpt_CompC := "-j -w3 -5s -5r -fp5 -oxehtz -zq -zt0 -bt=DOS {OPTC} {C}" cBin_Link := "wlink" - cOpt_Link := "OP osn=DOS OP stack=65536 OP CASEEXACT OP stub=cwstub.exe {OPTL} NAME {E}.exe {L}" + cOpt_Link := "OP osn=DOS OP stack=65536 OP CASEEXACT OP stub=cwstub.exe {OPTL} NAME {E} {L}" CASE s_cARCH == "win" .AND. s_cCOMP == "owatcom" cLibPrefix := "LIB " @@ -583,7 +595,7 @@ FUNCTION Main( ... ) cBin_CompC := "wpp386" cOpt_CompC := "-j -w3 -5s -5r -fp5 -oxehtz -zq -zt0 -mf -bt=NT {OPTC} {C}" cBin_Link := "wlink" - cOpt_Link := "OP osn=NT OP stack=65536 OP CASEEXACT {OPTL} NAME {E}.exe {L}" + cOpt_Link := "OP osn=NT OP stack=65536 OP CASEEXACT {OPTL} NAME {E} {L}" s_aLIBSYS := ArrayJoin( s_aLIBSYS, { "kernel32", "user32", "wsock32" } ) CASE s_cARCH == "os2" .AND. s_cCOMP == "owatcom" @@ -593,7 +605,7 @@ FUNCTION Main( ... ) cBin_CompC := "wpp386" cOpt_CompC := "-j -w3 -5s -5r -fp5 -oxehtz -zq -zt0 -mf -bt=OS2 {OPTC} {C}" cBin_Link := "wlink" - cOpt_Link := "OP stack=65536 OP CASEEXACT {OPTL} NAME {E}.exe {L}" + cOpt_Link := "OP stack=65536 OP CASEEXACT {OPTL} NAME {E} {L}" CASE s_cARCH == "linux" .AND. s_cCOMP == "owatcom" cLibPrefix := "LIB " @@ -621,13 +633,13 @@ FUNCTION Main( ... ) cLibExt := ".lib" cObjExt := ".obj" cBin_CompC := "bcc32" - cOpt_CompC := "-q -tWM -O2 -OS -Ov -Oi -Oc -d {OPTC} -e{E}.exe -I{I} -L{A} {C} {L}" + cOpt_CompC := "-q -tWM -O2 -OS -Ov -Oi -Oc -d {OPTC} -e{E} -I{I} -L{A} {C} {L}" IF s_lSHARED cOpt_CompC += " -L{B}" ENDIF /* TOFIX: The two build systems should generate the same .dll name, otherwise we can only be compatible with one of them. non-GNU is the common choice here. */ - s_aLIBSHARED := { iif( s_lMT, "harbourmt-11-b32", "harbour-11-b32" ), "hbmainstd", "hbmainwin", "hbcommon" } + s_aLIBSHARED := { iif( s_lMT, "harbourmt-" + cDL_Version + "-b32", "harbour-" + cDL_Version + "-b32" ), "hbmainstd", "hbmainwin", "hbcommon" } CASE s_cARCH == "win" .AND. s_cCOMP == "msvc" IF s_lDEBUG @@ -645,14 +657,14 @@ FUNCTION Main( ... ) /* odbc32 ole32 oleaut32 comdlg32 comctl32 shell32 winspool user32 wsock32 advapi32 gdi32 */ - cOpt_CompC := "-nologo -W3 {OPTC} -I{I} {C} -Fe{E}.exe /link /libpath:{A} {OPTL} {L}" + cOpt_CompC := "-nologo -W3 {OPTC} -I{I} {C} -Fe{E} /link /libpath:{A} {OPTL} {L}" IF s_lSHARED AAdd( s_aOPTL, "/libpath:{B}" ) ENDIF s_aLIBSYS := ArrayJoin( s_aLIBSYS, { "user32", "wsock32", "advapi32", "gdi32" } ) /* TOFIX: The two build systems should generate the same .dll name, otherwise we can only be compatible with one of them. non-GNU is the common choice here. */ - s_aLIBSHARED := { iif( s_lMT, "harbourmt-11-vc", "harbour-11-vc" ), "hbmainstd", "hbmainwin", "hbcommon" } + s_aLIBSHARED := { iif( s_lMT, "harbourmt-" + cDL_Version + "-vc", "harbour-" + cDL_Version + "-vc" ), "hbmainstd", "hbmainwin", "hbcommon" } CASE s_cARCH == "os2" .AND. s_cCOMP == "icc" cLibPrefix := "{A}\" @@ -701,8 +713,10 @@ FUNCTION Main( ... ) cOpt_CompC := StrTran( cOpt_CompC, "{O}" , ArrayToList( s_aOBJ ) ) cOpt_CompC := StrTran( cOpt_CompC, "{OUSR}", ArrayToList( s_aOBJUSER ) ) cOpt_CompC := StrTran( cOpt_CompC, "{L}" , ArrayToList( s_aLIB ) ) - cOpt_CompC := StrTran( cOpt_CompC, "{OPTC}", GetEnv( "HB_USER_CFLAGS" ) + " " + ArrayToList( s_aOPTC ) ) - cOpt_CompC := StrTran( cOpt_CompC, "{OPTL}", GetEnv( "HB_USER_LDFLAGS" ) + " " + ArrayToList( s_aOPTL ) ) + cOpt_CompC := StrTran( cOpt_CompC, "{OPTC}", iif( s_lBLDFLG, hb_Version(HB_VERSION_FLAG_C) + " ", "" ) +; + GetEnv( "HB_USER_CFLAGS" ) + " " + ArrayToList( s_aOPTC ) ) + cOpt_CompC := StrTran( cOpt_CompC, "{OPTL}", iif( s_lBLDFLG, hb_Version(HB_VERSION_FLAG_LINKER) + " ", "" ) +; + GetEnv( "HB_USER_LDFLAGS" ) + " " + ArrayToList( s_aOPTL ) ) cOpt_CompC := StrTran( cOpt_CompC, "{E}" , s_cPROGNAME ) cOpt_CompC := StrTran( cOpt_CompC, "{B}" , s_cHB_BIN_INSTALL ) cOpt_CompC := StrTran( cOpt_CompC, "{I}" , s_cHB_INC_INSTALL ) @@ -746,7 +760,8 @@ FUNCTION Main( ... ) cOpt_Link := StrTran( cOpt_Link, "{O}" , ArrayToList( ArrayJoin( s_aOBJ, s_aOBJUSER ) ) ) cOpt_Link := StrTran( cOpt_Link, "{L}" , ArrayToList( s_aLIB ) ) - cOpt_Link := StrTran( cOpt_Link, "{OPTL}", GetEnv( "HB_USER_LDFLAGS" ) + " " + ArrayToList( s_aOPTL ) ) + cOpt_Link := StrTran( cOpt_Link, "{OPTL}", iif( s_lBLDFLG, hb_Version(HB_VERSION_FLAG_LINKER) + " ", "" ) +; + GetEnv( "HB_USER_LDFLAGS" ) + " " + ArrayToList( s_aOPTL ) ) cOpt_Link := StrTran( cOpt_Link, "{E}" , s_cPROGNAME ) cOpt_Link := StrTran( cOpt_Link, "{B}" , s_cHB_BIN_INSTALL ) cOpt_Link := StrTran( cOpt_Link, "{A}" , s_cHB_LIB_INSTALL ) @@ -1125,6 +1140,7 @@ STATIC PROCEDURE ShowHelp() " link with more GTs. The first one will be" ,; " the default at runtime" ,; " -nulrdd link with nulrdd" ,; + " -bldflags inherit .prg/.c/linker flags from Harbour build" ,; " -debug|-nodebug add/exclude debug info" ,; " -strip|-nostrip strip (no strip) binaries" ,; " -trace show commands executed" ,; @@ -1141,7 +1157,7 @@ STATIC PROCEDURE ShowHelp() " debug=[yes|no], nulrdd=[yes|no], strip=[yes|no]" ,; " - Defaults and feature support vary by architecture/compiler." ,; "" ,; - " HB_COMPILER values supported for each HB_ARCHITECURE:" ,; + " HB_COMPILER values supported for each HB_ARCHITECTURE:" ,; "" ,; " bsd, darwin, hbupx, sunos: gcc",; " linux : gcc, owatcom" ,;