diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 7bf9dc8b8b..fb3ab31744 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,21 @@ past entries belonging to author(s): Viktor Szakats. */ +2009-08-21 13:59 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) + * config/global.mk + * INSTALL + + Added HB_DYN_INSTALL envvar. This will tell where to copy + Harbour dynamic libraries. By default it's set to HB_LIB_INSTALL + for *nix targets and HB_BIN_INSTALL for non-*nix targets. + + * bin/postinst.bat + - bin/hb-mkdyn.bat + - Deleted batch script to create .dlls. Now done from GNU Make + system. This means it work on all shells we support, not just + nt ones. + ; TOFIX: Delete win-based gcc family support from hb-mkdyn.sh, + now it's redundant. + 2009-08-21 13:46 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * config/os2/gcc.mk % Using $(wildcard) instead of echo trick to delete target lib. diff --git a/harbour/INSTALL b/harbour/INSTALL index 31311d80dd..36b1aec38d 100644 --- a/harbour/INSTALL +++ b/harbour/INSTALL @@ -309,6 +309,7 @@ OPTIONS AVAILABLE WHEN BUILDING HARBOUR - HB_BIN_INSTALL Override directory to install executables - HB_LIB_INSTALL Override directory to install libraries + - HB_DYN_INSTALL Override directory to install dynamic libraries - HB_INC_INSTALL Override directory to install language headers - HB_DOC_INSTALL Override directory to install documentation diff --git a/harbour/bin/hb-mkdyn.bat b/harbour/bin/hb-mkdyn.bat deleted file mode 100644 index f4cb1082a1..0000000000 --- a/harbour/bin/hb-mkdyn.bat +++ /dev/null @@ -1,244 +0,0 @@ -@rem -@rem $Id$ -@rem - -@echo off - -rem --------------------------------------------------------------- -rem Copyright 2009 Viktor Szakats (harbour.01 syenar.hu) -rem See COPYING for licensing terms. -rem --------------------------------------------------------------- - -if not "%OS%" == "Windows_NT" echo ! hb-mkdyn.bat Harbour build script requires Windows NT or upper. -if not "%OS%" == "Windows_NT" goto :EOF - -setlocal - -rem NOTE: .prg files have to be compiled with -n1 -rem NOTE: .c files have to be compiled with -DHB_DYNLIB - -if "%HB_ARCHITECTURE%" == "" ( echo ! HB_ARCHITECTURE needs to be set. && goto END ) -if "%HB_COMPILER%" == "" ( echo ! HB_COMPILER needs to be set. && goto END ) -if "%HB_BIN_INSTALL%" == "" ( echo ! HB_BIN_INSTALL needs to be set. && goto END ) -if "%HB_LIB_INSTALL%" == "" ( echo ! HB_LIB_INSTALL needs to be set. && goto END ) - -set HB_DLL_VERSION=20 -set HB_DLL_LIBS=source\common source\pp source\rtl source\macro source\lang source\codepage source\hbpcre source\hbzlib source\hbextern source\rdd source\rdd\dbfntx source\rdd\dbfnsx source\rdd\dbfcdx source\rdd\dbffpt source\rdd\hbsix source\rdd\hsx source\rdd\usrrdd source\rtl\gtcgi source\rtl\gtpca source\rtl\gtstd source\rtl\gtwvt source\rtl\gtgui -set HB_DLL_LIBS_WIN=source\rtl\gtwin -set HB_DLL_LIBS_ST=source\vm -set HB_DLL_LIBS_MT=source\vm\vmmt -set HB_DLL_LIBS_WATCOM=source\vm\maindllh -set HB_OBJ_EXT=_dyn.obj -set HB_OBJ_PREF= -set HB_OBJ_POST= - -set _DST_NAME_POST= -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_bcc" set _DST_NAME_POST=-bcc -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_msvc64" set _DST_NAME_POST=-x64 -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_mingw64" set _DST_NAME_POST=-x64 -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_pocc64" set _DST_NAME_POST=-x64 -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_iccia64" set _DST_NAME_POST=-ia64 -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_msvcia64" set _DST_NAME_POST=-ia64 -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "wce_msvcarm" set _DST_NAME_POST=-wce-arm -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "wce_mingwarm" set _DST_NAME_POST=-wce-arm -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "wce_poccarm" set _DST_NAME_POST=-wce-arm - -set _DST_NAME_ST=harbour-%HB_DLL_VERSION%%_DST_NAME_POST% -set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION%%_DST_NAME_POST% - -set _LIST_ST=%HB_BIN_INSTALL%\_hballst.txt -set _LIST_MT=%HB_BIN_INSTALL%\_hballmt.txt - -if "%HB_ARCHITECTURE%" == "wce" set HB_DLL_LIBS_WIN= -if not "%HB_COMPILER%" == "watcom" set HB_DLL_LIBS_WATCOM= -if "%HB_COMPILER%" == "mingw" set HB_OBJ_EXT=.o -if "%HB_COMPILER%" == "mingw64" set HB_OBJ_EXT=.o -if "%HB_COMPILER%" == "mingwarm" set HB_OBJ_EXT=.o -if "%HB_COMPILER%" == "cygwin" set HB_OBJ_EXT=.o - -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_icc" goto DO_MSVC -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_iccia64" goto DO_MSVC -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_msvc" goto DO_MSVC -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_msvc64" goto DO_MSVC -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_msvcia64" goto DO_MSVC -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "wce_msvcarm" goto DO_MSVC -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_mingw" goto DO_GCC -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_mingw64" goto DO_GCC -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "wce_mingwarm" goto DO_GCC -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_cygwin" goto DO_GCC -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_bcc" goto DO_BCC -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_watcom" goto DO_WATCOM -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_pocc" goto DO_POCC -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_pocc64" goto DO_POCC -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "wce_poccarm" goto DO_POCC - -echo ! Platform %HB_ARCHITECTURE% / %HB_COMPILER% isn't supported. -goto END - -:DO_MSVC - -echo.> "%_LIST_ST%" -echo.> "%_LIST_MT%" - -call :MAKE_LISTS - -set _BIN_LINK=link -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_icc" set _BIN_LINK=xilink -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_iccia64" set _BIN_LINK=xilink - -if "%HB_ARCHITECTURE%" == "win" set _SYSLIBS=user32.lib ws2_32.lib advapi32.lib gdi32.lib -if "%HB_ARCHITECTURE%" == "wce" set _SYSLIBS=coredll.lib ws2.lib - -echo ! Making %_DST_NAME_ST%.dll... && %_BIN_LINK% /nologo /dll /subsystem:console %HB_USER_DFLAGS% /out:"%HB_BIN_INSTALL%\%_DST_NAME_ST%.dll" @"%_LIST_ST%" %_SYSLIBS% %HB_DLLIBS% -echo ! Making %_DST_NAME_MT%.dll... && %_BIN_LINK% /nologo /dll /subsystem:console %HB_USER_DFLAGS% /out:"%HB_BIN_INSTALL%\%_DST_NAME_MT%.dll" @"%_LIST_MT%" %_SYSLIBS% %HB_DLLIBS% - -if exist "%HB_BIN_INSTALL%\%_DST_NAME_ST%.lib" move /Y "%HB_BIN_INSTALL%\%_DST_NAME_ST%.lib" "%HB_LIB_INSTALL%\%_DST_NAME_ST%.lib" -if exist "%HB_BIN_INSTALL%\%_DST_NAME_MT%.lib" move /Y "%HB_BIN_INSTALL%\%_DST_NAME_MT%.lib" "%HB_LIB_INSTALL%\%_DST_NAME_MT%.lib" -if exist "%HB_BIN_INSTALL%\%_DST_NAME_ST%.exp" move /Y "%HB_BIN_INSTALL%\%_DST_NAME_ST%.exp" "%HB_LIB_INSTALL%\%_DST_NAME_ST%.exp" -if exist "%HB_BIN_INSTALL%\%_DST_NAME_MT%.exp" move /Y "%HB_BIN_INSTALL%\%_DST_NAME_MT%.exp" "%HB_LIB_INSTALL%\%_DST_NAME_MT%.exp" - -del "%_LIST_ST%" -del "%_LIST_MT%" - -goto END - -:DO_GCC - -echo.> "%_LIST_ST%" -echo.> "%_LIST_MT%" - -call :MAKE_LISTS - -rem Can't do this with HB_OBJ_PREF/POST because cmd processor -rem gets confused about the closing paranthesis. [vszakats] -echo.> "%_LIST_ST%_" -for /f %%f in (%_LIST_ST%) do echo INPUT( %%f )>> "%_LIST_ST%_" -echo.> "%_LIST_MT%_" -for /f %%f in (%_LIST_MT%) do echo INPUT( %%f )>> "%_LIST_MT%_" - -del "%_LIST_ST%" -del "%_LIST_MT%" - -if "%HB_ARCHITECTURE%" == "win" set _SYSLIBS=-luser32 -lws2_32 -ladvapi32 -lgdi32 -if "%HB_ARCHITECTURE%" == "wce" set _SYSLIBS=-lcoredll -lws2 - -echo ! Making %_DST_NAME_ST%.dll... && %HB_CCPREFIX%gcc -shared %HB_USER_DFLAGS% -o "%HB_BIN_INSTALL%\%_DST_NAME_ST%.dll" "%_LIST_ST%_" %HB_USER_LDFLAGS% %_SYSLIBS% %HB_DLLIBS% -Wl,--output-def,"%HB_BIN_INSTALL%\%_DST_NAME_ST%.def" -echo ! Making %_DST_NAME_MT%.dll... && %HB_CCPREFIX%gcc -shared %HB_USER_DFLAGS% -o "%HB_BIN_INSTALL%\%_DST_NAME_MT%.dll" "%_LIST_MT%_" %HB_USER_LDFLAGS% %_SYSLIBS% %HB_DLLIBS% -Wl,--output-def,"%HB_BIN_INSTALL%\%_DST_NAME_MT%.def" - -rem ,--out-implib,"%HB_LIB_INSTALL%\lib%_DST_NAME_ST%.a" -rem ,--out-implib,"%HB_LIB_INSTALL%\lib%_DST_NAME_MT%.a" - -del "%_LIST_ST%_" -del "%_LIST_MT%_" - -goto END - -:DO_BCC - -if exist "%_LIST_ST%" del "%_LIST_ST%" -if exist "%_LIST_MT%" del "%_LIST_MT%" - -set HB_OBJ_PREF= -set HB_OBJ_POST= + -call :MAKE_LISTS - -echo. , "%HB_BIN_INSTALL%\%_DST_NAME_ST%.dll",, cw32mt.lib import32.lib %HB_DLLIBS% >> "%_LIST_ST%" -echo. , "%HB_BIN_INSTALL%\%_DST_NAME_MT%.dll",, cw32mt.lib import32.lib %HB_DLLIBS% >> "%_LIST_MT%" - -echo ! Making %_DST_NAME_ST%.dll... && ilink32 -q -Gn -C -aa -Tpd -Gi -x %HB_USER_DFLAGS% c0d32.obj @%_LIST_ST% -echo ! Making %_DST_NAME_MT%.dll... && ilink32 -q -Gn -C -aa -Tpd -Gi -x %HB_USER_DFLAGS% c0d32.obj @%_LIST_MT% - -if exist "%HB_BIN_INSTALL%\%_DST_NAME_ST%.lib" move /Y "%HB_BIN_INSTALL%\%_DST_NAME_ST%.lib" "%HB_LIB_INSTALL%\%_DST_NAME_ST%.lib" -if exist "%HB_BIN_INSTALL%\%_DST_NAME_MT%.lib" move /Y "%HB_BIN_INSTALL%\%_DST_NAME_MT%.lib" "%HB_LIB_INSTALL%\%_DST_NAME_MT%.lib" - -del "%_LIST_ST%" -del "%_LIST_MT%" - -goto END - -:DO_WATCOM - -echo.> "%_LIST_ST%" -echo.> "%_LIST_MT%" - -set HB_OBJ_PREF=FILE ' -set HB_OBJ_POST=' -call :MAKE_LISTS - -echo ! Making %_DST_NAME_ST%.dll... && wlink OP QUIET SYS NT_DLL %HB_USER_DFLAGS% OP IMPLIB NAME '%HB_BIN_INSTALL%\%_DST_NAME_ST%.dll' @'%_LIST_ST%' LIB user32.lib, ws2_32.lib, advapi32.lib, gdi32.lib -echo ! Making %_DST_NAME_MT%.dll... && wlink OP QUIET SYS NT_DLL %HB_USER_DFLAGS% OP IMPLIB NAME '%HB_BIN_INSTALL%\%_DST_NAME_MT%.dll' @'%_LIST_MT%' LIB user32.lib, ws2_32.lib, advapi32.lib, gdi32.lib - -if exist "%HB_BIN_INSTALL%\%_DST_NAME_ST%.lib" move /Y "%HB_BIN_INSTALL%\%_DST_NAME_ST%.lib" "%HB_LIB_INSTALL%\%_DST_NAME_ST%.lib" -if exist "%HB_BIN_INSTALL%\%_DST_NAME_MT%.lib" move /Y "%HB_BIN_INSTALL%\%_DST_NAME_MT%.lib" "%HB_LIB_INSTALL%\%_DST_NAME_MT%.lib" - -del "%_LIST_ST%" -del "%_LIST_MT%" - -goto END - -:DO_POCC - -echo.> "%_LIST_ST%" -echo.> "%_LIST_MT%" - -call :MAKE_LISTS - -if "%HB_ARCHITECTURE%" == "win" set _SYSLIBS=user32.lib ws2_32.lib advapi32.lib gdi32.lib -if "%HB_ARCHITECTURE%" == "wce" set _SYSLIBS=coredll.lib ws2.lib - -echo ! Making %_DST_NAME_ST%.dll... && polink /nologo /dll %HB_USER_DFLAGS% /out:"%HB_BIN_INSTALL%\%_DST_NAME_ST%.dll" @%_LIST_ST% %_SYSLIBS% %HB_DLLIBS% -echo ! Making %_DST_NAME_MT%.dll... && polink /nologo /dll %HB_USER_DFLAGS% /out:"%HB_BIN_INSTALL%\%_DST_NAME_MT%.dll" @%_LIST_MT% %_SYSLIBS% %HB_DLLIBS% - -if exist "%HB_BIN_INSTALL%\%_DST_NAME_ST%.lib" move /Y "%HB_BIN_INSTALL%\%_DST_NAME_ST%.lib" "%HB_LIB_INSTALL%\%_DST_NAME_ST%.lib" -if exist "%HB_BIN_INSTALL%\%_DST_NAME_MT%.lib" move /Y "%HB_BIN_INSTALL%\%_DST_NAME_MT%.lib" "%HB_LIB_INSTALL%\%_DST_NAME_MT%.lib" -if exist "%HB_BIN_INSTALL%\%_DST_NAME_ST%.exp" move /Y "%HB_BIN_INSTALL%\%_DST_NAME_ST%.exp" "%HB_LIB_INSTALL%\%_DST_NAME_ST%.exp" -if exist "%HB_BIN_INSTALL%\%_DST_NAME_MT%.exp" move /Y "%HB_BIN_INSTALL%\%_DST_NAME_MT%.exp" "%HB_LIB_INSTALL%\%_DST_NAME_MT%.exp" - -del "%_LIST_ST%" -del "%_LIST_MT%" - -goto END - -:MAKE_LISTS - -rem echo ! Making .dlls for %HB_ARCHITECTURE% / %HB_COMPILER%... - -rem ; Extract neutral objects -for %%f in (%HB_DLL_LIBS% %HB_DLL_LIBS_WIN% %HB_DLL_LIBS_WATCOM%) do ( - if exist "%%f\%HB_OBJ_DIR%" ( - rem echo ! Processing directory: %%f\%HB_OBJ_DIR% - dir /b "%%f\%HB_OBJ_DIR%\*%HB_OBJ_EXT%" > "%HB_BIN_INSTALL%\_hboraw.txt" - for /F %%p in (%HB_BIN_INSTALL%\_hboraw.txt) do ( - echo %HB_OBJ_PREF%%%f\%HB_OBJ_DIR%\%%p%HB_OBJ_POST%>> "%_LIST_ST%" - echo %HB_OBJ_PREF%%%f\%HB_OBJ_DIR%\%%p%HB_OBJ_POST%>> "%_LIST_MT%" - ) - del "%HB_BIN_INSTALL%\_hboraw.txt" - ) else ( echo ! Directory not found: %%f\%HB_OBJ_DIR% ) -) - -rem ; Extract ST objects -for %%f in (%HB_DLL_LIBS_ST%) do ( - if exist "%%f\%HB_OBJ_DIR%" ( - rem echo ! Processing directory: %%f\%HB_OBJ_DIR% - dir /b "%%f\%HB_OBJ_DIR%\*%HB_OBJ_EXT%" > "%HB_BIN_INSTALL%\_hboraw.txt" - for /F %%p in (%HB_BIN_INSTALL%\_hboraw.txt) do echo %HB_OBJ_PREF%%%f\%HB_OBJ_DIR%\%%p%HB_OBJ_POST%>> "%_LIST_ST%" - ) - del "%HB_BIN_INSTALL%\_hboraw.txt" - ) else ( echo ! Directory not found: %%f\%HB_OBJ_DIR% ) -) - -rem ; Extract MT objects -for %%f in (%HB_DLL_LIBS_MT%) do ( - if exist "%%f\%HB_OBJ_DIR%" ( - rem echo ! Processing directory: %%f\%HB_OBJ_DIR% - dir /b "%%f\%HB_OBJ_DIR%\*%HB_OBJ_EXT%" > "%HB_BIN_INSTALL%\_hboraw.txt" - for /F %%p in (%HB_BIN_INSTALL%\_hboraw.txt) do echo %HB_OBJ_PREF%%%f\%HB_OBJ_DIR%\%%p%HB_OBJ_POST%>> "%_LIST_MT%" - del "%HB_BIN_INSTALL%\_hboraw.txt" - ) else ( echo ! Directory not found: %%f\%HB_OBJ_DIR% ) -) - -goto :EOF - -:END - -endlocal diff --git a/harbour/bin/postinst.bat b/harbour/bin/postinst.bat index 7e3c2c2b9a..e77f66bf07 100644 --- a/harbour/bin/postinst.bat +++ b/harbour/bin/postinst.bat @@ -55,8 +55,6 @@ goto INST_%HB_ARCHITECTURE% if "%HB_BUILD_DLL%" == "no" goto _SKIP_DLL_BIN - call "%~dp0hb-mkdyn.bat" - if exist "%HB_BIN_INSTALL%\*.dll" ( echo ! Making shared version of Harbour binaries... "%HB_HOST_BIN_DIR%\hbmk2" -q0 -lng=en-EN -shared "-o%HB_BIN_INSTALL%\hbrun-dll" "%~dp0..\utils\hbrun\hbrun.hbp" diff --git a/harbour/config/global.mk b/harbour/config/global.mk index bac357fc8d..bc3f078816 100644 --- a/harbour/config/global.mk +++ b/harbour/config/global.mk @@ -265,6 +265,9 @@ ifeq ($(HB_INIT_DONE),) ifneq ($(HB_LIB_INSTALL),) $(info ! HB_LIB_INSTALL: $(HB_LIB_INSTALL)) endif + ifneq ($(HB_DYN_INSTALL),) + $(info ! HB_DYN_INSTALL: $(HB_DYN_INSTALL)) + endif ifneq ($(HB_INC_INSTALL),) $(info ! HB_INC_INSTALL: $(HB_INC_INSTALL)) endif @@ -716,10 +719,10 @@ ARCH_COMP := $(HB_ARCHITECTURE)/$(HB_COMPILER)$(subst \,/,$(HB_BUILD_NAME)) OBJ_DIR := obj/$(ARCH_COMP) BIN_DIR := $(TOP)$(ROOT)bin/$(ARCH_COMP) LIB_DIR := $(TOP)$(ROOT)lib/$(ARCH_COMP) -ifeq ($(HB_OS_UNIX),yes) - DYN_DIR := $(LIB_DIR) -else +ifeq ($(HB_OS_UNIX),no) DYN_DIR := $(BIN_DIR) +else + DYN_DIR := $(LIB_DIR) endif # define PKG_DIR only if run from root Makefile ifeq ($(ROOT),./) @@ -970,6 +973,7 @@ ifeq ($(HB_BUILD_PKG),yes) HB_BIN_INSTALL := HB_INC_INSTALL := HB_LIB_INSTALL := + HB_DYN_INSTALL := HB_DOC_INSTALL := endif else @@ -1042,6 +1046,13 @@ ifneq ($(HB_INSTALL_PREFIX),) ifeq ($(HB_LIB_INSTALL),) export HB_LIB_INSTALL := $(HB_INSTALL_PREFIX)$(DIRSEP)lib$(LIBPOSTFIX) endif + ifeq ($(HB_DYN_INSTALL),) + ifeq ($(HB_OS_UNIX),no) + export HB_DYN_INSTALL := $(HB_BIN_INSTALL) + else + export HB_DYN_INSTALL := $(HB_LIB_INSTALL) + endif + endif ifeq ($(HB_INC_INSTALL),) ifneq ($(HB_INSTALL_PREFIX),$(HB_INSTALL_PREFIX_TOP)) export HB_INC_INSTALL := $(HB_INSTALL_PREFIX)$(DIRSEP)include$(INCPOSTFIX)