From 5b95d0cf4840444bc88ed8ec3c0bafeec89aa878 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Mon, 10 Aug 2009 20:12:08 +0000 Subject: [PATCH] 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. --- harbour/ChangeLog | 24 ++++ harbour/utils/hbmk2/hbmk2.hbp | 4 - harbour/utils/hbmk2/hbmk2.prg | 248 +++++++++++----------------------- harbour/utils/hbrun/hbrun.hbp | 4 - 4 files changed, 104 insertions(+), 176 deletions(-) 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