diff --git a/windows/build/odbc.bat b/windows/build/odbc.bat
index 4ba79de..d492e42 100644
--- a/windows/build/odbc.bat
+++ b/windows/build/odbc.bat
@@ -3,15 +3,25 @@ REM Copyright Huawei Technologies Co., Ltd. 2010-2018. All rights reserved.
setlocal
set WD=%__CD__%
-set LIB_SECURITY_DIR=%WD%\..\..\..\..\platform\Huawei_Secure_C\Huawei_Secure_C_V100R001C01SPC010B002
-set LIB_GAUSSDB_DIR=%WD%\..\..\..\..\..\server
-set LIB_ODBC_DIR=%WD%\..\..
+set LIB_SECURITY_DIR=D:\windows_odbc\win32\open_source\Huawei_Secure_C_V100R001C01SPC010B002
+set LIB_GAUSSDB_DIR=D:\windows_odbc\win32\open_source\openGauss-server
+set LIB_ODBC_DIR=D:\windows_odbc\win32\open_source\openGauss-connector-odbc
-set MINGW_DIR=C:\buildtools\mingw-8.1.0\msys32\mingw32
-set CMAKE_DIR=C:\buildtools\cmake
-set OPENSSL_DIR=D:\GaussDBKernel\open_source\output\openssl-win
+set MINGW_DIR=D:\buildtools\mingw-8.1.0\msys64\mingw32
+set CMAKE_DIR=D:\env\cmake-3.26
+REM openss compiled direction
+set OPENSSL_DIR=D:\windows_odbc\win32\open_source\output\openssl-win32
+set p7zip=D:\install\7-Zip
+set OUTPUT_DIR=%LIB_ODBC_DIR%/odbc_output
+if not exist %OPENSSL_DIR%/libcrypto-1_1.dll (
+ cd %WD%
+ REM Build openssl
+ call openssl.bat
+)
+
+cd %WD%
REM Build libsecurec.lib
cp win32/libpq/CMakeLists-huawei-securec.txt %LIB_SECURITY_DIR%/CMakeLists.txt
cd %LIB_SECURITY_DIR%
@@ -20,21 +30,23 @@ mkdir build
cd build
cmake -DMINGW_DIR="%MINGW_DIR%" -D"CMAKE_MAKE_PROGRAM:PATH=%MINGW_DIR%/bin/make.exe" -G "MinGW Makefiles" ..
make
-cd %WD%
+cd %WD%
REM Build libpq.lib
rm -rf %LIB_GAUSSDB_DIR%/libpq-win32
cp -r win32/libpq %LIB_GAUSSDB_DIR%/libpq-win32
cd %LIB_GAUSSDB_DIR%/libpq-win32
cp -r %LIB_SECURITY_DIR%/output ./lib
-bash -l %LIB_GAUSSDB_DIR%/libpq-win32/project.sh
+bash %LIB_GAUSSDB_DIR%/libpq-win32/project.sh
rm -rf build
mkdir build
cd build
cmake -DMINGW_DIR="%MINGW_DIR%" -DOPENSSL_DIR="%OPENSSL_DIR%" -D"CMAKE_MAKE_PROGRAM:PATH=%MINGW_DIR%/bin/make.exe" -G "MinGW Makefiles" ..
+sed -i 's/LIB_CRYPTO-NOTFOUND/D:\/windows_odbc\/win32\/open_source\/output\/openssl-win32\/libcrypto-1_1.dll/g' CMakeCache.txt
+sed -i 's/LIB_SSL-NOTFOUND/D:\/windows_odbc\/win32\/open_source\/output\/openssl-win32\/libssl-1_1.dll/g' CMakeCache.txt
make
-cd %WD%
+cd %WD%
REM Build psqlodbc35w.lib
cd %LIB_ODBC_DIR%
rm -rf libpq
@@ -45,9 +57,11 @@ rm -rf build
mkdir build
cd build
cmake -DMINGW_DIR="%MINGW_DIR%" -DOPENSSL_DIR="%OPENSSL_DIR%" -D"CMAKE_MAKE_PROGRAM:PATH=%MINGW_DIR%/bin/make.exe" -G "MinGW Makefiles" ..
+sed -i 's/LIB_CRYPTO-NOTFOUND/D:\/windows_odbc\/win32\/open_source\/output\/openssl-win32\/libcrypto-1_1.dll/g' CMakeCache.txt
+sed -i 's/LIB_SSL-NOTFOUND/D:\/windows_odbc\/win32\/open_source\/output\/openssl-win32\/libssl-1_1.dll/g' CMakeCache.txt
make
-cd %WD%
+cd %WD%
REM Build psqlodbc.exe
cd psqlodbc-installer
rm -rf win32_dll
@@ -63,13 +77,9 @@ mkdir odbc_output
cp psqlodbc-installer/psqlodbc.exe odbc_output
rm -rf psqlodbc-installer/psqlodbc.exe
-
cd odbc_output
-%p7zip%\7z.exe a GaussDB-Kernel-V500R002C10-Windows-Odbc-X86.tar *
-%p7zip%\7z.exe a -tgzip GaussDB-Kernel-V500R002C10-Windows-Odbc-X86.tar.gz *.tar
-del *.tar
+%p7zip%\7z.exe a -tgzip openGauss-5.0.0-ODBC-windows.tar.gz ./*
-set OUTPUT_DIR=%LIB_ODBC_DIR%/output
+rm -rf "%OUTPUT_DIR%"
mkdir "%OUTPUT_DIR%"
-cp GaussDB-Kernel-V500R002C00-Windows-Odbc-X86.tar.gz %OUTPUT_DIR%
-
+cp -r openGauss-5.0.0-ODBC-windows.tar.gz %OUTPUT_DIR%
\ No newline at end of file
diff --git a/windows/build/openssl.bat b/windows/build/openssl.bat
new file mode 100644
index 0000000..71199fa
--- /dev/null
+++ b/windows/build/openssl.bat
@@ -0,0 +1,21 @@
+REM Copyright Huawei Technologies Co., Ltd. 2010-2018. All rights reserved.
+@echo off
+setlocal
+
+set WD=%__CD__%
+REM openssl source direction
+set OPENSSL_SOURCE_DIR=D:\windows_odbc\win32\open_source\openssl-OpenSSL_1_1_1n\openssl-OpenSSL_1_1_1n
+set MSYS_SHELL=D:\buildtools\mingw-8.1.0\msys64\msys2_shell.cmd
+
+cd %WD%
+REM build openssl
+cd %OPENSSL_SOURCE_DIR%
+REM openssl config
+rm -rf openssl-win32
+%MSYS_SHELL% -defterm -mingw32 -no-start -full-path -here -c './Configure ^
+--prefix=$PWD/openssl-win32 ^
+shared mingw no-tests; make -j20; make install -j20; ^
+cp $PWD/openssl-win32/bin/libssl-1_1.dll $PWD/openssl-win32; ^
+cp $PWD/openssl-win32/bin/libcrypto-1_1.dll $PWD/openssl-win32; ^
+rm -rf $PWD/../../output; ^
+mkdir -p $PWD/../../output; mv $PWD/openssl-win32 $PWD/../../output/.' ^
\ No newline at end of file
diff --git a/windows/build/win32/libpq/CMakeLists-huawei-securec.txt b/windows/build/win32/libpq/CMakeLists-huawei-securec.txt
index 5116304..d45e946 100644
--- a/windows/build/win32/libpq/CMakeLists-huawei-securec.txt
+++ b/windows/build/win32/libpq/CMakeLists-huawei-securec.txt
@@ -5,7 +5,7 @@ SET(CMAKE_VERBOSE_MAKEFILEON ON)
MESSAGE(STATUS "Building LIBSECUREC Library.")
IF(NOT DEFINED MINGW_DIR)
- set(MINGW_DIR "D:\\msys32\\mingw32")
+ set(MINGW_DIR "D:\\buildtools\\mingw-8.1.0\\msys64\\mingw32")
ENDIF(NOT DEFINED MINGW_DIR)
SET(PWD_DIR ${CMAKE_CURRENT_SOURCE_DIR})
diff --git a/windows/build/win32/libpq/CMakeLists.txt b/windows/build/win32/libpq/CMakeLists.txt
index e7525f2..e368e9b 100644
--- a/windows/build/win32/libpq/CMakeLists.txt
+++ b/windows/build/win32/libpq/CMakeLists.txt
@@ -6,7 +6,7 @@ SET(CMAKE_VERBOSE_MAKEFILEON ON)
MESSAGE(STATUS "Building LIBPQ Library.")
IF(NOT DEFINED OPENSSL_DIR)
- set(OPENSSL_DIR "D:\\Program_Files\\OpenSSL-Win32")
+ set(OPENSSL_DIR "D:\\windows_odbc\\win32\\open_source\\output\\openssl-win32")
ENDIF(NOT DEFINED OPENSSL_DIR)
IF(NOT DEFINED MINGW_DIR)
set(MINGW_DIR "D:\\buildtools\\mingw-8.1.0\\msys32\\mingw32")
diff --git a/windows/build/win32/libpq/Makefile b/windows/build/win32/libpq/Makefile
index ce6182e..0b483bb 100644
--- a/windows/build/win32/libpq/Makefile
+++ b/windows/build/win32/libpq/Makefile
@@ -3,7 +3,7 @@
#################################################################
ifndef $(OPENSSL_DIR)
-OPENSSL_DIR:=/d/Program_Files/OpenSSL-Win32
+OPENSSL_DIR:=/d/windows_odbc/win32/open_source/output/openssl-win32
endif
ifndef $(MINGW_DIR)
diff --git a/windows/build/win32/libpq/project.sh b/windows/build/win32/libpq/project.sh
index f25f536..74362f2 100644
--- a/windows/build/win32/libpq/project.sh
+++ b/windows/build/win32/libpq/project.sh
@@ -1,446 +1,449 @@
-# Copyright Huawei Technologies Co., Ltd. 2010-2018. All rights reserved.
-#!/bin/bash
-MD="mkdir -p"
-RM="rm -rf"
-CP="cp -r"
-ROOT_DIR=$LIB_GAUSSDB_DIR
-#ROOT_DIR=`pwd`/..
-SRC_DIR=$ROOT_DIR/../open_source/opengauss/src
-LIBPQ_WIN32_DIR=$ROOT_DIR/libpq-win32
-PREPARED_DIR=$LIBPQ_WIN32_DIR
-EXPORT_DIR=$LIBPQ_WIN32_DIR/libpq-export
-
-### function ###
-function copy_file()
-{
-file=$1 #file name
-src=$2 #source directory
-dst=$3 #target directory
-if [ ! -f "$src"/"$file" ];then
- echo "Error: $src/$file doesn't exist, exit."
- exit -1
-fi
-if [ ! -d $dst ];then
- $MD $dst
-fi
-#echo "Copy $src/$file to $dst/$file"
-$CP $src/$file $dst/$file
-}
-
-### function ###
-function init_win_project()
-{
- if [ ! -f "$PREPARED_DIR"/include/pg_config.h ]; then
- echo "Error: Header file pg_config.h for Windows lost, exit."
- exit -1
- fi
- if [ ! -f "$PREPARED_DIR"/include/pg_config_os.h ]; then
- echo "Error: Header file pg_config_os.h for Windows lost, exit."
- exit -1
- fi
- if [ ! -f "$PREPARED_DIR"/include/pg_config_paths.h ]; then
- echo "Error: Header file pg_config_paths.h for Windows lost, exit."
- exit -1
- fi
- if [ ! -f "$PREPARED_DIR"/include/errcodes.h ]; then
- echo "Error: Header file errcodes.h for Windows lost, exit."
- exit -1
- fi
- if [ ! -f "$PREPARED_DIR"/include/libpqdll.def ]; then
- echo "Error: Interface definition file libpqdll.def for Windows lost, exit."
- exit -1
- fi
- if [ ! -f "$PREPARED_DIR"/Makefile ];then
- echo "Error: Makefile for MinGW complier lost, exit."
- exit -1
- fi
- if [ ! -f "$PREPARED_DIR"/CMakeLists.txt ];then
- echo "Error: CMakeLists.txt for CMake && MinGW complier lost, exit."
- exit -1
- fi
-# $RM $LIBPQ_WIN32_DIR/include
- $RM $LIBPQ_WIN32_DIR/src
- if [ ! -d "$LIBPQ_WIN32_DIR"/lib ];then
- $MD $LIBPQ_WIN32_DIR/lib
- fi
-}
-
-### function ###
-function copy_headers()
-{ # copy header files
-# copy form prepared directory
-copy_file securec.h $LIB_SECURITY_DIR/include $LIBPQ_WIN32_DIR/include
-copy_file securectype.h $LIB_SECURITY_DIR/include $LIBPQ_WIN32_DIR/include
-#copy_file pg_config.h $PREPARED_DIR $LIBPQ_WIN32_DIR/include
-#copy_file pg_config_os.h $PREPARED_DIR $LIBPQ_WIN32_DIR/include
-# include
-copy_file c.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
-copy_file cipher.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
-copy_file datatypes.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
-copy_file getaddrinfo.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
-copy_file gs_thread.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
-copy_file gs_threadlocal.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
-copy_file pg_config_manual.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
-copy_file port.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
-copy_file postgres.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
-copy_file postgres_ext.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
-copy_file postgres_fe.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
-copy_file securec_check.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
-# include/access
-copy_file attnum.h $SRC_DIR/include/access $LIBPQ_WIN32_DIR/include/access
-copy_file tupdesc.h $SRC_DIR/include/access $LIBPQ_WIN32_DIR/include/access
-# include/catlog
-copy_file genbki.h $SRC_DIR/include/catalog $LIBPQ_WIN32_DIR/include/catalog
-copy_file pg_attribute.h $SRC_DIR/include/catalog $LIBPQ_WIN32_DIR/include/catalog
-# include/client_logic
-copy_file cache.h $SRC_DIR/include/client_logic $LIBPQ_WIN32_DIR/include/client_logic
-copy_file client_logic.h $SRC_DIR/include/client_logic $LIBPQ_WIN32_DIR/include/client_logic
-copy_file client_logic_enums.h $SRC_DIR/include/client_logic $LIBPQ_WIN32_DIR/include/client_logic
-copy_file cstrings_map.h $SRC_DIR/include/client_logic $LIBPQ_WIN32_DIR/include/client_logic
-# include/gstrace
-copy_file gstrace_infra.h $SRC_DIR/include/gstrace $LIBPQ_WIN32_DIR/include/gstrace
-copy_file gstrace_infra_int.h $SRC_DIR/include/gstrace $LIBPQ_WIN32_DIR/include/gstrace
-copy_file gstrace_tool.h $SRC_DIR/include/gstrace $LIBPQ_WIN32_DIR/include/gstrace
-# include/libcomm
-#copy_file libcomm.h $SRC_DIR/include/libcomm $LIBPQ_WIN32_DIR/include/libcomm
-# include/libpq
-copy_file auth.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
-copy_file be-fsstubs.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
-copy_file cl_state.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
-copy_file crypt.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
-copy_file guc_vars.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
-copy_file hba.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
-copy_file ip.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
-copy_file libpq.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
-copy_file libpq-be.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
-copy_file libpq-events.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
-copy_file libpq-fe.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
-copy_file libpq-fs.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
-copy_file libpq-int.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
-copy_file md5.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
-copy_file pqcomm.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
-copy_file pqexpbuffer.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
-copy_file pqformat.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
-copy_file pqsignal.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
-copy_file sha2.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
-# include/mb
-copy_file pg_wchar.h $SRC_DIR/include/mb $LIBPQ_WIN32_DIR/include/mb
-# include/nodes
-copy_file nodes.h $SRC_DIR/include/nodes $LIBPQ_WIN32_DIR/include/nodes
-copy_file params.h $SRC_DIR/include/nodes $LIBPQ_WIN32_DIR/include/nodes
-copy_file parsenodes_common.h $SRC_DIR/include/nodes $LIBPQ_WIN32_DIR/include/nodes
-copy_file pg_list.h $SRC_DIR/include/nodes $LIBPQ_WIN32_DIR/include/nodes
-copy_file primnodes.h $SRC_DIR/include/nodes $LIBPQ_WIN32_DIR/include/nodes
-copy_file value.h $SRC_DIR/include/nodes $LIBPQ_WIN32_DIR/include/nodes
-# include/parser
-copy_file backslash_quotes.h $SRC_DIR/include/parser $LIBPQ_WIN32_DIR/include/parser
-# include/port/win32
-copy_file dlfcn.h $SRC_DIR/include/port/win32 $LIBPQ_WIN32_DIR/include/port/win32
-copy_file grp.h $SRC_DIR/include/port/win32 $LIBPQ_WIN32_DIR/include/port/win32
-copy_file netdb.h $SRC_DIR/include/port/win32 $LIBPQ_WIN32_DIR/include/port/win32
-copy_file pwd.h $SRC_DIR/include/port/win32 $LIBPQ_WIN32_DIR/include/port/win32
-# include/port/win32/arpa
-copy_file inet.h $SRC_DIR/include/port/win32/arpa $LIBPQ_WIN32_DIR/include/port/win32/arpa
-# include/port/win32/netinet
-copy_file in.h $SRC_DIR/include/port/win32/netinet $LIBPQ_WIN32_DIR/include/port/win32/netinet
-# include/port/win32/sys
-copy_file socket.h $SRC_DIR/include/port/win32/sys $LIBPQ_WIN32_DIR/include/port/win32/sys
-copy_file wait.h $SRC_DIR/include/port/win32/sys $LIBPQ_WIN32_DIR/include/port/win32/sys
-# include/port/win32_msvc
-copy_file dirent.h $SRC_DIR/include/port/win32_msvc $LIBPQ_WIN32_DIR/include/port/win32_msvc
-copy_file unistd.h $SRC_DIR/include/port/win32_msvc $LIBPQ_WIN32_DIR/include/port/win32_msvc
-copy_file utime.h $SRC_DIR/include/port/win32_msvc $LIBPQ_WIN32_DIR/include/port/win32_msvc
-# include/port/win32_msvc/sys
-copy_file file.h $SRC_DIR/include/port/win32_msvc/sys $LIBPQ_WIN32_DIR/include/port/win32_msvc/sys
-copy_file param.h $SRC_DIR/include/port/win32_msvc/sys $LIBPQ_WIN32_DIR/include/port/win32_msvc/sys
-copy_file time.h $SRC_DIR/include/port/win32_msvc/sys $LIBPQ_WIN32_DIR/include/port/win32_msvc/sys
-# include/storage
-copy_file spin.h $SRC_DIR/include/storage $LIBPQ_WIN32_DIR/include/storage
-# include/storage/lock
-copy_file pg_sema.h $SRC_DIR/include/storage/lock $LIBPQ_WIN32_DIR/include/storage/lock
-copy_file s_lock.h $SRC_DIR/include/storage/lock $LIBPQ_WIN32_DIR/include/storage/lock
-# include/utils
-copy_file be_module.h $SRC_DIR/include/utils $LIBPQ_WIN32_DIR/include/utils
-copy_file elog.h $SRC_DIR/include/utils $LIBPQ_WIN32_DIR/include/utils
-copy_file palloc.h $SRC_DIR/include/utils $LIBPQ_WIN32_DIR/include/utils
-copy_file pg_crc.h $SRC_DIR/include/utils $LIBPQ_WIN32_DIR/include/utils
-copy_file pg_crc_tables.h $SRC_DIR/include/utils $LIBPQ_WIN32_DIR/include/utils
-copy_file syscall_lock.h $SRC_DIR/include/utils $LIBPQ_WIN32_DIR/include/utils
-# copy from prepared directory
-copy_file errcodes.h $PREPARED_DIR/include $LIBPQ_WIN32_DIR/include/utils # !!!! special source directory
-}
-
-function copy_codes()
-{
-# src/common/backend/libpq
-copy_file ip.cpp $SRC_DIR/common/backend/libpq $LIBPQ_WIN32_DIR/src/common/backend/libpq
-copy_file md5.cpp $SRC_DIR/common/backend/libpq $LIBPQ_WIN32_DIR/src/common/backend/libpq
-copy_file sha2.cpp $SRC_DIR/common/backend/libpq $LIBPQ_WIN32_DIR/src/common/backend/libpq
-# src/common/backend/utils/mb
-copy_file encnames.cpp $SRC_DIR/common/backend/utils/mb $LIBPQ_WIN32_DIR/src/common/backend/utils/mb
-copy_file wchar.cpp $SRC_DIR/common/backend/utils/mb $LIBPQ_WIN32_DIR/src/common/backend/utils/mb
-# src/common/interfaces/libpq
-copy_file fe-auth.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
-copy_file fe-auth.h $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
-copy_file fe-connect.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
-copy_file fe-exec.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
-copy_file fe-lobj.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
-copy_file fe-misc.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
-copy_file fe-print.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
-copy_file fe-protocol2.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
-copy_file fe-protocol3.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
-copy_file fe-secure.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
-copy_file libpq-events.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
-copy_file pqexpbuffer.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
-copy_file pqsignal.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
-copy_file pqsignal.h $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
-copy_file pthread-win32.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
-copy_file win32.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
-copy_file win32.h $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
-# copy interface definition file from prepared directory
-copy_file libpqdll.def $PREPARED_DIR/include $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
-# src/common/interfaces/libpq/client_logic_cache
-copy_file cache_loader.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_cache \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
-copy_file cache_loader.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_cache \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
-copy_file cached_column_manager.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_cache \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
-copy_file cached_global_setting.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_cache \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
-copy_file column_settings_list.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_cache \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
-copy_file global_settings_list.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_cache \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
-copy_file icached_columns.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_cache \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
-copy_file types_to_oid.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_cache \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
-copy_file cache_refresh_type.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_cache \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
-copy_file cached_column_setting.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_cache \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
-copy_file cached_setting.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_cache \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
-copy_file columns_list.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_cache \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
-copy_file icached_column.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_cache \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
-copy_file schemas_list.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_cache \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
-copy_file cached_column.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_cache \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
-copy_file cached_columns.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_cache \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
-copy_file column_hook_executors_list.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_cache \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
-copy_file dataTypes.def \
- $SRC_DIR/common/interfaces/libpq/client_logic_cache \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
-copy_file icached_column_manager.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_cache \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
-copy_file search_path_list.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_cache \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
-# src/common/interfaces/libpq/client_logic_common
-copy_file client_logic_utils.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_common \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_common
-copy_file col_full_name.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_common \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_common
-copy_file cstring_oid_map.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_common \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_common
-copy_file pg_client_logic_params.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_common \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_common
-copy_file statement_data.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_common \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_common
-copy_file table_full_name.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_common \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_common
-# src/common/interfaces/libpq/client_logic_hooks
-copy_file abstract_hook_executor.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_hooks \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_hooks
-copy_file column_hook_executor.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_hooks \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_hooks
-copy_file global_hook_executor.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_hooks \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_hooks
-copy_file hook_resource.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_hooks \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_hooks
-copy_file hooks_factory.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_hooks \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_hooks
-copy_file hooks_manager.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_hooks \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_hooks
-# src/common/interfaces/libpq/client_logic_processor
-copy_file create_stmt_processor.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_processor \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
-copy_file prepared_statement.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_processor \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
-copy_file processor_utils.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_processor \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
-copy_file raw_values_cont.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_processor \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
-copy_file stmt_processor.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_processor \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
-copy_file where_clause_processor.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_processor \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
-copy_file encryption_pre_process.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_processor \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
-copy_file prepared_statements_list.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_processor \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
-copy_file raw_value.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_processor \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
-copy_file raw_values_list.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_processor \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
-copy_file values_processor.h \
- $SRC_DIR/common/interfaces/libpq/client_logic_processor \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
-# src/common/interfaces/libpq/frontend_parser
-copy_file datatypes.h \
- $SRC_DIR/common/interfaces/libpq/frontend_parser \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/frontend_parser
-copy_file Parser.h \
- $SRC_DIR/common/interfaces/libpq/frontend_parser \
- $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/frontend_parser
-# src/common/port
-copy_file chklocale.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
-copy_file dirent.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
-copy_file getaddrinfo.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
-copy_file gs_readdir.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
-copy_file gs_syscall_lock.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
-copy_file inet_net_ntop.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
-copy_file path.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
-copy_file pgsleep.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
-copy_file pthread-win32.h $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
-copy_file thread.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
-copy_file win32error.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
-copy_file cipher.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
-copy_file dirmod.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
-copy_file gs_env_r.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
-copy_file gs_strerror.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
-copy_file inet_aton.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
-copy_file noblock.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
-copy_file pgstrcasecmp.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
-copy_file strlcpy.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
-copy_file win32env.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
-copy_file win32setlocale.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
-# copy from prepared directory
-copy_file pg_config_paths.h $PREPARED_DIR/include $LIBPQ_WIN32_DIR/src/common/port
-}
-
-function copy_makefiles()
-{
-copy_file Makefile $PREPARED_DIR $LIBPQ_WIN32_DIR
-copy_file CMakeLists.txt $PREPARED_DIR $LIBPQ_WIN32_DIR
-}
-
-function generate_libpq_export_files()
-{
-copy_file auth.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
-copy_file be-fsstubs.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
-copy_file guc_vars.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
-copy_file libpq-be.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
-copy_file libpq-int.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
-copy_file pqformat.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
-copy_file be-fsstubs.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
-copy_file hba.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
-copy_file libpq-events.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
-copy_file md5.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
-copy_file pqsignal.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
-copy_file cl_state.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
-copy_file ip.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
-copy_file libpq-fe.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
-copy_file pqcomm.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
-copy_file sha2.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
-copy_file crypt.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
-copy_file libpq.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
-copy_file libpq-fs.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
-copy_file pqexpbuffer.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
-copy_file gs_thread.h $LIBPQ_WIN32_DIR/include $EXPORT_DIR/include
-copy_file postgres_ext.h $LIBPQ_WIN32_DIR/include $EXPORT_DIR/include
-copy_file gs_threadlocal.h $LIBPQ_WIN32_DIR/include $EXPORT_DIR/include
-
-if [ ! -d "$EXPORT_DIR"/lib ];then
- $MD $EXPORT_DIR/lib
-fi
-}
-
-### function ###
-function __main__()
-{
-echo "Start."
-echo -n "Step[1] - initialize libpq project directory for Windows ... "
-init_win_project
-echo "done."
-echo -n "Step[2] - copy libpq header files ... "
-copy_headers
-echo "done."
-echo -n "Step[3] - copy libpq source code files ... "
-copy_codes
-echo "done."
-echo -n "Step[4] - prepare Makefile && CMakeLists.txt files for compilation ... "
-copy_makefiles
-echo "done."
-echo -n "Step[5] - generate export directory and files ... "
-generate_libpq_export_files
-echo "done."
-echo "Done."
-}
-
-function __clean__()
-{
-$RM $LIBPQ_WIN32_DIR/include
-$RM $LIBPQ_WIN32_DIR/lib
-$RM $LIBPQ_WIN32_DIR/libpq-export
-$RM $LIBPQ_WIN32_DIR/src
-$RM $LIBPQ_WIN32_DIR/CMakeLists.txt
-$RM $LIBPQ_WIN32_DIR/Makefile
-}
-### main ###
-if [ $# -eq 0 ];then
-__main__
-exit 0
-fi
-if [ $# -eq 1 -a "x$1" = "xclean" ];then
-__clean__
-exit 0
-fi
-
-echo "Usage: \"sh $0\" for initialization or \"sh $0 clean\" for cleaning."
+#!/bin/bash
+MD="mkdir -p"
+RM="rm -rf"
+CP="cp -r"
+# ROOT_DIR=$LIB_GAUSSDB_DIR
+ROOT_DIR=$(pwd)/..
+SRC_DIR=$ROOT_DIR/../openGauss-server/src
+
+LIBPQ_WIN32_DIR=$ROOT_DIR/libpq-win32
+PREPARED_DIR=$LIBPQ_WIN32_DIR/
+EXPORT_DIR=$LIBPQ_WIN32_DIR/libpq-export
+LIB_SECURITY_DIR=$ROOT_DIR/../Huawei_Secure_C_V100R001C01SPC010B002
+
+### function ###
+function copy_file()
+{
+file=$1 #file name
+src=$2 #source directory
+dst=$3 #target directory
+if [ ! -f "$src"/"$file" ];then
+ echo "Error: $src/$file doesn't exist, exit."
+ exit 1
+fi
+if [ ! -d $dst ];then
+ $MD $dst
+fi
+#echo "Copy $src/$file to $dst/$file"
+$CP $src/$file $dst/$file
+}
+
+### function ###
+function init_win_project()
+{
+ if [ ! -f "$PREPARED_DIR"/include/pg_config.h ]; then
+ echo "Error: Header file pg_config.h for Windows lost, exit."
+ exit 1
+ fi
+ if [ ! -f "$PREPARED_DIR"/include/pg_config_os.h ]; then
+ echo "Error: Header file pg_config_os.h for Windows lost, exit."
+ exit 1
+ fi
+ if [ ! -f "$PREPARED_DIR"/include/pg_config_paths.h ]; then
+ echo "Error: Header file pg_config_paths.h for Windows lost, exit."
+ exit 1
+ fi
+ if [ ! -f "$PREPARED_DIR"/include/errcodes.h ]; then
+ echo "Error: Header file errcodes.h for Windows lost, exit."
+ exit 1
+ fi
+ if [ ! -f "$PREPARED_DIR"/include/libpqdll.def ]; then
+ echo "Error: Interface definition file libpqdll.def for Windows lost, exit."
+ exit 1
+ fi
+ if [ ! -f "$PREPARED_DIR"/Makefile ];then
+ echo "Error: Makefile for MinGW complier lost, exit."
+ exit 1
+ fi
+ if [ ! -f "$PREPARED_DIR"/CMakeLists.txt ];then
+ echo "Error: CMakeLists.txt for CMake && MinGW complier lost, exit."
+ exit 1
+ fi
+# $RM $LIBPQ_WIN32_DIR/include
+ $RM $LIBPQ_WIN32_DIR/src
+ if [ ! -d "$LIBPQ_WIN32_DIR"/lib ];then
+ $MD $LIBPQ_WIN32_DIR/lib
+ fi
+}
+
+### function ###
+function copy_headers()
+{ # copy header files
+# copy form prepared directory
+copy_file securec.h $LIB_SECURITY_DIR/include $LIBPQ_WIN32_DIR/include
+copy_file securectype.h $LIB_SECURITY_DIR/include $LIBPQ_WIN32_DIR/include
+#copy_file pg_config.h $PREPARED_DIR $LIBPQ_WIN32_DIR/include
+#copy_file pg_config_os.h $PREPARED_DIR $LIBPQ_WIN32_DIR/include
+# include
+copy_file c.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
+copy_file cipher.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
+copy_file datatypes.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
+copy_file getaddrinfo.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
+copy_file gs_thread.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
+copy_file gs_threadlocal.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
+copy_file pg_config_manual.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
+copy_file port.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
+copy_file postgres.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
+copy_file postgres_ext.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
+copy_file postgres_fe.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
+copy_file securec_check.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
+# include/access
+copy_file attnum.h $SRC_DIR/include/access $LIBPQ_WIN32_DIR/include/access
+copy_file tupdesc.h $SRC_DIR/include/access $LIBPQ_WIN32_DIR/include/access
+# include/catlog
+copy_file genbki.h $SRC_DIR/include/catalog $LIBPQ_WIN32_DIR/include/catalog
+copy_file pg_attribute.h $SRC_DIR/include/catalog $LIBPQ_WIN32_DIR/include/catalog
+# include/client_logic
+copy_file cache.h $SRC_DIR/include/client_logic $LIBPQ_WIN32_DIR/include/client_logic
+copy_file client_logic.h $SRC_DIR/include/client_logic $LIBPQ_WIN32_DIR/include/client_logic
+copy_file client_logic_enums.h $SRC_DIR/include/client_logic $LIBPQ_WIN32_DIR/include/client_logic
+copy_file cstrings_map.h $SRC_DIR/include/client_logic $LIBPQ_WIN32_DIR/include/client_logic
+# include/gstrace
+copy_file gstrace_infra.h $SRC_DIR/include/gstrace $LIBPQ_WIN32_DIR/include/gstrace
+copy_file gstrace_infra_int.h $SRC_DIR/include/gstrace $LIBPQ_WIN32_DIR/include/gstrace
+copy_file gstrace_tool.h $SRC_DIR/include/gstrace $LIBPQ_WIN32_DIR/include/gstrace
+#include/lib
+copy_file stringinfo.h $SRC_DIR/include/lib $LIBPQ_WIN32_DIR/include/lib
+# include/libcomm
+#copy_file libcomm.h $SRC_DIR/include/libcomm $LIBPQ_WIN32_DIR/include/libcomm
+# include/libpq
+copy_file auth.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
+copy_file be-fsstubs.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
+copy_file cl_state.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
+copy_file crypt.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
+copy_file guc_vars.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
+copy_file hba.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
+copy_file ip.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
+copy_file libpq.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
+copy_file libpq-be.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
+copy_file libpq-events.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
+copy_file libpq-fe.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
+copy_file libpq-fs.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
+copy_file libpq-int.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
+copy_file md5.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
+copy_file pqcomm.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
+copy_file pqexpbuffer.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
+copy_file pqformat.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
+copy_file pqsignal.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
+copy_file sha2.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
+# include/mb
+copy_file pg_wchar.h $SRC_DIR/include/mb $LIBPQ_WIN32_DIR/include/mb
+# include/nodes
+copy_file nodes.h $SRC_DIR/include/nodes $LIBPQ_WIN32_DIR/include/nodes
+copy_file params.h $SRC_DIR/include/nodes $LIBPQ_WIN32_DIR/include/nodes
+copy_file parsenodes_common.h $SRC_DIR/include/nodes $LIBPQ_WIN32_DIR/include/nodes
+copy_file pg_list.h $SRC_DIR/include/nodes $LIBPQ_WIN32_DIR/include/nodes
+copy_file primnodes.h $SRC_DIR/include/nodes $LIBPQ_WIN32_DIR/include/nodes
+copy_file value.h $SRC_DIR/include/nodes $LIBPQ_WIN32_DIR/include/nodes
+# include/parser
+copy_file backslash_quotes.h $SRC_DIR/include/parser $LIBPQ_WIN32_DIR/include/parser
+# include/port/win32
+copy_file dlfcn.h $SRC_DIR/include/port/win32 $LIBPQ_WIN32_DIR/include/port/win32
+copy_file grp.h $SRC_DIR/include/port/win32 $LIBPQ_WIN32_DIR/include/port/win32
+copy_file netdb.h $SRC_DIR/include/port/win32 $LIBPQ_WIN32_DIR/include/port/win32
+copy_file pwd.h $SRC_DIR/include/port/win32 $LIBPQ_WIN32_DIR/include/port/win32
+# include/port/win32/arpa
+copy_file inet.h $SRC_DIR/include/port/win32/arpa $LIBPQ_WIN32_DIR/include/port/win32/arpa
+# include/port/win32/netinet
+copy_file in.h $SRC_DIR/include/port/win32/netinet $LIBPQ_WIN32_DIR/include/port/win32/netinet
+# include/port/win32/sys
+copy_file socket.h $SRC_DIR/include/port/win32/sys $LIBPQ_WIN32_DIR/include/port/win32/sys
+copy_file wait.h $SRC_DIR/include/port/win32/sys $LIBPQ_WIN32_DIR/include/port/win32/sys
+# include/port/win32_msvc
+copy_file dirent.h $SRC_DIR/include/port/win32_msvc $LIBPQ_WIN32_DIR/include/port/win32_msvc
+copy_file unistd.h $SRC_DIR/include/port/win32_msvc $LIBPQ_WIN32_DIR/include/port/win32_msvc
+copy_file utime.h $SRC_DIR/include/port/win32_msvc $LIBPQ_WIN32_DIR/include/port/win32_msvc
+# include/port/win32_msvc/sys
+copy_file file.h $SRC_DIR/include/port/win32_msvc/sys $LIBPQ_WIN32_DIR/include/port/win32_msvc/sys
+copy_file param.h $SRC_DIR/include/port/win32_msvc/sys $LIBPQ_WIN32_DIR/include/port/win32_msvc/sys
+copy_file time.h $SRC_DIR/include/port/win32_msvc/sys $LIBPQ_WIN32_DIR/include/port/win32_msvc/sys
+# include/storage
+copy_file spin.h $SRC_DIR/include/storage $LIBPQ_WIN32_DIR/include/storage
+# include/storage/lock
+copy_file pg_sema.h $SRC_DIR/include/storage/lock $LIBPQ_WIN32_DIR/include/storage/lock
+copy_file s_lock.h $SRC_DIR/include/storage/lock $LIBPQ_WIN32_DIR/include/storage/lock
+# include/utils
+copy_file be_module.h $SRC_DIR/include/utils $LIBPQ_WIN32_DIR/include/utils
+copy_file elog.h $SRC_DIR/include/utils $LIBPQ_WIN32_DIR/include/utils
+copy_file palloc.h $SRC_DIR/include/utils $LIBPQ_WIN32_DIR/include/utils
+copy_file pg_crc.h $SRC_DIR/include/utils $LIBPQ_WIN32_DIR/include/utils
+copy_file pg_crc_tables.h $SRC_DIR/include/utils $LIBPQ_WIN32_DIR/include/utils
+copy_file syscall_lock.h $SRC_DIR/include/utils $LIBPQ_WIN32_DIR/include/utils
+# copy from prepared directory
+copy_file errcodes.h $PREPARED_DIR/include $LIBPQ_WIN32_DIR/include/utils # !!!! special source directory
+}
+
+function copy_codes()
+{
+# src/common/backend/libpq
+copy_file ip.cpp $SRC_DIR/common/backend/libpq $LIBPQ_WIN32_DIR/src/common/backend/libpq
+copy_file md5.cpp $SRC_DIR/common/backend/libpq $LIBPQ_WIN32_DIR/src/common/backend/libpq
+copy_file sha2.cpp $SRC_DIR/common/backend/libpq $LIBPQ_WIN32_DIR/src/common/backend/libpq
+# src/common/backend/utils/mb
+copy_file encnames.cpp $SRC_DIR/common/backend/utils/mb $LIBPQ_WIN32_DIR/src/common/backend/utils/mb
+copy_file wchar.cpp $SRC_DIR/common/backend/utils/mb $LIBPQ_WIN32_DIR/src/common/backend/utils/mb
+# src/common/interfaces/libpq
+copy_file fe-auth.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
+copy_file fe-auth.h $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
+copy_file fe-connect.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
+copy_file fe-exec.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
+copy_file fe-lobj.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
+copy_file fe-misc.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
+copy_file fe-print.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
+copy_file fe-protocol2.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
+copy_file fe-protocol3.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
+copy_file fe-secure.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
+copy_file libpq-events.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
+copy_file pqexpbuffer.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
+copy_file pqsignal.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
+copy_file pqsignal.h $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
+copy_file pthread-win32.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
+copy_file win32.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
+copy_file win32.h $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
+# copy interface definition file from prepared directory
+copy_file libpqdll.def $PREPARED_DIR/include $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
+# src/common/interfaces/libpq/client_logic_cache
+copy_file cache_loader.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_cache \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
+copy_file cache_loader.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_cache \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
+copy_file cached_column_manager.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_cache \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
+copy_file cached_global_setting.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_cache \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
+copy_file column_settings_list.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_cache \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
+copy_file global_settings_list.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_cache \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
+copy_file icached_columns.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_cache \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
+copy_file types_to_oid.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_cache \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
+copy_file cache_refresh_type.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_cache \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
+copy_file cached_column_setting.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_cache \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
+copy_file cached_setting.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_cache \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
+copy_file columns_list.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_cache \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
+copy_file icached_column.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_cache \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
+copy_file schemas_list.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_cache \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
+copy_file cached_column.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_cache \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
+copy_file cached_columns.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_cache \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
+copy_file column_hook_executors_list.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_cache \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
+copy_file dataTypes.def \
+ $SRC_DIR/common/interfaces/libpq/client_logic_cache \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
+copy_file icached_column_manager.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_cache \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
+copy_file search_path_list.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_cache \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
+# src/common/interfaces/libpq/client_logic_common
+copy_file client_logic_utils.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_common \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_common
+copy_file col_full_name.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_common \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_common
+copy_file cstring_oid_map.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_common \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_common
+copy_file pg_client_logic_params.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_common \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_common
+copy_file statement_data.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_common \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_common
+copy_file table_full_name.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_common \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_common
+# src/common/interfaces/libpq/client_logic_hooks
+copy_file abstract_hook_executor.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_hooks \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_hooks
+copy_file column_hook_executor.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_hooks \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_hooks
+copy_file global_hook_executor.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_hooks \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_hooks
+copy_file hook_resource.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_hooks \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_hooks
+copy_file hooks_factory.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_hooks \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_hooks
+copy_file hooks_manager.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_hooks \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_hooks
+# src/common/interfaces/libpq/client_logic_processor
+copy_file create_stmt_processor.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_processor \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
+copy_file prepared_statement.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_processor \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
+copy_file processor_utils.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_processor \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
+copy_file raw_values_cont.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_processor \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
+copy_file stmt_processor.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_processor \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
+copy_file where_clause_processor.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_processor \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
+copy_file encryption_pre_process.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_processor \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
+copy_file prepared_statements_list.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_processor \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
+copy_file raw_value.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_processor \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
+copy_file raw_values_list.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_processor \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
+copy_file values_processor.h \
+ $SRC_DIR/common/interfaces/libpq/client_logic_processor \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
+# src/common/interfaces/libpq/frontend_parser
+copy_file datatypes.h \
+ $SRC_DIR/common/interfaces/libpq/frontend_parser \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/frontend_parser
+copy_file Parser.h \
+ $SRC_DIR/common/interfaces/libpq/frontend_parser \
+ $LIBPQ_WIN32_DIR/src/common/interfaces/libpq/frontend_parser
+# src/common/port
+copy_file chklocale.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
+copy_file dirent.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
+copy_file getaddrinfo.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
+copy_file gs_readdir.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
+copy_file gs_syscall_lock.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
+copy_file inet_net_ntop.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
+copy_file path.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
+copy_file pgsleep.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
+copy_file pthread-win32.h $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
+copy_file thread.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
+copy_file win32error.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
+copy_file cipher.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
+copy_file dirmod.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
+copy_file gs_env_r.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
+copy_file gs_strerror.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
+copy_file inet_aton.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
+copy_file noblock.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
+copy_file pgstrcasecmp.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
+copy_file strlcpy.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
+copy_file win32env.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
+copy_file win32setlocale.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
+# copy from prepared directory
+copy_file pg_config_paths.h $PREPARED_DIR/include $LIBPQ_WIN32_DIR/src/common/port
+}
+
+function copy_makefiles()
+{
+copy_file Makefile $PREPARED_DIR $LIBPQ_WIN32_DIR
+copy_file CMakeLists.txt $PREPARED_DIR $LIBPQ_WIN32_DIR
+}
+
+function generate_libpq_export_files()
+{
+copy_file auth.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
+copy_file be-fsstubs.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
+copy_file guc_vars.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
+copy_file libpq-be.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
+copy_file libpq-int.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
+copy_file pqformat.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
+copy_file be-fsstubs.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
+copy_file hba.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
+copy_file libpq-events.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
+copy_file md5.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
+copy_file pqsignal.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
+copy_file cl_state.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
+copy_file ip.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
+copy_file libpq-fe.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
+copy_file pqcomm.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
+copy_file sha2.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
+copy_file crypt.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
+copy_file libpq.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
+copy_file libpq-fs.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
+copy_file pqexpbuffer.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
+copy_file gs_thread.h $LIBPQ_WIN32_DIR/include $EXPORT_DIR/include
+copy_file postgres_ext.h $LIBPQ_WIN32_DIR/include $EXPORT_DIR/include
+copy_file gs_threadlocal.h $LIBPQ_WIN32_DIR/include $EXPORT_DIR/include
+
+if [ ! -d "$EXPORT_DIR"/lib ];then
+ $MD $EXPORT_DIR/lib
+fi
+}
+
+### function ###
+function __main__()
+{
+echo "Start."
+echo -n "Step[1] - initialize libpq project directory for Windows ... "
+init_win_project
+echo "done."
+echo -n "Step[2] - copy libpq header files ... "
+copy_headers
+echo "done."
+echo -n "Step[3] - copy libpq source code files ... "
+copy_codes
+echo "done."
+echo -n "Step[4] - prepare Makefile && CMakeLists.txt files for compilation ... "
+copy_makefiles
+echo "done."
+echo -n "Step[5] - generate export directory and files ... "
+generate_libpq_export_files
+echo "done."
+echo "Done."
+}
+
+function __clean__()
+{
+$RM $LIBPQ_WIN32_DIR/include
+$RM $LIBPQ_WIN32_DIR/lib
+$RM $LIBPQ_WIN32_DIR/libpq-export
+$RM $LIBPQ_WIN32_DIR/src
+$RM $LIBPQ_WIN32_DIR/CMakeLists.txt
+$RM $LIBPQ_WIN32_DIR/Makefile
+}
+### main ###
+if [ $# -eq 0 ];then
+__main__
+exit 0
+fi
+if [ $# -eq 1 -a "x$1" = "xclean" ];then
+__clean__
+exit 0
+fi
+
+echo "Usage: \"sh $0\" for initialization or \"sh $0 clean\" for cleaning."
diff --git a/windows/odbc-win32编译指导.assets/image-20230321195408892.png b/windows/odbc-win32编译指导.assets/image-20230321195408892.png
new file mode 100644
index 0000000..355d163
Binary files /dev/null and b/windows/odbc-win32编译指导.assets/image-20230321195408892.png differ
diff --git a/windows/odbc-win32编译指导.assets/image-20230321200733264.png b/windows/odbc-win32编译指导.assets/image-20230321200733264.png
new file mode 100644
index 0000000..9a36de1
Binary files /dev/null and b/windows/odbc-win32编译指导.assets/image-20230321200733264.png differ
diff --git a/windows/odbc-win32编译指导.assets/image-20230322095212270.png b/windows/odbc-win32编译指导.assets/image-20230322095212270.png
new file mode 100644
index 0000000..69436a7
Binary files /dev/null and b/windows/odbc-win32编译指导.assets/image-20230322095212270.png differ
diff --git a/windows/odbc-win32编译指导.assets/image-20230322095314026.png b/windows/odbc-win32编译指导.assets/image-20230322095314026.png
new file mode 100644
index 0000000..d87bc40
Binary files /dev/null and b/windows/odbc-win32编译指导.assets/image-20230322095314026.png differ
diff --git a/windows/odbc-win32编译指导.assets/image-20230322095337027.png b/windows/odbc-win32编译指导.assets/image-20230322095337027.png
new file mode 100644
index 0000000..d87bc40
Binary files /dev/null and b/windows/odbc-win32编译指导.assets/image-20230322095337027.png differ
diff --git a/windows/odbc-win32编译指导.assets/image-20230322115658122.png b/windows/odbc-win32编译指导.assets/image-20230322115658122.png
new file mode 100644
index 0000000..81c92c2
Binary files /dev/null and b/windows/odbc-win32编译指导.assets/image-20230322115658122.png differ
diff --git a/windows/odbc-win32编译指导.assets/image-20230322115736573.png b/windows/odbc-win32编译指导.assets/image-20230322115736573.png
new file mode 100644
index 0000000..7e70171
Binary files /dev/null and b/windows/odbc-win32编译指导.assets/image-20230322115736573.png differ
diff --git a/windows/odbc-win32编译指导.assets/image-20230322153805967.png b/windows/odbc-win32编译指导.assets/image-20230322153805967.png
new file mode 100644
index 0000000..ce8aad7
Binary files /dev/null and b/windows/odbc-win32编译指导.assets/image-20230322153805967.png differ
diff --git a/windows/odbc-win32编译指导.assets/image-20230322153855140.png b/windows/odbc-win32编译指导.assets/image-20230322153855140.png
new file mode 100644
index 0000000..1dc6d5b
Binary files /dev/null and b/windows/odbc-win32编译指导.assets/image-20230322153855140.png differ
diff --git a/windows/odbc-win32编译指导.assets/image-20230322155020404.png b/windows/odbc-win32编译指导.assets/image-20230322155020404.png
new file mode 100644
index 0000000..bcc526f
Binary files /dev/null and b/windows/odbc-win32编译指导.assets/image-20230322155020404.png differ
diff --git a/windows/odbc-win32编译指导.assets/image-20230322155029546.png b/windows/odbc-win32编译指导.assets/image-20230322155029546.png
new file mode 100644
index 0000000..bcc526f
Binary files /dev/null and b/windows/odbc-win32编译指导.assets/image-20230322155029546.png differ
diff --git a/windows/odbc-win32编译指导.assets/image-20230322155042421.png b/windows/odbc-win32编译指导.assets/image-20230322155042421.png
new file mode 100644
index 0000000..bcc526f
Binary files /dev/null and b/windows/odbc-win32编译指导.assets/image-20230322155042421.png differ
diff --git a/windows/odbc-win32编译指导.assets/image-20230322161142228.png b/windows/odbc-win32编译指导.assets/image-20230322161142228.png
new file mode 100644
index 0000000..8334521
Binary files /dev/null and b/windows/odbc-win32编译指导.assets/image-20230322161142228.png differ
diff --git a/windows/odbc-win32编译指导.assets/image-20230322161255741.png b/windows/odbc-win32编译指导.assets/image-20230322161255741.png
new file mode 100644
index 0000000..b4c3dbe
Binary files /dev/null and b/windows/odbc-win32编译指导.assets/image-20230322161255741.png differ
diff --git a/windows/odbc-win32编译指导.assets/image-20230322161333409.png b/windows/odbc-win32编译指导.assets/image-20230322161333409.png
new file mode 100644
index 0000000..707d8a1
Binary files /dev/null and b/windows/odbc-win32编译指导.assets/image-20230322161333409.png differ
diff --git a/windows/odbc-win32编译指导.assets/image-20230322161444780.png b/windows/odbc-win32编译指导.assets/image-20230322161444780.png
new file mode 100644
index 0000000..afbfc7c
Binary files /dev/null and b/windows/odbc-win32编译指导.assets/image-20230322161444780.png differ
diff --git a/windows/odbc-win32编译指导.assets/image-20230322161457883.png b/windows/odbc-win32编译指导.assets/image-20230322161457883.png
new file mode 100644
index 0000000..c83114c
Binary files /dev/null and b/windows/odbc-win32编译指导.assets/image-20230322161457883.png differ
diff --git a/windows/odbc-win32编译指导.assets/image-20230322161634102.png b/windows/odbc-win32编译指导.assets/image-20230322161634102.png
new file mode 100644
index 0000000..1a48f6d
Binary files /dev/null and b/windows/odbc-win32编译指导.assets/image-20230322161634102.png differ
diff --git a/windows/odbc-win32编译指导.assets/image-20230322162117798.png b/windows/odbc-win32编译指导.assets/image-20230322162117798.png
new file mode 100644
index 0000000..1d5b29f
Binary files /dev/null and b/windows/odbc-win32编译指导.assets/image-20230322162117798.png differ
diff --git a/windows/odbc-win32编译指导.assets/image-20230322162151602.png b/windows/odbc-win32编译指导.assets/image-20230322162151602.png
new file mode 100644
index 0000000..8a7a99f
Binary files /dev/null and b/windows/odbc-win32编译指导.assets/image-20230322162151602.png differ
diff --git a/windows/odbc-win32编译指导.assets/image-20230322162318583.png b/windows/odbc-win32编译指导.assets/image-20230322162318583.png
new file mode 100644
index 0000000..3ddcd2f
Binary files /dev/null and b/windows/odbc-win32编译指导.assets/image-20230322162318583.png differ
diff --git a/windows/odbc-win32编译指导.assets/image-20230322164631029.png b/windows/odbc-win32编译指导.assets/image-20230322164631029.png
new file mode 100644
index 0000000..0c62d75
Binary files /dev/null and b/windows/odbc-win32编译指导.assets/image-20230322164631029.png differ
diff --git a/windows/odbc-win32编译指导.assets/image-20230322164651923.png b/windows/odbc-win32编译指导.assets/image-20230322164651923.png
new file mode 100644
index 0000000..dffcdf3
Binary files /dev/null and b/windows/odbc-win32编译指导.assets/image-20230322164651923.png differ
diff --git a/windows/odbc-win32编译指导.md b/windows/odbc-win32编译指导.md
new file mode 100644
index 0000000..a02658d
--- /dev/null
+++ b/windows/odbc-win32编译指导.md
@@ -0,0 +1,302 @@
+# odbc-win32编译指导
+
+## 1、下载并配置环境变量
+
+odbc编译windows32位软件包,需要下面的依赖
+
+### 1.1下载下面的软件包
+
+| 下载的软件包 | 官方地址 |
+| :----------- | :----------------------------------------------------------- |
+| msys2 | https://www.msys2.org/ |
+| mingw32 | https://udomain.dl.sourceforge.net/project/mingw-w64/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/8.1.0/threads-posix/sjlj/i686-8.1.0-release-posix-sjlj-rt_v6-rev0.7z |
+| cmake | https://cmake.org/download/ |
+| nsis | https://nsis.sourceforge.io/Download |
+| 7zip | https://7-zip.org/download.html |
+
+
+
+### 1.2配置环境变量
+
+
+
+**注意:**
+
+- 安装完msys2和mingw32,将mingw32目录覆盖msys2目录下的mingw32目录,并将覆盖后的mingw32/bin目录下mingw32-make.exe重命名make.exe
+- 修改msys2的镜像源,可以参考[华为镜像源](https://mirrors.huaweicloud.com/home)
+
+
+
+- 配置完镜像源,打开msys2控制台,下载一些必要的环境依赖
+
+```shell
+# 更新软件包数据
+pacman -Syu
+# 下载一些必要的软件
+pacman -S --needed base-devel
+```
+
+
+
+### 1.3验证环境变量
+
+```shell
+验证perl -v,make -v, cmake -version, gcc -v, g++ -v, sed是否存在
+```
+
+
+
+## 2、准备源代码
+
+odbc编译windows32需要的代码有,openssl,安全函数,openGauss-connector-odbc,openGauss-server;其中openssl和安全函数都在社区的三方库中
+
+| 代码名称 | 代码仓库 |
+| ------------------------ | ------------------------------------------------------------ |
+| openssl | https://gitee.com/opengauss/openGauss-third_party/blob/master/dependency/openssl/openssl-OpenSSL_1_1_1n.tar.gz |
+| 安全函数 | https://gitee.com/opengauss/openGauss-third_party/raw/master/platform/Huawei_Secure_C/Huawei_Secure_C_V100R001C01SPC010B002.zip |
+| openGauss-connector-odbc | https://gitee.com/opengauss/openGauss-connector-odbc.git |
+| openGauss-server | https://gitee.com/opengauss/openGauss-server.git |
+
+
+
+## 3、编译odbc
+
+首先先将上面的源代码,统一放到一个文件夹下,这样是为了方便规划,比如我这边是将上面4个源代码,放到window_odbc/win32/open_source路径下
+
+
+
+**脚本介绍**
+
+在openGauss-connector-odbc\windows\build路径下有两个脚本,一个是openssl.bat编译openssl,一个是odbc.bat编译odbc
+
+odbc.bat脚本的最开始,是一些环境变量和代码的路径,需要根据自己实际路径配置下
+
+```shell
+set WD=%__CD__%
+set LIB_SECURITY_DIR=D:\windows_odbc\win32\open_source\Huawei_Secure_C_V100R001C01SPC010B002
+set LIB_GAUSSDB_DIR=D:\windows_odbc\win32\open_source\openGauss-server
+set LIB_ODBC_DIR=D:\windows_odbc\win32\open_source\openGauss-connector-odbc
+
+set MINGW_DIR=D:\buildtools\mingw-8.1.0\msys64\mingw32
+set CMAKE_DIR=D:\env\cmake-3.26
+REM openss compiled direction
+set OPENSSL_DIR=D:\windows_odbc\win32\open_source\output\openssl-win32
+
+set p7zip=D:\install\7-Zip
+set OUTPUT_DIR=%LIB_ODBC_DIR%/odbc_output
+```
+
+
+
+### 3.1编译openssl
+
+在odbc.bat脚本中调用openssl.bat编译openssl
+
+```shell
+if not exist %OPENSSL_DIR%/libcrypto-1_1.dll (
+ cd %WD%
+ REM Build openssl
+ call openssl.bat
+)
+```
+
+openssl.bat脚本的内容
+
+```shell
+cd %WD%
+REM build openssl
+cd %OPENSSL_DIR%
+REM openssl config
+%MSYS_SHELL% -defterm -mingw32 -no-start -full-path -here -c './Configure ^
+--prefix=$PWD/openssl-win32 ^
+shared mingw no-tests; make -j20; make install -j20; ^
+cp $PWD/openssl-win32/bin/libssl-1_1.dll $PWD/openssl-win32; ^
+cp $PWD/openssl-win32/bin/libcrypto-1_1.dll $PWD/openssl-win32; ^
+rm -rf $PWD/../../output; ^
+mkdir -p $PWD/../../output; mv $PWD/openssl-win32 $PWD/../../output/.' ^
+```
+
+
+
+**编译结果**
+
+
+
+同时在window_odbc/win32/open_source/output路径中也会生成openssl-win32的文件夹
+
+
+
+### 3.2编译libsecurec.lib
+
+```shell
+cd %WD%
+REM Build libsecurec.lib
+cp win32/libpq/CMakeLists-huawei-securec.txt %LIB_SECURITY_DIR%/CMakeLists.txt
+cd %LIB_SECURITY_DIR%
+rm -rf build
+mkdir build
+cd build
+cmake -DMINGW_DIR="%MINGW_DIR%" -D"CMAKE_MAKE_PROGRAM:PATH=%MINGW_DIR%/bin/make.exe" -G "MinGW Makefiles" ..
+make
+```
+
+
+
+**编译结果**
+
+
+
+
+
+安全函数编译出的libsecurec.lib会在安全函数的output目录下
+
+
+
+### 3.3编译libpq.lib
+
+```shell
+cd %WD%
+REM Build libpq.lib
+rm -rf %LIB_GAUSSDB_DIR%/libpq-win32
+cp -r win32/libpq %LIB_GAUSSDB_DIR%/libpq-win32
+cd %LIB_GAUSSDB_DIR%/libpq-win32
+cp -r %LIB_SECURITY_DIR%/output ./lib
+bash %LIB_GAUSSDB_DIR%/libpq-win32/project.sh
+rm -rf build
+mkdir build
+cd build
+cmake -DMINGW_DIR="%MINGW_DIR%" -DOPENSSL_DIR="%OPENSSL_DIR%" -D"CMAKE_MAKE_PROGRAM:PATH=%MINGW_DIR%/bin/make.exe" -G "MinGW Makefiles" ..
+make
+```
+
+
+
+注意:
+
+- 在编译libpq.lib的时候,要确保project.sh执行成功,sh可以在git控制台执行
+
+
+
+- 修改dirmod.cpp
+
+```c
+第45行注释掉 // #include "storage/file/fio_device.h"
+
+在87行增加
+bool is_file_delete(int err)
+{
+ return (err == ENOENT);
+}
+```
+
+- 修改gs_readdir.cpp
+
+```c
+第31行注释掉 // #include "storage/file/fio_device.h"
+```
+
+
+
+**编译结果**
+
+如果遇到下面的问题,说明是openssl没有找到
+
+
+
+解决方法:手动修改D:\windows_odbc\win32\open_source\openGauss-server\libpq-win32\build目录下的CMakeCache.txt文件
+
+
+
+修改LIB_CRYPTO和LIB_SSL的环境依赖
+
+
+
+重新make
+
+
+
+
+
+
+
+### 3.4编译psqlodbc35w.lib
+
+```shell
+cd %WD%
+REM Build psqlodbc35w.lib
+cd %LIB_ODBC_DIR%
+rm -rf libpq
+cp -r %LIB_GAUSSDB_DIR%/libpq-win32/libpq-export ./libpq
+cp -r %LIB_GAUSSDB_DIR%/libpq-win32/lib/* ./libpq/lib
+cp -r %LIB_GAUSSDB_DIR%/libpq-win32/output/libpq.lib ./libpq/lib
+rm -rf build
+mkdir build
+cd build
+cmake -DMINGW_DIR="%MINGW_DIR%" -DOPENSSL_DIR="%OPENSSL_DIR%" -D"CMAKE_MAKE_PROGRAM:PATH=%MINGW_DIR%/bin/make.exe" -G "MinGW Makefiles" ..
+make
+```
+
+
+
+**编译结果**
+
+如果遇到下面的问题,这说明还是环境依赖找不到的原因,和编译libpq.lib问题一样的,只需要修改CMakeCache.txt文件对应的环境依赖,参考libpq.lib的修改
+
+
+
+
+
+输出正常结果
+
+
+
+
+
+
+
+### 3.5制作odbc安装包
+
+```shell
+cd %WD%
+REM Build psqlodbc.exe
+cd psqlodbc-installer
+rm -rf win32_dll
+mkdir win32_dll
+cp %LIB_ODBC_DIR%/output/psqlodbc35w.dll ./win32_dll
+cp "%OPENSSL_DIR%"/libssl-1_1.dll ./win32_dll
+cp "%OPENSSL_DIR%"/libcrypto-1_1.dll ./win32_dll
+makensis odbc-installer.nsi
+```
+
+
+
+**编译结果**
+
+
+
+
+
+### 3.6将odbc打包成tar.gz
+
+```shell
+cd %WD%
+rm -rf odbc_output
+mkdir odbc_output
+cp psqlodbc-installer/psqlodbc.exe odbc_output
+rm -rf psqlodbc-installer/psqlodbc.exe
+
+cd odbc_output
+%p7zip%\7z.exe a -tgzip openGauss-5.0.0-ODBC-windows.tar.gz ./*
+
+rm -rf "%OUTPUT_DIR%"
+mkdir "%OUTPUT_DIR%"
+cp -r openGauss-5.0.0-ODBC-windows.tar.gz %OUTPUT_DIR%
+```
+
+
+
+**编译结果**
+
+
+
+
\ No newline at end of file
diff --git a/windows/odbc-测试.assets/image-20230322211202304.png b/windows/odbc-测试.assets/image-20230322211202304.png
new file mode 100644
index 0000000..5d59032
Binary files /dev/null and b/windows/odbc-测试.assets/image-20230322211202304.png differ
diff --git a/windows/odbc-测试.assets/image-20230322211326255.png b/windows/odbc-测试.assets/image-20230322211326255.png
new file mode 100644
index 0000000..358ab19
Binary files /dev/null and b/windows/odbc-测试.assets/image-20230322211326255.png differ
diff --git a/windows/odbc-测试.assets/image-20230322211350105.png b/windows/odbc-测试.assets/image-20230322211350105.png
new file mode 100644
index 0000000..49016a1
Binary files /dev/null and b/windows/odbc-测试.assets/image-20230322211350105.png differ
diff --git a/windows/odbc-测试.assets/image-20230322211421933.png b/windows/odbc-测试.assets/image-20230322211421933.png
new file mode 100644
index 0000000..3ccf0eb
Binary files /dev/null and b/windows/odbc-测试.assets/image-20230322211421933.png differ
diff --git a/windows/odbc-测试.assets/image-20230322211526968.png b/windows/odbc-测试.assets/image-20230322211526968.png
new file mode 100644
index 0000000..23df5e3
Binary files /dev/null and b/windows/odbc-测试.assets/image-20230322211526968.png differ
diff --git a/windows/odbc-测试.assets/image-20230322211744562.png b/windows/odbc-测试.assets/image-20230322211744562.png
new file mode 100644
index 0000000..e046be3
Binary files /dev/null and b/windows/odbc-测试.assets/image-20230322211744562.png differ
diff --git a/windows/odbc-测试.assets/image-20230322211831798.png b/windows/odbc-测试.assets/image-20230322211831798.png
new file mode 100644
index 0000000..6239035
Binary files /dev/null and b/windows/odbc-测试.assets/image-20230322211831798.png differ
diff --git a/windows/odbc-测试.assets/image-20230322211914017.png b/windows/odbc-测试.assets/image-20230322211914017.png
new file mode 100644
index 0000000..a2e6068
Binary files /dev/null and b/windows/odbc-测试.assets/image-20230322211914017.png differ
diff --git a/windows/odbc-测试.md b/windows/odbc-测试.md
new file mode 100644
index 0000000..c45b143
--- /dev/null
+++ b/windows/odbc-测试.md
@@ -0,0 +1,44 @@
+# odbc-测试
+
+## 1、通过客户端odbct32w测试
+
+### 1.1下载软件并安装
+
+| 软件名字 | 地址 |
+| ---------- | ------------------------------------------------------------ |
+| odbct32w | https://download.microsoft.com/download/9/a/1/9a1256c9-d301-4fdc-93b9-370c5b2f9827/mdac28sdk.msi |
+| odbc安装包 | https://opengauss.obs.cn-south-1.myhuaweicloud.com/tools/odbc/openGauss-5.0.0-ODBC-windows.tar.gz |
+
+
+
+### 1.2启动opengauss并配置白名单
+
+参考opengauss官网,[odbc相关资料](https://docs.opengauss.org/zh/docs/latest/docs/BriefTutorial/ODBC.html)
+
+
+
+### 1.3配置数据源
+
+打开windows自带的数据管理,选择odbc data source 32
+
+
+
+
+
+配置提前启动的opengauss数据库
+
+
+
+### 1.3通过odbct32w测试工具测试
+
+启动odbct32w,在C:\Program Files (x86)\Microsoft Data Access SDK 2.8\Tools\x86,选择对应的架构类型,打开odbct32w.exe
+
+
+
+选择配置好的数据源
+
+
+
+执行简单的sql,分别点击第一个按钮,会显示是否执行成功,第二个按钮,将结果输出
+
+
\ No newline at end of file