From d074db1033cd1b62dfe9ea8f5f9e9bd108a5182c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Czerpak?= Date: Tue, 15 Dec 2015 23:48:52 +0100 Subject: [PATCH] 2015-12-15 23:48 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * config/dos/watcom.mk * config/win/watcom.mk * config/linux/watcom.mk ! enabled -bd OpenWatcom switch for code compiled as part of dynamic libraries * use CauseWay as default DOS extender for dynamic DOS builds * config/dyn.mk * config/lib.mk * src/Makefile ! fixed list of libraries used to create Harbour DLL in DOS builds * config/bin.mk * src/vm/Makefile * create hbmainstd library for OpenWatcom DOS shared builds * src/vm/maindllh.c + added DLL entry function for CauseWay DLLs in OpenWatcom builds * src/vm/main.c * include maindllh.c in OpenWatcom DOS shared builds * utils/hbmk2/hbmk2.prg + added support for dynamic binaries in DOS OpenWatcom builds. Support for CauseWay DLLs is still broken in current OpenWatcom builds so it will have to wait for the fix to be usable. * src/vm/dynlibhb.c + added support for dynamic libraries to OpenWatcom DOS builds. Now it's enabled only in harbour.dll due to problems with CW and current OW. * src/3rd/zlib/zconf.h * src/3rd/zlib/zlib.dif * use OS2 patch for exporting ZLIB symbols also in DOS builds * src/rdd/dbf1.c * pacified warning --- ChangeLog.txt | 40 ++++++++++++++++++++++++++++ config/bin.mk | 4 +++ config/dos/watcom.mk | 11 +++++++- config/dyn.mk | 11 +++----- config/lib.mk | 4 +++ config/linux/watcom.mk | 2 ++ config/win/watcom.mk | 2 +- src/3rd/zlib/zconf.h | 2 +- src/3rd/zlib/zlib.dif | 2 +- src/Makefile | 3 +++ src/rdd/dbf1.c | 2 +- src/vm/Makefile | 21 ++++++++------- src/vm/dynlibhb.c | 14 ++++++++++ src/vm/main.c | 4 ++- src/vm/maindllh.c | 39 ++++++++++++++++++++++++--- utils/hbmk2/hbmk2.prg | 60 +++++++++++++++++++++++------------------- 16 files changed, 169 insertions(+), 52 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 0ad66c5d66..38d54f4095 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -10,6 +10,46 @@ * Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment */ +2015-12-15 23:48 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) + * config/dos/watcom.mk + * config/win/watcom.mk + * config/linux/watcom.mk + ! enabled -bd OpenWatcom switch for code compiled as part of dynamic + libraries + * use CauseWay as default DOS extender for dynamic DOS builds + + * config/dyn.mk + * config/lib.mk + * src/Makefile + ! fixed list of libraries used to create Harbour DLL in DOS builds + + * config/bin.mk + * src/vm/Makefile + * create hbmainstd library for OpenWatcom DOS shared builds + + * src/vm/maindllh.c + + added DLL entry function for CauseWay DLLs in OpenWatcom builds + + * src/vm/main.c + * include maindllh.c in OpenWatcom DOS shared builds + + * utils/hbmk2/hbmk2.prg + + added support for dynamic binaries in DOS OpenWatcom builds. + Support for CauseWay DLLs is still broken in current OpenWatcom + builds so it will have to wait for the fix to be usable. + + * src/vm/dynlibhb.c + + added support for dynamic libraries to OpenWatcom DOS builds. + Now it's enabled only in harbour.dll due to problems with + CW and current OW. + + * src/3rd/zlib/zconf.h + * src/3rd/zlib/zlib.dif + * use OS2 patch for exporting ZLIB symbols also in DOS builds + + * src/rdd/dbf1.c + * pacified warning + 2015-12-15 19:50 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * src/common/hbfopen.c * use *fsopen() function instead of *fopen() in most of diff --git a/config/bin.mk b/config/bin.mk index 3d3e533418..82b3b49c0e 100644 --- a/config/bin.mk +++ b/config/bin.mk @@ -37,6 +37,10 @@ ifeq ($(BUILD_SHARED),yes) else HB_LIBS_TPL += hbmainstd endif + else + ifeq ($(HB_PLATFORM)-$(HB_COMPILER),dos-watcom) + HB_LDFLAGS += FILE $(LIB_DIR)/hbmainstd.lib + endif endif endif endif diff --git a/config/dos/watcom.mk b/config/dos/watcom.mk index bfb08d9d5a..d91a981325 100644 --- a/config/dos/watcom.mk +++ b/config/dos/watcom.mk @@ -54,7 +54,11 @@ endif # different SYS values: dos4g (default), pmodew (commercial), causeway, # dos32a (DOS/32A LE executable), dos32x (DOS/32A LX executable) -LDFLAGS += SYS dos32a +ifeq ($(HB_BUILD_DYN),dostest) + LDFLAGS += SYS causeway +else + LDFLAGS += SYS dos32a +endif LDLIBS := $(HB_USER_LIBS) LDLIBS += $(foreach lib,$(LIBS),$(LIB_DIR)/$(lib)) @@ -73,12 +77,17 @@ endif ifeq ($(HB_BUILD_DYN),dostest) + HB_DYN_COPT := -DHB_DYNLIB -bd + DY := $(LD) DFLAGS += OP quiet SYS cwdllr DY_OUT := DLIBS := $(foreach lib,$(HB_USER_LIBS),$(lib)) DLIBS += $(foreach lib,$(LIBS),$(LIB_DIR)/$(lib)) DLIBS += $(foreach lib,$(SYSLIBS),$(lib)) + ifneq ($(HB_HAS_WATT),) + DLIBS += $(HB_LIB_WATT)/wattcpwf + endif DLIBS := $(strip $(DLIBS)) ifneq ($(DLIBS),) diff --git a/config/dyn.mk b/config/dyn.mk index c3d05c4877..2d0665c97f 100644 --- a/config/dyn.mk +++ b/config/dyn.mk @@ -52,6 +52,7 @@ HB_DYN_LIBS := \ gtgui \ gtwin \ gtos2 \ + gtdos \ gttrm \ gtcrs \ gtsln \ @@ -65,17 +66,13 @@ endif ifneq ($(HB_HAS_ZLIB_LOCAL),) HB_DYN_LIBS += hbzlib endif +ifeq ($(HB_PLATFORM),dos) + HB_DYN_LIBS += hbpmcom +endif # hbcplr \ # hbdebug \ -ifneq ($(HB_HAS_PCRE_LOCAL),) - HB_DYN_LIBS += hbpcre -endif -ifneq ($(HB_HAS_ZLIB_LOCAL),) - HB_DYN_LIBS += hbzlib -endif - DYN_FILE := IMP_FILE := diff --git a/config/lib.mk b/config/lib.mk index 21970a5cf1..502e03c217 100644 --- a/config/lib.mk +++ b/config/lib.mk @@ -26,6 +26,7 @@ HB_DYN_LIBS := \ gtgui \ gtwin \ gtos2 \ + gtdos \ gttrm \ gtcrs \ gtsln \ @@ -40,6 +41,9 @@ endif ifneq ($(HB_HAS_ZLIB_LOCAL),) HB_DYN_LIBS += hbzlib endif +ifeq ($(HB_PLATFORM),dos) + HB_DYN_LIBS += hbpmcom +endif # Added only for hbpp -include $(TOP)$(ROOT)config/$(HB_PLATFORM)/libs.mk diff --git a/config/linux/watcom.mk b/config/linux/watcom.mk index dfe7ac8e33..d2bc085478 100644 --- a/config/linux/watcom.mk +++ b/config/linux/watcom.mk @@ -55,6 +55,8 @@ LDFLAGS += SYS linux LDLIBS := $(HB_USER_LIBS) LDLIBS += $(foreach lib,$(LIBS),$(LIB_DIR)/$(lib)) +#HB_DYN_COPT := -DHB_DYNLIB -bd +# #DY := $(LD) #DFLAGS += OP quiet FORM elf dll LIBPATH $(WATCOM)/lib386 LIBPATH $(WATCOM)/lib386/linux OP exportall #DY_OUT := diff --git a/config/win/watcom.mk b/config/win/watcom.mk index a03b8b011f..fd9cc2e1cb 100644 --- a/config/win/watcom.mk +++ b/config/win/watcom.mk @@ -2,7 +2,7 @@ OBJ_EXT := .obj LIB_PREF := LIB_EXT := .lib -HB_DYN_COPT := -DHB_DYNLIB +HB_DYN_COPT := -DHB_DYNLIB -bd ifeq ($(HB_BUILD_MODE),cpp) CC := wpp386 diff --git a/src/3rd/zlib/zconf.h b/src/3rd/zlib/zconf.h index 861dc9768b..8803856f0e 100644 --- a/src/3rd/zlib/zconf.h +++ b/src/3rd/zlib/zconf.h @@ -361,7 +361,7 @@ # endif #endif -#if defined(OS2) && defined(__WATCOMC__) +#if ( defined(__OS2__) || defined(__DOS__) ) && defined(__WATCOMC__) # ifdef ZLIB_DLL # ifdef ZLIB_INTERNAL # define ZEXTERN extern __declspec(dllexport) diff --git a/src/3rd/zlib/zlib.dif b/src/3rd/zlib/zlib.dif index 73d04ab222..1a87fbcc09 100644 --- a/src/3rd/zlib/zlib.dif +++ b/src/3rd/zlib/zlib.dif @@ -127,7 +127,7 @@ diff -urN zlib.orig/zconf.h zlib/zconf.h # endif #endif + -+#if defined(OS2) && defined(__WATCOMC__) ++#if ( defined(__OS2__) || defined(__DOS__) ) && defined(__WATCOMC__) +# ifdef ZLIB_DLL +# ifdef ZLIB_INTERNAL +# define ZEXTERN extern __declspec(dllexport) diff --git a/src/Makefile b/src/Makefile index 268332c99a..a1851ec087 100644 --- a/src/Makefile +++ b/src/Makefile @@ -37,6 +37,9 @@ else ifeq ($(HB_PLATFORM),dos) DYNDIRLIST_BASE += src/rtl/gtdos + ifneq ($(filter $(HB_COMPILER),watcom djgpp),) + DYNDIRLIST_BASE += src/3rd/hbpmcom + endif endif ifeq ($(HB_PLATFORM),os2) DYNDIRLIST_BASE += src/rtl/gtos2 diff --git a/src/rdd/dbf1.c b/src/rdd/dbf1.c index cd142c90a2..e2463ea9a4 100644 --- a/src/rdd/dbf1.c +++ b/src/rdd/dbf1.c @@ -6659,7 +6659,7 @@ static HB_ERRCODE hb_dbfRddInfo( LPRDDNODE pRDD, HB_USHORT uiIndex, HB_ULONG ulC hb_itemPutNI( pItem, pData->uiSetHeader ); if( ( iMode & ~0xFF ) == 0 ) - pData->uiSetHeader = iMode; + pData->uiSetHeader = ( HB_USHORT ) iMode; break; } case RDDI_DIRTYREAD: diff --git a/src/vm/Makefile b/src/vm/Makefile index 565b36929b..15d6a32be0 100644 --- a/src/vm/Makefile +++ b/src/vm/Makefile @@ -45,19 +45,22 @@ else C_MAIN := mainstd.c DIRS := mainstd maindllh maindllp else - ifeq ($(HB_PLATFORM),wce) - C_MAIN := mainwin.c - DIRS := mainstd mainwin maindllh maindllp - else - ifeq ($(HB_PLATFORM),os2) - C_MAIN := mainstd.c - DIRS := mainstd maindllh + ifeq ($(HB_PLATFORM),wce) + C_MAIN := mainwin.c + DIRS := mainstd mainwin maindllh maindllp else - C_MAIN := main.c + ifeq ($(HB_PLATFORM),os2) + C_MAIN := mainstd.c + DIRS := mainstd maindllh + else + ifeq ($(HB_PLATFORM)-$(HB_COMPILER),dos-watcom) + DIRS := mainstd + endif + C_MAIN := main.c + endif endif endif endif -endif ifeq ($(HB_HVM_ALL),yes) diff --git a/src/vm/dynlibhb.c b/src/vm/dynlibhb.c index 8166f416b9..75cc4b5af7 100644 --- a/src/vm/dynlibhb.c +++ b/src/vm/dynlibhb.c @@ -70,6 +70,13 @@ # endif #elif defined( HB_OS_OS2 ) # include +#elif defined( HB_OS_DOS ) && defined( __WATCOMC__ ) && !defined( HB_CAUSEWAY_DLL ) + /* it's broken in recent OpenWatcom builds so enable it + for tests only in harbur.dll [druzus] */ +# if defined( HB_DYNLIB ) +# define HB_CAUSEWAY_DLL +# include +# endif #endif /* NOTE: VxWorks supports dlopen() functionality only in shared @@ -143,6 +150,8 @@ PHB_ITEM hb_libLoad( PHB_ITEM pLibName, PHB_ITEM pArgs ) { HB_TRACE( HB_TR_DEBUG, ( "hb_libLoad(): dlopen(): %s", dlerror() ) ); } +#elif defined( HB_CAUSEWAY_DLL ) + hDynLib = LoadLibrary( hb_itemGetCPtr( pLibName ) ); #else { int iTODO; @@ -187,6 +196,9 @@ HB_BOOL hb_libFree( PHB_ITEM pDynLib ) fResult = DosFreeModule( ( HMODULE ) hDynLib ) == NO_ERROR; #elif defined( HB_HAS_DLFCN ) fResult = dlclose( hDynLib ) == 0; +#elif defined( HB_CAUSEWAY_DLL ) + FreeLibrary( hDynLib ); + fResult = HB_TRUE; #endif } hb_vmUnlockModuleSymbols(); @@ -221,6 +233,8 @@ void * hb_libSymAddr( PHB_ITEM pDynLib, const char * pszSymbol ) return ( void * ) pProcAddr; #elif defined( HB_HAS_DLFCN ) return dlsym( hDynLib, pszSymbol ); +#elif defined( HB_CAUSEWAY_DLL ) + return GetProcAddress( hDynLib, pszSymbol ); #else HB_SYMBOL_UNUSED( pszSymbol ); #endif diff --git a/src/vm/main.c b/src/vm/main.c index 8d3b164bdf..0277d3cce2 100644 --- a/src/vm/main.c +++ b/src/vm/main.c @@ -51,7 +51,9 @@ #include "hbsetup.h" -#if defined( HB_MAIN_STD ) +#if defined( HB_DYNLIB ) && defined( __WATCOMC__ ) && defined( HB_OS_DOS ) + #include "maindllh.c" +#elif defined( HB_MAIN_STD ) #include "mainstd.c" #elif defined( HB_MAIN_WIN ) #include "mainwin.c" diff --git a/src/vm/maindllh.c b/src/vm/maindllh.c index cfd5801df2..e6453ed036 100644 --- a/src/vm/maindllh.c +++ b/src/vm/maindllh.c @@ -92,12 +92,45 @@ void hb_forceLinkMainStd( void ) {} HB_EXTERN_END #endif -#elif defined( HB_OS_OS2 ) +#elif defined( HB_OS_OS2 ) && defined( __WATCOMC__ ) -#if defined( __WATCOMC__ ) HB_EXTERN_BEGIN void hb_forceLinkMainStd( void ) {} HB_EXTERN_END + +#elif defined( HB_OS_DOS ) && defined( __WATCOMC__ ) + +#if defined( _HB_CWDLL_DEBUG ) +#include +HB_EXTERN_BEGIN +extern char *_LpPgmName; +HB_EXTERN_END + +int main( int iReason, char **dummy ) +{ + HB_SYMBOL_UNUSED( dummy ); + if( iReason == 0 ) + { + /* DLL initialization code */ + printf( "DLL startup...\n" ); + printf( "DLL File name: %s\n", GetModuleFileName( _psp ) ); + printf( "Program name: %s\n", _LpPgmName ); + } + else + { + /* DLL clean up code */ + printf( "DLL shutdown...\n" ); + } + + return 0; +} +#else +int main( int iReason, char **dummy ) +{ + HB_SYMBOL_UNUSED( dummy ); + HB_SYMBOL_UNUSED( iReason ); + return 0; +} #endif -#endif +#endif /* HB_OS_DOS && __WATCOMC__ */ diff --git a/utils/hbmk2/hbmk2.prg b/utils/hbmk2/hbmk2.prg index 4fd9a5eb26..aacdcff1b8 100644 --- a/utils/hbmk2/hbmk2.prg +++ b/utils/hbmk2/hbmk2.prg @@ -2394,30 +2394,6 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit /* Process build-time configuration */ - IF hbmk[ _HBMK_cPLAT ] == "dos" - SWITCH hbmk[ _HBMK_cCOMP ] - CASE "djgpp" ; tmp := "watt" ; cLibLibPrefix := "lib" ; cLibExt := ".a" ; EXIT - CASE "watcom" ; tmp := "wattcpwf" ; cLibLibPrefix := "" ; cLibExt := ".lib" ; EXIT - OTHERWISE ; tmp := NIL - ENDSWITCH - - AAdd( hbmk[ _HBMK_aLIBUSERSYS ], "hbpmcom" ) - IF ! Empty( tmp ) - #if defined( HB_HAS_WATT ) - AAdd( hbmk[ _HBMK_aLIBUSERSYSPRE ], tmp ) - IF hb_DirExists( tmp1 := hb_DirSepToOS( GetEnv( "WATT_ROOT" ) ) + hb_ps() + "lib" ) - AAdd( hbmk[ _HBMK_aLIBPATH ], tmp1 ) - ENDIF - #else - IF hb_DirExists( tmp1 := hb_DirSepToOS( GetEnv( "WATT_ROOT" ) ) + hb_ps() + "lib" ) .AND. ; - hb_FileExists( tmp1 + hb_ps() + cLibLibPrefix + tmp + cLibExt ) - AAdd( hbmk[ _HBMK_aLIBPATH ], tmp1 ) - AAdd( hbmk[ _HBMK_aLIBUSERSYSPRE ], tmp ) - ENDIF - #endif - ENDIF - ENDIF - /* Process automatic make files in current dir. */ IF hbmk[ _HBMK_lAutoHBM ] .AND. hb_FileExists( _HBMK_AUTOHBM_NAME ) IF ! hbmk[ _HBMK_lQuiet ] @@ -3657,6 +3633,30 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit ENDCASE NEXT + IF hbmk[ _HBMK_cPLAT ] == "dos" .AND. ! hbmk[ _HBMK_lSHARED ] + SWITCH hbmk[ _HBMK_cCOMP ] + CASE "djgpp" ; tmp := "watt" ; cLibLibPrefix := "lib" ; cLibExt := ".a" ; EXIT + CASE "watcom" ; tmp := "wattcpwf" ; cLibLibPrefix := "" ; cLibExt := ".lib" ; EXIT + OTHERWISE ; tmp := NIL + ENDSWITCH + + AAdd( hbmk[ _HBMK_aLIBUSERSYS ], "hbpmcom" ) + IF ! Empty( tmp ) + #if defined( HB_HAS_WATT ) + AAdd( hbmk[ _HBMK_aLIBUSERSYSPRE ], tmp ) + IF hb_DirExists( tmp1 := hb_DirSepToOS( GetEnv( "WATT_ROOT" ) ) + hb_ps() + "lib" ) + AAdd( hbmk[ _HBMK_aLIBPATH ], tmp1 ) + ENDIF + #else + IF hb_DirExists( tmp1 := hb_DirSepToOS( GetEnv( "WATT_ROOT" ) ) + hb_ps() + "lib" ) .AND. ; + hb_FileExists( tmp1 + hb_ps() + cLibLibPrefix + tmp + cLibExt ) + AAdd( hbmk[ _HBMK_aLIBPATH ], tmp1 ) + AAdd( hbmk[ _HBMK_aLIBUSERSYSPRE ], tmp ) + ENDIF + #endif + ENDIF + ENDIF + IF hbmk[ _HBMK_lDEBUGPARS ] FOR EACH aParam IN aParams _hbmk_OutStd( hbmk, hb_StrFormat( "debugpars: %1$3d %2$s", aParam:__enumIndex(), ParamToString( aParam ) ) ) @@ -4788,14 +4788,16 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit cBin_Link := "wlink" + hbmk[ _HBMK_cCCEXT ] DO CASE CASE hbmk[ _HBMK_cPLAT ] == "linux" ; cOpt_Link := "OP quiet SYS linux {FL} NAME {OE} {LO} {DL} {LL} {LB} {LF}{SCRIPT}" - CASE hbmk[ _HBMK_cPLAT ] == "dos" ; cOpt_Link := "OP quiet SYS dos32a {FL} NAME {OE} {LO} {DL} {LL} {LB} {LF}{SCRIPT}" + CASE hbmk[ _HBMK_cPLAT ] == "dos" ; cOpt_Link := iif( hbmk[ _HBMK_lSHARED ], ; + "OP quiet,map,stub=cwstub.exe SYS causeway {FL} {IM} NAME {OE} {LO} {DL} {LL} {LB} {LF} {LS}{SCRIPT}", ; + "OP quiet SYS dos32a {FL} NAME {OE} {LO} {DL} {LL} {LB} {LF}{SCRIPT}" ) CASE hbmk[ _HBMK_cPLAT ] == "win" ; cOpt_Link := "OP quiet {FL} {IM} NAME {OE} {LO} {DL} {LL} {LB} {LF} {LS}{SCRIPT}" CASE hbmk[ _HBMK_cPLAT ] == "os2" ; cOpt_Link := "OP quiet SYS os2v2 {FL} {IM} NAME {OE} {LO} {DL} {LL} {LB} {LF} {LS}{SCRIPT}" ENDCASE cBin_Dyn := cBin_Link cDynObjPrefix := cObjPrefix DO CASE - CASE hbmk[ _HBMK_cPLAT ] == "dos" ; cBin_Dyn := NIL + CASE hbmk[ _HBMK_cPLAT ] == "dos" ; cOpt_Dyn := "OP quiet SYS cwdllr OP map,stub=cwstub.exe {FD} {IM} NAME {OD} {LO} {DL} {LL} {LB} {LF} {LS}{SCRIPT}" CASE hbmk[ _HBMK_cPLAT ] == "linux" ; cOpt_Dyn := "OP quiet FORM elf dll OP exportall {FD} NAME {OD} {LO} {DL} {LL} {LB} {LF}{SCRIPT}" IF hbmk[ _HBMK_lCreateDyn ] AAdd( hbmk[ _HBMK_aLIBPATH ], hb_DirSepToOS( GetEnv( "WATCOM") + hb_ps() + "lib386" ) ) @@ -4822,7 +4824,7 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit /* register callconv (-6r, -5r) puts an underscore after names */ cLibHBX_Regex := R_( "[\s]_?HB_FUN_([A-Z0-9_]*)_[\s]" ) ENDIF - IF HBMK_ISPLAT( "win|os2" ) + IF HBMK_ISPLAT( "win|os2|dos" ) bBlk_ImpLib := {| cSourceDLL, cTargetLib, cFlags | win_implib_command_watcom( hbmk, cBin_Lib + " -q -o={OL} {ID}", cSourceDLL, cTargetLib, cFlags ) } ENDIF cLibLibExt := cLibExt @@ -4886,6 +4888,10 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit /* TOFIX: This line is plain guessing. */ AAdd( hbmk[ _HBMK_aOPTL ], "FILE " + hb_FNameExtSet( hbmk[ _HBMK_cHB_INSTALL_LIB ] + hb_ps() + iif( hbmk[ _HBMK_lGUI ], "hbmainstd", "hbmainstd" ), cLibExt ) ) ENDIF + CASE hbmk[ _HBMK_cPLAT ] == "dos" + l_aLIBSYS := ArrayAJoin( { l_aLIBSYS, l_aLIBSYSCORE, l_aLIBSYSMISC } ) + l_aLIBSHARED := { cHarbourDyn + cLibExt } + AAdd( hbmk[ _HBMK_aOPTL ], "FILE " + hb_FNameExtSet( hbmk[ _HBMK_cHB_INSTALL_LIB ] + hb_ps() + "hbmainstd", cLibExt ) ) CASE hbmk[ _HBMK_cPLAT ] == "linux" l_aLIBSYS := ArrayAJoin( { l_aLIBSYS, l_aLIBSYSCORE, l_aLIBSYSMISC } ) l_aLIBSHARED := { hbmk[ _HBMK_cDynLibPrefix ] + cHarbourDyn + cDL_Version + hbmk[ _HBMK_cDynLibExt ] }