From 3bd5b77f25974740719e3be2cf7b6af7ec8757fc Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Thu, 13 Aug 2009 10:31:58 +0000 Subject: [PATCH] 2009-08-13 12:27 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * INSTALL * OS/2 prerequisites added. (currently not relevant, but anyway) * bin/postinst.bat * bin/hb-mkdyn.bat * make_gnu.bat + Reworked the way .dll generation is done in Harbour build process. New method solves the problem in one pass, instead of invoking make twice and requiring starter script to control this. The new trick is that CC_RULE will generate both dynamic and static objects for libs included in the .dll for compilers where such trick is necessary (currently all win/wce compilers except gcc based ones). * Changed HB_BUILD_LOG forming. Since at this point ARCH/COMP values aren't known (and just for this purpose it's not worth to maintain parallel detection logic in start script), the automatically generated log file will contain the date/time. Maybe even this will be dropped in the future. Since this is the only remaining logic in starter script (plus finding correct GNU Make, but that's even smaller role) ; I didn't test watcom yet, plus mpkg_gnu.bat isn't working yet, it needs to be moved to postinst phase. ; After these changes, there is basically no need for make starter scripts. Maybe I'll even remove included make tools to make things cleaner/leaner. ; TODO: Revise starter .sh scripts. ; TODO: mpkg_gnu.bat rework to run from postinst. ; TODO: Do some cleanup, remove redundancy in settings, etcetc. ; TOFIX: Fix watcom .dll generation. * config/global.cf ! Deleted double MAKE info line. + Showing detected shell in verbose mode. + Added mkdir/rm detection for OS/2 shells. (commented) % Optimized HB_BIN_COMPILE detection by using $(realpath) function. Now it's only detected once per make run. + Added HB_*_INSTALL value defaulting similar to make_gnu.sh for *nix platforms. (adding /harbour postfix to lib/inc dirs when HB_INSTALL_PREFIX is system location (/usr or /opt). Please review. * config/lib.cf + Added HB_DYN_COMPILE to control compiling for dynamic libs in a sperate command. + Added HB_DYN_LIBS to hold list of libs which should be built with separate command for dynamic libs. * config/rules.cf + Added logic for duplicate CC_RULE. TODO: Notice that it's not yet working when CC_RULE is overridden on compiler level. Help would be appreciate here. * config/wce/msvcarm.cf * config/wce/poccarm.cf * config/win/watcom.cf * config/win/icc.cf * config/win/msvc.cf * config/win/xcc.cf * config/win/pocc.cf * config/win/bcc.cf + Enabled HB_DYN_COMPILE for these compilers. * contrib/gtqtc/gtqtc.hbc ! Fixed lib order for mingw, supc++ moved to the end of list. * external/sqlite3/Makefile * external/libhpdf/Makefile * external/libpng/Makefile * external/Makefile * source/rtl/gtxwc/Makefile * source/rtl/gtcrs/Makefile * source/rtl/gtsln/Makefile * contrib/Makefile * contrib/gtalleg/Makefile * contrib/hbmysql/Makefile * contrib/hbodbc/Makefile * contrib/hbsqlit3/Makefile * contrib/hbqt/Makefile * contrib/hbfbird/Makefile * contrib/hbcurl/Makefile * contrib/gtqtc/Makefile * contrib/rddsql/sddmy/Makefile * contrib/rddsql/sddpg/Makefile * contrib/rddsql/sddfb/Makefile * contrib/rddsql/sddodbc/Makefile * contrib/hbhpdf/Makefile * contrib/hbpgsql/Makefile * contrib/rddads/Makefile * contrib/hbfimage/Makefile * contrib/hbgd/Makefile * contrib/hbssl/Makefile + Indentation. % Using ':=' in '*_OK := $(foreach...' expressions, instead of former unsafe '+='. * config/win/mingw.cf * config/wce/mingwarm.cf * config/win/cygwin.cf + Using 'crs' instead of 'r' as AR command. * config/install.cf + Don't define rule if INSTALL_RULE is empty. Cannot currently happen. * config/header.cf % Minor optimization. --- harbour/ChangeLog | 106 +++++ harbour/INSTALL | 7 +- harbour/bin/hb-mkdyn.bat | 509 +++++++----------------- harbour/bin/postinst.bat | 25 +- harbour/config/global.cf | 34 +- harbour/config/header.cf | 5 +- harbour/config/install.cf | 2 + harbour/config/lib.cf | 2 + harbour/config/rules.cf | 12 + harbour/config/wce/mingwarm.cf | 2 +- harbour/config/wce/msvcarm.cf | 2 + harbour/config/wce/poccarm.cf | 2 + harbour/config/win/bcc.cf | 2 + harbour/config/win/cygwin.cf | 2 +- harbour/config/win/icc.cf | 2 + harbour/config/win/mingw.cf | 2 +- harbour/config/win/msvc.cf | 2 + harbour/config/win/pocc.cf | 2 + harbour/config/win/watcom.cf | 2 + harbour/config/win/xcc.cf | 2 + harbour/contrib/Makefile | 2 +- harbour/contrib/gtalleg/Makefile | 2 +- harbour/contrib/gtqtc/Makefile | 2 +- harbour/contrib/gtqtc/gtqtc.hbc | 2 +- harbour/contrib/hbcurl/Makefile | 2 +- harbour/contrib/hbfbird/Makefile | 2 +- harbour/contrib/hbfimage/Makefile | 2 +- harbour/contrib/hbgd/Makefile | 2 +- harbour/contrib/hbhpdf/Makefile | 2 +- harbour/contrib/hbmysql/Makefile | 2 +- harbour/contrib/hbodbc/Makefile | 2 +- harbour/contrib/hbpgsql/Makefile | 2 +- harbour/contrib/hbqt/Makefile | 2 +- harbour/contrib/hbsqlit3/Makefile | 2 +- harbour/contrib/hbssl/Makefile | 2 +- harbour/contrib/rddads/Makefile | 2 +- harbour/contrib/rddsql/sddfb/Makefile | 2 +- harbour/contrib/rddsql/sddmy/Makefile | 2 +- harbour/contrib/rddsql/sddodbc/Makefile | 2 +- harbour/contrib/rddsql/sddpg/Makefile | 2 +- harbour/external/Makefile | 2 +- harbour/external/libhpdf/Makefile | 73 ++-- harbour/external/libpng/Makefile | 38 +- harbour/external/sqlite3/Makefile | 47 +-- harbour/make_gnu.bat | 196 +-------- harbour/source/rtl/gtcrs/Makefile | 6 +- harbour/source/rtl/gtsln/Makefile | 2 +- harbour/source/rtl/gtxwc/Makefile | 2 +- 48 files changed, 433 insertions(+), 697 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 45490b5af5..d31275b112 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,112 @@ past entries belonging to author(s): Viktor Szakats. */ +2009-08-13 12:27 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) + * INSTALL + * OS/2 prerequisites added. (currently not relevant, but anyway) + + * bin/postinst.bat + * bin/hb-mkdyn.bat + * make_gnu.bat + + Reworked the way .dll generation is done in Harbour build process. + New method solves the problem in one pass, instead of invoking + make twice and requiring starter script to control this. + The new trick is that CC_RULE will generate both dynamic and static + objects for libs included in the .dll for compilers where such trick + is necessary (currently all win/wce compilers except gcc based ones). + * Changed HB_BUILD_LOG forming. Since at this point ARCH/COMP values + aren't known (and just for this purpose it's not worth to maintain + parallel detection logic in start script), the automatically + generated log file will contain the date/time. Maybe even this will + be dropped in the future. Since this is the only remaining logic + in starter script (plus finding correct GNU Make, but that's even + smaller role) + ; I didn't test watcom yet, plus mpkg_gnu.bat isn't working yet, + it needs to be moved to postinst phase. + ; After these changes, there is basically no need for make starter + scripts. Maybe I'll even remove included make tools to make things + cleaner/leaner. + ; TODO: Revise starter .sh scripts. + ; TODO: mpkg_gnu.bat rework to run from postinst. + ; TODO: Do some cleanup, remove redundancy in settings, etcetc. + ; TOFIX: Fix watcom .dll generation. + + * config/global.cf + ! Deleted double MAKE info line. + + Showing detected shell in verbose mode. + + Added mkdir/rm detection for OS/2 shells. (commented) + % Optimized HB_BIN_COMPILE detection by using $(realpath) function. + Now it's only detected once per make run. + + Added HB_*_INSTALL value defaulting similar to make_gnu.sh + for *nix platforms. (adding /harbour postfix to lib/inc dirs when + HB_INSTALL_PREFIX is system location (/usr or /opt). Please review. + + * config/lib.cf + + Added HB_DYN_COMPILE to control compiling for dynamic libs in + a sperate command. + + Added HB_DYN_LIBS to hold list of libs which should be built + with separate command for dynamic libs. + + * config/rules.cf + + Added logic for duplicate CC_RULE. + TODO: Notice that it's not yet working when CC_RULE is overridden + on compiler level. Help would be appreciate here. + + * config/wce/msvcarm.cf + * config/wce/poccarm.cf + * config/win/watcom.cf + * config/win/icc.cf + * config/win/msvc.cf + * config/win/xcc.cf + * config/win/pocc.cf + * config/win/bcc.cf + + Enabled HB_DYN_COMPILE for these compilers. + + * contrib/gtqtc/gtqtc.hbc + ! Fixed lib order for mingw, supc++ moved to the end of list. + + * external/sqlite3/Makefile + * external/libhpdf/Makefile + * external/libpng/Makefile + * external/Makefile + * source/rtl/gtxwc/Makefile + * source/rtl/gtcrs/Makefile + * source/rtl/gtsln/Makefile + * contrib/Makefile + * contrib/gtalleg/Makefile + * contrib/hbmysql/Makefile + * contrib/hbodbc/Makefile + * contrib/hbsqlit3/Makefile + * contrib/hbqt/Makefile + * contrib/hbfbird/Makefile + * contrib/hbcurl/Makefile + * contrib/gtqtc/Makefile + * contrib/rddsql/sddmy/Makefile + * contrib/rddsql/sddpg/Makefile + * contrib/rddsql/sddfb/Makefile + * contrib/rddsql/sddodbc/Makefile + * contrib/hbhpdf/Makefile + * contrib/hbpgsql/Makefile + * contrib/rddads/Makefile + * contrib/hbfimage/Makefile + * contrib/hbgd/Makefile + * contrib/hbssl/Makefile + + Indentation. + % Using ':=' in '*_OK := $(foreach...' expressions, instead of + former unsafe '+='. + + * config/win/mingw.cf + * config/wce/mingwarm.cf + * config/win/cygwin.cf + + Using 'crs' instead of 'r' as AR command. + + * config/install.cf + + Don't define rule if INSTALL_RULE is empty. + Cannot currently happen. + + * config/header.cf + % Minor optimization. + 2009-08-13 09:30 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/include/hbthread.h * pacified MinGW warnings caused by recent modification diff --git a/harbour/INSTALL b/harbour/INSTALL index 9f41c8f2ef..82fcfa5ef5 100644 --- a/harbour/INSTALL +++ b/harbour/INSTALL @@ -109,7 +109,12 @@ HOW TO BUILD AND INSTALL HARBOUR FROM SOURCE ---- You can use OS/2, Windows NT compatible, or Linux hosts to create OS/2 builds. - Some tricks are required when non-OS/2 host is used, see in examples. + Some config tricks are required when non-OS/2 host is used, see in + examples. + + When OS/2 host is used, GNU mkdir and rm utilities will have to + present in PATH. You can get them from this link: + ftp://hobbes.nmsu.edu/pub/os2/util/file/gnufutil.zip > set HB_COMPILER=<[gcc]|watcom> > set HB_INSTALL_PREFIX= diff --git a/harbour/bin/hb-mkdyn.bat b/harbour/bin/hb-mkdyn.bat index da9d64d364..89f62b3479 100644 --- a/harbour/bin/hb-mkdyn.bat +++ b/harbour/bin/hb-mkdyn.bat @@ -23,12 +23,60 @@ 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=hbcommon hbpp hbrtl hbmacro hblang hbcpage hbpcre hbzlib hbextern hbrdd rddntx rddnsx rddcdx rddfpt hbsix hbhsx hbusrrdd gtcgi gtpca gtstd gtwvt gtgui -set HB_DLL_LIBS_WIN=gtwin -set HB_DLL_LIBS_ST=hbvm -set HB_DLL_LIBS_MT=hbvmmt +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=.obj +set HB_OBJ_DIR=obj\%HB_ARCHITECTURE%\%HB_COMPILER%%HB_BUILD_NAME% +set HB_OBJ_PREF= +set HB_OBJ_POST= -if "%HB_ARCHITECTURE%" == "wce" set HB_DLL_LIBS_WIN= +set _DST_NAME_ST= +set _DST_NAME_MT= +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_icc" set _DST_NAME_ST=harbour-%HB_DLL_VERSION% +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_icc" set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION% +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_iccia64" set _DST_NAME_ST=harbour-%HB_DLL_VERSION%-ia64 +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_iccia64" set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION%-ia64 +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_msvc" set _DST_NAME_ST=harbour-%HB_DLL_VERSION% +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_msvc" set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION% +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "wce_msvcarm" set _DST_NAME_ST=harbour-%HB_DLL_VERSION%-arm +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "wce_msvcarm" set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION%-arm +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_msvc64" set _DST_NAME_ST=harbour-%HB_DLL_VERSION%-x64 +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_msvc64" set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION%-x64 +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_msvcia64" set _DST_NAME_ST=harbour-%HB_DLL_VERSION%-ia64 +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_msvcia64" set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION%-ia64 +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_mingw" set _DST_NAME_ST=harbour-%HB_DLL_VERSION% +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_mingw" set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION% +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_mingw64" set _DST_NAME_ST=harbour-%HB_DLL_VERSION%-x64 +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_mingw64" set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION%-x64 +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "wce_mingwarm" set _DST_NAME_ST=harbour-%HB_DLL_VERSION%-arm +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "wce_mingwarm" set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION%-arm +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_cygwin" set _DST_NAME_ST=harbour-%HB_DLL_VERSION% +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_cygwin" set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION% +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_bcc" set _DST_NAME_ST=harbour-%HB_DLL_VERSION%-bcc +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_bcc" set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION%-bcc +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_watcom" set _DST_NAME_ST=harbour-%HB_DLL_VERSION% +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_watcom" set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION% +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_pocc" set _DST_NAME_ST=harbour-%HB_DLL_VERSION% +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_pocc" set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION% +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_pocc64" set _DST_NAME_ST=harbour-%HB_DLL_VERSION%-x64 +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_pocc64" set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION%-x64 +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "wce_poccarm" set _DST_NAME_ST=harbour-%HB_DLL_VERSION%-arm +if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "wce_poccarm" set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION%-arm + +if "%_DST_NAME_ST%" == "" ( echo Harbour .dll creation isn't supported for this platform. && goto END ) + +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 + +echo.> _hballst.txt +echo.> _hballmt.txt if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_icc" goto DO_MSVC if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_iccia64" goto DO_MSVC @@ -51,263 +99,82 @@ goto END :DO_MSVC -echo Making .dlls for %HB_ARCHITECTURE% / %HB_COMPILER%... +call :MAKE_LISTS -md _dll -cd _dll - -set _BIN_LIB=lib set _BIN_LINK=link -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_icc" set _BIN_LIB=xilib if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_icc" set _BIN_LINK=xilink -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_iccia64" set _BIN_LIB=xilib if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_iccia64" set _BIN_LINK=xilink -rem ; Extract neutral objects -echo.> _hboneut.txt -for %%f in (%HB_DLL_LIBS% %HB_DLL_LIBS_WIN%) do ( - if exist "%HB_LIB_INSTALL%\%%f.lib" ( - echo Processing library: %%f - %_BIN_LIB% "%HB_LIB_INSTALL%\%%f.lib" /nologo /list > _hboraw.txt - for /F %%p in (_hboraw.txt) do ( - %_BIN_LIB% "%HB_LIB_INSTALL%\%%f.lib" /nologo /extract:%%p /out:%%p - echo %%p>> _hboneut.txt - ) - del _hboraw.txt - ) else ( echo Library not found: %HB_LIB_INSTALL%\%%f.lib ) -) - -md _st -cd _st -rem ; Extract ST objects -echo.> ..\_hbost.txt -for %%f in (%HB_DLL_LIBS_ST%) do ( - if exist "%HB_LIB_INSTALL%\%%f.lib" ( - echo Processing library: %%f - %_BIN_LIB% "%HB_LIB_INSTALL%\%%f.lib" /nologo /list > _hboraw.txt - for /F %%p in (_hboraw.txt) do ( - if not "%%p" == "maindll.obj" ( - if not "%%p" == "maindllp.obj" ( - %_BIN_LIB% "%HB_LIB_INSTALL%\%%f.lib" /nologo /extract:%%p /out:%%p - echo _st\%%p>> ..\_hbost.txt - ) - ) - ) - del _hboraw.txt - ) else ( echo Library not found: %HB_LIB_INSTALL%\%%f.lib ) -) -cd .. - -md _mt -cd _mt -rem ; Extract MT objects -echo.> ..\_hbomt.txt -for %%f in (%HB_DLL_LIBS_MT%) do ( - if exist "%HB_LIB_INSTALL%\%%f.lib" ( - echo Processing library: %%f - %_BIN_LIB% "%HB_LIB_INSTALL%\%%f.lib" /nologo /list > _hboraw.txt - for /F %%p in (_hboraw.txt) do ( - if not "%%p" == "maindll.obj" ( - if not "%%p" == "maindllp.obj" ( - %_BIN_LIB% "%HB_LIB_INSTALL%\%%f.lib" /nologo /extract:%%p /out:%%p - echo _mt\%%p>> ..\_hbomt.txt - ) - ) - ) - del _hboraw.txt - ) else ( echo Library not found: %HB_LIB_INSTALL%\%%f.lib ) -) -cd .. - -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_icc" set _DST_NAME_ST=harbour-%HB_DLL_VERSION% -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_icc" set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION% -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_iccia64" set _DST_NAME_ST=harbour-%HB_DLL_VERSION%-ia64 -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_iccia64" set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION%-ia64 -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_msvc" set _DST_NAME_ST=harbour-%HB_DLL_VERSION% -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_msvc" set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION% -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "wce_msvcarm" set _DST_NAME_ST=harbour-%HB_DLL_VERSION%-arm -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "wce_msvcarm" set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION%-arm -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_msvc64" set _DST_NAME_ST=harbour-%HB_DLL_VERSION%-x64 -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_msvc64" set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION%-x64 -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_msvcia64" set _DST_NAME_ST=harbour-%HB_DLL_VERSION%-ia64 -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_msvcia64" set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION%-ia64 - if "%HB_ARCHITECTURE%" == "win" set _SYSLIBS=user32.lib ws2_32.lib advapi32.lib gdi32.lib if "%HB_ARCHITECTURE%" == "wce" set _SYSLIBS=wininet.lib ws2.lib -echo Making %_DST_NAME_ST%.dll... && %_BIN_LINK% /nologo /dll /out:"%HB_BIN_INSTALL%\%_DST_NAME_ST%.dll" @_hboneut.txt @_hbost.txt %_SYSLIBS% %HB_DLLIBS% -echo Making %_DST_NAME_MT%.dll... && %_BIN_LINK% /nologo /dll /out:"%HB_BIN_INSTALL%\%_DST_NAME_MT%.dll" @_hboneut.txt @_hbomt.txt %_SYSLIBS% %HB_DLLIBS% +echo Making %_DST_NAME_ST%.dll... && %_BIN_LINK% /nologo /dll /subsystem:console /out:"%HB_BIN_INSTALL%\%_DST_NAME_ST%.dll" @_hballst.txt %_SYSLIBS% %HB_DLLLIBS% +echo Making %_DST_NAME_MT%.dll... && %_BIN_LINK% /nologo /dll /subsystem:console /out:"%HB_BIN_INSTALL%\%_DST_NAME_MT%.dll" @_hballmt.txt %_SYSLIBS% %HB_DLLLIBS% if exist "%HB_BIN_INSTALL%\%_DST_NAME_ST%.lib" move "%HB_BIN_INSTALL%\%_DST_NAME_ST%.lib" "%HB_LIB_INSTALL%\%_DST_NAME_ST%.lib" if exist "%HB_BIN_INSTALL%\%_DST_NAME_MT%.lib" move "%HB_BIN_INSTALL%\%_DST_NAME_MT%.lib" "%HB_LIB_INSTALL%\%_DST_NAME_MT%.lib" if exist "%HB_BIN_INSTALL%\%_DST_NAME_ST%.exp" move "%HB_BIN_INSTALL%\%_DST_NAME_ST%.exp" "%HB_LIB_INSTALL%\%_DST_NAME_ST%.exp" if exist "%HB_BIN_INSTALL%\%_DST_NAME_MT%.exp" move "%HB_BIN_INSTALL%\%_DST_NAME_MT%.exp" "%HB_LIB_INSTALL%\%_DST_NAME_MT%.exp" -rem ; Cleanup -for /F %%o in (_hbost.txt) do ( del %%o ) -del _hbost.txt -rmdir _st +goto END -for /F %%o in (_hbomt.txt) do ( del %%o ) -del _hbomt.txt -rmdir _mt +:DO_GCC -for /F %%o in (_hboneut.txt) do ( del %%o ) -del _hboneut.txt -cd .. -rmdir _dll +call :MAKE_LISTS + +setlocal enabledelayedexpansion +set _HBOST= +for /f %%f in (_hballst.txt) do set _HBOST=!_HBOST! %%f +set _HBOMT= +for /f %%f in (_hballmt.txt) do set _HBOMT=!_HBOMT! %%f + +if "%HB_ARCHITECTURE%" == "win" set _SYSLIBS=-luser32 -lws2_32 -ladvapi32 -lgdi32 +if "%HB_ARCHITECTURE%" == "wce" set _SYSLIBS=-lwininet -lws2 + +echo Making %_DST_NAME_ST%.dll... && %HB_CCPREFIX%gcc -shared -o "%HB_BIN_INSTALL%\%_DST_NAME_ST%.dll" %_HBOST% %HB_USER_LDFLAGS% %_SYSLIBS% %HB_DLLLIBS% -Wl,--output-def,"%HB_BIN_INSTALL%\%_DST_NAME_ST%.def" +echo Making %_DST_NAME_MT%.dll... && %HB_CCPREFIX%gcc -shared -o "%HB_BIN_INSTALL%\%_DST_NAME_MT%.dll" %_HBOMT% %HB_USER_LDFLAGS% %_SYSLIBS% %HB_DLLLIBS% -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" goto END :DO_BCC -echo Making .dlls for %HB_ARCHITECTURE% / %HB_COMPILER%... +echo. c0d32%HB_OBJ_EXT% +> _hballst.txt +echo. c0d32%HB_OBJ_EXT% +> _hballmt.txt -md _dll -cd _dll +set HB_OBJ_PREF= +set HB_OBJ_POST= + +call :MAKE_LISTS -echo. c0d32.obj +> _hballst.txt -echo. c0d32.obj +> _hballmt.txt - -rem ; Extract neutral objects -echo.> _hboneut.txt -for %%f in (%HB_DLL_LIBS% %HB_DLL_LIBS_WIN%) do ( - if exist "%HB_LIB_INSTALL%\%%f.lib" ( - echo Processing library: %%f - tlib "%HB_LIB_INSTALL%\%%f.lib", _hboraw.txt > nul - echo.> _hboraw2.txt - for /F "tokens=1,2" %%f in (_hboraw.txt) do ( - if "%%g" == "size" ( - echo %%f.obj >> _hboraw2.txt - ) - ) - del _hboraw.txt - for /F %%p in (_hboraw2.txt) do ( - tlib "%HB_LIB_INSTALL%\%%f.lib" * %%p > nul - echo %%p +>> _hballst.txt - echo %%p +>> _hballmt.txt - echo %%p>> _hboneut.txt - ) - del _hboraw2.txt - ) else ( echo Library not found: %HB_LIB_INSTALL%\%%f.lib ) -) - -md _st -cd _st -rem ; Extract ST objects -echo.> ..\_hbost.txt -for %%f in (%HB_DLL_LIBS_ST%) do ( - if exist "%HB_LIB_INSTALL%\%%f.lib" ( - echo Processing library: %%f - tlib "%HB_LIB_INSTALL%\%%f.lib", _hboraw.txt > nul - echo.> _hboraw2.txt - for /F "tokens=1,2" %%f in (_hboraw.txt) do ( - if "%%g" == "size" ( - echo %%f.obj >> _hboraw2.txt - ) - ) - del _hboraw.txt - for /F %%p in (_hboraw2.txt) do ( - if not "%%p" == "maindll.obj" ( - if not "%%p" == "maindllp.obj" ( - tlib "%HB_LIB_INSTALL%\%%f.lib" * %%p > nul - echo _st\%%p +>> ..\_hballst.txt - echo _st\%%p>> ..\_hbost.txt - ) - ) - ) - del _hboraw2.txt - ) else ( echo Library not found: %HB_LIB_INSTALL%\%%f.lib ) -) -cd .. - -md _mt -cd _mt -rem ; Extract MT objects -echo.> ..\_hbomt.txt -for %%f in (%HB_DLL_LIBS_MT%) do ( - if exist "%HB_LIB_INSTALL%\%%f.lib" ( - echo Processing library: %%f - tlib "%HB_LIB_INSTALL%\%%f.lib", _hboraw.txt > nul - echo.> _hboraw2.txt - for /F "tokens=1,2" %%f in (_hboraw.txt) do ( - if "%%g" == "size" ( - echo %%f.obj >> _hboraw2.txt - ) - ) - del _hboraw.txt - for /F %%p in (_hboraw2.txt) do ( - if not "%%p" == "maindll.obj" ( - if not "%%p" == "maindllp.obj" ( - tlib "%HB_LIB_INSTALL%\%%f.lib" * %%p > nul - echo _mt\%%p +>> ..\_hballmt.txt - echo _mt\%%p>> ..\_hbomt.txt - ) - ) - ) - del _hboraw2.txt - ) else ( echo Library not found: %HB_LIB_INSTALL%\%%f.lib ) -) -cd .. - -set _DST_NAME_ST=harbour-%HB_DLL_VERSION%-bcc -set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION%-bcc - -echo. , "%HB_BIN_INSTALL%\%_DST_NAME_ST%.dll",, cw32mt.lib import32.lib %HB_DLLIBS% >> _hballst.txt -echo. , "%HB_BIN_INSTALL%\%_DST_NAME_MT%.dll",, cw32mt.lib import32.lib %HB_DLLIBS% >> _hballmt.txt - -echo Making %_DST_NAME_ST%.dll... && ilink32 -q -Gn -C -aa -Tpd -Gi -x c0d32.obj @_hballst.txt -echo Making %_DST_NAME_MT%.dll... && ilink32 -q -Gn -C -aa -Tpd -Gi -x c0d32.obj @_hballmt.txt +echo Making %_DST_NAME_ST%.dll... && ilink32 -q -Gn -C -aa -Tpd -Gi -x @_hballst.txt, "%HB_BIN_INSTALL%\%_DST_NAME_ST%.dll",, cw32mt.lib import32.lib %HB_DLLLIBS% +echo Making %_DST_NAME_MT%.dll... && ilink32 -q -Gn -C -aa -Tpd -Gi -x @_hballmt.txt, "%HB_BIN_INSTALL%\%_DST_NAME_MT%.dll",, cw32mt.lib import32.lib %HB_DLLLIBS% if exist "%HB_BIN_INSTALL%\%_DST_NAME_ST%.lib" move "%HB_BIN_INSTALL%\%_DST_NAME_ST%.lib" "%HB_LIB_INSTALL%\%_DST_NAME_ST%.lib" if exist "%HB_BIN_INSTALL%\%_DST_NAME_MT%.lib" move "%HB_BIN_INSTALL%\%_DST_NAME_MT%.lib" "%HB_LIB_INSTALL%\%_DST_NAME_MT%.lib" -del _hballst.txt -del _hballmt.txt - -rem ; Cleanup -for /F %%o in (_hbost.txt) do ( del %%o ) -del _hbost.txt -rmdir _st - -for /F %%o in (_hbomt.txt) do ( del %%o ) -del _hbomt.txt -rmdir _mt - -for /F %%o in (_hboneut.txt) do ( del %%o ) -del _hboneut.txt -cd .. -rmdir _dll - goto END :DO_WATCOM -echo Making .dlls for %HB_ARCHITECTURE% / %HB_COMPILER%... - -set HB_DLL_LIBS_EXTRA=hbmaindllh - -md _dll -cd _dll +set HB_OBJ_PREF=FILE ' +set HB_OBJ_POST=' +call :MAKE_LISTS echo.> _hbsst.txt +for %%f in (_hballst.txt) do echo FILE '%%f'>> _hbsst.txt echo.> _hbsmt.txt -for %%f in (%HB_DLL_LIBS% %HB_DLL_LIBS_WIN% %HB_DLL_LIBS_EXTRA%) do ( - echo FILE '%HB_LIB_INSTALL%\%%f.lib'>> _hbsst.txt - echo FILE '%HB_LIB_INSTALL%\%%f.lib'>> _hbsmt.txt -) +for %%f in (_hballst.txt) do echo FILE '%%f'>> _hbsmt.txt -copy /b /y "%HB_LIB_INSTALL%\%HB_DLL_LIBS_ST%.lib" . > nul && wlib -q -b "%HB_DLL_LIBS_ST%.lib" - mainwin.obj - mainstd.obj -copy /b /y "%HB_LIB_INSTALL%\%HB_DLL_LIBS_MT%.lib" . > nul && wlib -q -b "%HB_DLL_LIBS_MT%.lib" - mainwin.obj - mainstd.obj +copy /b /y "%HB_LIB_INSTALL%\%HB_DLL_LIBS_ST%.lib" . > nul && wlib -q -b "%HB_DLL_LIBS_ST%.lib" - mainwin%HB_OBJ_EXT% - mainstd%HB_OBJ_EXT% +copy /b /y "%HB_LIB_INSTALL%\%HB_DLL_LIBS_MT%.lib" . > nul && wlib -q -b "%HB_DLL_LIBS_MT%.lib" - mainwin%HB_OBJ_EXT% - mainstd%HB_OBJ_EXT% echo FILE '%HB_DLL_LIBS_ST%.lib'>> _hbsst.txt echo FILE '%HB_DLL_LIBS_MT%.lib'>> _hbsmt.txt -set _DST_NAME_ST=harbour-%HB_DLL_VERSION% -set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION% - -echo Making %_DST_NAME_ST%.dll... && wlink OP QUIET SYS NT_DLL OP IMPLIB NAME '%HB_BIN_INSTALL%\%_DST_NAME_ST%.dll' @_hbsst.txt LIB user32.lib, ws2_32.lib, advapi32.lib, gdi32.lib -echo Making %_DST_NAME_MT%.dll... && wlink OP QUIET SYS NT_DLL OP IMPLIB NAME '%HB_BIN_INSTALL%\%_DST_NAME_MT%.dll' @_hbsmt.txt LIB user32.lib, ws2_32.lib, advapi32.lib, gdi32.lib +echo Making %_DST_NAME_ST%.dll... && wlink OP QUIET SYS NT_DLL OP IMPLIB NAME '%HB_BIN_INSTALL%\%_DST_NAME_ST%.dll' @_hballst.txt LIB user32.lib, ws2_32.lib, advapi32.lib, gdi32.lib +echo Making %_DST_NAME_MT%.dll... && wlink OP QUIET SYS NT_DLL OP IMPLIB NAME '%HB_BIN_INSTALL%\%_DST_NAME_MT%.dll' @_hballmt.txt LIB user32.lib, ws2_32.lib, advapi32.lib, gdi32.lib if exist "%HB_BIN_INSTALL%\%_DST_NAME_ST%.lib" move "%HB_BIN_INSTALL%\%_DST_NAME_ST%.lib" "%HB_LIB_INSTALL%\%_DST_NAME_ST%.lib" if exist "%HB_BIN_INSTALL%\%_DST_NAME_MT%.lib" move "%HB_BIN_INSTALL%\%_DST_NAME_MT%.lib" "%HB_LIB_INSTALL%\%_DST_NAME_MT%.lib" @@ -317,190 +184,80 @@ del %HB_DLL_LIBS_MT%.lib del _hbsst.txt del _hbsmt.txt -cd .. -rmdir _dll goto END :DO_POCC -echo Making .dlls for %HB_ARCHITECTURE% / %HB_COMPILER%... - -md _dll -cd _dll - -rem ; Extract neutral objects -echo.> _hboneut.txt -for %%f in (%HB_DLL_LIBS% %HB_DLL_LIBS_WIN%) do ( - if exist "%HB_LIB_INSTALL%\%%f.lib" ( - echo Processing library: %%f - polib "%HB_LIB_INSTALL%\%%f.lib" /list /explode >> _hboneut.txt - ) else ( echo Library not found: %HB_LIB_INSTALL%\%%f.lib ) -) - -md _st -cd _st -rem ; Extract ST objects -echo.> ..\_hbost.txt -for %%f in (%HB_DLL_LIBS_ST%) do ( - if exist "%HB_LIB_INSTALL%\%%f.lib" ( - echo Processing library: %%f - polib "%HB_LIB_INSTALL%\%%f.lib" /list /explode > _hboraw.txt - for /F %%p in (_hboraw.txt) do ( - if not "%%p" == "maindll.obj" ( - if not "%%p" == "maindllp.obj" ( - echo _st\%%p>> ..\_hbost.txt - ) - ) - ) - del _hboraw.txt - ) else ( echo Library not found: %HB_LIB_INSTALL%\%%f.lib ) -) -cd .. - -md _mt -cd _mt -rem ; Extract MT objects -echo.> ..\_hbomt.txt -for %%f in (%HB_DLL_LIBS_MT%) do ( - if exist "%HB_LIB_INSTALL%\%%f.lib" ( - echo Processing library: %%f - polib "%HB_LIB_INSTALL%\%%f.lib" /list /explode > _hboraw.txt - for /F %%p in (_hboraw.txt) do ( - if not "%%p" == "maindll.obj" ( - if not "%%p" == "maindllp.obj" ( - echo _mt\%%p>> ..\_hbomt.txt - ) - ) - ) - del _hboraw.txt - ) else ( echo Library not found: %HB_LIB_INSTALL%\%%f.lib ) -) -cd .. - -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_pocc" set _DST_NAME_ST=harbour-%HB_DLL_VERSION% -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_pocc" set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION% -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_pocc64" set _DST_NAME_ST=harbour-%HB_DLL_VERSION%-x64 -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_pocc64" set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION%-x64 -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "wce_poccarm" set _DST_NAME_ST=harbour-%HB_DLL_VERSION%-arm -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "wce_poccarm" set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION%-arm +call :MAKE_LISTS if "%HB_ARCHITECTURE%" == "win" set _SYSLIBS=user32.lib ws2_32.lib advapi32.lib gdi32.lib if "%HB_ARCHITECTURE%" == "wce" set _SYSLIBS=wininet.lib ws2.lib -echo Making %_DST_NAME_ST%.dll... && polink /nologo /dll /out:"%HB_BIN_INSTALL%\%_DST_NAME_ST%.dll" @_hboneut.txt @_hbost.txt %_SYSLIBS% %HB_DLLIBS% -echo Making %_DST_NAME_MT%.dll... && polink /nologo /dll /out:"%HB_BIN_INSTALL%\%_DST_NAME_MT%.dll" @_hboneut.txt @_hbomt.txt %_SYSLIBS% %HB_DLLIBS% +echo Making %_DST_NAME_ST%.dll... && polink /nologo /dll /out:"%HB_BIN_INSTALL%\%_DST_NAME_ST%.dll" @_hballst.txt %_SYSLIBS% %HB_DLLLIBS% +echo Making %_DST_NAME_MT%.dll... && polink /nologo /dll /out:"%HB_BIN_INSTALL%\%_DST_NAME_MT%.dll" @_hballmt.txt %_SYSLIBS% %HB_DLLLIBS% polib "%HB_BIN_INSTALL%\%_DST_NAME_ST%.dll" /out:"%HB_LIB_INSTALL%\%_DST_NAME_ST%.lib" polib "%HB_BIN_INSTALL%\%_DST_NAME_MT%.dll" /out:"%HB_LIB_INSTALL%\%_DST_NAME_MT%.lib" -rem ; Cleanup -for /F %%o in (_hbost.txt) do ( del %%o ) -if exist _st\maindll.obj del _st\maindll.obj -if exist _st\maindllp.obj del _st\maindllp.obj -del _hbost.txt -rmdir _st - -for /F %%o in (_hbomt.txt) do ( del %%o ) -if exist _mt\maindll.obj del _mt\maindll.obj -if exist _mt\maindllp.obj del _mt\maindllp.obj -del _hbomt.txt -rmdir _mt - -for /F %%o in (_hboneut.txt) do ( del %%o ) -del _hboneut.txt -cd .. -rmdir _dll - goto END -:DO_GCC +:MAKE_LISTS echo Making .dlls for %HB_ARCHITECTURE% / %HB_COMPILER%... -md _dll -cd _dll - rem ; Extract neutral objects -echo.> _hboneut.txt for %%f in (%HB_DLL_LIBS% %HB_DLL_LIBS_WIN%) do ( - if exist "%HB_LIB_INSTALL%\lib%%f.a" ( - echo Processing library: %%f - %HB_CCPREFIX%ar -x "%HB_LIB_INSTALL%\lib%%f.a" - %HB_CCPREFIX%ar -t "%HB_LIB_INSTALL%\lib%%f.a" >> _hboneut.txt - ) else ( echo Library not found: %HB_LIB_INSTALL%\%%f.lib ) + if exist "%%f\%HB_OBJ_DIR%" ( + echo Processing directory: %%f\%HB_OBJ_DIR% + dir /b "%%f\%HB_OBJ_DIR%\*_dyn%HB_OBJ_EXT%" > _hboraw.txt + for /F %%p in (_hboraw.txt) do ( + if not "%%p" == "hbpp_dyn%HB_OBJ_EXT%" ( + echo %HB_OBJ_PREF%%%f\%HB_OBJ_DIR%\%%p%HB_OBJ_POST%>> _hballst.txt + echo %HB_OBJ_PREF%%%f\%HB_OBJ_DIR%\%%p%HB_OBJ_POST%>> _hballmt.txt + ) + ) + del _hboraw.txt + ) else ( echo Directory not found: %%f\%HB_OBJ_DIR% ) ) -md _st -cd _st rem ; Extract ST objects -echo.> _hbost.txt for %%f in (%HB_DLL_LIBS_ST%) do ( - if exist "%HB_LIB_INSTALL%\lib%%f.a" ( - echo Processing library: %%f - %HB_CCPREFIX%ar -x "%HB_LIB_INSTALL%\lib%%f.a" - %HB_CCPREFIX%ar -t "%HB_LIB_INSTALL%\lib%%f.a" >> _hbost.txt - ) else ( echo Library not found: %HB_LIB_INSTALL%\%%f.lib ) + if exist "%%f\%HB_OBJ_DIR%" ( + echo Processing directory: %%f\%HB_OBJ_DIR% + dir /b "%%f\%HB_OBJ_DIR%\*_dyn%HB_OBJ_EXT%" > _hboraw.txt + for /F %%p in (_hboraw.txt) do ( + if not "%%p" == "maindll_dyn%HB_OBJ_EXT%" ( + if not "%%p" == "maindllp_dyn%HB_OBJ_EXT%" ( + echo %HB_OBJ_PREF%%%f\%HB_OBJ_DIR%\%%p%HB_OBJ_POST%>> _hballst.txt + ) + ) + ) + del _hboraw.txt + ) else ( echo Directory not found: %%f\%HB_OBJ_DIR% ) ) -cd .. -md _mt -cd _mt rem ; Extract MT objects -echo.> _hbomt.txt for %%f in (%HB_DLL_LIBS_MT%) do ( - if exist "%HB_LIB_INSTALL%\lib%%f.a" ( - echo Processing library: %%f - %HB_CCPREFIX%ar -x "%HB_LIB_INSTALL%\lib%%f.a" - %HB_CCPREFIX%ar -t "%HB_LIB_INSTALL%\lib%%f.a" >> _hbomt.txt - ) else ( echo Library not found: %HB_LIB_INSTALL%\%%f.lib ) + if exist "%%f\%HB_OBJ_DIR%" ( + echo Processing directory: %%f\%HB_OBJ_DIR% + dir /b "%%f\%HB_OBJ_DIR%\*_dyn%HB_OBJ_EXT%" > _hboraw.txt + for /F %%p in (_hboraw.txt) do ( + if not "%%p" == "maindll_dyn%HB_OBJ_EXT%" ( + if not "%%p" == "maindllp_dyn%HB_OBJ_EXT%" ( + echo %HB_OBJ_PREF%%%f\%HB_OBJ_DIR%\%%p%HB_OBJ_POST%>> _hballmt.txt + ) + ) + ) + del _hboraw.txt + ) else ( echo Directory not found: %%f\%HB_OBJ_DIR% ) ) -cd .. -setlocal enabledelayedexpansion -set _HBOST= -for /f %%f in (_hboneut.txt) do set _HBOST=!_HBOST! %%f -for /f %%f in (_st\_hbost.txt) do set _HBOST=!_HBOST! _st\%%f -set _HBOMT= -for /f %%f in (_hboneut.txt) do set _HBOMT=!_HBOMT! %%f -for /f %%f in (_mt\_hbomt.txt) do set _HBOMT=!_HBOMT! _mt\%%f - -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_mingw" set _DST_NAME_ST=harbour-%HB_DLL_VERSION% -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_mingw" set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION% -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_mingw64" set _DST_NAME_ST=harbour-%HB_DLL_VERSION%-x64 -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_mingw64" set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION%-x64 -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "wce_mingwarm" set _DST_NAME_ST=harbour-%HB_DLL_VERSION%-arm -if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "wce_mingwarm" set _DST_NAME_MT=harbourmt-%HB_DLL_VERSION%-arm - -if "%HB_ARCHITECTURE%" == "win" set _SYSLIBS=-luser32 -lws2_32 -ladvapi32 -lgdi32 -if "%HB_ARCHITECTURE%" == "wce" set _SYSLIBS=-lwininet -lws2 - -echo Making %_DST_NAME_ST%.dll... && %HB_CCPREFIX%gcc -shared -o "%HB_BIN_INSTALL%\%_DST_NAME_ST%.dll" %_HBOST% %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 -o "%HB_BIN_INSTALL%\%_DST_NAME_MT%.dll" %_HBOMT% %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" - -rem ; Cleanup -cd _st -for /F %%o in (_hbost.txt) do ( del %%o ) -del _hbost.txt -cd .. -rmdir _st - -cd _mt -for /F %%o in (_hbomt.txt) do ( del %%o ) -del _hbomt.txt -cd .. -rmdir _mt - -for /F %%o in (_hboneut.txt) do ( del %%o ) -del _hboneut.txt -cd .. -rmdir _dll - -goto END +goto :EOF :END +rem del _hballst.txt +rem del _hballmt.txt + endlocal diff --git a/harbour/bin/postinst.bat b/harbour/bin/postinst.bat index 6061b38fe7..8ec2b99754 100644 --- a/harbour/bin/postinst.bat +++ b/harbour/bin/postinst.bat @@ -42,24 +42,15 @@ goto INST_%HB_ARCHITECTURE% if not "%HB_INSTALL_PREFIX%" == "" copy INSTALL "%HB_INSTALL_PREFIX%\" > nul if not "%HB_INSTALL_PREFIX%" == "" copy TODO "%HB_INSTALL_PREFIX%\" > nul - if "%HB_COMPILER%" == "mingw" set HB_DYNLIB=yes - if "%HB_COMPILER%" == "mingw64" set HB_DYNLIB=yes - if "%HB_COMPILER%" == "mingwarm" set HB_DYNLIB=yes - if "%HB_COMPILER%" == "cygwin" set HB_DYNLIB=yes + call "%~dp0hb-mkdyn.bat" - if not "%HB_DYNLIB%" == "yes" goto _SKIP_DLL_BIN - - call "%~dp0hb-mkdyn.bat" - - if exist "%HB_BIN_INSTALL%\*.dll" ( - "%HB_HOST_BIN_DIR%\hbmk2" -q0 -lng=en-EN -shared "-o%HB_BIN_INSTALL%\hbrun-dll" "%~dp0..\utils\hbrun\hbrun.hbp" - "%HB_HOST_BIN_DIR%\hbmk2" -q0 -lng=en-EN -shared "-o%HB_BIN_INSTALL%\hbmk2-dll" "%~dp0..\utils\hbmk2\hbmk2.hbp" - "%HB_HOST_BIN_DIR%\hbmk2" -q0 -lng=en-EN -shared "-o%HB_BIN_INSTALL%\hbtest-dll" "%~dp0..\utils\hbtest\hbtest.hbp" - "%HB_HOST_BIN_DIR%\hbmk2" -q0 -lng=en-EN -shared "-o%HB_BIN_INSTALL%\hbi18n-dll" "%~dp0..\utils\hbi18n\hbi18n.hbp" - "%HB_HOST_BIN_DIR%\hbmk2" -q0 -lng=en-EN -shared "-o%HB_BIN_INSTALL%\hbformat-dll" "%~dp0..\utils\hbformat\hbformat.hbp" - ) - - :_SKIP_DLL_BIN + if exist "%HB_BIN_INSTALL%\*.dll" ( + "%HB_HOST_BIN_DIR%\hbmk2" -q0 -lng=en-EN -shared "-o%HB_BIN_INSTALL%\hbrun-dll" "%~dp0..\utils\hbrun\hbrun.hbp" + "%HB_HOST_BIN_DIR%\hbmk2" -q0 -lng=en-EN -shared "-o%HB_BIN_INSTALL%\hbmk2-dll" "%~dp0..\utils\hbmk2\hbmk2.hbp" + "%HB_HOST_BIN_DIR%\hbmk2" -q0 -lng=en-EN -shared "-o%HB_BIN_INSTALL%\hbtest-dll" "%~dp0..\utils\hbtest\hbtest.hbp" + "%HB_HOST_BIN_DIR%\hbmk2" -q0 -lng=en-EN -shared "-o%HB_BIN_INSTALL%\hbi18n-dll" "%~dp0..\utils\hbi18n\hbi18n.hbp" + "%HB_HOST_BIN_DIR%\hbmk2" -q0 -lng=en-EN -shared "-o%HB_BIN_INSTALL%\hbformat-dll" "%~dp0..\utils\hbformat\hbformat.hbp" + ) rem ; We build this here, because GNU Make wouldn't add the icon. "%HB_HOST_BIN_DIR%\hbmk2" -q0 -lng=en-EN "-o%HB_BIN_INSTALL%\hbrun" "%~dp0..\utils\hbrun\hbrun.hbp" diff --git a/harbour/config/global.cf b/harbour/config/global.cf index 5e2cf292f1..c269432a9e 100644 --- a/harbour/config/global.cf +++ b/harbour/config/global.cf @@ -186,7 +186,6 @@ ifeq ($(HB_CONFIG_SHOWN),) $(info ! Dynamic library creation phase) endif $(info ! MAKE: $(MAKE)) - $(info ! MAKE: $(MAKE)) ifneq ($(HB_USER_PRGFLAGS),) $(info ! HB_USER_PRGFLAGS: $(HB_USER_PRGFLAGS)) endif @@ -346,9 +345,22 @@ endif ifeq ($(HB_BUILD_VERBOSE),yes) ifneq ($(MAKE_381),) $(info ! Detected host platform: $(HB_HOST_ARCH)) + $(info ! Detected shell: $(HB_SHELL)) endif endif +# Couldn't find a builds of these tools which would fit Harbour respository, +# so these will have to installed by user. +#ifeq ($(HB_SHELL),os2) +# ifeq ($(call find_in_path,mkdir),) +# $(error ! Harbour build on OS/2 requires GNU mkdir executable in PATH. See INSTALL for more.) +# else +# ifeq ($(call find_in_path,rm),) +# $(error ! Harbour build on OS/2 requires GNU rm executable in PATH. See INSTALL for more.) +# endif +# endif +#endif + HB_HOST_CPU := ifeq ($(HB_HOST_ARCH),win) ifeq ($(PROCESSOR_ARCHITECTURE),AMD64) @@ -566,9 +578,11 @@ ifneq ($(HB_HOST_ARCH)$(HB_HOST_CPU),$(HB_ARCHITECTURE)$(HB_CPU)) HB_BIN_COMPILE := $(dir $(firstword $(wildcard $(TOP)$(ROOT)bin/$(HB_HOST_ARCH)/*/harbour$(HB_HOST_BIN_EXT)))) ifeq ($(HB_BIN_COMPILE),) HB_BIN_COMPILE := $(dir $(firstword $(foreach dir,$(subst $(PTHSEP), ,$(PATH)),$(wildcard $(dir)/harbour$(HB_HOST_BIN_EXT))))) - ifeq ($(HB_BIN_COMPILE),) - export HB_BIN_COMPILE + ifneq ($(HB_BIN_COMPILE),) + HB_BIN_COMPILE := $(realpath $(HB_BIN_COMPILE)) endif + else + HB_BIN_COMPILE := $(realpath $(HB_BIN_COMPILE)) endif ifeq ($(HB_BIN_COMPILE),) $(warning ! Warning: HB_BIN_COMPILE not specified. Couldn't find native build.) @@ -579,6 +593,7 @@ ifneq ($(HB_HOST_ARCH)$(HB_HOST_CPU),$(HB_ARCHITECTURE)$(HB_CPU)) endif endif endif + export HB_BIN_COMPILE else HB_CROSS_BUILD := yes endif @@ -704,7 +719,7 @@ endif ifneq ($(HB_INSTALL_PREFIX),) # TOFIX: HB_INSTALL_PREFIX will have to be duplicated internally to avoid - # recursive operation here + # recursive operation here. # Handle simple macros in value HB_INSTALL_PREFIX := $(subst {HB_ARCH},$(HB_ARCHITECTURE),$(HB_INSTALL_PREFIX)) @@ -715,6 +730,15 @@ ifneq ($(HB_INSTALL_PREFIX),) ifeq ($(HB_UNIX_COMPATIBLE),no) LIBPOSTFIX := $(DIRSEP)$(subst /,$(DIRSEP),$(ARCH_COMP)) + else + # Not perfect, please enhance it. + ifneq ($(findstring /usr,$(HB_INSTALL_PREFIX)),) + LIBPOSTFIX := $(DIRSEP)harbour + else + ifneq ($(findstring /opt,$(HB_INSTALL_PREFIX)),) + LIBPOSTFIX := $(DIRSEP)harbour + endif + endif endif ifeq ($(HB_BIN_INSTALL),) @@ -744,6 +768,8 @@ ifeq ($(HB_INC_COMPILE),) HB_INC_COMPILE := $(TOP)$(ROOT)include endif +HB_DYN_COMPILE := no + # export some variables to eliminate repeated setting in recursive calls export HB_HOST_ARCH export HB_HOST_BIN_DIR diff --git a/harbour/config/header.cf b/harbour/config/header.cf index 8b102318a9..5bdd6a4cd1 100644 --- a/harbour/config/header.cf +++ b/harbour/config/header.cf @@ -7,18 +7,17 @@ include $(TOP)$(ROOT)config/global.cf ifneq ($(HB_ARCHITECTURE),) ifneq ($(HB_COMPILER),) -ALL_HEADERS = $(C_HEADERS) $(PRG_HEADERS) $(API_HEADERS) - first:: ifeq ($(HB_INC_INSTALL),) install:: else -INSTALL_FILES = $(ALL_HEADERS) +INSTALL_FILES = $(C_HEADERS) $(PRG_HEADERS) $(API_HEADERS) INSTALL_DIR = $(HB_INC_INSTALL) include $(TOP)$(ROOT)config/install.cf endif + endif endif diff --git a/harbour/config/install.cf b/harbour/config/install.cf index 8244819d8c..9d3f473e0f 100644 --- a/harbour/config/install.cf +++ b/harbour/config/install.cf @@ -4,7 +4,9 @@ include $(TOP)$(ROOT)config/instsh.cf +ifneq ($(INSTALL_RULE),) ifneq ($(HB_INSTALL_DEF),yes) install:: first $(INSTALL_RULE) endif +endif diff --git a/harbour/config/lib.cf b/harbour/config/lib.cf index 49dc015eef..44706f94dc 100644 --- a/harbour/config/lib.cf +++ b/harbour/config/lib.cf @@ -7,6 +7,8 @@ include $(TOP)$(ROOT)config/global.cf ifneq ($(HB_ARCHITECTURE),) ifneq ($(HB_COMPILER),) +HB_DYN_LIBS := hbcommon hbpp hbrtl hbmacro hblang hbcpage hbpcre hbzlib hbextern hbrdd rddntx rddnsx rddcdx rddfpt hbsix hbhsx hbusrrdd gtcgi gtpca gtstd gtwvt gtgui gtwin hbvm hbvmmt maindllh + include $(TOP)$(ROOT)config/$(HB_ARCHITECTURE)/$(HB_COMPILER).cf include $(TOP)$(ROOT)config/c.cf include $(TOP)$(ROOT)config/prg.cf diff --git a/harbour/config/rules.cf b/harbour/config/rules.cf index 9a3e514696..8f0bedab08 100644 --- a/harbour/config/rules.cf +++ b/harbour/config/rules.cf @@ -34,6 +34,18 @@ HB_RULE = $(HB) $? -n1 $(HB_INC_DEPEND) $(HB_FLAGS) -gc$(HB_GCMODE) $(HB_FLAGSEX # The rule to compile a C source file. ifeq ($(CC_RULE),) CC_RULE = $(CC) $(HB_INC_DEPEND) $(CPPFLAGS) $(CFLAGS) $(HB_CDBG) $(HB_USER_CFLAGS) $(HB_CDYNLIB) $(HB_CUNICODE) $(CC_OUT)$(^> %_HB_BUILD_LOG% 2^>^&1 rem --------------------------------------------------------------- - rem Detect name of GNU Make - rem - rem Look for mingw32-make.exe and use it if found. Works only - rem on Windows NT and upper. [vszakats] + rem Decide about GNU Make executable name rem Some other name variations: gnumake.exe, gmake.exe - set _HB_MAKE=make.exe + set _HB_MAKE= + if "%HB_MAKE%%OS%" == "Windows_NT" if exist "%~dp0config\dj-make.exe" set _HB_MAKE="%~dp0config\dj-make.exe" + if "%HB_MAKE%%OS%" == "Windows_NT" set _HB_MAKE=mingw32-make.exe + if "%OS%" == "Windows_NT" goto _FM_DONE + if exist config\dj-make.exe set _HB_MAKE=config\dj-make.exe + if not exist config\dj-make.exe set _HB_MAKE=make.exe - if not "%HB_ARCHITECTURE%" == "dos" goto _FM_WIN - if "%OS%" == "Windows_NT" goto _DOS_NT - if not exist config\dj-make.exe goto SKIP_WINDLL - set _HB_MAKE=config\dj-make.exe - goto SKIP_WINDLL - :_DOS_NT - if not exist "%~dp0config\dj-make.exe" goto SKIP_WINDLL - set _HB_MAKE="%~dp0config\dj-make.exe" - goto SKIP_WINDLL - - :_FM_WIN - - if not "%OS%" == "Windows_NT" echo Windows NT or upper is required to build Harbour for '%HB_ARCHITECTURE%' platform. - if not "%OS%" == "Windows_NT" goto MAKE_DONE - - if not exist "%~dp0config\mingw32-make.exe" goto _FM_NOLOCAL - set _HB_MAKE="%~dp0config\mingw32-make.exe" - goto _FM_DONE - :_FM_NOLOCAL - if not "%OS%" == "Windows_NT" goto _FM_DONE - set _HB_CHECK=mingw32-make.exe - if exist "%_HB_CHECK%" ( set _HB_MAKE=%_HB_CHECK%&& goto _FM_DONE ) - set _HB_PATH=%PATH% - :_FM_LOOP - for /F "delims=; tokens=1,2*" %%p in ("%_HB_PATH%") do ( - if exist "%%p\%_HB_CHECK%" ( set _HB_MAKE=%_HB_CHECK%&& goto _FM_DONE ) - if exist "%%p%_HB_CHECK%" ( set _HB_MAKE=%_HB_CHECK%&& goto _FM_DONE ) - set _HB_PATH=%%~q;%%~r - ) - if not "%_HB_PATH%"==";" goto _FM_LOOP :_FM_DONE - set _HB_CHECK= - set _HB_PATH= - - if "%HB_ARCHITECTURE%" == "os2" goto SKIP_WINDLL - if "%HB_ARCHITECTURE%" == "linux" goto SKIP_WINDLL rem --------------------------------------------------------------- rem Start the GNU Make system - rem --------------------------------------------------------------- - rem Special build mode when HB_BUILD_DLL=yes on Windows platform. - rem It will automatically build Harbour in two passes, one for - rem the .dlls and a final pass for the regular version. - - if not "%HB_BUILD_DLL%" == "yes" goto SKIP_WINDLL - - if "%HB_COMPILER%%HB_CCPREFIX%" == "mingw64" set HB_CCPREFIX=x86_64-pc-mingw32- - if "%HB_COMPILER%%HB_CCPREFIX%" == "mingwarm" set HB_CCPREFIX=arm-wince-mingw32ce- - - if "%HB_COMPILER%" == "mingw" goto DO_GCC - if "%HB_COMPILER%" == "mingw64" goto DO_GCC - if "%HB_COMPILER%" == "mingwarm" goto DO_GCC - if "%HB_COMPILER%" == "cygwin" goto DO_GCC_CYG - - set _HB_CONTRIBLIBS=%HB_CONTRIBLIBS% - set _HB_CONTRIB_ADDONS=%HB_CONTRIB_ADDONS% - set _HB_EXTERNALLIBS=%HB_EXTERNALLIBS% - set _HB_EXTERNAL_ADDONS=%HB_EXTERNAL_ADDONS% - set HB_DYNLIB=yes - set HB_CONTRIBLIBS=no - set HB_CONTRIB_ADDONS= - set HB_EXTERNALLIBS=no - set HB_EXTERNAL_ADDONS= - %_HB_MAKE% clean install %HB_USER_MAKEFLAGS% %_HB_BUILD_LOG% - if errorlevel 1 echo Harbour GNU Make returned: %ERRORLEVEL% - if errorlevel 1 goto MAKE_DONE - set HB_DYNLIB=no - set HB_CONTRIBLIBS=%_HB_CONTRIBLIBS% - set HB_CONTRIB_ADDONS=%_HB_CONTRIB_ADDONS% - set HB_EXTERNALLIBS=%_HB_EXTERNALLIBS% - set HB_EXTERNAL_ADDONS=%_HB_EXTERNAL_ADDONS% - set _HB_CONTRIBLIBS= - set _HB_CONTRIB_ADDONS= - set _HB_EXTERNALLIBS= - set _HB_EXTERNAL_ADDONS= - %_HB_MAKE% clean install %HB_USER_MAKEFLAGS% %_HB_BUILD_LOG% - if errorlevel 1 echo Harbour GNU Make returned: %ERRORLEVEL% - goto MAKE_DONE - -:DO_GCC - - set HB_DYNLIB=no - %_HB_MAKE% clean install %HB_USER_MAKEFLAGS% %_HB_BUILD_LOG% - if errorlevel 1 echo Harbour GNU Make returned: %ERRORLEVEL% - goto MAKE_DONE - -:DO_GCC_CYG - - set HB_DYNLIB=no - sh %~dp0make_gnu.sh clean install %HB_USER_MAKEFLAGS% - if errorlevel 1 echo Harbour GNU Make returned: %ERRORLEVEL% - goto MAKE_DONE - -:SKIP_WINDLL - if "%HB_COMPILER%" == "cygwin" goto SKIP_WINDLL_CYG %_HB_MAKE% %HB_USER_MAKEFLAGS% %1 %2 %3 %4 %5 %6 %7 %8 %9 %_HB_BUILD_LOG% @@ -223,20 +61,4 @@ if "%HB_COMPILER%" == "" set HB_COMPILER=djgpp set _HB_BUILD_LOG= goto END -:COMP_DET_ONE - - if not "%HB_COMPILER%" == "" goto END - if exist "%1" ( set HB_COMPILER=%2&& set HB_ARCHITECTURE=%3&& set HB_CCPREFIX=%4&& goto _CDO_EXIT ) - set _PATH=%PATH% - :_CDO_LOOP - for /F "delims=; tokens=1,2*" %%p in ("%_PATH%") do ( - if exist "%%p\%1" ( set HB_COMPILER=%2&& set HB_ARCHITECTURE=%3&& set HB_CCPREFIX=%4&& goto _CDO_EXIT ) - if exist "%%p%1" ( set HB_COMPILER=%2&& set HB_ARCHITECTURE=%3&& set HB_CCPREFIX=%4&& goto _CDO_EXIT ) - set _PATH=%%~q;%%~r - ) - if not "%_PATH%"==";" goto _CDO_LOOP - :_CDO_EXIT - set _PATH= - goto END - :END diff --git a/harbour/source/rtl/gtcrs/Makefile b/harbour/source/rtl/gtcrs/Makefile index 66bf04394b..aa5c8f64e6 100644 --- a/harbour/source/rtl/gtcrs/Makefile +++ b/harbour/source/rtl/gtcrs/Makefile @@ -28,13 +28,11 @@ ifeq ($(HB_ARCHITECTURE),os2) HB_INC_CURSES := endif -HB_INC_CURSES_OK += $(foreach d, $(HB_INC_CURSES), $(if $(wildcard $(d)/curses.h),$(d),)) -HB_INC_CURSES_OK := $(strip $(HB_INC_CURSES_OK)) +HB_INC_CURSES_OK := $(strip $(foreach d, $(HB_INC_CURSES), $(if $(wildcard $(d)/curses.h),$(d),))) ifeq ($(HB_INC_CURSES_OK),) ifeq ($(HB_COMPILER),djgpp) - HB_INC_CURSES_OK += $(foreach d, $(subst ;, ,$(PATH)), $(if $(wildcard $(d)/../include/curses.h),$(d)/../include,)) - HB_INC_CURSES_OK := $(strip $(HB_INC_CURSES_OK)) + HB_INC_CURSES_OK := $(strip $(foreach d, $(subst ;, ,$(PATH)), $(if $(wildcard $(d)/../include/curses.h),$(d)/../include,))) endif endif diff --git a/harbour/source/rtl/gtsln/Makefile b/harbour/source/rtl/gtsln/Makefile index 6508287599..46930a399c 100644 --- a/harbour/source/rtl/gtsln/Makefile +++ b/harbour/source/rtl/gtsln/Makefile @@ -32,7 +32,7 @@ ifeq ($(HB_COMMERCE),yes) HB_INC_SLANG := endif -HB_INC_SLANG_OK += $(foreach d, $(HB_INC_SLANG), $(if $(wildcard $(d)/slang.h),$(d),)) +HB_INC_SLANG_OK := $(foreach d, $(HB_INC_SLANG), $(if $(wildcard $(d)/slang.h),$(d),)) ifneq ($(strip $(HB_INC_SLANG_OK)),) diff --git a/harbour/source/rtl/gtxwc/Makefile b/harbour/source/rtl/gtxwc/Makefile index 5ac2e4797d..7f8314fda2 100644 --- a/harbour/source/rtl/gtxwc/Makefile +++ b/harbour/source/rtl/gtxwc/Makefile @@ -21,7 +21,7 @@ ifeq ($(HB_WITHOUT_GTXWC),yes) HB_INC_X11 := endif -HB_INC_X11_OK += $(foreach d, $(HB_INC_X11), $(if $(wildcard $(d)/X11/Xlib.h),$(d),)) +HB_INC_X11_OK := $(foreach d, $(HB_INC_X11), $(if $(wildcard $(d)/X11/Xlib.h),$(d),)) ifneq ($(strip $(HB_INC_X11_OK)),)