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