diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 05aa5e4da1..44327de5e0 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,16 @@ 2008-12-31 13:59 UTC+0100 Foo Bar (foo.bar foobar.org) */ +2008-11-11 05:34 UTC+0100 Viktor Szakats (harbour.01 syenar hu) + * make_b32.mak + * make_vc.mak + * common.mak + * bin/hbmk.bat + + Added generation of MT harbour .dlls for BCC and MSVC. + ; TOFIX: 'hbmk -shared -mt' doesn't seem to work, resulting + app simply exists for both BCC and MSVC. + ; TODO: Please update make_gcc.mak. + 2008-11-11 04:22 UTC+0100 Viktor Szakats (harbour.01 syenar hu) * make_b32.mak * make_vc.mak diff --git a/harbour/bin/hbmk.bat b/harbour/bin/hbmk.bat index 5cb65c046a..0a06bb6d18 100644 --- a/harbour/bin/hbmk.bat +++ b/harbour/bin/hbmk.bat @@ -55,9 +55,9 @@ if not "%1" == "-shared" goto NO_SHARED goto REPEAT :NO_SHARED -set _HBVM_LIB=hbvm -if "%_HB_MT%" == "yes" set _HBVM_LIB=hbvmmt -if "%_HB_MT%" == "MT" set _HBVM_LIB=hbvmmt +if not "%_HB_MT%" == "yes" set _HB_MT= +if "%_HB_MT%" == "MT" set _HB_MT=mt +if "%_HB_MT%" == "yes" set _HB_MT=mt :START @@ -142,7 +142,7 @@ if "%_HB_MT%" == "MT" set _HBVM_LIB=hbvmmt echo -lhblang >> _hb_mk.tmp echo -lhbrdd >> _hb_mk.tmp echo -lhbrtl >> _hb_mk.tmp - echo -l%_HBVM_LIB% >> _hb_mk.tmp + echo -lhbvm%_HB_MT% >> _hb_mk.tmp echo -lhbmacro >> _hb_mk.tmp echo -lhbpp >> _hb_mk.tmp echo -lrddfpt >> _hb_mk.tmp @@ -202,8 +202,8 @@ if "%_HB_MT%" == "MT" set _HBVM_LIB=hbvmmt if "%_HB_GUI%" == "yes" set _HB_USR_C=-tW - if not "%_HB_SHARED%" == "yes" bcc32 -q -tWM -O2 -OS -Ov -Oi -Oc -d %C_USR% %_HB_USR_C% -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% %_HB_PRG_NAME%.c %HB_USER_LIBS% hbcpage.lib hbdebug.lib %_HBVM_LIB%.lib hbrtl.lib gtcgi.lib gtgui.lib gtpca.lib gtstd.lib gtwin.lib gtwvt.lib hblang.lib hbrdd.lib hbmacro.lib hbpp.lib rddfpt.lib rddntx.lib rddcdx.lib hbhsx.lib hbsix.lib hbcommon.lib hbpcre.lib hbzlib.lib - if "%_HB_SHARED%" == "yes" bcc32 -q -tWM -O2 -OS -Ov -Oi -Oc -d %C_USR% %_HB_USR_C% -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% %_HB_PRG_NAME%.c %HB_USER_LIBS% harbour-11-b32.lib hbmainstd.lib hbmainwin.lib hbcommon.lib + if not "%_HB_SHARED%" == "yes" bcc32 -q -tWM -O2 -OS -Ov -Oi -Oc -d %C_USR% %_HB_USR_C% -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% %_HB_PRG_NAME%.c %HB_USER_LIBS% hbcpage.lib hbdebug.lib hbvm%_HB_MT%.lib hbrtl.lib gtcgi.lib gtgui.lib gtpca.lib gtstd.lib gtwin.lib gtwvt.lib hblang.lib hbrdd.lib hbmacro.lib hbpp.lib rddfpt.lib rddntx.lib rddcdx.lib hbhsx.lib hbsix.lib hbcommon.lib hbpcre.lib hbzlib.lib + if "%_HB_SHARED%" == "yes" bcc32 -q -tWM -O2 -OS -Ov -Oi -Oc -d %C_USR% %_HB_USR_C% -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% %_HB_PRG_NAME%.c %HB_USER_LIBS% harbour%_HB_MT%-11-b32.lib hbmainstd.lib hbmainwin.lib hbcommon.lib goto CLEANUP @@ -214,8 +214,8 @@ if "%_HB_MT%" == "MT" set _HBVM_LIB=hbvmmt if not "%_HB_GUI%" == "yes" set _HB_USR_L=/subsystem:console if "%_HB_GUI%" == "yes" set _HB_USR_L=/subsystem:windows - if not "%_HB_SHARED%" == "yes" cl -nologo -W3 %C_USR% -I%HB_INC_INSTALL% %_HB_PRG_NAME%.c /link /libpath:%HB_LIB_INSTALL% %L_USR% %_HB_USR_L% %HB_USER_LIBS% hbcpage.lib hbdebug.lib %_HBVM_LIB%.lib hbrtl.lib gtcgi.lib gtgui.lib gtpca.lib gtstd.lib gtwin.lib gtwvt.lib hblang.lib hbrdd.lib hbmacro.lib hbpp.lib rddntx.lib rddcdx.lib rddfpt.lib hbhsx.lib hbsix.lib hbcommon.lib hbpcre.lib hbzlib.lib user32.lib wsock32.lib advapi32.lib gdi32.lib - if "%_HB_SHARED%" == "yes" cl -nologo -W3 %C_USR% -I%HB_INC_INSTALL% %_HB_PRG_NAME%.c /link /libpath:%HB_LIB_INSTALL% %L_USR% %_HB_USR_L% %HB_USER_LIBS% harbour-11-vc.lib hbmainstd.lib hbmainwin.lib hbcommon.lib user32.lib wsock32.lib advapi32.lib gdi32.lib + if not "%_HB_SHARED%" == "yes" cl -nologo -W3 %C_USR% -I%HB_INC_INSTALL% %_HB_PRG_NAME%.c /link /libpath:%HB_LIB_INSTALL% %L_USR% %_HB_USR_L% %HB_USER_LIBS% hbcpage.lib hbdebug.lib hbvm%_HB_MT%.lib hbrtl.lib gtcgi.lib gtgui.lib gtpca.lib gtstd.lib gtwin.lib gtwvt.lib hblang.lib hbrdd.lib hbmacro.lib hbpp.lib rddntx.lib rddcdx.lib rddfpt.lib hbhsx.lib hbsix.lib hbcommon.lib hbpcre.lib hbzlib.lib user32.lib wsock32.lib advapi32.lib gdi32.lib + if "%_HB_SHARED%" == "yes" cl -nologo -W3 %C_USR% -I%HB_INC_INSTALL% %_HB_PRG_NAME%.c /link /libpath:%HB_LIB_INSTALL% %L_USR% %_HB_USR_L% %HB_USER_LIBS% harbour%_HB_MT%-11-vc.lib hbmainstd.lib hbmainwin.lib hbcommon.lib user32.lib wsock32.lib advapi32.lib gdi32.lib goto CLEANUP :A_WIN_MSVC_NOT @@ -223,14 +223,14 @@ if "%_HB_MT%" == "MT" set _HBVM_LIB=hbvmmt if "%HB_COMPILER%" == "gcc" set HB_COMPILER=mingw if not "%HB_COMPILER%" == "mingw" goto A_WIN_MINGW_NOT - gcc %_HB_PRG_NAME%.c -O3 -o%_HB_PRG_NAME%.exe %C_USR% -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% -lhbcpage -lhbdebug -l%_HBVM_LIB% -lhbrtl -lgtcgi -lgtgui -lgtpca -lgtstd -lgtwin -lgtwvt -lhblang -lhbrdd -lhbrtl -l%_HBVM_LIB% -lhbmacro -lhbpp -lrddfpt -lrddntx -lrddcdx -lhbhsx -lhbsix -lhbcommon -lhbpcre -lhbzlib + gcc %_HB_PRG_NAME%.c -O3 -o%_HB_PRG_NAME%.exe %C_USR% -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% -lhbcpage -lhbdebug -lhbvm%_HB_MT% -lhbrtl -lgtcgi -lgtgui -lgtpca -lgtstd -lgtwin -lgtwvt -lhblang -lhbrdd -lhbrtl -lhbvm%_HB_MT% -lhbmacro -lhbpp -lrddfpt -lrddntx -lrddcdx -lhbhsx -lhbsix -lhbcommon -lhbpcre -lhbzlib goto CLEANUP :A_WIN_MINGW_NOT if not "%HB_COMPILER%" == "rsxnt" goto A_WIN_RSXNT_NOT - gcc %_HB_PRG_NAME%.c -O3 -Zwin32 %C_USR% -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% -lhbcpage -lhbdebug -l%_HBVM_LIB% -lhbrtl -lgtcgi -lgtgui -lgtpca -lgtstd -lgtwin -lgtwvt -lhblang -lhbrdd -lhbrtl -l%_HBVM_LIB% -lhbmacro -lhbpp -lrddfpt -lrddntx -lrddcdx -lhbhsx -lhbsix -lhbcommon -lhbpcre -lhbzlib + gcc %_HB_PRG_NAME%.c -O3 -Zwin32 %C_USR% -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% -lhbcpage -lhbdebug -lhbvm%_HB_MT% -lhbrtl -lgtcgi -lgtgui -lgtpca -lgtstd -lgtwin -lgtwvt -lhblang -lhbrdd -lhbrtl -lhbvm%_HB_MT% -lhbmacro -lhbpp -lrddfpt -lrddntx -lrddcdx -lhbhsx -lhbsix -lhbcommon -lhbpcre -lhbzlib goto CLEANUP :A_WIN_RSXNT_NOT @@ -242,7 +242,7 @@ if "%_HB_MT%" == "MT" set _HBVM_LIB=hbvmmt echo FILE %_HB_PRG_NAME%.obj >> _hb_mk.tmp echo LIB hbcpage.lib >> _hb_mk.tmp echo LIB hbdebug.lib >> _hb_mk.tmp - echo LIB %_HBVM_LIB%.lib >> _hb_mk.tmp + echo LIB hbvm%_HB_MT%.lib >> _hb_mk.tmp echo LIB hbrtl.lib >> _hb_mk.tmp echo LIB gtcgi.lib >> _hb_mk.tmp echo LIB gtgui.lib >> _hb_mk.tmp diff --git a/harbour/common.mak b/harbour/common.mak index eb4c875d09..29786bb6d2 100644 --- a/harbour/common.mak +++ b/harbour/common.mak @@ -122,6 +122,7 @@ HB_DEST_DIRS = \ $(LIB_DIR) \ \ $(MT_OBJ_DIR) \ + $(MTDLL_OBJ_DIR) \ $(DLL_OBJ_DIR) MAIN_DIR = source\main @@ -274,6 +275,7 @@ HBMAKE_EXE = $(BIN_DIR)\hbmake$(EXEEXT) HB_DLLVER = 11 HARBOUR_DLL = $(BIN_DIR)\$(LIBPREF)harbour-$(HB_DLLVER)-$(HB_CC_NAME)$(DLLEXT) +HARBOURMT_DLL= $(BIN_DIR)\$(LIBPREF)harbourmt-$(HB_DLLVER)-$(HB_CC_NAME)$(DLLEXT) HBTESTDLL_EXE= $(BIN_DIR)\hbtest-dll$(EXEEXT) HBRUNDLL_EXE = $(BIN_DIR)\hbrun-dll$(EXEEXT) @@ -1192,7 +1194,6 @@ DLL_GT_OBJS = \ TMP_DLL_OBJS = \ $(COMMON_LIB_OBJS) \ $(PP_LIB_OBJS) \ - $(VM_DLL_OBJS) \ $(RTL_LIB_OBJS) \ $(MACRO_LIB_OBJS) \ $(LANG_LIB_OBJS) \ @@ -1267,7 +1268,7 @@ HB_BUILD_TARGETS = \ # variable HB_BUILD_DLL to yes !if "$(HB_BUILD_DLL)" != "no" -HB_BUILD_TARGETS = $(HB_BUILD_TARGETS) $(HARBOUR_DLL) $(HBTESTDLL_EXE) $(HBRUNDLL_EXE) +HB_BUILD_TARGETS = $(HB_BUILD_TARGETS) $(HARBOUR_DLL) $(HARBOURMT_DLL) $(HBTESTDLL_EXE) $(HBRUNDLL_EXE) !endif #********************************************************** diff --git a/harbour/make_b32.mak b/harbour/make_b32.mak index d488134db8..902648b15f 100644 --- a/harbour/make_b32.mak +++ b/harbour/make_b32.mak @@ -70,10 +70,12 @@ MKLIB = tlib.exe # Some definitions cannot be kept in common.mak # due to serious limitations of Microsoft Nmake -DLL_OBJS = $(TMP_DLL_OBJS:$(OBJ_DIR)=$(DLL_OBJ_DIR)) - +VMMTDLL_LIB_OBJS = $(VM_DLL_OBJS:$(OBJ_DIR)=$(MTDLL_OBJ_DIR)) VMMT_LIB_OBJS = $(VM_LIB_OBJS:$(OBJ_DIR)=$(MT_OBJ_DIR)) +DLL_OBJS = $(TMP_DLL_OBJS:$(OBJ_DIR)=$(DLL_OBJ_DIR)) $(VM_DLL_OBJS:$(OBJ_DIR)=$(DLL_OBJ_DIR)) +MTDLL_OBJS = $(TMP_DLL_OBJS:$(OBJ_DIR)=$(DLL_OBJ_DIR)) $(VMMTDLL_LIB_OBJS) + #********************************************************** # C compiler, Harbour compiler and Linker flags. #********************************************************** @@ -150,6 +152,17 @@ ARFLAGS = /P64 $(A_USR) $(CC) $(CLIBFLAGS) $(CFLAGSMT) -o$@ $(MT_OBJ_DIR)\$&.c #********************************************************** +#********************************************************** +# General *.c --> *.obj COMPILE rule for SHARED MT Libraries +{$(ALL_SRC_DIRS)}.c{$(MTDLL_OBJ_DIR)}$(OBJEXT): + $(CC) $(CLIBFLAGSDLL) $(CFLAGSMT) -o$@ $< +#********************************************************** +# General *.prg --> *.obj COMPILE rule for SHARED MT Libraries +{$(ALL_SRC_DIRS)}.prg{$(MTDLL_OBJ_DIR)}$(OBJEXT): + $(HB) $(HARBOURFLAGS) -o$(MTDLL_OBJ_DIR)\ $** + $(CC) $(CLIBFLAGSDLL) $(CFLAGSMT) -o$@ $(MTDLL_OBJ_DIR)\$&.c +#********************************************************** + #********************************************************** # General *.c --> *.obj COMPILE rule for SHARED Libraries {$(ALL_LIB_SRC_DIRS)}.c{$(DLL_OBJ_DIR)}$(OBJEXT): @@ -528,6 +541,12 @@ $(HARBOUR_DLL) :: $(DLL_OBJS) c0d32.obj $**, $@,, cw32mt$(RTLIBSUFFIX).lib import32.lib ! #********************************************************** +$(HARBOURMT_DLL) :: BasicLibs BasicExes +$(HARBOURMT_DLL) :: $(MTDLL_OBJS) + $(LINKER) $(LDFLAGSDLL) @&&! +c0d32.obj $**, $@,, cw32mt$(RTLIBSUFFIX).lib import32.lib +! +#********************************************************** # DLL EXECUTABLE Targets #********************************************************** $(HBTESTDLL_EXE) :: BasicLibs BasicExes diff --git a/harbour/make_vc.mak b/harbour/make_vc.mak index 02c3b3156d..2c925b4195 100644 --- a/harbour/make_vc.mak +++ b/harbour/make_vc.mak @@ -87,10 +87,12 @@ MKLIB = lib.exe # Nmake does not support macros in string # substitution, so we have to hardcode it -DLL_OBJS = $(TMP_DLL_OBJS:obj\vc=obj\vc\dll) - +VMMTDLL_LIB_OBJS = $(VM_DLL_OBJS:obj\vc=obj\vc\mt_dll) VMMT_LIB_OBJS = $(VM_LIB_OBJS:obj\vc=obj\vc\mt) +DLL_OBJS = $(TMP_DLL_OBJS:obj\vc=obj\vc\dll) $(VM_DLL_OBJS:obj\vc=obj\vc\dll) +MTDLL_OBJS = $(TMP_DLL_OBJS:obj\vc=obj\vc\dll) $(VMMTDLL_LIB_OBJS) + !if "$(HB_BUILD_WINCE)" == "yes" HARBOURFLAGS = $(HARBOURFLAGS) -gc0 HARBOURFLAGSDLL = $(HARBOURFLAGSDLL) -gc0 @@ -448,6 +450,21 @@ LDFLAGSDLL = /debug $(LDFLAGSDLL) $(CC) $(CLIBFLAGS) $(CFLAGSMT) -Fo$(MT_OBJ_DIR)\ $(MT_OBJ_DIR)\$(*B).c #******************************************************* +#******************************************************* +# General *.c --> *.obj COMPILE rules for SHARED MT Libraries +#******************************************************* +{$(VM_DIR)}.c{$(MTDLL_OBJ_DIR)}$(OBJEXT):: + $(CC) $(CLIBFLAGSDLL) $(CFLAGSMT) -Fo$(MTDLL_OBJ_DIR)\ $< +#******************************************************* + +#******************************************************* +# General *.prg --> *.obj COMPILE rules for SHARED MT Libraries +#******************************************************* +{$(VM_DIR)}.prg{$(MTDLL_OBJ_DIR)}$(OBJEXT): + $(HB) $(HARBOURFLAGS) -o$(MTDLL_OBJ_DIR)\ $< + $(CC) $(CLIBFLAGSDLL) $(CFLAGSMT) -Fo$(MTDLL_OBJ_DIR)\ $(MTDLL_OBJ_DIR)\$(*B).c +#******************************************************* + #******************************************************* # General *.c --> *.obj COMPILE rules for SHARED Libraries #******************************************************* @@ -901,6 +918,15 @@ $(DLL_OBJS: = ^ $(STANDARD_SYSLIBS) <<$(HB_KEEPSTATE) #********************************************************** +$(HARBOURMT_DLL) : $(HB) $(MTDLL_OBJS) + $(LINKER) @<< +$(LDFLAGSDLL) /out:$(@) +/implib:$(@:.dll=.lib) +$(MTDLL_OBJS: = ^ +) +$(STANDARD_SYSLIBS) +<<$(HB_KEEPSTATE) +#********************************************************** # DLL EXECUTABLE Targets #********************************************************** HBTESTDLL_OBJS = $(DLL_OBJ_DIR)\mainstd$(OBJEXT) $(HBTEST_EXE_OBJS:obj\vc=obj\vc\dll)