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)),)