diff --git a/harbour/ChangeLog b/harbour/ChangeLog index daf0368d3d..18a5b42b06 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,30 @@ past entries belonging to author(s): Viktor Szakats. */ +2009-08-10 21:56 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) + * utils/hbmk2/hbmk2.prg + + Reorganized core Harbour lib handling. The goal is to + allow linkers to resolve references by themselves, either + by clever ordering and adding libs multiple times if needed. + I took the methods used in Makefiles as guiding line. + % Removed -Wl,--start-group / -Wl,--end-group lib grouping. + It doesn't seem to be necessary anymore. + ! Fixed "hbrtl" lib reference with some targets in -xhb mode. + ; NOTE: Please test, I didn't test all possible combinations + only mingw and recent Harbour. (no xhb, no hb10x) + ; NOTE: Regressions are possible regarding lib selection or + ordering and also GT selection. + ; TODO: If this works out okay, we can delete similar grouping + options from .cf files. At the same time, core liblists + could be moved to central place to ease maintenance + and guarantee correctness. + + * utils/hbmk2/hbmk2.hbp + * utils/hbrun/hbrun.hbp + - Deleted extra core lib specifications to make it link + in shared mode. Doesn't seem to be necessary anymore + after above hbmk2 change. + 2009-08-10 17:44 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * config/none.cf * config/global.cf diff --git a/harbour/utils/hbmk2/hbmk2.hbp b/harbour/utils/hbmk2/hbmk2.hbp index e7926987a0..cb1cb05d14 100644 --- a/harbour/utils/hbmk2/hbmk2.hbp +++ b/harbour/utils/hbmk2/hbmk2.hbp @@ -8,10 +8,6 @@ -mt hbmk2.prg --lhbcplr --lhbpp --lhbcommon - hbmk2.%{hb_lng}.po -hbl=hbmk2.%{hb_lng}.hbl -lng=hu_HU,pt_BR diff --git a/harbour/utils/hbmk2/hbmk2.prg b/harbour/utils/hbmk2/hbmk2.prg index 9bc296ca88..affff0cafe 100644 --- a/harbour/utils/hbmk2/hbmk2.prg +++ b/harbour/utils/hbmk2/hbmk2.prg @@ -480,18 +480,21 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 ) LOCAL hbmk[ _HBMK_MAX_ ] - LOCAL aLIB_BASE1 - LOCAL aLIB_BASE2 + LOCAL aLIB_BASE_EXTERN + LOCAL aLIB_BASE_DEBUG + LOCAL aLIB_BASE_1 + LOCAL aLIB_BASE_1_MT + LOCAL aLIB_BASE_2 + LOCAL aLIB_BASE_2_MT LOCAL aLIB_BASE_GT + LOCAL aLIB_BASE_NULRDD + LOCAL aLIB_BASE_RDD + LOCAL aLIB_BASE_RDD_MT + LOCAL aLIB_BASE_CPLR + LOCAL aLIB_BASE_3 + LOCAL aLIB_BASE_3_MT LOCAL aLIB_BASE_PCRE LOCAL aLIB_BASE_ZLIB - LOCAL aLIB_BASE_DEBUG - LOCAL aLIB_BASE_CPLR - LOCAL aLIB_BASE_ST - LOCAL aLIB_BASE_MT - LOCAL aLIB_BASE_NULRDD - LOCAL aLIB_BASE_RDD_ST - LOCAL aLIB_BASE_RDD_MT LOCAL l_cCSTUB LOCAL l_cRESSTUB @@ -512,8 +515,8 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 ) LOCAL l_aLIB LOCAL l_aLIBA LOCAL l_aLIBRAW - LOCAL l_aLIBVM LOCAL l_aLIBHB + LOCAL l_aLIBHBBASE_2 := {} LOCAL l_aLIBHBGT LOCAL l_aLIB3RD LOCAL l_aLIBSYS @@ -729,125 +732,45 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 ) hb_ntos( hb_Version( HB_VERSION_MINOR ) ) + "." +; hb_ntos( hb_Version( HB_VERSION_RELEASE ) ) - aLIB_BASE1 := {; - "hbcpage" ,; - "hblang" ,; - "hbcommon" } - - aLIB_BASE2 := {; - "hbrtl" ,; - "hbpp" ,; - "hbmacro" ,; - "hbextern" } - - aLIB_BASE_GT := {; - "gtcgi" ,; - "gtpca" ,; - "gtstd" } - - aLIB_BASE_PCRE := {; - "hbpcre" } - - aLIB_BASE_ZLIB := {; - "hbzlib" } - - aLIB_BASE_DEBUG := {; - "hbdebug" } - - aLIB_BASE_CPLR := {; - "hbcplr" } - - aLIB_BASE_ST := {; - "hbvm" } - IF hbmk[ _HBMK_nHBMODE ] != _HBMODE_HB10 - aLIB_BASE_MT := {; - "hbvmmt" } - ELSE - aLIB_BASE_MT := {; - "hbvm" } + aLIB_BASE_EXTERN := { "hbextern" } + aLIB_BASE_DEBUG := { "hbdebug" } + aLIB_BASE_1 := { "hbvm", "hbrtl", "hblang", "hbcpage" } + aLIB_BASE_1_MT := iif( hbmk[ _HBMK_nHBMODE ] != _HBMODE_HB10, { "hbvmmt", "hbrtl", "hblang", "hbcpage" }, aLIB_BASE_1 ) + aLIB_BASE_2 := { "hbrtl", "hbvm" } + aLIB_BASE_2_MT := iif( hbmk[ _HBMK_nHBMODE ] != _HBMODE_HB10, { "hbrtl", "hbvmmt" }, aLIB_BASE_2 ) + aLIB_BASE_GT := { "gtcgi", "gtpca", "gtstd" } + aLIB_BASE_NULRDD := { "hbnulrdd" } + aLIB_BASE_RDD := { "hbrdd", "hbusrrdd", "hbhsx", "hbsix", "rddntx", "rddcdx", "rddfpt" } + IF hbmk[ _HBMK_nHBMODE ] != _HBMODE_HB10 /* These libs have been added after 1.0.x */ + AAdd( aLIB_BASE_RDD, "hbuddall" ) + AAdd( aLIB_BASE_RDD, "rddnsx" ) ENDIF - - aLIB_BASE_NULRDD := {; - "hbnulrdd" } - - aLIB_BASE_RDD_ST := {; - "hbrdd" ,; - "hbusrrdd" ,; - "hbhsx" ,; - "hbsix" ,; - "rddntx" ,; - "rddcdx" ,; - "rddfpt" } - - /* These libs have been added after 1.0.x */ - IF hbmk[ _HBMK_nHBMODE ] != _HBMODE_HB10 - AAdd( aLIB_BASE_RDD_ST, "hbuddall" ) - AAdd( aLIB_BASE_RDD_ST, "rddnsx" ) - ENDIF - - aLIB_BASE_RDD_MT := aLIB_BASE_RDD_ST - + aLIB_BASE_RDD_MT := aLIB_BASE_RDD + aLIB_BASE_CPLR := { "hbcplr" } + aLIB_BASE_3 := { "hbmacro", "hbcplr", "hbpp", "hbcommon" } + aLIB_BASE_3_MT := aLIB_BASE_3 + aLIB_BASE_PCRE := { "hbpcre" } + aLIB_BASE_ZLIB := { "hbzlib" } ELSE cDL_Version_Alter := "" cDL_Version := "" - aLIB_BASE1 := {; - "codepage" ,; - "lang" ,; - "common" } - - aLIB_BASE2 := {} - - aLIB_BASE_GT := {; - "gtcgi" ,; - "gtpca" ,; - "gtstd" } - - aLIB_BASE_PCRE := {; - "pcrepos" } - - aLIB_BASE_ZLIB := {; - "zlib" } - - aLIB_BASE_DEBUG := {; - "debug" } - - aLIB_BASE_CPLR := {} - - aLIB_BASE_ST := {; - "vm" ,; - "rtl" ,; - "macro" ,; - "pp" } - aLIB_BASE_MT := {; - "vmmt" ,; - "rtlmt" ,; - "macromt" ,; - "ppmt" } - - aLIB_BASE_NULRDD := {; - "nulsys" } - - aLIB_BASE_RDD_ST := {; - "rdd" ,; - "usrrdd" ,; - "rdds" ,; - "hsx" ,; - "hbsix" ,; - "dbfntx" ,; - "dbfcdx" ,; - "dbffpt" } - - aLIB_BASE_RDD_MT := {; - "rddmt" ,; - "usrrddmt" ,; - "rddsmt" ,; - "hsxmt" ,; - "hbsixmt" ,; - "dbfntxmt" ,; - "dbfcdxmt" ,; - "dbffptmt" } + aLIB_BASE_EXTERN := {} + aLIB_BASE_DEBUG := { "debug" } + aLIB_BASE_1 := { "vm" , "rtl" , "lang", "codepage" } + aLIB_BASE_1_MT := { "vmmt", "rtlmt", "lang", "codepage" } + aLIB_BASE_2 := { "rtl" , "vm" } + aLIB_BASE_2_MT := { "rtlmt", "vmmt" } + aLIB_BASE_GT := { "gtcgi", "gtpca", "gtstd" } + aLIB_BASE_NULRDD := { "nulsys" } + aLIB_BASE_RDD := { "rdd" , "usrrdd" , "rdds" , "hsx" , "hbsix" , "dbfntx" , "dbfcdx" , "dbffpt" } + aLIB_BASE_RDD_MT := { "rddmt", "usrrddmt", "rddsmt", "hsxmt", "hbsixmt", "dbfntxmt", "dbfcdxmt", "dbffptmt" } + aLIB_BASE_CPLR := {} + aLIB_BASE_3 := { "macro" , "pp" , "common" } + aLIB_BASE_3_MT := { "macromt", "ppmt", "common" } + aLIB_BASE_PCRE := { "pcrepos" } + aLIB_BASE_ZLIB := { "zlib" } ENDIF /* Load architecture / compiler settings (compatibility) */ @@ -2024,29 +1947,30 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 ) /* Assemble library list */ - IF l_lNOHBLIB - aLIB_BASE1 := {} - aLIB_BASE2 := {} - aLIB_BASE_PCRE := {} - aLIB_BASE_ZLIB := {} - aLIB_BASE_DEBUG := {} - aLIB_BASE_CPLR := {} - aLIB_BASE_ST := {} - aLIB_BASE_MT := {} - aLIB_BASE_NULRDD := {} - aLIB_BASE_RDD_ST := {} - aLIB_BASE_RDD_MT := {} - - hbmk[ _HBMK_aLIBCOREGT ] := {} + IF ! Empty( hbmk[ _HBMK_cGT ] ) .AND. !( Lower( hbmk[ _HBMK_cGT ] ) == "gtnul" ) + IF AScan( hbmk[ _HBMK_aLIBCOREGT ], {|tmp| Lower( tmp ) == Lower( hbmk[ _HBMK_cGT ] ) } ) == 0 + AAdd( hbmk[ _HBMK_aLIBCOREGT ], hbmk[ _HBMK_cGT ] ) + ENDIF ENDIF - l_aLIBVM := iif( hbmk[ _HBMK_lMT ], aLIB_BASE_MT, aLIB_BASE_ST ) - aLIB_BASE2 := ArrayAJoin( { aLIB_BASE2, hbmk[ _HBMK_aLIBCOREGT ] } ) + IF l_lNOHBLIB - IF ! Empty( hbmk[ _HBMK_cGT ] ) .AND. !( Lower( hbmk[ _HBMK_cGT ] ) == "gtnul" ) - IF AScan( aLIB_BASE2, {|tmp| Lower( tmp ) == Lower( hbmk[ _HBMK_cGT ] ) } ) == 0 - AAdd( aLIB_BASE2, hbmk[ _HBMK_cGT ] ) - ENDIF + aLIB_BASE_EXTERN := {} + aLIB_BASE_DEBUG := {} + aLIB_BASE_1 := {} + aLIB_BASE_1_MT := {} + aLIB_BASE_2 := {} + aLIB_BASE_2_MT := {} + aLIB_BASE_NULRDD := {} + aLIB_BASE_RDD := {} + aLIB_BASE_RDD_MT := {} + aLIB_BASE_CPLR := {} + aLIB_BASE_3 := {} + aLIB_BASE_3_MT := {} + aLIB_BASE_PCRE := {} + aLIB_BASE_ZLIB := {} + + hbmk[ _HBMK_aLIBCOREGT ] := {} ENDIF DO CASE @@ -2104,13 +2028,8 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 ) cLibPathSep := " " cLibLibExt := ".a" IF ! lStopAfterCComp - IF hbmk[ _HBMK_cARCH ] == "linux" .OR. ; - hbmk[ _HBMK_cARCH ] == "bsd" - AAdd( hbmk[ _HBMK_aOPTL ], "-Wl,--start-group {LL} {LB} -Wl,--end-group" ) - ELSE - AAdd( hbmk[ _HBMK_aOPTL ], "{LL} {LB}" ) - aLIB_BASE2 := ArrayAJoin( { aLIB_BASE2, { "hbcommon", "hbrtl" }, l_aLIBVM } ) - ENDIF + AAdd( hbmk[ _HBMK_aOPTL ], "{LL} {LB}" ) + l_aLIBHBBASE_2 := iif( hbmk[ _HBMK_lMT ], aLIB_BASE_2_MT, aLIB_BASE_2 ) ENDIF IF hbmk[ _HBMK_lMAP ] IF hbmk[ _HBMK_cARCH ] == "darwin" @@ -2287,12 +2206,8 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 ) AAdd( hbmk[ _HBMK_aLIBPATH ], l_cHB_BIN_INSTALL ) ENDIF IF ! lStopAfterCComp - IF hbmk[ _HBMK_cCOMP ] $ "mingw|mingw64|mingwarm" - AAdd( hbmk[ _HBMK_aOPTL ], "-Wl,--start-group {LL} {LB} -Wl,--end-group" ) - ELSE - AAdd( hbmk[ _HBMK_aOPTL ], "{LL} {LB}" ) - aLIB_BASE2 := ArrayAJoin( { aLIB_BASE2, { "hbcommon", "hbrtl" }, l_aLIBVM } ) - ENDIF + AAdd( hbmk[ _HBMK_aOPTL ], "{LL} {LB}" ) + l_aLIBHBBASE_2 := iif( hbmk[ _HBMK_lMT ], aLIB_BASE_2_MT, aLIB_BASE_2 ) ENDIF IF hbmk[ _HBMK_lSTRIP ] AAdd( hbmk[ _HBMK_aOPTL ], "-s" ) @@ -2364,7 +2279,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 ) AAdd( hbmk[ _HBMK_aLIBPATH ], l_cHB_BIN_INSTALL ) ENDIF AAdd( hbmk[ _HBMK_aOPTL ], "{LL} {LB}" ) - aLIB_BASE2 := ArrayAJoin( { aLIB_BASE2, { "hbcommon", "hbrtl" }, l_aLIBVM } ) + l_aLIBHBBASE_2 := iif( hbmk[ _HBMK_lMT ], aLIB_BASE_2_MT, aLIB_BASE_2 ) IF ! hbmk[ _HBMK_lSHARED ] l_aLIBSYS := ArrayJoin( l_aLIBSYS, { "socket" } ) ENDIF @@ -2411,12 +2326,8 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 ) cLibLibExt := ".a" cBin_Lib := "ar.exe" cOpt_Lib := "{FA} rcs {OL} {LO}{SCRIPT}" - IF hbmk[ _HBMK_cCOMP ] == "djgpp" - AAdd( hbmk[ _HBMK_aOPTL ], "-Wl,--start-group {LL} {LB} -Wl,--end-group" ) - ELSE - AAdd( hbmk[ _HBMK_aOPTL ], "{LL} {LB}" ) - aLIB_BASE2 := ArrayAJoin( { aLIB_BASE2, { "hbcommon", "hbrtl" }, l_aLIBVM } ) - ENDIF + AAdd( hbmk[ _HBMK_aOPTL ], "{LL} {LB}" ) + l_aLIBHBBASE_2 := iif( hbmk[ _HBMK_lMT ], aLIB_BASE_2_MT, aLIB_BASE_2 ) IF hbmk[ _HBMK_lMAP ] AAdd( hbmk[ _HBMK_aOPTL ], "-Wl,-Map,{OM}" ) ENDIF @@ -3325,12 +3236,13 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 ) aLIB_BASE_CPLR,; aLIB_BASE_DEBUG } ) ELSE - l_aLIBHB := ArrayAJoin( { aLIB_BASE1,; - aLIB_BASE_CPLR,; + l_aLIBHB := ArrayAJoin( { aLIB_BASE_EXTERN,; aLIB_BASE_DEBUG,; - l_aLIBVM,; - iif( hbmk[ _HBMK_lNULRDD ], aLIB_BASE_NULRDD, iif( hbmk[ _HBMK_lMT ], aLIB_BASE_RDD_MT, aLIB_BASE_RDD_ST ) ),; - aLIB_BASE2,; + iif( hbmk[ _HBMK_lMT ], aLIB_BASE_1_MT, aLIB_BASE_1 ),; + hbmk[ _HBMK_aLIBCOREGT ],; + iif( hbmk[ _HBMK_lNULRDD ], aLIB_BASE_NULRDD, iif( hbmk[ _HBMK_lMT ], aLIB_BASE_RDD_MT, aLIB_BASE_RDD ) ),; + l_aLIBHBBASE_2,; + iif( hbmk[ _HBMK_lMT ], aLIB_BASE_3_MT, aLIB_BASE_3 ),; iif( l_lHB_PCRE, aLIB_BASE_PCRE, {} ),; iif( l_lHB_ZLIB, aLIB_BASE_ZLIB, {} ) } ) ENDIF diff --git a/harbour/utils/hbrun/hbrun.hbp b/harbour/utils/hbrun/hbrun.hbp index cce244f23b..78945e715a 100644 --- a/harbour/utils/hbrun/hbrun.hbp +++ b/harbour/utils/hbrun/hbrun.hbp @@ -6,8 +6,4 @@ hbrun.prg --lhbcplr --lhbpp --lhbcommon - -icon={allwin|os2}../../package/harbour.ico