Files
MINGW-packages/mingw-w64-firebird-git/mingw-w64-trunk.patch
2015-06-23 15:49:26 +03:00

3086 lines
91 KiB
Diff

From b818db3c9b3f553752ad1fb6f818f84e3d07b971 Mon Sep 17 00:00:00 2001
From: Alexpux <alexey.pawlow@gmail.com>
Date: Tue, 25 Nov 2014 12:59:43 +0300
Subject: [PATCH] our mingw-w64 have different icu libs naming.
---
src/common/unicode_util.cpp | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/src/common/unicode_util.cpp b/src/common/unicode_util.cpp
index ba77825..d93cd7a 100644
--- a/src/common/unicode_util.cpp
+++ b/src/common/unicode_util.cpp
@@ -58,8 +58,13 @@ using namespace Firebird;
namespace {
#if defined(WIN_NT)
+#ifdef __MINGW32__
+const char* const inTemplate = "libicuin%s.dll";
+const char* const ucTemplate = "libicuuc%s.dll";
+#else
const char* const inTemplate = "icuin%s.dll";
const char* const ucTemplate = "icuuc%s.dll";
+#endif
#elif defined(DARWIN)
//const char* const inTemplate = "/Library/Frameworks/Firebird.framework/Versions/A/Libraries/libicui18n.dylib";
//const char* const ucTemplate = "/Library/Frameworks/Firebird.framework/versions/A/Libraries/libicuuc.dylib";
--
2.4.3
From 7596d4f99639877213e38c6c2b36f57e20345dfe Mon Sep 17 00:00:00 2001
From: Alexpux <alexey.pawlow@gmail.com>
Date: Wed, 19 Nov 2014 23:15:45 +0300
Subject: [PATCH] Fix UNIX path for mingw compiler.
---
src/misc/writeBuildNum.sh | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/misc/writeBuildNum.sh b/src/misc/writeBuildNum.sh
index 45fb208..ae29b45 100755
--- a/src/misc/writeBuildNum.sh
+++ b/src/misc/writeBuildNum.sh
@@ -96,6 +96,10 @@ createMakeVersion() {
OdsH="${Root}/src/jrd/ods.h"
Mini="/tmp/miniods.h"
+if [ -n $MSYSTEM ]
+ then
+ Mini=$(cygpath -wm $Mini)
+fi
TestCpp="/tmp/test.cpp"
AOut="/tmp/a.out"
--
2.4.3
From 1a76d754fce9287ff93040bfb35846a072e5133b Mon Sep 17 00:00:00 2001
From: Alexpux <alexey.pawlow@gmail.com>
Date: Mon, 25 May 2015 15:14:47 +0300
Subject: [PATCH] cloop: Fix building with mingw.
---
extern/cloop/Makefile | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/extern/cloop/Makefile b/extern/cloop/Makefile
index 2056e4a..11e0901 100644
--- a/extern/cloop/Makefile
+++ b/extern/cloop/Makefile
@@ -11,7 +11,7 @@ LD := $(CXX)
SRC_DIR := src
BUILD_DIR := build
OUT_DIR := output
-SHRLIB_EXT := .so
+SHRLIB_EXT := .dll
EXE_EXT :=
OBJ_DIR := $(BUILD_DIR)/$(TARGET)
@@ -27,7 +27,7 @@ SRCS_CPP := $(foreach sdir,$(SRC_DIRS),$(wildcard $(sdir)/*.cpp))
OBJS_C := $(patsubst $(SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(SRCS_C))
OBJS_CPP := $(patsubst $(SRC_DIR)/%.cpp,$(OBJ_DIR)/%.o,$(SRCS_CPP))
-C_FLAGS := -ggdb -fPIC -MMD -MP -W -Wall -Wno-unused-parameter
+C_FLAGS := -ggdb -MMD -MP -W -Wall -Wno-unused-parameter
CXX_FLAGS := $(C_FLAGS)
FPC_FLAGS := -Mdelphi
@@ -106,23 +106,23 @@ $(BIN_DIR)/test1-c$(SHRLIB_EXT): \
$(OBJ_DIR)/tests/test1/CalcCApi.o \
$(OBJ_DIR)/tests/test1/CTest.o \
- $(LD) $^ -shared -ldl -o $@
+ $(LD) $^ -shared -o $@
$(BIN_DIR)/test1-c$(EXE_EXT): \
$(OBJ_DIR)/tests/test1/CalcCApi.o \
$(OBJ_DIR)/tests/test1/CTest.o \
- $(LD) $^ -ldl -o $@
+ $(LD) $^ -o $@
$(BIN_DIR)/test1-cpp$(SHRLIB_EXT): \
$(OBJ_DIR)/tests/test1/CppTest.o \
- $(LD) $^ -shared -ldl -o $@
+ $(LD) $^ -shared -o $@
$(BIN_DIR)/test1-cpp$(EXE_EXT): \
$(OBJ_DIR)/tests/test1/CppTest.o \
- $(LD) $^ -ldl -o $@
+ $(LD) $^ -o $@
$(BIN_DIR)/test1-pascal$(SHRLIB_EXT): \
$(SRC_DIR)/tests/test1/PascalClasses.pas \
@@ -130,7 +130,7 @@ $(BIN_DIR)/test1-pascal$(SHRLIB_EXT): \
$(SRC_DIR)/tests/test1/CalcPascalApi.pas \
ifeq ($(WITH_FPC),1)
- fpc $(FPC_FLAGS) -fPIC -FU$(OBJ_DIR)/tests/test1 -o$(BIN_DIR)/test1-pascal$(SHRLIB_EXT) $(SRC_DIR)/tests/test1/PascalLibrary.dpr
+ fpc $(FPC_FLAGS) -FU$(OBJ_DIR)/tests/test1 -o$(BIN_DIR)/test1-pascal$(SHRLIB_EXT) $(SRC_DIR)/tests/test1/PascalLibrary.dpr
endif
$(BIN_DIR)/test1-pascal$(EXE_EXT): \
--
2.4.3
From 87f08e2232a80c0d10c47c7892cbe4c525d8d718 Mon Sep 17 00:00:00 2001
From: Alexpux <alexey.pawlow@gmail.com>
Date: Thu, 18 Dec 2014 23:47:12 +0300
Subject: [PATCH] Resolve conflict with STRING type from mingw-w64
---
src/dsql/Parser.cpp | 6 +++---
src/dsql/parse.y | 16 ++++++++--------
src/yvalve/preparse.cpp | 10 +++++-----
3 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/src/dsql/Parser.cpp b/src/dsql/Parser.cpp
index 0f1b0d1..65e9d75 100644
--- a/src/dsql/Parser.cpp
+++ b/src/dsql/Parser.cpp
@@ -548,7 +548,7 @@ int Parser::yylexAux()
mark.str = yylval.intlStringPtr;
strMarks.put(mark.str, mark);
- return STRING;
+ return TOK_STRING;
}
/*
@@ -676,7 +676,7 @@ int Parser::yylexAux()
yylval.intlStringPtr = newIntlString(temp, "BINARY");
- return STRING;
+ return TOK_STRING;
} // if (!hexerror)...
// If we got here, there was a parsing error. Set the
@@ -731,7 +731,7 @@ int Parser::yylexAux()
mark.str = yylval.intlStringPtr;
strMarks.put(mark.str, mark);
- return STRING;
+ return TOK_STRING;
}
}
diff --git a/src/dsql/parse.y b/src/dsql/parse.y
index 9dd9c0c..8c8f281 100644
--- a/src/dsql/parse.y
+++ b/src/dsql/parse.y
@@ -336,7 +336,7 @@ using namespace Firebird;
%token <metaNamePtr> SYMBOL
%token <int32Val> NUMBER
-%token <intlStringPtr> STRING
+%token <intlStringPtr> TOK_STRING
%token <metaNamePtr> INTRODUCER
// New tokens added v5.0
@@ -3202,7 +3202,7 @@ err($exceptionArray)
item.type = ExceptionItem::SQL_CODE;
item.code = $2;
}
- | SQLSTATE STRING
+ | SQLSTATE TOK_STRING
{
ExceptionItem& item = $exceptionArray->add();
item.type = ExceptionItem::SQL_STATE;
@@ -6381,7 +6381,7 @@ map_from_symbol_name
%type <intlStringPtr> map_logoninfo
map_logoninfo
- : STRING
+ : TOK_STRING
| valid_symbol_name { $$ = newNode<IntlString>($1->c_str()); }
;
@@ -6629,7 +6629,7 @@ u_constant
: u_numeric_constant
| sql_string
{ $$ = MAKE_str_constant($1, lex.att_charset); }
- | DATE STRING
+ | DATE TOK_STRING
{
if (client_dialect < SQL_DIALECT_V6_TRANSITION)
{
@@ -6645,7 +6645,7 @@ u_constant
}
$$ = MAKE_constant($2->getString().c_str(), CONSTANT_DATE);
}
- | TIME STRING
+ | TIME TOK_STRING
{
if (client_dialect < SQL_DIALECT_V6_TRANSITION)
{
@@ -6661,7 +6661,7 @@ u_constant
}
$$ = MAKE_constant($2->getString().c_str(), CONSTANT_TIME);
}
- | TIMESTAMP STRING
+ | TIMESTAMP TOK_STRING
{ $$ = MAKE_constant($2->getString().c_str(), CONSTANT_TIMESTAMP); }
;
@@ -6705,8 +6705,8 @@ internal_info
%type <intlStringPtr> sql_string
sql_string
- : STRING // string in current charset
- | INTRODUCER STRING // string in specific charset
+ : TOK_STRING // string in current charset
+ | INTRODUCER TOK_STRING // string in specific charset
{
$$ = $2;
$$->setCharSet(*$1);
diff --git a/src/yvalve/preparse.cpp b/src/yvalve/preparse.cpp
index 3fa672b..6b730ac 100644
--- a/src/yvalve/preparse.cpp
+++ b/src/yvalve/preparse.cpp
@@ -89,7 +89,7 @@ enum token_vals {
TOKEN_TOO_LONG = -2,
UNEXPECTED_END_OF_COMMAND = -3,
UNEXPECTED_TOKEN = -4,
- STRING = 257,
+ TOK_STRING = 257,
NUMERIC = 258,
SYMBOL = 259
};
@@ -112,7 +112,7 @@ static NoCaseString getToken(unsigned& pos, const Tokens& toks, int symbol = SYM
case SYMBOL:
break;
- case STRING:
+ case TOK_STRING:
if (!strchr(quotes, toks[pos].text[0]))
generate_error(curTok, UNEXPECTED_TOKEN);
return toks[pos++].stripped().ToNoCaseString();
@@ -186,7 +186,7 @@ bool PREPARSE_execute(CheckStatusWrapper* status, Why::YAttachment** ptrAtt,
return false;
}
- PathName file_name(getToken(pos, tks, STRING).ToPathName());
+ PathName file_name(getToken(pos, tks, TOK_STRING).ToPathName());
*stmt_eaten = false;
ClumpletWriter dpb(ClumpletReader::Tagged, MAX_DPB_SIZE, isc_dpb_version1);
@@ -235,7 +235,7 @@ bool PREPARSE_execute(CheckStatusWrapper* status, Why::YAttachment** ptrAtt,
break;
case PP_PASSWORD:
- token = getToken(pos, tks, STRING);
+ token = getToken(pos, tks, TOK_STRING);
dpb.insertString(isc_dpb_password, token.ToString());
matched = true;
@@ -252,7 +252,7 @@ bool PREPARSE_execute(CheckStatusWrapper* status, Why::YAttachment** ptrAtt,
token = getToken(pos, tks);
if (token != pp_symbols[PP_NAMES].symbol)
generate_error(token, UNEXPECTED_TOKEN);
- token = getToken(pos, tks, STRING);
+ token = getToken(pos, tks, TOK_STRING);
dpb.insertString(isc_dpb_lc_ctype, token.ToString());
matched = true;
--
2.4.3
From 2edbfe6304c4dd86eb53018b00a0cb54abaca42d Mon Sep 17 00:00:00 2001
From: Alexpux <alexey.pawlow@gmail.com>
Date: Mon, 24 Nov 2014 22:12:17 +0300
Subject: [PATCH] mingw-w64 have matherr routine
---
src/extlib/ib_udf.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/extlib/ib_udf.cpp b/src/extlib/ib_udf.cpp
index fc6d69c..5a6f21b 100644
--- a/src/extlib/ib_udf.cpp
+++ b/src/extlib/ib_udf.cpp
@@ -50,10 +50,12 @@ extern "C"
#else
#define exception_type __exception
#endif
+#ifndef matherr
int MATHERR(struct exception_type*)
{
return 1;
}
+#endif
#undef exception_type
#endif // SOLARIS
#endif //__ICC
--
2.4.3
From 3ffc447fac451d7811234c769375f04601122eeb Mon Sep 17 00:00:00 2001
From: Alexpux <alexey.pawlow@gmail.com>
Date: Fri, 28 Nov 2014 12:28:31 +0300
Subject: [PATCH] Fix linkng error for mingw.
---
src/utilities/install/services.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/utilities/install/services.cpp b/src/utilities/install/services.cpp
index 04abff3..f28e7fa 100644
--- a/src/utilities/install/services.cpp
+++ b/src/utilities/install/services.cpp
@@ -563,6 +563,7 @@ USHORT SERVICES_grant_access_rights(const char* service_name, const TEXT* accoun
// Until the fb_assert could be converted to a function/object linked with each module
// we need this ugly workaround.
//
+#ifndef __MINGW32__
extern "C" void API_ROUTINE gds__log(const TEXT* text, ...)
{
va_list ptr;
@@ -572,6 +573,7 @@ extern "C" void API_ROUTINE gds__log(const TEXT* text, ...)
va_end(ptr);
printf("\n\n");
}
+#endif
//
// EOF
--
2.4.3
From dc63f831f10770211a635b09cb4027b0392a4e21 Mon Sep 17 00:00:00 2001
From: Alexpux <alexey.pawlow@gmail.com>
Date: Sun, 30 Nov 2014 15:26:04 +0300
Subject: [PATCH] DLL's are in BIN folder.
---
builds/posix/make.defaults | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/builds/posix/make.defaults b/builds/posix/make.defaults
index f68c44c..caa9930 100755
--- a/builds/posix/make.defaults
+++ b/builds/posix/make.defaults
@@ -202,7 +202,7 @@ include $(ROOT)/gen/Make.Version
vpath %.so $(LIB)
vpath %.a $(LIB)
-vpath %.dll $(LIB)
+vpath %.dll $(BIN)
#_____________________________________________________________________________
--
2.4.3
From b68ce6c68bcf734e244c9ca54ccaefd28db0271e Mon Sep 17 00:00:00 2001
From: Alexpux <alexey.pawlow@gmail.com>
Date: Sun, 30 Nov 2014 15:08:19 +0300
Subject: [PATCH] Auto detect WINDRES with autoconf.
Fix building .rc files.
---
builds/posix/make.defaults | 4 +++-
builds/posix/make.rules | 4 ++--
builds/posix/make.shared.targets | 14 +++++++-------
configure.ac | 10 ++++++++++
4 files changed, 22 insertions(+), 10 deletions(-)
diff --git a/builds/posix/make.defaults b/builds/posix/make.defaults
index caa9930..65f8c6c 100755
--- a/builds/posix/make.defaults
+++ b/builds/posix/make.defaults
@@ -151,9 +151,11 @@ ECHO= echo
QUIET_ECHO= @echo
CD= cd
CAT= cat
-AR= ar @AR_OPTIONS@
+AR= @AR@ @AR_OPTIONS@
LN= @LN_S@
+DLLTOOL= @DLLTOOL@
RANLIB= @RANLIB@
+RC= @RC@
BTYACC=$(ROOT)/extern/btyacc/btyacc
CLOOP=$(GEN_ROOT)/$(TARGET)/cloop/release/bin/cloop
diff --git a/builds/posix/make.rules b/builds/posix/make.rules
index 42c719d..601dc82 100644
--- a/builds/posix/make.rules
+++ b/builds/posix/make.rules
@@ -102,8 +102,8 @@ $(OBJ)/%.o: $(SRC_ROOT)/%.cpp
# Rules for making resource files
-$(GEN_ROOT)/%.res: $(SRC_ROOT)/%.rc
- windres --output-format=coff --include-dir=$(<D) $< $@
+$(OBJ)/%.res: $(SRC_ROOT)/%.rc
+ $(RC) --output-format=coff --include-dir=$(<D) $< $@
# Rule for making gbak files when cross-compiling
diff --git a/builds/posix/make.shared.targets b/builds/posix/make.shared.targets
index 07afa91..62097a7 100644
--- a/builds/posix/make.shared.targets
+++ b/builds/posix/make.shared.targets
@@ -75,16 +75,16 @@ $(OBJ)/dsql/PackageNodes.cpp: $(SRC_ROOT)/dsql/PackageNodes.epp
# Adding resources as prerequisite for some files
-$(FilesToAddVersionInfo): $(GEN_ROOT)/jrd/version.res
-$(FilesToAddDialog): $(GEN_ROOT)/remote/os/win32/window.res
-$(FilesToAddDialog2): $(GEN_ROOT)/iscguard/iscguard.res
+$(FilesToAddVersionInfo): $(OBJ)/jrd/version.res
+$(FilesToAddDialog): $(OBJ)/remote/server/os/win32/window.res
+$(FilesToAddDialog2): $(OBJ)/iscguard/iscguard.res
# Explicit dependence of resource script
-$(GEN_ROOT)/remote/os/win32/window.res: $(SRC_ROOT)/remote/os/win32/window.rc $(SRC_ROOT)/remote/os/win32/window.rh \
- $(SRC_ROOT)/jrd/version.rc $(SRC_ROOT)/jrd/build_no.h $(SRC_ROOT)/remote/os/win32/property.rc \
- $(SRC_ROOT)/remote/os/win32/property.rh
+$(OBJ)/remote/server/os/win32/window.res: $(SRC_ROOT)/remote/server/os/win32/window.rc $(SRC_ROOT)/remote/server/os/win32/window.rh \
+ $(SRC_ROOT)/jrd/version.rc $(SRC_ROOT)/jrd/build_no.h $(SRC_ROOT)/remote/server/os/win32/property.rc \
+ $(SRC_ROOT)/remote/server/os/win32/property.rh
-$(GEN_ROOT)/iscguard/iscguard.res: $(SRC_ROOT)/iscguard/iscguard.rc $(SRC_ROOT)/iscguard/iscguard.rh \
+$(OBJ)/iscguard/iscguard.res: $(SRC_ROOT)/iscguard/iscguard.rc $(SRC_ROOT)/iscguard/iscguard.rh \
$(SRC_ROOT)/jrd/version.rc
.PHONY: FORCE
diff --git a/configure.ac b/configure.ac
index 3e65f10..2e81f32 100644
--- a/configure.ac
+++ b/configure.ac
@@ -679,6 +679,16 @@ AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
LT_INIT([dlopen win32-dll])
+if test $PLATFORM = win32; then
+ # Checks for mingw resource compiler.
+ AC_CHECK_PROGS([RC],
+ [$target-windres \
+ windres])
+
+ if test -z "${RC}"; then
+ AC_MSG_ERROR(windres command is not found.);
+ fi
+fi
dnl Check for system header files
AC_HEADER_DIRENT
--
2.4.3
From 45967f2bc150fc693284a616b3abae27b4d5015c Mon Sep 17 00:00:00 2001
From: Alexpux <alexey.pawlow@gmail.com>
Date: Wed, 19 Nov 2014 08:59:48 +0300
Subject: [PATCH] Define AMD64 for 64-bit mingw.
---
configure.ac | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/configure.ac b/configure.ac
index 2e81f32..651ca3e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -468,6 +468,11 @@ dnl CPU_TYPE=ppc64
EDITLINE_FLG=N
RAW_DEVICES_FLG=N
SHRLIB_EXT=dll
+ case "$target" in
+ x86_64-*-mingw*)
+ AC_DEFINE(AMD64, 1, [Define this if CPU is amd64])
+ ;;
+ esac
;;
*)
--
2.4.3
From 50fa75577518ce66d31ed9c6fa84bbb8a91c544b Mon Sep 17 00:00:00 2001
From: Alexpux <alexey.pawlow@gmail.com>
Date: Wed, 19 Nov 2014 23:16:18 +0300
Subject: [PATCH] Use mingw-w64 crt for Vista and later. Remove unneeded
flag "-Dlint". Use GCC built-in define for mingw
---
builds/posix/prefix.mingw | 4 ++--
src/common/classes/fb_atomic.h | 2 +-
src/iscguard/iscguard.cpp | 2 +-
src/isql/isql.epp | 4 ++--
src/jrd/ibsetjmp.h | 2 +-
src/remote/server/os/win32/srvr_w32.cpp | 2 +-
6 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/builds/posix/prefix.mingw b/builds/posix/prefix.mingw
index 5f8dde8..09902f4 100644
--- a/builds/posix/prefix.mingw
+++ b/builds/posix/prefix.mingw
@@ -20,8 +20,8 @@
#
# -Wno-unused-variable is used due to unused gpre generated variables
-PROD_FLAGS=-O2 -DMINGW -Wall -Wshadow -Wundef -Wno-long-long -Wno-unused-variable -Wno-sign-compare -Wno-parentheses -Wno-switch -fmessage-length=0 -Dlint -DWIN32_LEAN_AND_MEAN -MMD -mthreads -Wno-non-virtual-dtor
-DEV_FLAGS=-ggdb -DMINGW -Wall -Wshadow -Wundef -Wno-long-long -Wno-unused-variable -Wno-sign-compare -Wno-parentheses -Wno-switch -fmessage-length=0 -Dlint -DWIN32_LEAN_AND_MEAN -MMD -mthreads -Wno-non-virtual-dtor
+PROD_FLAGS=-O2 -D_WIN32_WINNT=0x0600 -Wall -Wshadow -Wundef -Wno-long-long -Wno-unused-variable -Wno-sign-compare -Wno-parentheses -Wno-switch -fmessage-length=0 -DWIN32_LEAN_AND_MEAN -MMD -mthreads -Wno-non-virtual-dtor
+DEV_FLAGS=-ggdb -D_WIN32_WINNT=0x0600 -Wall -Wshadow -Wundef -Wno-long-long -Wno-unused-variable -Wno-sign-compare -Wno-parentheses -Wno-switch -fmessage-length=0 -DWIN32_LEAN_AND_MEAN -MMD -mthreads -Wno-non-virtual-dtor
PLATFORM_PATH=os/win32
diff --git a/src/common/classes/fb_atomic.h b/src/common/classes/fb_atomic.h
index f32b2b8..2e90ab6 100644
--- a/src/common/classes/fb_atomic.h
+++ b/src/common/classes/fb_atomic.h
@@ -99,7 +99,7 @@ public:
}
protected:
-#ifndef MINGW
+#ifndef __MINGW32__
volatile
#endif
counter_type counter;
diff --git a/src/iscguard/iscguard.cpp b/src/iscguard/iscguard.cpp
index b1cf0f6..6d21508 100644
--- a/src/iscguard/iscguard.cpp
+++ b/src/iscguard/iscguard.cpp
@@ -137,7 +137,7 @@ int WINAPI WinMain(HINSTANCE hInstance,
// BRS There is a error in MinGW (3.1.0) headers
// the parameter of StartServiceCtrlDispatcher is declared const in msvc headers
-#if defined(MINGW)
+#if defined(__MINGW32__)
if (!StartServiceCtrlDispatcher(const_cast<SERVICE_TABLE_ENTRY*>(service_table)))
#else
if (!StartServiceCtrlDispatcher(service_table))
diff --git a/src/isql/isql.epp b/src/isql/isql.epp
index c786f83..ae92c35 100644
--- a/src/isql/isql.epp
+++ b/src/isql/isql.epp
@@ -6943,7 +6943,7 @@ static unsigned print_item(TEXT** s, const IsqlVar* var, const unsigned length)
break;
}
-#if defined(MINGW)
+#if defined(__MINGW32__)
if (value == 0)
{
sprintf(p, "% #*.*g ", length, (int) MIN(8, (length - 6)) - 1, value);
@@ -7019,7 +7019,7 @@ static unsigned print_item(TEXT** s, const IsqlVar* var, const unsigned length)
}
else
{
-#if defined(MINGW)
+#if defined(__MINGW32__)
if (value == 0)
{
sprintf(p, "% #*.*g ", length, (int) MIN(16, (length - 7)) - 1, value);
diff --git a/src/jrd/ibsetjmp.h b/src/jrd/ibsetjmp.h
index 759f125..0ac3c54 100644
--- a/src/jrd/ibsetjmp.h
+++ b/src/jrd/ibsetjmp.h
@@ -50,7 +50,7 @@
#endif // UNIX
-#if defined(WIN_NT) && !defined(MINGW)
+#if defined(WIN_NT) && !defined(__MINGW32__)
#include <excpt.h>
#define START_CHECK_FOR_EXCEPTIONS(err) { \
diff --git a/src/remote/server/os/win32/srvr_w32.cpp b/src/remote/server/os/win32/srvr_w32.cpp
index a7f8ac5..3bc652f 100644
--- a/src/remote/server/os/win32/srvr_w32.cpp
+++ b/src/remote/server/os/win32/srvr_w32.cpp
@@ -322,7 +322,7 @@ int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE /*hPrevInst*/, LPSTR lpszArgs,
// BRS There is a error in MinGW (3.1.0) headers
// the parameter of StartServiceCtrlDispatcher is declared const in msvc headers
-#if defined(MINGW)
+#if defined(__MINGW32__)
if (!StartServiceCtrlDispatcher(const_cast<SERVICE_TABLE_ENTRY*>(service_table)))
{
#else
--
2.4.3
From 750a2202b62e16bf84f0bd2813bc5ebb02e3ee3f Mon Sep 17 00:00:00 2001
From: Alexpux <alexey.pawlow@gmail.com>
Date: Thu, 20 Nov 2014 07:31:40 +0300
Subject: [PATCH] Add AuthSspi to remote common - needed for win32 target.
---
builds/posix/make.shared.variables | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/builds/posix/make.shared.variables b/builds/posix/make.shared.variables
index 2d3143f..53597e6 100644
--- a/builds/posix/make.shared.variables
+++ b/builds/posix/make.shared.variables
@@ -52,7 +52,7 @@ AllObjects += $(YValve_Objects)
# Remote
-Remote_Common:= $(call dirObjects,remote) $(call dirObjects,auth/SecureRemotePassword)
+Remote_Common:= $(call dirObjects,remote) $(call dirObjects,auth/SecureRemotePassword) $(call dirObjects,auth/trusted)
Remote_Server:= $(call dirObjects,remote/server) $(call dirObjects,auth/SecureRemotePassword/server)
Remote_Client:= $(call dirObjects,remote/client) $(call dirObjects,auth/SecureRemotePassword/client) \
$(call makeObjects,auth/SecurityDatabase,LegacyClient.cpp) \
--
2.4.3
From fa8118fd2828e66de87d1625f5eed043ee825936 Mon Sep 17 00:00:00 2001
From: Alexpux <alexey.pawlow@gmail.com>
Date: Mon, 24 Nov 2014 09:08:35 +0300
Subject: [PATCH] Some utilities need to link with additional windows libraries
---
builds/posix/Makefile.in | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/builds/posix/Makefile.in b/builds/posix/Makefile.in
index eac1ed5..85d4697 100644
--- a/builds/posix/Makefile.in
+++ b/builds/posix/Makefile.in
@@ -375,7 +375,7 @@ utilities: firebird_server fb_lock_print fbguard fbsvcmgr fbtracemgr gbak gfix g
firebird_server: $(FB_DAEMON)
$(FB_DAEMON): $(Remote_Server_Objects) $(COMMON_LIB)
- $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS)
+ $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(LIB_GUI)
fb_lock_print: $(LOCKPRINT)
@@ -385,7 +385,7 @@ $(LOCKPRINT): $(LOCKPRINT_Objects) $(COMMON_LIB)
fbguard: $(FBGUARD)
$(FBGUARD): $(FBGUARD_Objects) $(COMMON_LIB)
- $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS)
+ $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(LIB_GUI)
fbsvcmgr: $(FBSVCMGR)
--
2.4.3
From 9de828798a528614a938da3b3116d1a968716cf3 Mon Sep 17 00:00:00 2001
From: Alexpux <alexey.pawlow@gmail.com>
Date: Mon, 24 Nov 2014 10:10:35 +0300
Subject: [PATCH] Fix linking executables and libraries with resources.
Generate proper import libraries.
---
builds/posix/Makefile.in.plugins_examples | 2 +-
builds/posix/make.defaults | 14 +-
builds/posix/prefix.mingw | 40 ++--
builds/win32/defs/fbclient32.def | 372 ++++++++++++++++++++++++++++++
builds/win32/defs/fbclient64.def | 372 ++++++++++++++++++++++++++++++
5 files changed, 773 insertions(+), 27 deletions(-)
create mode 100644 builds/win32/defs/fbclient32.def
create mode 100644 builds/win32/defs/fbclient64.def
diff --git a/builds/posix/Makefile.in.plugins_examples b/builds/posix/Makefile.in.plugins_examples
index 40908f6..24fa138 100644
--- a/builds/posix/Makefile.in.plugins_examples
+++ b/builds/posix/Makefile.in.plugins_examples
@@ -73,7 +73,7 @@ ifeq ($(PLATFORM),DARWIN)
$(LIB_LINK) $(LIB_BUNDLE_OPTIONS) -o $@ $^ @PTHREAD_CFLAGS@ @PTHREAD_LIBS@ \
$(FIREBIRD_LIBRARY_LINK)
else
- $(LIB_LINK) $(LIB_LINK_OPTIONS) $(LIB_LINK_SONAME)udrcpp_example.$(SHRLIB_EXT) \
+ $(LIB_LINK) $(LIB_LINK_OPTIONS) $(call LIB_LINK_SONAME,$(LIB_PREFIX)udrcpp_example.$(SHRLIB_EXT)) \
$(LIB_PATH_OPTS) -o $@ $^ $(THR_LIBS) \
$(FIREBIRD_LIBRARY_LINK)
endif
diff --git a/builds/posix/make.defaults b/builds/posix/make.defaults
index 65f8c6c..bc18fc8 100755
--- a/builds/posix/make.defaults
+++ b/builds/posix/make.defaults
@@ -107,6 +107,11 @@ RTTI_FLAG:= -fno-rtti
IsDeveloper = @DEVEL_FLG@
CpuType=@CPU_TYPE@
+ifeq ($(CpuType), x86_64)
+ BITNESS_SUFFIX := 64
+else
+ BITNESS_SUFFIX := 32
+endif
PLATFORM=@PLATFORM@
SFIO_EXAMPLES=@SFIO_EXAMPLES@
@@ -218,7 +223,7 @@ vpath %.dll $(BIN)
#
#LibraryFileName=libfbclient
-LibraryFileName=libfbclient
+LibraryFileName=$(LIB_PREFIX)fbclient
LibraryFullName=$(LibraryFileName).${SHRLIB_EXT}.${FirebirdVersion}
LibrarySoName=$(LibraryFileName).${SHRLIB_EXT}.2
LibraryBaseName=$(LibraryFileName).${SHRLIB_EXT}
@@ -229,7 +234,7 @@ LIBFIREBIRD_BASENAME = $(LIB)/$(LibrarySoName)
# The firebird engine library name
-EngineFileName=libEngine${OdsVersion}
+EngineFileName=$(LIB_PREFIX)Engine${OdsVersion}
EngineSoName=$(EngineFileName).${SHRLIB_EXT}
ENGINE_SONAME = $(PLUGINS)/$(EngineSoName)
@@ -290,6 +295,7 @@ else
endif
LIB_PATH_OPTS = $(call LIB_LINK_RPATH,lib) $(call LIB_LINK_RPATH,intl)
LIB_LINK_SONAME= -Wl,-soname,$(1)
+LIB_LINK_IMPLIB=
LIB_LINK_MAPFILE= -Wl,--version-script,$(1)
FIREBIRD_LIBRARY_LINK= -L$(LIB) -lfbclient $(MATHLIB)
@@ -304,7 +310,7 @@ LINK_UDF = $(LIB_LINK) $(LIB_LINK_OPTIONS) $(call LIB_LINK_SONAME,$(1).$(SHRLIB_
LINK_UDF_LIBS = $(THR_LIBS) -L$(LIB) -lib_util $(SO_LINK_LIBS)
LINK_IB_UTIL = $(LIB_LINK) $(LINK_IBUTIL_SYMBOLS) $(LIB_LINK_OPTIONS) $(UNDEF_FLAGS)\
- $(call LIB_LINK_SONAME,$(IbUtilLibraryName)) $(call LIB_LINK_RPATH,lib)
+ $(call LIB_LINK_SONAME,$(IbUtilLibraryName)) $(call LIB_LINK_RPATH,lib) $(call LIB_LINK_IMPLIB,$(LIB)/lib$(IbUtilLibraryName).a)
LINK_IB_UTIL_LIBS = $(THR_LIBS)
LINK_INTL = $(LIB_LINK) $(LINK_FBINTL_SYMBOLS) $(LIB_LINK_OPTIONS) $(UNDEF_FLAGS)\
@@ -316,7 +322,7 @@ LINK_TRACE = $(LIB_LINK) $(LINK_PLUGIN_SYMBOLS) $(LIB_LINK_OPTIONS) $(UNDEF_FLAG
LINK_TRACE_LIBS = -L$(LIB) $(SO_LINK_LIBS)
LINK_FIREBIRD = $(LIB_LINK) $(LINK_FIREBIRD_SYMBOLS) $(LIB_LINK_OPTIONS) $(LIB_FIREBIRD_OPTIONS) $(UNDEF_FLAGS)\
- $(call LIB_LINK_SONAME,$(LibrarySoName)) $(call LIB_LINK_RPATH,lib)
+ $(call LIB_LINK_SONAME,$(LibrarySoName)) $(call LIB_LINK_RPATH,lib) $(call LIB_LINK_IMPLIB,$(LIB)/lib$(LibraryBaseName).a)
LINK_FIREBIRD_LIBS = -L$(LIB) $(LIB_GUI) $(SO_LINK_LIBS) $(MATHLIB)
LINK_ENGINE = $(LIB_LINK) $(LINK_PLUGIN_SYMBOLS) $(LIB_LINK_OPTIONS) $(LIB_FIREBIRD_OPTIONS) $(UNDEF_FLAGS)\
diff --git a/builds/posix/prefix.mingw b/builds/posix/prefix.mingw
index 09902f4..8dad1ce 100644
--- a/builds/posix/prefix.mingw
+++ b/builds/posix/prefix.mingw
@@ -28,42 +28,38 @@ PLATFORM_PATH=os/win32
# Override link command for implicit stdc++ linking
LIB_LINK=$(LD)
-LIB_LINK_OPTIONS+=-Wl,--enable-stdcall-fixup
-
# Strip symbols from release versions to decrease size
ifeq ($(IsProdTypeBuild),Y)
EXE_LINK_OPTIONS+=-Wl,-s
LIB_LINK_OPTIONS+=-Wl,-s
endif
-# Generation of fbclient_ms.lib
-LIB_LINK_IMPLIB:=-Wl,--out-implib,firebird/lib/fbclient_ms.lib
LIB_GUI:= -mwindows -lcomctl32 -lgdi32
# Add resources to some files
-FilesToAddVersionInfo=$(LIBFBEMBED_SO) $(LIBFBCLIENT_SO) $(LIBFBINTL_SO) \
- $(GSTAT) $(GSEC) $(GFIX) $(QLI) $(ISQL) $(GBAK) $(GPRE)
+FilesToAddVersionInfo=$(FBTRACEMGR) $(LIBFIREBIRD_FULLNAME) $(ENGINE_SONAME) $(LIBFBINTL_SO) \
+ $(FBSVCMGR) $(FBTRACEMGR) $(FBTRACE) $(FBUDF_SO) $(LIBIBUTIL_SO) \
+ $(GBAK) $(GFIX) $(GPRE) $(GSEC) $(GSPLIT) $(GSTAT) $(QLI) $(ISQL) $(NBACKUP)
# TODO: guardians also must be here
-FilesToAddDialog=$(FB_SUPER_SERVER) $(FB_CLASSIC_SERVER)
-FilesToAddDialog2=$(IBGUARD)
+FilesToAddDialog=$(FB_DAEMON)
+FilesToAddDialog2=$(FBGUARD)
# Suppress 'lib'-prefix
LIB_PREFIX=
# Override library names to suppress version suffix
-ClientLibraryNameFull := $(ClientLibraryName)
-ClientLibrarySoName := $(ClientLibraryName)
-
-# Looks like MinGW 3 does not support version scripts but support def-files
-LINK_FIREBIRD_SYMBOLS = $(BLD_ROOT)/win32/defs/fbclient_s.def $(BLD_ROOT)/win32/defs/fbclient.def
-
-# This is required for newly built executable to find newly built shared
-# libraries because on Win32 there is no such thing as LD_LIBRARY_PATH
-LIB=$(BIN)
+LibrarySoName := $(LibraryBaseName)
+LibraryFullName := $(LibraryBaseName)
+LIBFIREBIRD_FULLNAME = $(BIN)/$(LibraryBaseName)
+LIBFIREBIRD_SONAME = $(LIBFIREBIRD_FULLNAME)
+LIBFIREBIRD_BASENAME = $(LIBFIREBIRD_FULLNAME)
+LIBIBUTIL_SO = $(BIN)/$(IbUtilLibraryName)
-# Special options for UDF link
-LINK_UDF = $(LIB_LINK) $(LIB_LINK_OPTIONS) $(call LIB_LINK_SONAME,$(1).$(SHRLIB_EXT)) -L$(LIB) -lib_util
-LINK_UDF_LIBS =
+LINK_FIREBIRD_SYMBOLS = $(BLD_ROOT)/win32/defs/fbclient$(BITNESS_SUFFIX).def
+LINK_FBINTL_SYMBOLS =
+LINK_IBUTIL_SYMBOLS =
+LINK_UDRENG_SYMBOLS =
+LINK_EMPTY_SYMBOLS =
+LINK_PLUGIN_SYMBOLS =
+LIB_LINK_IMPLIB= -Wl,--out-implib,$(1)
-# Special options for trace plugin link
-LINK_TRACE_LIBS = -L$(LIB) $(SO_LINK_LIBS)
diff --git a/builds/win32/defs/fbclient32.def b/builds/win32/defs/fbclient32.def
new file mode 100644
index 0000000..fa8f733
--- /dev/null
+++ b/builds/win32/defs/fbclient32.def
@@ -0,0 +1,725 @@
+; The contents of this file are subject to the Interbase Public
+; License Version 1.0 (the "License"); you may not use this file
+; except in compliance with the License. You may obtain a copy
+; of the License at http://www.Inprise.com/IPL.html
+;
+; Software distributed under the License is distributed on an
+; "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express
+; or implied. See the License for the specific language governing
+; rights and limitations under the License.
+;
+; The Original Code was created by Inprise Corporation
+; and its predecessors. Portions created by Inprise Corporation are
+; Copyright (C) Inprise Corporation.
+;
+; All Rights Reserved.
+; Contributor(s): ______________________________________.
+
+LIBRARY "fbclient.dll"
+EXPORTS
+
+;-------------------
+; PRIVATE INTERFACE
+;-------------------
+
+ gds__alloc@4
+ gds__attach_database@24
+ gds__blob_info@24
+ gds__blob_size@16
+ gds__cancel_blob@8
+ gds__cancel_events@12
+ gds__close@8
+ gds__close_blob@8
+ gds__commit_retaining@8
+ gds__commit_transaction@8
+ gds__compile_request@20
+ gds__compile_request2@20
+ gds__create_blob@20
+ gds__create_blob2@28
+ gds__create_database@28
+ gds__database_cleanup@16
+ gds__database_info@24
+ gds__ddl@20
+ gds__declare@12
+ gds__decode@12
+ gds__decode_date@8
+ gds__describe@12
+ gds__describe_bind@12
+ gds__detach_database@8
+ gds__disable_subsystem@4
+ gds__dsql_finish@4
+ gds__edit@8
+ gds__enable_subsystem@4
+ gds__encode@8
+ gds__encode_date@8
+ gds__event_block@0
+ gds__event_counts@16
+ gds__event_wait@20
+ gds__execute@16
+ gds__execute_immediate@20
+ gds__fetch@12
+ gds__free@4
+ gds__ftof@16
+ gds__get_prefix@8
+ gds__get_segment@20
+ gds__get_slice@44
+ gds__interprete@8
+ gds__log@0
+ gds__log_status@8
+ gds__map_blobs@8
+ gds__msg_close@4
+ gds__msg_format@40
+ gds__msg_lookup@24
+ gds__msg_open@8
+ gds__msg_put@32
+ gds__open@16
+ gds__open_blob@20
+ gds__open_blob2@28
+ gds__parse_bpb@16
+ gds__prefix@8
+ gds__prefix_lock@8
+ gds__prefix_msg@8
+ gds__prepare@28
+ gds__prepare_transaction@8
+ gds__prepare_transaction2@16
+ gds__print_blr@16
+ gds__print_status@4
+ gds__put_error@4
+ gds__put_segment@16
+ gds__put_slice@40
+ gds__qtoq@8
+ gds__que_events@28
+ gds__receive@24
+ gds__reconnect_transaction@20
+ gds__register_cleanup@8
+ gds__release_request@8
+ gds__request_info@28
+ gds__rollback_transaction@8
+ gds__seek_blob@20
+ gds__send@24
+ gds__set_debug@4
+ gds__sqlcode@4
+ gds__start_and_send@28
+ gds__start_multiple@16
+ gds__start_request@16
+ gds__start_transaction@0
+ gds__temp_file@20
+ gds__thread_enable@4
+ gds__thread_enter@0
+ gds__thread_exit@0
+ gds__thread_start@20
+ gds__to_sqlda@20
+ gds__transaction_cleanup@16
+ gds__transaction_info@24
+ gds__unregister_cleanup@8
+ gds__unwind_request@12
+ gds__validate_lib_path@16
+ gds__vax_integer@8
+ gds__version@12
+ gds__vtof@12
+ gds__vtov@12
+ gds__default_printer@0
+
+ gds__alloc_debug@12
+
+ gds_alloc_flag_unfreed@4
+ gds_alloc_report@12
+
+ fb_shutdown@8
+ fb_shutdown_callback@16
+ fb_cancel_operation@12
+ fb_disconnect_transaction@8
+
+ perf_format@20
+ perf_get_info@8
+ perf_report@16
+
+ perf64_format@20
+ perf64_get_info@8
+ perf64_report@16
+
+;----------------------------
+; PUBLIC INTERFACE, i.e. API
+;----------------------------
+
+ ; Array functions
+
+ isc_array_gen_sdl@20
+ isc_array_get_slice@28
+ isc_array_lookup_bounds@24
+ isc_array_lookup_desc@24
+ isc_array_put_slice@28
+ isc_array_set_desc@28
+ isc_get_slice@44
+ isc_put_slice@40
+
+ ; BLOB functions
+
+ isc_blob_default_desc@12
+ isc_blob_gen_bpb@24
+ isc_blob_info@24
+ isc_blob_lookup_desc@28
+ isc_blob_set_desc@28
+ isc_cancel_blob@8
+ isc_close_blob@8
+ isc_create_blob@20
+ isc_create_blob2@28
+ isc_get_segment@20
+ isc_open_blob@20
+ isc_open_blob2@28
+ isc_put_segment@16
+
+ ; Database functions
+
+ isc_attach_database@24
+ isc_create_database@28
+ isc_database_info@24
+ isc_detach_database@8
+ isc_drop_database@8
+ isc_expand_dpb@0
+ isc_modify_dpb@20
+ isc_version@12
+ isc_get_client_major_version@0
+ isc_get_client_minor_version@0
+ isc_get_client_version@4
+
+ ; Conversion functions
+
+ isc_decode_date@8
+ isc_decode_sql_date@8
+ isc_decode_sql_time@8
+ isc_decode_timestamp@8
+ isc_encode_date@8
+ isc_encode_sql_date@8
+ isc_encode_sql_time@8
+ isc_encode_timestamp@8
+ isc_portable_integer@8
+ isc_vax_integer@8
+
+ ; DSQL functions
+
+ isc_dsql_allocate_statement@12
+ isc_dsql_alloc_statement2@12
+ isc_dsql_describe@16
+ isc_dsql_describe_bind@16
+ isc_dsql_execute@20
+ isc_dsql_execute2@24
+ isc_dsql_execute_m@32
+ isc_dsql_execute2_m@52
+ isc_dsql_execute_immediate@28
+ isc_dsql_exec_immed2@32
+ isc_dsql_execute_immediate_m@44
+ isc_dsql_exec_immed2_m@64
+ isc_dsql_exec_immed3_m@64
+ isc_dsql_fetch@16
+ isc_dsql_fetch_a@20
+ isc_dsql_fetch_m@28
+ isc_dsql_finish@4
+ isc_dsql_free_statement@12
+ isc_dsql_insert@16
+ isc_dsql_insert_m@28
+ isc_dsql_prepare@28
+ isc_dsql_prepare_m@40
+ isc_dsql_release@8
+ isc_dsql_set_cursor_name@16
+ isc_dsql_sql_info@24
+
+ ; ESQL functions
+
+ isc_embed_dsql_close@8
+ isc_embed_dsql_declare@12
+ isc_embed_dsql_describe@16
+ isc_embed_dsql_describe_bind@16
+ isc_embed_dsql_execute@20
+ isc_embed_dsql_execute2@24
+ isc_embed_dsql_execute_immed@28
+ isc_embed_dsql_exec_immed2@32
+ isc_embed_dsql_fetch@16
+ isc_embed_dsql_fetch_a@20
+ isc_embed_dsql_insert@16
+ isc_embed_dsql_open@20
+ isc_embed_dsql_open2@24
+ isc_embed_dsql_prepare@32
+ isc_embed_dsql_release@8
+ isc_embed_dsql_length@8
+
+ ; Error-handling functions
+
+ isc_interprete@8
+ fb_interpret@12
+ isc_print_sqlerror@8
+ isc_print_status@4
+ isc_sqlcode@4
+ isc_sql_interprete@12
+ isc_sqlcode_s@8
+ fb_sqlstate@8
+
+ ; Event functions
+
+ isc_cancel_events@12
+ isc_event_block@0
+ isc_event_counts@16
+ isc_que_events@28
+ isc_wait_for_event@20
+ isc_event_block_a@16
+ isc_event_block_s@20
+
+ ; Security functions
+
+ isc_add_user@8
+ isc_delete_user@8
+ isc_modify_user@8
+
+ ; Services functions
+
+ isc_service_attach@24
+ isc_service_detach@8
+ isc_service_query@36
+ isc_service_start@20
+
+ ; Transaction control functions
+
+ isc_commit_retaining@8
+ isc_commit_transaction@8
+ isc_prepare_transaction@8
+ isc_prepare_transaction2@16
+ isc_rollback_retaining@8
+ isc_rollback_transaction@8
+ isc_start_multiple@16
+ isc_start_transaction@0
+ isc_transaction_info@24
+
+ ; Other functions
+
+ isc_compile_request@20
+ isc_compile_request2@20
+ isc_ddl@20
+ isc_prepare@28
+ isc_receive@24
+ isc_reconnect_transaction@20
+ isc_release_request@8
+ isc_request_info@28
+ isc_seek_blob@20
+ isc_send@24
+ isc_start_and_send@28
+ isc_start_request@16
+ isc_transact_request@36
+ isc_unwind_request@12
+
+ ; Other SQL functions
+
+ isc_close@8
+ isc_declare@12
+ isc_describe@12
+ isc_describe_bind@12
+ isc_execute@16
+ isc_execute_immediate@20
+ isc_fetch@12
+ isc_fetch_a@16
+ isc_open@16
+
+ ; Other BLOB functions
+
+ BLOB_close@4
+ BLOB_display@16
+ BLOB_dump@16
+ BLOB_edit@16
+ BLOB_get@4
+ BLOB_load@16
+ BLOB_open@12
+ BLOB_put@8
+ BLOB_text_dump@16
+ BLOB_text_load@16
+ Bopen@16
+
+ ; Other misc functions
+
+ isc_ftof@16
+ isc_free@4
+ isc_print_blr@16
+ fb_print_blr@20
+ isc_qtoq@8
+ isc_reset_fpe@4
+ isc_set_debug@4
+ isc_to_sqlda@20
+ isc_vtof@12
+ isc_vtov@12
+ isc_baddress@4
+ isc_baddress_s@8
+
+ _isc_start_transaction = isc_start_transaction@0
+ _isc_expand_dpb = isc_expand_dpb@0
+ _isc_event_block = isc_event_block@0
+
+ fb_ping@8
+ fb_get_master_interface@0
+ fb_get_database_handle@12
+ fb_get_transaction_handle@12
+ fb_database_crypt_callback@8
+
+ gds__trace@4
+ gds__trace_raw@8
+ gds__trace_printer@0
+ gds__parse_bpb2@40
+
+;-----------------
+; OTHER FUNCTIONS
+;-----------------
+
+ CVT_move@12
+
+ KEYWORD_stringIsAToken@4
+ KEYWORD_getTokens@0
+
+;--------------------------------------
+; DUPLICATE FOR COMPATIBILITY WITH MSVC
+;--------------------------------------
+
+;-------------------
+; PRIVATE INTERFACE
+;-------------------
+
+ gds__alloc = gds__alloc@4 @1
+ gds__attach_database = gds__attach_database@24 @2
+ gds__blob_info = gds__blob_info@24 @3
+ gds__blob_size = gds__blob_size@16 @4
+ gds__cancel_blob = gds__cancel_blob@8 @5
+ gds__cancel_events = gds__cancel_events@12 @6
+ gds__close = gds__close@8 @7
+ gds__close_blob = gds__close_blob@8 @8
+ gds__commit_retaining = gds__commit_retaining@8 @9
+ gds__commit_transaction = gds__commit_transaction@8 @10
+ gds__compile_request = gds__compile_request@20 @11
+ gds__compile_request2 = gds__compile_request2@20 @12
+ gds__create_blob = gds__create_blob@20 @13
+ gds__create_blob2 = gds__create_blob2@28 @14
+ gds__create_database = gds__create_database@28 @15
+ gds__database_cleanup = gds__database_cleanup@16 @16
+ gds__database_info = gds__database_info@24 @17
+ gds__ddl = gds__ddl@20 @18
+ gds__declare = gds__declare@12 @19
+ gds__decode = gds__decode@12 @20
+ gds__decode_date = gds__decode_date@8 @21
+ gds__describe = gds__describe@12 @22
+ gds__describe_bind = gds__describe_bind@12 @23
+ gds__detach_database = gds__detach_database@8 @24
+ gds__disable_subsystem = gds__disable_subsystem@4 @25
+ gds__dsql_finish = gds__dsql_finish@4 @26
+ gds__edit = gds__edit@8 @27
+ gds__enable_subsystem = gds__enable_subsystem@4 @28
+ gds__encode = gds__encode@8 @29
+ gds__encode_date = gds__encode_date@8 @30
+ gds__event_block = gds__event_block@0 @31
+ gds__event_counts = gds__event_counts@16 @32
+ gds__event_wait = gds__event_wait@20 @33
+ gds__execute = gds__execute@16 @34
+ gds__execute_immediate = gds__execute_immediate@20 @35
+ gds__fetch = gds__fetch@12 @36
+ gds__free = gds__free@4 @37
+ gds__ftof = gds__ftof@16 @38
+ gds__get_prefix = gds__get_prefix@8 @248
+ gds__get_segment = gds__get_segment@20 @39
+ gds__get_slice = gds__get_slice@44 @40
+ gds__interprete = gds__interprete@8 @41
+ gds__log = gds__log@0 @42
+ gds__log_status = gds__log_status@8 @142
+ gds__map_blobs = gds__map_blobs@8 @240
+ gds__msg_close = gds__msg_close@4 @223
+ gds__msg_format = gds__msg_format@40 @43
+ gds__msg_lookup = gds__msg_lookup@24 @44
+ gds__msg_open = gds__msg_open@8 @45
+ gds__msg_put = gds__msg_put@32 @46
+ gds__open = gds__open@16 @47
+ gds__open_blob = gds__open_blob@20 @48
+ gds__open_blob2 = gds__open_blob2@28 @49
+ gds__parse_bpb = gds__parse_bpb@16 @50
+ gds__prefix = gds__prefix@8 @51
+ gds__prefix_lock = gds__prefix_lock@8 @249
+ gds__prefix_msg = gds__prefix_msg@8 @250
+ gds__prepare = gds__prepare@28 @52
+ gds__prepare_transaction = gds__prepare_transaction@8 @53
+ gds__prepare_transaction2 = gds__prepare_transaction2@16 @54
+ gds__print_blr = gds__print_blr@16 @55
+ gds__print_status = gds__print_status@4 @56
+ gds__put_error = gds__put_error@4 @57
+ gds__put_segment = gds__put_segment@16 @58
+ gds__put_slice = gds__put_slice@40 @59
+ gds__qtoq = gds__qtoq@8 @60
+ gds__que_events = gds__que_events@28 @61
+ gds__receive = gds__receive@24 @62
+ gds__reconnect_transaction = gds__reconnect_transaction@20 @63
+ gds__register_cleanup = gds__register_cleanup@8 @64
+ gds__release_request = gds__release_request@8 @65
+ gds__request_info = gds__request_info@28 @66
+ gds__rollback_transaction = gds__rollback_transaction@8 @67
+ gds__seek_blob = gds__seek_blob@20 @68
+ gds__send = gds__send@24 @69
+ gds__set_debug = gds__set_debug@4 @70
+ gds__sqlcode = gds__sqlcode@4 @71
+ gds__start_and_send = gds__start_and_send@28 @72
+ gds__start_multiple = gds__start_multiple@16 @73
+ gds__start_request = gds__start_request@16 @74
+ gds__start_transaction = gds__start_transaction@0 @75
+ gds__temp_file = gds__temp_file@20 @231
+ gds__thread_enable = gds__thread_enable@4 @76
+ gds__thread_enter = gds__thread_enter@0 @77
+ gds__thread_exit = gds__thread_exit@0 @78
+ gds__thread_start = gds__thread_start@20 @79
+ gds__to_sqlda = gds__to_sqlda@20 @80
+ gds__transaction_cleanup = gds__transaction_cleanup@16 @235
+ gds__transaction_info = gds__transaction_info@24 @81
+ gds__unregister_cleanup = gds__unregister_cleanup@8 @224
+ gds__unwind_request = gds__unwind_request@12 @82
+ gds__validate_lib_path = gds__validate_lib_path@16 @255
+ gds__vax_integer = gds__vax_integer@8 @83
+ gds__version = gds__version@12 @84
+ gds__vtof = gds__vtof@12 @85
+ gds__vtov = gds__vtov@12 @86
+ gds__default_printer = gds__default_printer@0 @87
+
+ gds__alloc_debug = gds__alloc_debug@12
+
+ gds_alloc_flag_unfreed = gds_alloc_flag_unfreed@4
+ gds_alloc_report = gds_alloc_report@12
+
+ fb_shutdown = fb_shutdown@8
+ fb_shutdown_callback = fb_shutdown_callback@16
+ fb_cancel_operation = fb_cancel_operation@12
+ fb_disconnect_transaction = fb_disconnect_transaction@8
+
+ perf_format = perf_format@20 @100
+ perf_get_info = perf_get_info@8 @101
+ perf_report = perf_report@16 @102
+
+ perf64_format = perf64_format@20
+ perf64_get_info = perf64_get_info@8
+ perf64_report = perf64_report@16
+
+;----------------------------
+; PUBLIC INTERFACE, i.e. API
+;----------------------------
+
+ ; Array functions
+
+ isc_array_gen_sdl = isc_array_gen_sdl@20 @217
+ isc_array_get_slice = isc_array_get_slice@28 @218
+ isc_array_lookup_bounds = isc_array_lookup_bounds@24 @219
+ isc_array_lookup_desc = isc_array_lookup_desc@24 @220
+ isc_array_put_slice = isc_array_put_slice@28 @221
+ isc_array_set_desc = isc_array_set_desc@28 @222
+ isc_get_slice = isc_get_slice@44 @140
+ isc_put_slice = isc_put_slice@40 @153
+
+ ; BLOB functions
+
+ isc_blob_default_desc = isc_blob_default_desc@12 @239
+ isc_blob_gen_bpb = isc_blob_gen_bpb@24 @236
+ isc_blob_info = isc_blob_info@24 @108
+ isc_blob_lookup_desc = isc_blob_lookup_desc@28 @237
+ isc_blob_set_desc = isc_blob_set_desc@28 @238
+ isc_cancel_blob = isc_cancel_blob@8 @110
+ isc_close_blob = isc_close_blob@8 @113
+ isc_create_blob = isc_create_blob@20 @118
+ isc_create_blob2 = isc_create_blob2@28 @119
+ isc_get_segment = isc_get_segment@20 @139
+ isc_open_blob = isc_open_blob@20 @144
+ isc_open_blob2 = isc_open_blob2@28 @145
+ isc_put_segment = isc_put_segment@16 @152
+
+ ; Database functions
+
+ isc_attach_database = isc_attach_database@24 @103
+ isc_create_database = isc_create_database@28 @120
+ isc_database_info = isc_database_info@24 @122
+ isc_detach_database = isc_detach_database@8 @128
+ isc_drop_database = isc_drop_database@8 @229
+ isc_expand_dpb = isc_expand_dpb@0 @135
+ isc_modify_dpb = isc_modify_dpb@20 @244
+ isc_version = isc_version@12 @174
+ isc_get_client_major_version = isc_get_client_major_version@0 @268
+ isc_get_client_minor_version = isc_get_client_minor_version@0 @269
+ isc_get_client_version = isc_get_client_version@4 @270
+
+ ; Conversion functions
+
+ isc_decode_date = isc_decode_date@8 @125
+ isc_decode_sql_date = isc_decode_sql_date@8 @261
+ isc_decode_sql_time = isc_decode_sql_time@8 @262
+ isc_decode_timestamp = isc_decode_timestamp@8 @263
+ isc_encode_date = isc_encode_date@8 @129
+ isc_encode_sql_date = isc_encode_sql_date@8 @264
+ isc_encode_sql_time = isc_encode_sql_time@8 @265
+ isc_encode_timestamp = isc_encode_timestamp@8 @266
+ isc_portable_integer = isc_portable_integer@8 @259
+ isc_vax_integer = isc_vax_integer@8 @173
+
+ ; DSQL functions
+
+ isc_dsql_allocate_statement = isc_dsql_allocate_statement@12 @178
+ isc_dsql_alloc_statement2 = isc_dsql_alloc_statement2@12 @179
+ isc_dsql_describe = isc_dsql_describe@16 @180
+ isc_dsql_describe_bind = isc_dsql_describe_bind@16 @181
+ isc_dsql_execute = isc_dsql_execute@20 @182
+ isc_dsql_execute2 = isc_dsql_execute2@24 @183
+ isc_dsql_execute_m = isc_dsql_execute_m@32 @184
+ isc_dsql_execute2_m = isc_dsql_execute2_m@52 @185
+ isc_dsql_execute_immediate = isc_dsql_execute_immediate@28 @186
+ isc_dsql_exec_immed2 = isc_dsql_exec_immed2@32 @187
+ isc_dsql_execute_immediate_m = isc_dsql_execute_immediate_m@44 @188
+ isc_dsql_exec_immed2_m = isc_dsql_exec_immed2_m@64 @189
+ isc_dsql_exec_immed3_m = isc_dsql_exec_immed3_m@64 @230
+ isc_dsql_fetch = isc_dsql_fetch@16 @190
+ isc_dsql_fetch_a = isc_dsql_fetch_a@20 @191
+ isc_dsql_fetch_m = isc_dsql_fetch_m@28 @192
+ isc_dsql_finish = isc_dsql_finish@4 @193
+ isc_dsql_free_statement = isc_dsql_free_statement@12 @194
+ isc_dsql_insert = isc_dsql_insert@16 @195
+ isc_dsql_insert_m = isc_dsql_insert_m@28 @196
+ isc_dsql_prepare = isc_dsql_prepare@28 @197
+ isc_dsql_prepare_m = isc_dsql_prepare_m@40 @198
+ isc_dsql_release = isc_dsql_release@8 @199
+ isc_dsql_set_cursor_name = isc_dsql_set_cursor_name@16 @200
+ isc_dsql_sql_info = isc_dsql_sql_info@24 @201
+
+ ; ESQL functions
+
+ isc_embed_dsql_close = isc_embed_dsql_close@8 @202
+ isc_embed_dsql_declare = isc_embed_dsql_declare@12 @203
+ isc_embed_dsql_describe = isc_embed_dsql_describe@16 @204
+ isc_embed_dsql_describe_bind = isc_embed_dsql_describe_bind@16 @205
+ isc_embed_dsql_execute = isc_embed_dsql_execute@20 @206
+ isc_embed_dsql_execute2 = isc_embed_dsql_execute2@24 @207
+ isc_embed_dsql_execute_immed = isc_embed_dsql_execute_immed@28 @208
+ isc_embed_dsql_exec_immed2 = isc_embed_dsql_exec_immed2@32 @209
+ isc_embed_dsql_fetch = isc_embed_dsql_fetch@16 @210
+ isc_embed_dsql_fetch_a = isc_embed_dsql_fetch_a@20 @211
+ isc_embed_dsql_insert = isc_embed_dsql_insert@16 @212
+ isc_embed_dsql_open = isc_embed_dsql_open@20 @213
+ isc_embed_dsql_open2 = isc_embed_dsql_open2@24 @214
+ isc_embed_dsql_prepare = isc_embed_dsql_prepare@32 @215
+ isc_embed_dsql_release = isc_embed_dsql_release@8 @216
+ isc_embed_dsql_length = isc_embed_dsql_length@8 @273
+
+ ; Error-handling functions
+
+ isc_interprete = isc_interprete@8 @141
+ fb_interpret = fb_interpret@12
+ isc_print_sqlerror = isc_print_sqlerror@8 @150
+ isc_print_status = isc_print_status@4 @151
+ isc_sqlcode = isc_sqlcode@4 @165
+ isc_sql_interprete = isc_sql_interprete@12 @164
+ isc_sqlcode_s = isc_sqlcode_s@8 @278
+ fb_sqlstate = fb_sqlstate@8 @279
+
+ ; Event functions
+
+ isc_cancel_events = isc_cancel_events@12 @111
+ isc_event_block = isc_event_block@0 @130
+ isc_event_counts = isc_event_counts@16 @131
+ isc_que_events = isc_que_events@28 @155
+ isc_wait_for_event = isc_wait_for_event@20 @177
+ isc_event_block_a = isc_event_block_a@16 @274
+ isc_event_block_s = isc_event_block_s@20 @275
+
+ ; Security functions
+
+ isc_add_user = isc_add_user@8 @256
+ isc_delete_user = isc_delete_user@8 @257
+ isc_modify_user = isc_modify_user@8 @258
+
+ ; Services functions
+
+ isc_service_attach = isc_service_attach@24 @225
+ isc_service_detach = isc_service_detach@8 @226
+ isc_service_query = isc_service_query@36 @227
+ isc_service_start = isc_service_start@20 @228
+
+ ; Transaction control functions
+
+ isc_commit_retaining = isc_commit_retaining@8 @114
+ isc_commit_transaction = isc_commit_transaction@8 @115
+ isc_prepare_transaction = isc_prepare_transaction@8 @147
+ isc_prepare_transaction2 = isc_prepare_transaction2@16 @148
+ isc_rollback_retaining = isc_rollback_retaining@8 @260
+ isc_rollback_transaction = isc_rollback_transaction@8 @160
+ isc_start_multiple = isc_start_multiple@16 @167
+ isc_start_transaction = isc_start_transaction@0 @169
+ isc_transaction_info = isc_transaction_info@24 @171
+
+ ; Other functions
+
+ isc_compile_request = isc_compile_request@20 @116
+ isc_compile_request2 = isc_compile_request2@20 @117
+ isc_ddl = isc_ddl@20 @123
+ isc_prepare = isc_prepare@28 @146
+ isc_receive = isc_receive@24 @156
+ isc_reconnect_transaction = isc_reconnect_transaction@20 @157
+ isc_release_request = isc_release_request@8 @158
+ isc_request_info = isc_request_info@28 @159
+ isc_seek_blob = isc_seek_blob@20 @161
+ isc_send = isc_send@24 @162
+ isc_start_and_send = isc_start_and_send@28 @166
+ isc_start_request = isc_start_request@16 @168
+ isc_transact_request = isc_transact_request@36 @132
+ isc_unwind_request = isc_unwind_request@12 @172
+
+ ; Other SQL functions
+
+ isc_close = isc_close@8 @112
+ isc_declare = isc_declare@12 @124
+ isc_describe = isc_describe@12 @126
+ isc_describe_bind = isc_describe_bind@12 @127
+ isc_execute = isc_execute@16 @133
+ isc_execute_immediate = isc_execute_immediate@20 @134
+ isc_fetch = isc_fetch@12 @136
+ isc_fetch_a = isc_fetch_a@16 @137
+ isc_open = isc_open@16 @143
+
+ ; Other BLOB functions
+
+ BLOB_close = BLOB_close@4 @91
+ BLOB_display = BLOB_display@16 @92
+ BLOB_dump = BLOB_dump@16 @93
+ BLOB_edit = BLOB_edit@16 @94
+ BLOB_get = BLOB_get@4 @95
+ BLOB_load = BLOB_load@16 @96
+ BLOB_open = BLOB_open@12 @97
+ BLOB_put = BLOB_put@8 @98
+ BLOB_text_dump = BLOB_text_dump@16 @242
+ BLOB_text_load = BLOB_text_load@16 @243
+ Bopen = Bopen@16 @99
+
+ ; Other misc functions
+
+ isc_ftof = isc_ftof@16 @138
+ isc_free = isc_free@4 @241
+ isc_print_blr = isc_print_blr@16 @149
+ fb_print_blr = fb_print_blr@20 @280
+ isc_qtoq = isc_qtoq@8 @154
+ isc_reset_fpe = isc_reset_fpe@4
+ isc_set_debug = isc_set_debug@4 @163
+ isc_to_sqlda = isc_to_sqlda@20 @170
+ isc_vtof = isc_vtof@12 @175
+ isc_vtov = isc_vtov@12 @176
+ isc_baddress = isc_baddress@4 @276
+ isc_baddress_s = isc_baddress_s@8 @277
+
+ fb_ping = fb_ping@8
+ fb_get_master_interface = fb_get_master_interface@0
+ fb_get_database_handle = fb_get_database_handle@12
+ fb_get_transaction_handle = fb_get_transaction_handle@12
+ fb_database_crypt_callback = fb_database_crypt_callback@8
+
+ gds__trace = gds__trace@4
+ gds__trace_raw = gds__trace_raw@8
+ gds__trace_printer = gds__trace_printer@0
+ gds__parse_bpb2 = gds__parse_bpb2@40
+
+;-----------------
+; OTHER FUNCTIONS
+;-----------------
+
+ CVT_move = CVT_move@12 @267
+
+ KEYWORD_stringIsAToken = KEYWORD_stringIsAToken@4 @271
+ KEYWORD_getTokens = KEYWORD_getTokens@0 @272
diff --git a/builds/win32/defs/fbclient64.def b/builds/win32/defs/fbclient64.def
new file mode 100644
index 0000000..ed0b91e
--- /dev/null
+++ b/builds/win32/defs/fbclient64.def
@@ -0,0 +1,372 @@
+; The contents of this file are subject to the Interbase Public
+; License Version 1.0 (the "License"); you may not use this file
+; except in compliance with the License. You may obtain a copy
+; of the License at http://www.Inprise.com/IPL.html
+;
+; Software distributed under the License is distributed on an
+; "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express
+; or implied. See the License for the specific language governing
+; rights and limitations under the License.
+;
+; The Original Code was created by Inprise Corporation
+; and its predecessors. Portions created by Inprise Corporation are
+; Copyright (C) Inprise Corporation.
+;
+; All Rights Reserved.
+; Contributor(s): ______________________________________.
+
+LIBRARY "fbclient.dll"
+EXPORTS
+
+;-------------------
+; PRIVATE INTERFACE
+;-------------------
+
+ gds__alloc @1
+ gds__attach_database @2
+ gds__blob_info @3
+ gds__blob_size @4
+ gds__cancel_blob @5
+ gds__cancel_events @6
+ gds__close @7
+ gds__close_blob @8
+ gds__commit_retaining @9
+ gds__commit_transaction @10
+ gds__compile_request @11
+ gds__compile_request2 @12
+ gds__create_blob @13
+ gds__create_blob2 @14
+ gds__create_database @15
+ gds__database_cleanup @16
+ gds__database_info @17
+ gds__ddl @18
+ gds__declare @19
+ gds__decode @20
+ gds__decode_date @21
+ gds__describe @22
+ gds__describe_bind @23
+ gds__detach_database @24
+ gds__disable_subsystem @25
+ gds__dsql_finish @26
+ gds__edit @27
+ gds__enable_subsystem @28
+ gds__encode @29
+ gds__encode_date @30
+ gds__event_block @31
+ gds__event_counts @32
+ gds__event_wait @33
+ gds__execute @34
+ gds__execute_immediate @35
+ gds__fetch @36
+ gds__free @37
+ gds__ftof @38
+ gds__get_prefix @248
+ gds__get_segment @39
+ gds__get_slice @40
+ gds__interprete @41
+ gds__log @42
+ gds__log_status @142
+ gds__map_blobs @240
+ gds__msg_close @223
+ gds__msg_format @43
+ gds__msg_lookup @44
+ gds__msg_open @45
+ gds__msg_put @46
+ gds__open @47
+ gds__open_blob @48
+ gds__open_blob2 @49
+ gds__parse_bpb @50
+ gds__prefix @51
+ gds__prefix_lock @249
+ gds__prefix_msg @250
+ gds__prepare @52
+ gds__prepare_transaction @53
+ gds__prepare_transaction2 @54
+ gds__print_blr @55
+ gds__print_status @56
+ gds__put_error @57
+ gds__put_segment @58
+ gds__put_slice @59
+ gds__qtoq @60
+ gds__que_events @61
+ gds__receive @62
+ gds__reconnect_transaction @63
+ gds__register_cleanup @64
+ gds__release_request @65
+ gds__request_info @66
+ gds__rollback_transaction @67
+ gds__seek_blob @68
+ gds__send @69
+ gds__set_debug @70
+ gds__sqlcode @71
+ gds__start_and_send @72
+ gds__start_multiple @73
+ gds__start_request @74
+ gds__start_transaction @75
+ gds__temp_file @231
+ gds__thread_enable @76
+ gds__thread_enter @77
+ gds__thread_exit @78
+ gds__thread_start @79
+ gds__to_sqlda @80
+ gds__transaction_cleanup @235
+ gds__transaction_info @81
+ gds__unregister_cleanup @224
+ gds__unwind_request @82
+ gds__validate_lib_path @255
+ gds__vax_integer @83
+ gds__version @84
+ gds__vtof @85
+ gds__vtov @86
+ gds__default_printer @87
+
+ gds__alloc_debug
+
+ gds_alloc_flag_unfreed
+ gds_alloc_report
+
+ fb_shutdown
+ fb_shutdown_callback
+ fb_cancel_operation
+ fb_disconnect_transaction
+
+ perf_format @100
+ perf_get_info @101
+ perf_report @102
+
+ perf64_format
+ perf64_get_info
+ perf64_report
+
+;----------------------------
+; PUBLIC INTERFACE, i.e. API
+;----------------------------
+
+ ; Array functions
+
+ isc_array_gen_sdl @217
+ isc_array_get_slice @218
+ isc_array_lookup_bounds @219
+ isc_array_lookup_desc @220
+ isc_array_put_slice @221
+ isc_array_set_desc @222
+ isc_get_slice @140
+ isc_put_slice @153
+
+ ; BLOB functions
+
+ isc_blob_default_desc @239
+ isc_blob_gen_bpb @236
+ isc_blob_info @108
+ isc_blob_lookup_desc @237
+ isc_blob_set_desc @238
+ isc_cancel_blob @110
+ isc_close_blob @113
+ isc_create_blob @118
+ isc_create_blob2 @119
+ isc_get_segment @139
+ isc_open_blob @144
+ isc_open_blob2 @145
+ isc_put_segment @152
+
+ ; Database functions
+
+ isc_attach_database @103
+ isc_create_database @120
+ isc_database_info @122
+ isc_detach_database @128
+ isc_drop_database @229
+ isc_expand_dpb @135
+ isc_modify_dpb @244
+ isc_version @174
+ isc_get_client_major_version @268
+ isc_get_client_minor_version @269
+ isc_get_client_version @270
+
+ ; Conversion functions
+
+ isc_decode_date @125
+ isc_decode_sql_date @261
+ isc_decode_sql_time @262
+ isc_decode_timestamp @263
+ isc_encode_date @129
+ isc_encode_sql_date @264
+ isc_encode_sql_time @265
+ isc_encode_timestamp @266
+ isc_portable_integer @259
+ isc_vax_integer @173
+
+ ; DSQL functions
+
+ isc_dsql_allocate_statement @178
+ isc_dsql_alloc_statement2 @179
+ isc_dsql_describe @180
+ isc_dsql_describe_bind @181
+ isc_dsql_execute @182
+ isc_dsql_execute2 @183
+ isc_dsql_execute_m @184
+ isc_dsql_execute2_m @185
+ isc_dsql_execute_immediate @186
+ isc_dsql_exec_immed2 @187
+ isc_dsql_execute_immediate_m @188
+ isc_dsql_exec_immed2_m @189
+ isc_dsql_exec_immed3_m @230
+ isc_dsql_fetch @190
+ isc_dsql_fetch_a @191
+ isc_dsql_fetch_m @192
+ isc_dsql_finish @193
+ isc_dsql_free_statement @194
+ isc_dsql_insert @195
+ isc_dsql_insert_m @196
+ isc_dsql_prepare @197
+ isc_dsql_prepare_m @198
+ isc_dsql_release @199
+ isc_dsql_set_cursor_name @200
+ isc_dsql_sql_info @201
+
+ ; ESQL functions
+
+ isc_embed_dsql_close @202
+ isc_embed_dsql_declare @203
+ isc_embed_dsql_describe @204
+ isc_embed_dsql_describe_bind @205
+ isc_embed_dsql_execute @206
+ isc_embed_dsql_execute2 @207
+ isc_embed_dsql_execute_immed @208
+ isc_embed_dsql_exec_immed2 @209
+ isc_embed_dsql_fetch @210
+ isc_embed_dsql_fetch_a @211
+ isc_embed_dsql_insert @212
+ isc_embed_dsql_open @213
+ isc_embed_dsql_open2 @214
+ isc_embed_dsql_prepare @215
+ isc_embed_dsql_release @216
+ isc_embed_dsql_length @273
+
+ ; Error-handling functions
+
+ isc_interprete @141
+ fb_interpret
+ isc_print_sqlerror @150
+ isc_print_status @151
+ isc_sqlcode @165
+ isc_sql_interprete @164
+ isc_sqlcode_s @278
+ fb_sqlstate @279
+
+ ; Event functions
+
+ isc_cancel_events @111
+ isc_event_block @130
+ isc_event_counts @131
+ isc_que_events @155
+ isc_wait_for_event @177
+ isc_event_block_a @274
+ isc_event_block_s @275
+
+ ; Security functions
+
+ isc_add_user @256
+ isc_delete_user @257
+ isc_modify_user @258
+
+ ; Services functions
+
+ isc_service_attach @225
+ isc_service_detach @226
+ isc_service_query @227
+ isc_service_start @228
+
+ ; Transaction control functions
+
+ isc_commit_retaining @114
+ isc_commit_transaction @115
+ isc_prepare_transaction @147
+ isc_prepare_transaction2 @148
+ isc_rollback_retaining @260
+ isc_rollback_transaction @160
+ isc_start_multiple @167
+ isc_start_transaction @169
+ isc_transaction_info @171
+
+ ; Other functions
+
+ isc_compile_request @116
+ isc_compile_request2 @117
+ isc_ddl @123
+ isc_prepare @146
+ isc_receive @156
+ isc_reconnect_transaction @157
+ isc_release_request @158
+ isc_request_info @159
+ isc_seek_blob @161
+ isc_send @162
+ isc_start_and_send @166
+ isc_start_request @168
+ isc_transact_request @132
+ isc_unwind_request @172
+
+ ; Other SQL functions
+
+ isc_close @112
+ isc_declare @124
+ isc_describe @126
+ isc_describe_bind @127
+ isc_execute @133
+ isc_execute_immediate @134
+ isc_fetch @136
+ isc_fetch_a @137
+ isc_open @143
+
+ ; Other BLOB functions
+
+ BLOB_close @91
+ BLOB_display @92
+ BLOB_dump @93
+ BLOB_edit @94
+ BLOB_get @95
+ BLOB_load @96
+ BLOB_open @97
+ BLOB_put @98
+ BLOB_text_dump @242
+ BLOB_text_load @243
+ Bopen @99
+
+ ; Other misc functions
+
+ isc_ftof @138
+ isc_free @241
+ isc_print_blr @149
+ fb_print_blr @280
+ isc_qtoq @154
+ isc_reset_fpe
+ isc_set_debug @163
+ isc_to_sqlda @170
+ isc_vtof @175
+ isc_vtov @176
+ isc_baddress @276
+ isc_baddress_s @277
+
+ _isc_start_transaction=isc_start_transaction
+ _isc_expand_dpb=isc_expand_dpb
+ _isc_event_block=isc_event_block
+
+ fb_ping
+ fb_get_master_interface
+ fb_get_database_handle
+ fb_get_transaction_handle
+ fb_database_crypt_callback
+
+ gds__trace
+ gds__trace_raw
+ gds__trace_printer
+ gds__parse_bpb2
+
+;-----------------
+; OTHER FUNCTIONS
+;-----------------
+
+ CVT_move @267
+
+ KEYWORD_stringIsAToken @271
+ KEYWORD_getTokens @272
--
2.4.3
From 42461b606d8ea8409f91f785a973125645feb86d Mon Sep 17 00:00:00 2001
From: Alexpux <alexey.pawlow@gmail.com>
Date: Mon, 24 Nov 2014 11:12:17 +0300
Subject: [PATCH] Windows have another sources for FBGUARD.
---
builds/posix/make.shared.variables | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/builds/posix/make.shared.variables b/builds/posix/make.shared.variables
index 53597e6..ef25f37 100644
--- a/builds/posix/make.shared.variables
+++ b/builds/posix/make.shared.variables
@@ -122,7 +122,11 @@ AllObjects += $(LOCKPRINT_Objects)
# Guardian
+ifeq ($(PLATFORM),win32)
+FBGUARD_Objects:= $(call dirObjects,iscguard) $(call makeObjects,remote/server/os/win32,chop.cpp)
+else
FBGUARD_Objects:= $(call dirObjects,utilities/guard)
+endif
AllObjects += $(FBGUARD_Objects)
--
2.4.3
From aa46551df08a769daffd9a2d1acfe394aa214ab6 Mon Sep 17 00:00:00 2001
From: Alexpux <alexey.pawlow@gmail.com>
Date: Thu, 27 Nov 2014 15:57:53 +0300
Subject: [PATCH] Do not install posix scripts for win32 platform.
---
configure.ac | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
index 651ca3e..72f43d6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1195,6 +1195,7 @@ if test "x$CROSS" != "x"; then
AC_CONFIG_FILES([gen/make.crossPlatform:builds/posix/make.$CROSS])
fi
+if test "$PLATFORM" != "win32"; then
AC_CONFIG_FILES([
gen/Release/firebird/bin/fb_config:builds/install/posix-common/fb_config.in
gen/Release/firebird/bin/posixLibrary.sh:builds/install/posix-common/posixLibrary.sh.in
@@ -1208,8 +1209,9 @@ gen/Release/firebird/bin/taruninstall.sh:builds/install/posix-common/taruninstal
gen/Release/firebird/bin/tarMainUninstall.sh:builds/install/posix-common/tarMainUninstall.sh.in
gen/Release/firebird/bin/changeServerMode.sh:builds/install/posix-common/changeServerMode.sh.in
gen/Release/firebird/bin/registerDatabase.sh:builds/install/posix-common/registerDatabase.sh.in
-gen/vers.sh:builds/posix/vers.sh.in
])
+fi
+AC_CONFIG_FILES(gen/vers.sh:builds/posix/vers.sh.in)
dnl: Platform Specific Files
@@ -1304,6 +1306,11 @@ case "$PLATFORM" in
DARWIN)
;;
+ win32)
+ AC_CONFIG_FILES(gen/install/install_classic.bat:builds/install/arch-specific/win32/install_classic.bat
+ gen/install/install_super.bat:builds/install/arch-specific/win32/install_super.bat
+ gen/install/uninstall.bat:builds/install/arch-specific/win32/uninstall.bat)
+ ;;
esac
if test -f ${MAKE_SRC_DIR}/postfix.${MAKEFILE_POSTFIX};then
POSTFIX_FILE=gen/make.platform.postfix:${MAKE_SRC_DIR}/postfix.${MAKEFILE_POSTFIX}
--
2.4.3
From 2939db0d6f51e983620e0f7b2b41fd37adcc5764 Mon Sep 17 00:00:00 2001
From: Alexpux <alexey.pawlow@gmail.com>
Date: Thu, 27 Nov 2014 17:04:52 +0300
Subject: [PATCH] Use variables everywhere.
---
builds/posix/Makefile.in.examples | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/builds/posix/Makefile.in.examples b/builds/posix/Makefile.in.examples
index ec5c19c..49f6c9f 100644
--- a/builds/posix/Makefile.in.examples
+++ b/builds/posix/Makefile.in.examples
@@ -123,7 +123,7 @@ $(EXAMPLES_DEST)% : $(EXAMPLES_SRC)%
$(EMPLOYEE_DB): $(EXAMPLES_DEST)/empbuild$(EXEC_EXT) $(INPUT_Sources) $(EXAMPLES_DEST)/isql$(EXEC_EXT)
-$(RM) $(EMPLOYEE_DB)
- ./empbuild $(EMPLOYEE_DB)
+ $(EXAMPLES_DEST)/empbuild$(EXEC_EXT) $(EMPLOYEE_DB)
$(GFIX) -write sync $(EMPLOYEE_DB)
-$(CHMOD_6) $(EMPLOYEE_DB)
@@ -147,9 +147,9 @@ $(EXAMPLES_DEST)/empbuild.fdb : $(EXAMPLES_DEST)/empddl.sql $(EXAMPLES_DEST)/emp
# the intlemp.fdb database.
$(EXAMPLES_DEST)/intlemp.fdb: $(EXAMPLES_DEST)/intlbld$(EXEC_EXT) $(INTL_Sources) $(EXAMPLES_DEST)/isql$(EXEC_EXT)
- -$(RM) intlemp.fdb
- ./intlbld intlemp.fdb
- -$(CHMOD_6) intlemp.fdb
+ -$(RM) $(EXAMPLES_DEST)/intlemp.fdb
+ $(EXAMPLES_DEST)/intlbld$(EXEC_EXT) intlemp.fdb
+ -$(CHMOD_6) $(EXAMPLES_DEST)/intlemp.fdb
$(EXAMPLES_DEST)/intlbld$(EXEC_EXT): $(INTLBLD_Objects) $(COMMON_LIB)
$(EXE_LINK) $(EXE_LINK_OPTIONS) @^ -o $@ -L$(LIB) $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS)
@@ -157,8 +157,8 @@ $(EXAMPLES_DEST)/intlbld$(EXEC_EXT): $(INTLBLD_Objects) $(COMMON_LIB)
$(EXAMPLES_DEST)/intlbld.c: $(EXAMPLES_DEST)/intlbuild.fdb $(EXAMPLES_DEST)/intlbld.e
$(EXAMPLES_DEST)/intlbuild.fdb : $(EXAMPLES_DEST)/intlddl.sql $(EXAMPLES_DEST)/intlbld.sql $(EXAMPLES_DEST)/isql$(EXEC_EXT)
- -$(RM) intlbuild.fdb
- $(EXAMPLES_DEST)/isql$(EXEC_EXT) -i intlbld.sql
+ -$(RM) $(EXAMPLES_DEST)/intlbuild.fdb
+ $(EXAMPLES_DEST)/isql$(EXEC_EXT) -i $(EXAMPLES_DEST)/intlbld.sql
$(EXAMPLES_DEST)/%.sql: $(EXAMPLES_SRC)/empbuild/%.sql
--
2.4.3
From 94c47c8fcd14d1ebdc600fbb130d551b5d1fc295 Mon Sep 17 00:00:00 2001
From: Alexpux <alexey.pawlow@gmail.com>
Date: Fri, 28 Nov 2014 12:28:31 +0300
Subject: [PATCH] Build windows specific utilities for mingw.
---
builds/posix/Makefile.in | 26 ++++++++++++++++++++++++++
builds/posix/make.defaults | 1 +
builds/posix/make.shared.variables | 9 +++++++++
builds/posix/prefix.mingw | 3 ++-
4 files changed, 38 insertions(+), 1 deletion(-)
diff --git a/builds/posix/Makefile.in b/builds/posix/Makefile.in
index 85d4697..79659d2 100644
--- a/builds/posix/Makefile.in
+++ b/builds/posix/Makefile.in
@@ -168,6 +168,9 @@ endif
$(MAKE) plugins
$(MAKE) examples
$(MAKE) rest
+ifeq ($(PLATFORM), win32)
+ $(MAKE) helpers
+endif
cross_process:
@@ -434,6 +437,29 @@ $(NBACKUP): $(NBACKUP_Objects) $(COMMON_LIB)
#___________________________________________________________________________
+# install helpers - utilities for Windows to install/uninstall services and etc
+#
+
+.PHONY: instclient instreg instsvc
+
+helpers: instclient instreg instsvc
+
+instclient: $(INSTCLI)
+
+$(INSTCLI): $(INSTCLIENT_Objects)
+ $(STATICEXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ -L$(LIB) $(LINK_LIBS)
+
+instreg: $(INSTREG)
+
+$(INSTREG): $(INSTREG_Objects)
+ $(STATICEXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ -L$(LIB) $(LINK_LIBS)
+
+instsvc: $(INSTSVC)
+
+$(INSTSVC): $(INSTSVC_Objects) $(YValve_Objects) $(Common_Objects) $(Remote_Client_Objects)
+ $(STATICEXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ -L$(LIB) $(LINK_LIBS) $(MATHLIB)
+
+#___________________________________________________________________________
# plugins - some of them are required to build examples, use separate entry for them
#
diff --git a/builds/posix/make.defaults b/builds/posix/make.defaults
index bc18fc8..65cd4f9 100755
--- a/builds/posix/make.defaults
+++ b/builds/posix/make.defaults
@@ -356,6 +356,7 @@ GDS_INSTALL = $(BIN)/gds_install_service$(EXEC_EXT)
FBGUARD = $(BIN)/fbguard$(EXEC_EXT)
IBGUARD = $(BIN)/ibguard$(EXEC_EXT)
FBMGR_BIN = $(BIN)/fbmgr.bin$(EXEC_EXT)
+INSTCLI = $(BIN)/instclient$(EXEC_EXT)
INSTREG = $(BIN)/instreg$(EXEC_EXT)
INSTSVC = $(BIN)/instsvc$(EXEC_EXT)
diff --git a/builds/posix/make.shared.variables b/builds/posix/make.shared.variables
index ef25f37..18903b9 100644
--- a/builds/posix/make.shared.variables
+++ b/builds/posix/make.shared.variables
@@ -219,3 +219,12 @@ AllObjects += $(CODES_Objects)
BUILD_Objects:= $(call makeObjects,msgs,build_file.epp)
AllObjects += $(BUILD_Objects)
+
+# Install helpers
+ifeq ($(PLATFORM),win32)
+INSTCLIENT_Objects:= $(call makeObjects,utilities/install,install.cpp install_client.cpp)
+INSTREG_Objects:= $(call makeObjects,utilities/install,install_reg.cpp registry.cpp)
+INSTSVC_Objects:= $(call makeObjects,utilities/install,install_svc.cpp services.cpp)
+
+AllObjects += $(INSTCLIENT_Objects) $(INSTREG_Objects) $(INSTSVC_Objects)
+endif
diff --git a/builds/posix/prefix.mingw b/builds/posix/prefix.mingw
index 8dad1ce..7fd569a 100644
--- a/builds/posix/prefix.mingw
+++ b/builds/posix/prefix.mingw
@@ -39,7 +39,8 @@ LIB_GUI:= -mwindows -lcomctl32 -lgdi32
# Add resources to some files
FilesToAddVersionInfo=$(FBTRACEMGR) $(LIBFIREBIRD_FULLNAME) $(ENGINE_SONAME) $(LIBFBINTL_SO) \
$(FBSVCMGR) $(FBTRACEMGR) $(FBTRACE) $(FBUDF_SO) $(LIBIBUTIL_SO) \
- $(GBAK) $(GFIX) $(GPRE) $(GSEC) $(GSPLIT) $(GSTAT) $(QLI) $(ISQL) $(NBACKUP)
+ $(GBAK) $(GFIX) $(GPRE) $(GSEC) $(GSPLIT) $(GSTAT) $(QLI) $(ISQL) $(NBACKUP) \
+ $(INSTCLI) $(INSTREG) $(INSTSVC)
# TODO: guardians also must be here
FilesToAddDialog=$(FB_DAEMON)
FilesToAddDialog2=$(FBGUARD)
--
2.4.3
From 7a92d1dcf2626da10784eb50f370a3e4d99a1dcf Mon Sep 17 00:00:00 2001
From: Alexpux <alexey.pawlow@gmail.com>
Date: Fri, 28 Nov 2014 12:28:31 +0300
Subject: [PATCH] Fix using mutex.
---
src/extlib/fbudf/fbudf.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/extlib/fbudf/fbudf.cpp b/src/extlib/fbudf/fbudf.cpp
index d3a5a96..2855fe9 100644
--- a/src/extlib/fbudf/fbudf.cpp
+++ b/src/extlib/fbudf/fbudf.cpp
@@ -581,7 +581,7 @@ FBUDF_API void getExactTimestamp(ISC_TIMESTAMP* rc)
#if defined(HAVE_LOCALTIME_R)
tm* times = localtime_r(&seconds, &timex);
#else
- timeMutex.enter();
+ timeMutex.enter(FB_FUNCTION);
tm* times = localtime(&seconds);
if (times)
{
@@ -628,7 +628,7 @@ FBUDF_API void getExactTimestampUTC(ISC_TIMESTAMP* rc)
#if defined(HAVE_GMTIME_R)
tm* times = gmtime_r(&seconds, &timex);
#else
- timeMutex.enter();
+ timeMutex.enter(FB_FUNCTION);
tm* times = gmtime(&seconds);
if (times)
{
--
2.4.3
From 1c21afa3c185b2e7fee937e0d66e225797e40510 Mon Sep 17 00:00:00 2001
From: Alexpux <alexey.pawlow@gmail.com>
Date: Tue, 16 Jun 2015 10:34:21 +0300
Subject: [PATCH] mod_loader: mingw always link to msvcrt.dll
---
src/common/os/win32/mod_loader.cpp | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/common/os/win32/mod_loader.cpp b/src/common/os/win32/mod_loader.cpp
index a79313f..2008d7a 100644
--- a/src/common/os/win32/mod_loader.cpp
+++ b/src/common/os/win32/mod_loader.cpp
@@ -76,7 +76,7 @@ public:
// if we don't use MSVC then we don't use MS CRT ?
// NS: versions of MSVC before 2005 and, as preliminary reports suggest,
// after 2008 do not need this hack
-#if !defined(_MSC_VER) || (_MSC_VER < 1400)
+#if (!defined(_MSC_VER) || (_MSC_VER < 1400)) && !defined(__MINGW32__)
return;
#else
@@ -91,7 +91,9 @@ public:
if ((*mFindActCtxSectionString)
(0, NULL,
ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION,
-#if _MSC_VER == 1400
+#if defined(__MINGW32__)
+ "msvcrt.dll",
+#elif _MSC_VER == 1400
"msvcr80.dll",
#elif _MSC_VER == 1500
"msvcr90.dll",
--
2.4.3
From 9e1d9ea0e8fe4fe4033e8073b46876962b9ac973 Mon Sep 17 00:00:00 2001
From: Alexpux <alexey.pawlow@gmail.com>
Date: Tue, 16 Jun 2015 13:35:36 +0300
Subject: [PATCH] Relocate paths for unix-like files layout.
---
src/common/os/win32/path_utils.cpp | 10 +-
src/common/pathtools.cpp | 538 +++++++++++++++++++++++++++++
src/common/pathtools.h | 53 +++
src/common/utils.cpp | 21 +-
src/yvalve/config/os/win32/config_root.cpp | 3 +-
src/yvalve/gds.cpp | 7 +-
6 files changed, 623 insertions(+), 9 deletions(-)
create mode 100644 src/common/pathtools.cpp
create mode 100644 src/common/pathtools.h
diff --git a/src/common/os/win32/path_utils.cpp b/src/common/os/win32/path_utils.cpp
index ad592ac..5ac2431 100644
--- a/src/common/os/win32/path_utils.cpp
+++ b/src/common/os/win32/path_utils.cpp
@@ -6,7 +6,13 @@
/// The Win32 implementation of the path_utils abstraction.
+#if defined(__MINGW32__)
+const char PathUtils::dir_sep = '/';
+const char alt_sep_dir = '\\';
+#else
const char PathUtils::dir_sep = '\\';
+const char alt_sep_dir = '/';
+#endif
const char* PathUtils::up_dir_link = "..";
const char PathUtils::dir_list_sep = ';';
@@ -155,7 +161,7 @@ bool PathUtils::isRelative(const Firebird::PathName& path)
if (path.length() > 0)
{
const char ds = hasDriveLetter(path) ? path[2] : path[0];
- return ds != PathUtils::dir_sep && ds != '/';
+ return ds != PathUtils::dir_sep && ds != alt_sep_dir;
}
return true;
}
@@ -168,7 +174,7 @@ void PathUtils::splitPrefix(Firebird::PathName& path, Firebird::PathName& prefix
prefix = path.substr(0, 2);
path.erase(0, 2);
}
- if (path.hasData() && (path[0] == PathUtils::dir_sep || path[0] == '/'))
+ if (path.hasData() && (path[0] == PathUtils::dir_sep || path[0] == alt_sep_dir))
{
prefix += path[0];
path.erase(0, 1);
diff --git a/src/common/pathtools.cpp b/src/common/pathtools.cpp
new file mode 100644
index 0000000..9291ffd
--- /dev/null
+++ b/src/common/pathtools.cpp
@@ -0,0 +1,538 @@
+/*
+ .Some useful path tools.
+ .ASCII only for now.
+ .Written by Ray Donnelly in 2014.
+ .Licensed under CC0 (and anything.
+ .else you need to license it under).
+ .No warranties whatsoever.
+ .email: <mingw.android@gmail.com>.
+ */
+
+#if defined(__APPLE__)
+#include <stdlib.h>
+#else
+#include <malloc.h>
+#endif
+#include <limits.h>
+#include <stdio.h>
+#include <string.h>
+#if defined(__linux__) || defined(__CYGWIN__) || defined(__MSYS__)
+#include <alloca.h>
+#endif
+#include <unistd.h>
+
+/* If you don't define this, then get_executable_path()
+ can only use argv[0] which will often not work well */
+#define IMPLEMENT_SYS_GET_EXECUTABLE_PATH
+
+#if defined(IMPLEMENT_SYS_GET_EXECUTABLE_PATH)
+#if defined(__linux__) || defined(__CYGWIN__) || defined(__MSYS__)
+/* Nothing needed, unistd.h is enough. */
+#elif defined(__APPLE__)
+#include <mach-o/dyld.h>
+#elif defined(_WIN32)
+#define WIN32_MEAN_AND_LEAN
+#include <windows.h>
+#include <psapi.h>
+#endif
+#endif /* defined(IMPLEMENT_SYS_GET_EXECUTABLE_PATH) */
+
+#include "pathtools.h"
+
+char *
+malloc_copy_string(char const * original)
+{
+ char * result = (char *) malloc (sizeof (char*) * strlen (original)+1);
+ if (result != NULL)
+ {
+ strcpy (result, original);
+ }
+ return result;
+}
+
+void
+sanitise_path(char * path)
+{
+ size_t path_size = strlen (path);
+
+ /* Replace any '\' with '/' */
+ char * path_p = path;
+ while ((path_p = strchr (path_p, '\\')) != NULL)
+ {
+ *path_p = '/';
+ }
+ /* Replace any '//' with '/' */
+ path_p = path;
+ while ((path_p = strstr (path_p, "//")) != NULL)
+ {
+ memmove (path_p, path_p + 1, path_size--);
+ }
+ return;
+}
+
+char *
+get_relative_path(char const * from_in, char const * to_in)
+{
+ size_t from_size = (from_in == NULL) ? 0 : strlen (from_in);
+ size_t to_size = (to_in == NULL) ? 0 : strlen (to_in);
+ size_t max_size = (from_size + to_size) * 2 + 4;
+ char * scratch_space = (char *) alloca (from_size + 1 + to_size + 1 + max_size + max_size);
+ char * from;
+ char * to;
+ char * common_part;
+ char * result;
+ size_t count;
+
+ /* No to, return "./" */
+ if (to_in == NULL)
+ {
+ return malloc_copy_string ("./");
+ }
+
+ /* If alloca failed or no from was given return a copy of to */
+ if ( from_in == NULL
+ || scratch_space == NULL )
+ {
+ return malloc_copy_string (to_in);
+ }
+
+ from = scratch_space;
+ strcpy (from, from_in);
+ to = from + from_size + 1;
+ strcpy (to, to_in);
+ common_part = to + to_size + 1;
+ result = common_part + max_size;
+ simplify_path (from);
+ simplify_path (to);
+
+ result[0] = '\0';
+
+ size_t match_size_dirsep = 0; /* The match size up to the last /. Always wind back to this - 1 */
+ size_t match_size = 0; /* The running (and final) match size. */
+ size_t largest_size = (from_size > to_size) ? from_size : to_size;
+ int to_final_is_slash = (to[to_size-1] == '/') ? 1 : 0;
+ char from_c;
+ char to_c;
+ for (match_size = 0; match_size < largest_size; ++match_size)
+ {
+ /* To simplify the logic, always pretend the strings end with '/' */
+ from_c = (match_size < from_size) ? from[match_size] : '/';
+ to_c = (match_size < to_size) ? to[match_size] : '/';
+
+ if (from_c != to_c)
+ {
+ if (from_c != '\0' || to_c != '\0')
+ {
+ match_size = match_size_dirsep;
+ }
+ break;
+ }
+ else if (from_c == '/')
+ {
+ match_size_dirsep = match_size;
+ }
+ }
+ strncpy (common_part, from, match_size);
+ common_part[match_size] = '\0';
+ from += match_size;
+ to += match_size;
+ size_t ndotdots = 0;
+ char const* from_last = from + strlen(from) - 1;
+ while ((from = strchr (from, '/')) && from != from_last)
+ {
+ ++ndotdots;
+ ++from;
+ }
+ for (count = 0; count < ndotdots; ++count)
+ {
+ strcat(result, "../");
+ }
+ if (strlen(to) > 0)
+ {
+ strcat(result, to+1);
+ }
+ /* Make sure that if to ends with '/' result does the same, and
+ vice-versa. */
+ size_t size_result = strlen(result);
+ if ((to_final_is_slash == 1)
+ && (!size_result || result[size_result-1] != '/'))
+ {
+ strcat (result, "/");
+ }
+ else if (!to_final_is_slash
+ && size_result && result[size_result-1] == '/')
+ {
+ result[size_result-1] = '\0';
+ }
+
+ return malloc_copy_string (result);
+}
+
+void
+simplify_path(char * path)
+{
+ ssize_t n_toks = 1; /* in-case we need an empty initial token. */
+ ssize_t i, j;
+ size_t tok_size;
+ size_t in_size = strlen (path);
+ int it_ended_with_a_slash = (path[in_size - 1] == '/') ? 1 : 0;
+ char * result = path;
+ sanitise_path(result);
+ char * result_p = result;
+
+ do
+ {
+ ++n_toks;
+ ++result_p;
+ } while ((result_p = strchr (result_p, '/')) != NULL);
+
+ result_p = result;
+ char const ** toks = (char const **) alloca (sizeof (char const*) * n_toks);
+ n_toks = 0;
+ do
+ {
+ if (result_p > result)
+ {
+ *result_p++ = '\0';
+ }
+ else if (*result_p == '/')
+ {
+ /* A leading / creates an empty initial token. */
+ toks[n_toks++] = result_p;
+ *result_p++ = '\0';
+ }
+ toks[n_toks++] = result_p;
+ } while ((result_p = strchr (result_p, '/')) != NULL);
+
+ /* Remove all non-leading '.' and any '..' we can match
+ with an earlier forward path (i.e. neither '.' nor '..') */
+ for (i = 1; i < n_toks; ++i)
+ {
+ int removals[2] = { -1, -1 };
+ if ( strcmp (toks[i], "." ) == 0)
+ {
+ removals[0] = i;
+ }
+ else if ( strcmp (toks[i], ".." ) == 0)
+ {
+ /* Search backwards for a forward path to collapse.
+ If none are found then the .. also stays. */
+ for (j = i - 1; j > -1; --j)
+ {
+ if ( strcmp (toks[j], "." )
+ && strcmp (toks[j], ".." ) )
+ {
+ removals[0] = j;
+ removals[1] = i;
+ break;
+ }
+ }
+ }
+ for (j = 0; j < 2; ++j)
+ {
+ if (removals[j] >= 0) /* Can become -2 */
+ {
+ --n_toks;
+ memmove (&toks[removals[j]], &toks[removals[j]+1], (n_toks - removals[j])*sizeof (char*));
+ --i;
+ if (!j)
+ {
+ --removals[1];
+ }
+ }
+ }
+ }
+ result_p = result;
+ for (i = 0; i < n_toks; ++i)
+ {
+ tok_size = strlen(toks[i]);
+ memcpy (result_p, toks[i], tok_size);
+ result_p += tok_size;
+ if ((!i || tok_size) && ((i < n_toks - 1) || it_ended_with_a_slash == 1))
+ {
+ *result_p = '/';
+ ++result_p;
+ }
+ }
+ *result_p = '\0';
+}
+
+/* Returns actual_to by calculating the relative path from -> to and
+ applying that to actual_from. An assumption that actual_from is a
+ dir is made, and it may or may not end with a '/' */
+char const *
+get_relocated_path (char const * from, char const * to, char const * actual_from)
+{
+ char const * relative_from_to = get_relative_path (from, to);
+ char * actual_to = (char *) malloc (strlen(actual_from) + 2 + strlen(relative_from_to));
+ return actual_to;
+}
+
+int
+get_executable_path(char const * argv0, char * result, ssize_t max_size)
+{
+ char * system_result = (char *) alloca (max_size);
+ ssize_t system_result_size = -1;
+ ssize_t result_size = -1;
+
+ if (system_result != NULL)
+ {
+#if defined(IMPLEMENT_SYS_GET_EXECUTABLE_PATH)
+#if defined(__linux__) || defined(__CYGWIN__) || defined(__MSYS__)
+ system_result_size = readlink("/proc/self/exe", system_result, max_size);
+#elif defined(__APPLE__)
+ uint32_t bufsize = (uint32_t)max_size;
+ if (_NSGetExecutablePath(system_result, &bufsize) == 0)
+ {
+ system_result_size = (ssize_t)bufsize;
+ }
+#elif defined(_WIN32)
+ unsigned long bufsize = (unsigned long)max_size;
+ system_result_size = GetModuleFileNameA(NULL, system_result, bufsize);
+ if (system_result_size == 0 || system_result_size == (ssize_t)bufsize)
+ {
+ /* Error, possibly not enough space. */
+ system_result_size = -1;
+ }
+ else
+ {
+ /* Early conversion to unix slashes instead of more changes
+ everywhere else .. */
+ char * winslash;
+ system_result[system_result_size] = '\0';
+ while ((winslash = strchr (system_result, '\\')) != NULL)
+ {
+ *winslash = '/';
+ }
+ }
+#else
+#warning "Don't know how to get executable path on this system"
+#endif
+#endif /* defined(IMPLEMENT_SYS_GET_EXECUTABLE_PATH) */
+ }
+ /* Use argv0 as a default in-case of failure */
+ if (system_result_size != -1)
+ {
+ strncpy (result, system_result, system_result_size);
+ result[system_result_size] = '\0';
+ }
+ else
+ {
+ if (argv0 != NULL)
+ {
+ strncpy (result, argv0, max_size);
+ result[max_size-1] = '\0';
+ }
+ else
+ {
+ result[0] = '\0';
+ }
+ }
+ result_size = strlen (result);
+ return result_size;
+}
+
+char const *
+strip_n_prefix_folders(char const * path, size_t n)
+{
+ if (path == NULL)
+ {
+ return NULL;
+ }
+
+ if (path[0] != '/')
+ {
+ return path;
+ }
+
+ char const * last = path;
+ while (n-- && path != NULL)
+ {
+ last = path;
+ path = strchr (path + 1, '/');
+ }
+ return (path == NULL) ? last : path;
+}
+
+void
+strip_n_suffix_folders(char * path, size_t n)
+{
+ if (path == NULL)
+ {
+ return;
+ }
+ while (n--)
+ {
+ if (strrchr (path + 1, '/'))
+ {
+ *strrchr (path + 1, '/') = '\0';
+ }
+ else
+ {
+ return;
+ }
+ }
+ return;
+}
+
+size_t
+split_path_list(char const * path_list, char split_char, char *** arr)
+{
+ size_t path_count;
+ size_t path_list_size;
+ char const * path_list_p;
+
+ path_list_p = path_list;
+ if (path_list == NULL || path_list[0] == '\0')
+ {
+ return 0;
+ }
+ path_list_size = strlen (path_list);
+
+ path_count = 0;
+ do
+ {
+ ++path_count;
+ ++path_list_p;
+ }
+ while ((path_list_p = strchr (path_list_p, split_char)) != NULL);
+
+ /* allocate everything in one go. */
+ char * all_memory = (char *) malloc (sizeof (char *) * path_count + strlen(path_list) + 1);
+ if (all_memory == NULL)
+ return 0;
+ *arr = (char **)all_memory;
+ all_memory += sizeof (char *) * path_count;
+
+ path_count = 0;
+ path_list_p = path_list;
+ char const * next_path_list_p = 0;
+ do
+ {
+ next_path_list_p = strchr (path_list_p, split_char);
+ if (next_path_list_p != NULL)
+ {
+ ++next_path_list_p;
+ }
+ size_t this_size = (next_path_list_p != NULL)
+ ? next_path_list_p - path_list_p - 1
+ : &path_list[path_list_size] - path_list_p;
+ memcpy (all_memory, path_list_p, this_size);
+ all_memory[this_size] = '\0';
+ (*arr)[path_count++] = all_memory;
+ all_memory += this_size + 1;
+ } while ((path_list_p = next_path_list_p) != NULL);
+
+ return path_count;
+}
+
+char *
+get_relocated_path_list(char const * from, char const * to_path_list)
+{
+ char exe_path[MAX_PATH];
+ char * temp;
+ get_executable_path (NULL, &exe_path[0], sizeof (exe_path) / sizeof (exe_path[0]));
+ if ((temp = strrchr (exe_path, '/')) != NULL)
+ {
+ temp[1] = '\0';
+ }
+
+ char **arr = NULL;
+ /* Ask Alexey why he added this. Are we not 100% sure
+ that we're dealing with unix paths here? */
+ char split_char = ':';
+ if (strchr (to_path_list, ';'))
+ {
+ split_char = ';';
+ }
+ size_t count = split_path_list (to_path_list, split_char, &arr);
+ int result_size = 1 + (count - 1); /* count - 1 is for ; delim. */
+ size_t exe_path_size = strlen (exe_path);
+ size_t i;
+ /* Space required is:
+ count * (exe_path_size + strlen (rel_to_datadir))
+ rel_to_datadir upper bound is:
+ (count * strlen (from)) + (3 * num_slashes (from))
+ + strlen(arr[i]) + 1.
+ .. pathalogically num_slashes (from) is strlen (from)
+ (from = ////////) */
+ size_t space_required = (count * (exe_path_size + 4 * strlen (from))) + count - 1;
+ for (i = 0; i < count; ++i)
+ {
+ space_required += strlen (arr[i]);
+ }
+ char * scratch = (char *) alloca (space_required);
+ if (scratch == NULL)
+ return NULL;
+ for (i = 0; i < count; ++i)
+ {
+ char * rel_to_datadir = get_relative_path (from, arr[i]);
+ scratch[0] = '\0';
+ arr[i] = scratch;
+ strcat (scratch, exe_path);
+ strcat (scratch, rel_to_datadir);
+ simplify_path (arr[i]);
+ size_t arr_i_size = strlen (arr[i]);
+ result_size += arr_i_size;
+ scratch = arr[i] + arr_i_size + 1;
+ }
+ char * result = (char *) malloc (result_size);
+ if (result == NULL)
+ {
+ return NULL;
+ }
+ result[0] = '\0';
+ for (i = 0; i < count; ++i)
+ {
+ strcat (result, arr[i]);
+ if (i != count-1)
+ {
+#if defined(_WIN32)
+ strcat (result, ";");
+#else
+ strcat (result, ":");
+#endif
+ }
+ }
+ free ((void*)arr);
+ return result;
+}
+
+char *
+single_path_relocation(const char *from, const char *to)
+{
+#if defined(__MINGW32__)
+ char exe_path[PATH_MAX];
+ get_executable_path (NULL, &exe_path[0], sizeof(exe_path)/sizeof(exe_path[0]));
+ if (strrchr (exe_path, '/') != NULL)
+ {
+ strrchr (exe_path, '/')[1] = '\0';
+ }
+ char * rel_to_datadir = get_relative_path (from, to);
+ strcat (exe_path, rel_to_datadir);
+ simplify_path (&exe_path[0]);
+ return malloc_copy_string(exe_path);
+#else
+ return malloc_copy_string(to);
+#endif
+}
+
+char *
+pathlist_relocation(const char *from_path, const char *to_path_list)
+{
+#if defined(__MINGW32__)
+ static char stored_path[PATH_MAX];
+ static int stored = 0;
+ if (stored == 0)
+ {
+ char const * relocated = get_relocated_path_list(from_path, to_path_list);
+ strncpy (stored_path, relocated, PATH_MAX);
+ stored_path[PATH_MAX-1] = '\0';
+ free ((void *)relocated);
+ stored = 1;
+ }
+ return stored_path;
+#else
+ return (to_path_list);
+#endif
+}
diff --git a/src/common/pathtools.h b/src/common/pathtools.h
new file mode 100644
index 0000000..139b7c2
--- /dev/null
+++ b/src/common/pathtools.h
@@ -0,0 +1,53 @@
+/*
+ .Some useful path tools.
+ .ASCII only for now.
+ .Written by Ray Donnelly in 2014.
+ .Licensed under CC0 (and anything.
+ .else you need to license it under).
+ .No warranties whatsoever.
+ .email: <mingw.android@gmail.com>.
+ */
+
+#ifndef PATHTOOLS_H
+#define PATHTOOLS_H
+
+#include <unistd.h>
+#if defined(__APPLE__)
+#include <stdlib.h>
+#else
+#include <malloc.h>
+#endif
+#include <stdio.h>
+
+char * malloc_copy_string(char const * original);
+
+/* In-place replaces any '\' with '/' and any '//' with '/' */
+void sanitise_path(char * path);
+
+/* Uses a host OS specific function to determine the path of the executable,
+ if IMPLEMENT_SYS_GET_EXECUTABLE_PATH is defined, otherwise uses argv0. */
+int get_executable_path(char const * argv0, char * result, ssize_t max_size);
+
+/* Where possible, in-place removes occourances of '.' and 'path/..' */
+void simplify_path(char * path);
+
+/* Allocates (via malloc) and returns the path to get from from to to. */
+char * get_relative_path(char const * from, char const * to);
+
+size_t split_path_list(char const * path_list, char split_char, char *** arr);
+
+/* Advances path along by the amount that removes n prefix folders. */
+char const *
+strip_n_prefix_folders(char const * path, size_t n);
+
+/* NULL terminates path to remove n suffix folders. */
+void
+strip_n_suffix_folders(char * path, size_t n);
+
+char const * get_relocated_path (char const * from, char const * to, char const * actual_from);
+char * get_relocated_path_list(char const * from, char const * to_path_list);
+
+char * single_path_relocation(const char *from, const char *to);
+char * pathlist_relocation(const char *from_path, const char *to_path_list);
+
+#endif /* PATHTOOLS_H */
diff --git a/src/common/utils.cpp b/src/common/utils.cpp
index df73d9c..473629a 100644
--- a/src/common/utils.cpp
+++ b/src/common/utils.cpp
@@ -51,6 +51,7 @@
#include "../common/os/fbsyslog.h"
#include "../common/StatusArg.h"
#include "../common/os/os_utils.h"
+#include "../common/pathtools.h"
#include "../dsql/sqlda_pub.h"
#ifdef WIN_NT
@@ -1008,9 +1009,23 @@ Firebird::PathName getPrefix(unsigned int prefType, const char* name)
char tmp[MAXPATHLEN];
const char* configDir[] = {
- FB_BINDIR, FB_SBINDIR, FB_CONFDIR, FB_LIBDIR, FB_INCDIR, FB_DOCDIR, FB_UDFDIR, FB_SAMPLEDIR,
- FB_SAMPLEDBDIR, FB_HELPDIR, FB_INTLDIR, FB_MISCDIR, FB_SECDBDIR, FB_MSGDIR, FB_LOGDIR,
- FB_GUARDDIR, FB_PLUGDIR
+ single_path_relocation(FB_BINDIR,FB_BINDIR),
+ single_path_relocation(FB_BINDIR,FB_SBINDIR),
+ single_path_relocation(FB_BINDIR,FB_CONFDIR),
+ single_path_relocation(FB_BINDIR,FB_LIBDIR),
+ single_path_relocation(FB_BINDIR,FB_INCDIR),
+ single_path_relocation(FB_BINDIR,FB_DOCDIR),
+ single_path_relocation(FB_BINDIR,FB_UDFDIR),
+ single_path_relocation(FB_BINDIR,FB_SAMPLEDIR),
+ single_path_relocation(FB_BINDIR,FB_SAMPLEDBDIR),
+ single_path_relocation(FB_BINDIR,FB_HELPDIR),
+ single_path_relocation(FB_BINDIR,FB_INTLDIR),
+ single_path_relocation(FB_BINDIR,FB_MISCDIR),
+ single_path_relocation(FB_BINDIR,FB_SECDBDIR),
+ single_path_relocation(FB_BINDIR,FB_MSGDIR),
+ single_path_relocation(FB_BINDIR,FB_LOGDIR),
+ single_path_relocation(FB_BINDIR,FB_GUARDDIR),
+ single_path_relocation(FB_BINDIR,FB_PLUGDIR)
};
fb_assert(FB_NELEM(configDir) == Firebird::IConfigManager::DIR_COUNT);
diff --git a/src/yvalve/config/os/win32/config_root.cpp b/src/yvalve/config/os/win32/config_root.cpp
index d4641c7..e3ae8d9 100644
--- a/src/yvalve/config/os/win32/config_root.cpp
+++ b/src/yvalve/config/os/win32/config_root.cpp
@@ -28,6 +28,7 @@
#include "fb_types.h"
#include "../../../../common/classes/fb_string.h"
#include "../../../../common/dllinst.h"
+#include "../../../../common/pathtools.h"
#include "../../../../yvalve/config/os/config_root.h"
using Firebird::PathName;
@@ -107,7 +108,7 @@ void ConfigRoot::osConfigInstallDir()
if (install_dir.isEmpty())
{
// As a last resort get it from the default install directory
- install_dir = FB_PREFIX;
+ install_dir = single_path_relocation(FB_BINDIR,FB_PREFIX);
}
PathUtils::ensureSeparator(install_dir);
diff --git a/src/yvalve/gds.cpp b/src/yvalve/gds.cpp
index 5cc5dcb..c7681d2 100644
--- a/src/yvalve/gds.cpp
+++ b/src/yvalve/gds.cpp
@@ -57,6 +57,7 @@
#include "../common/classes/init.h"
#include "../common/classes/TempFile.h"
#include "../common/utils_proto.h"
+#include "../common/pathtools.h"
#ifdef HAVE_UNISTD_H
#include <unistd.h>
@@ -3739,13 +3740,13 @@ public:
{
prefix = Config::getRootDirectory();
if (prefix.isEmpty() && !GetProgramFilesDir(prefix))
- prefix = FB_CONFDIR[0] ? FB_CONFDIR : FB_PREFIX;
+ prefix = FB_CONFDIR[0] ? single_path_relocation(FB_BINDIR,FB_CONFDIR) : single_path_relocation(FB_BINDIR,FB_PREFIX);
}
catch (const Firebird::Exception&)
{
// CVC: Presumably here we failed because the config file can't be located.
if (!GetProgramFilesDir(prefix))
- prefix = FB_CONFDIR[0] ? FB_CONFDIR : FB_PREFIX;
+ prefix = FB_CONFDIR[0] ? single_path_relocation(FB_BINDIR,FB_CONFDIR) : single_path_relocation(FB_BINDIR,FB_PREFIX);
}
prefix.copyTo(fb_prefix_val, sizeof(fb_prefix_val));
fb_prefix = fb_prefix_val;
@@ -3828,7 +3829,7 @@ public:
Firebird::PathName msgPrefix;
if (!fb_utils::readenv(FB_MSG_ENV, msgPrefix))
{
- msgPrefix = FB_MSGDIR[0] ? FB_MSGDIR : prefix;
+ msgPrefix = FB_MSGDIR[0] ? single_path_relocation(FB_BINDIR,FB_MSGDIR) : prefix;
}
msgPrefix.copyTo(fb_prefix_msg_val, sizeof(fb_prefix_msg_val));
fb_prefix_msg = fb_prefix_msg_val;
--
2.4.3
From b3c77d3f7c0cb477e540a310692a257c5fd5d3f1 Mon Sep 17 00:00:00 2001
From: Alexpux <alexey.pawlow@gmail.com>
Date: Tue, 16 Jun 2015 13:36:14 +0300
Subject: [PATCH] Fix linking Engine dll for mingw.
---
builds/posix/make.shared.variables | 1 +
1 file changed, 1 insertion(+)
diff --git a/builds/posix/make.shared.variables b/builds/posix/make.shared.variables
index 18903b9..cc00a80 100644
--- a/builds/posix/make.shared.variables
+++ b/builds/posix/make.shared.variables
@@ -67,6 +67,7 @@ AllObjects += $(Remote_Common) $(Remote_Server) $(Remote_Client)
Engine_Objects:= $(call dirObjects,jrd) $(call dirObjects,dsql) $(call dirObjects,jrd/extds) \
$(call dirObjects,jrd/recsrc) $(call dirObjects,jrd/trace) \
$(call makeObjects,lock,lock.cpp)
+Engine_Objects:= $(filter-out $(call makeObjects,jrd/$(PLATFORM_PATH),ibinitdll.cpp), $(Engine_Objects))
AllObjects += $(Engine_Objects)
--
2.4.3
From e09c3e5489366841c76627a8dc72cb3a55c02c0a Mon Sep 17 00:00:00 2001
From: Alexpux <alexey.pawlow@gmail.com>
Date: Tue, 16 Jun 2015 14:07:13 +0300
Subject: [PATCH] cmake: Mingw use external ICU. Customize files layout.
---
CMakeLists.txt | 10 ++++++----
src/CMakeLists.txt | 2 +-
2 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e8cb276..2f8b4fe 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -98,7 +98,7 @@ if (XCODE)
string(TOUPPER ${conf} conf2)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${conf2} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${conf}/bin)
endforeach()
-elseif (UNIX)
+elseif (UNIX OR MINGW)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${output_dir}/bin)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${output_dir}/bin)
endif()
@@ -113,7 +113,7 @@ endif()
# icu
########################################
-if (UNIX)
+if (UNIX OR MINGW)
if (NOT ICU_INCLUDE_DIR)
find_path(ICU_INCLUDE_DIR unicode/ucnv.h
PATHS
@@ -159,7 +159,9 @@ set(FB_SERVICE_NAME "gds_db")
set(FB_SERVICE_PORT 3050)
if (WIN32)
+ if (NOT MINGW)
set(FB_PREFIX "c:\\\\Program Files\\\\Firebird\\\\")
+ endif()
set(FB_IPC_NAME "FIREBIRD")
endif()
@@ -192,7 +194,7 @@ if (WIN32)
endif()
endif(MSVC)
- set(LIB_Ws2_32 Ws2_32)
+ set(LIB_Ws2_32 ws2_32)
set(LIB_comctl32 comctl32)
set(LIB_mpr mpr)
set(LIB_version version)
@@ -249,7 +251,7 @@ endif()
#
################################################################################
-if (WIN32)
+if (MSVC)
# icu
if (NOT ICU_EXTRACT)
message(STATUS "Extracting pre-built ICU")
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 9ca8421..414ea01 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -852,7 +852,7 @@ project_group (boot_isql Boot)
endif() # if (NOT CMAKE_CROSSCOMPILING)
-if (WIN32)
+if (MSVC)
add_custom_command(
TARGET boot_isql
POST_BUILD
--
2.4.3