This is an automated email from the ASF dual-hosted git repository.

mmuzaf pushed a commit to branch ignite-2.11.1
in repository https://gitbox.apache.org/repos/asf/ignite.git

commit 942d1050ad7a6c4826310ffe9d7601b21e1baddb
Author: Ivan Daschinsky <[email protected]>
AuthorDate: Wed Oct 6 09:41:35 2021 +0300

    IGNITE-15678 CPP: Implement building windows installer of ODBC Driver on 
CMake - Fixes #9470.
    
    Signed-off-by: Ivan Daschinsky <[email protected]>
---
 modules/platforms/cpp/CMakeLists.txt               |  19 ++--
 modules/platforms/cpp/odbc/CMakeLists.txt          |  60 ++++++++++-
 .../platforms/cpp/odbc/install/ignite-odbc.wxs.in  | 113 +++++++++++++++++++++
 3 files changed, 184 insertions(+), 8 deletions(-)

diff --git a/modules/platforms/cpp/CMakeLists.txt 
b/modules/platforms/cpp/CMakeLists.txt
index eb68cf4..286c851 100644
--- a/modules/platforms/cpp/CMakeLists.txt
+++ b/modules/platforms/cpp/CMakeLists.txt
@@ -20,9 +20,6 @@ project(Ignite.C++ VERSION 2.11.1.60260)
 
 set(CMAKE_CXX_STANDARD 98)
 
-find_package(Java 1.8 REQUIRED)
-find_package(JNI REQUIRED)
-
 set(CMAKE_PROJECT_VERSION ${PROJECT_VERSION})
 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DIGNITE_IMPL -DIGNITE_FRIEND 
-D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS")
@@ -52,11 +49,18 @@ if (MSVC)
     add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS)
 endif()
 
+option (WITH_CORE ON)
 option (WITH_ODBC OFF)
+option (WITH_ODBC_MSI OFF)
 option (WITH_THIN_CLIENT OFF)
 option (WITH_TESTS OFF)
 option (WARNINGS_AS_ERRORS OFF)
 
+if (${WITH_CORE} OR ${WITH_TESTS})
+    find_package(Java 1.8 REQUIRED)
+    find_package(JNI REQUIRED)
+endif()
+
 if (${WARNINGS_AS_ERRORS})
     if (MSVC)
         add_compile_options(/WX)
@@ -67,9 +71,12 @@ endif()
 
 add_subdirectory(common)
 add_subdirectory(binary)
-add_subdirectory(jni)
-add_subdirectory(core)
-add_subdirectory(ignite)
+
+if (${WITH_CORE} OR ${WITH_TESTS})
+    add_subdirectory(jni)
+    add_subdirectory(core)
+    add_subdirectory(ignite)
+endif()
 
 if (${WITH_TESTS})
     enable_testing()
diff --git a/modules/platforms/cpp/odbc/CMakeLists.txt 
b/modules/platforms/cpp/odbc/CMakeLists.txt
index 742d36f..0244cf5 100644
--- a/modules/platforms/cpp/odbc/CMakeLists.txt
+++ b/modules/platforms/cpp/odbc/CMakeLists.txt
@@ -96,12 +96,68 @@ if (WIN32)
     if (MSVC_VERSION GREATER_EQUAL 1900)
         target_link_libraries(${TARGET} legacy_stdio_definitions)
     endif()
-                               
-       set_target_properties(${TARGET} PROPERTIES OUTPUT_NAME "ignite.odbc")
+                
+    set_target_properties(${TARGET} PROPERTIES OUTPUT_NAME "ignite.odbc")
 else()
     target_link_libraries(${TARGET} ignite-common ignite-binary ignite-network)
 endif()
 
+if (WIN32 AND ${WITH_ODBC_MSI})
+    find_program(WIX_CANDLE candle)
+    if(NOT WIX_CANDLE)
+        message(FATAL_ERROR "WIX candle.exe not found! Have you installed WIX 
Toolset or forgotten to add it to Path?")
+    endif()
+
+    find_program(WIX_LIGHT light)
+    if(NOT WIX_LIGHT)
+        message(FATAL_ERROR "WIX light.exe not found! Have you installed WIX 
Toolset or forgotten to add it to Path?")
+    endif()
+
+    set(WIX_ODBC_LIBRARY_PATH ".\\ignite.odbc.dll")
+
+    set(WIX_PROJECT_NAME "Apache Ignite")
+    set(WIX_MANUFACTURER "The Apache Software Foundation")
+    set(WIX_COPYRIGHT_COMMENT "Apache, Apache Ignite, the Apache feather and 
the Apache Ignite logo are trademarks of The Apache Software Foundation.")
+
+    if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+        set(WIX_BIT_SUFFIX "64-bit")
+        set(WIX_PRODUCT_ID "F3E308E4-910C-4AF5-82DE-2ACF4D64830E")
+        set(WIX_UPGRADE_CODE "1D7AEFDF-6CD2-4FB5-88F2-811A89832D6D")
+        set(WIX_COMPONENT_ID "E5F0DDF2-DD3C-4196-8A08-70921858A52F")
+        set(WIX_PROGRAM_FILES_FOLDER_ID "ProgramFiles64Folder")
+        set(WIX_COMPONENT_IS_WIN64 "yes")
+        set(WIX_PACKAGE_PLATFORM "x64")
+        set(WIX_INSTALLER_PREFIX 
${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE}/ignite-odbc-amd64)
+    elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
+        set(WIX_BIT_SUFFIX "32-bit")
+        set(WIX_PRODUCT_ID "D39CBABA-1E21-4701-AA5C-91EDA07B383B")
+        set(WIX_UPGRADE_CODE "743902A4-365C-424E-B226-5B2898A3941E")
+        set(WIX_COMPONENT_ID "4AFA26EE-C639-4EF2-A9B2-281119BB4BB5")
+        set(WIX_PROGRAM_FILES_FOLDER_ID "ProgramFilesFolder")
+        set(WIX_COMPONENT_IS_WIN64 "no")
+        set(WIX_PACKAGE_PLATFORM "x86")
+        set(WIX_INSTALLER_PREFIX 
${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE}/ignite-odbc-x86)
+    endif()
+
+    set(WIX_PRODUCT_NAME "${WIX_PROJECT_NAME} ODBC ${WIX_BIT_SUFFIX} Driver")
+
+    configure_file(
+        "${CMAKE_CURRENT_LIST_DIR}/install/ignite-odbc.wxs.in"
+        "${WIX_INSTALLER_PREFIX}.wxs"
+        @ONLY
+    )
+
+    add_custom_command(
+        TARGET ${TARGET} POST_BUILD
+        COMMAND ${WIX_CANDLE} ${WIX_INSTALLER_PREFIX}.wxs -out 
${WIX_INSTALLER_PREFIX}.wxobj
+        COMMAND ${WIX_LIGHT} -ext WixUIExtension ${WIX_INSTALLER_PREFIX}.wxobj 
-out ${WIX_INSTALLER_PREFIX}.msi
+    )
+endif()
+
 target_include_directories(${TARGET} INTERFACE include)
 
 install(TARGETS ${TARGET} LIBRARY DESTINATION lib)
+
+if (WIN32 AND ${WITH_ODBC_MSI})
+   install(FILES ${WIX_INSTALLER_PREFIX}.msi DESTINATION bin)
+endif()
diff --git a/modules/platforms/cpp/odbc/install/ignite-odbc.wxs.in 
b/modules/platforms/cpp/odbc/install/ignite-odbc.wxs.in
new file mode 100644
index 0000000..a3dc84d
--- /dev/null
+++ b/modules/platforms/cpp/odbc/install/ignite-odbc.wxs.in
@@ -0,0 +1,113 @@
+<?xml version='1.0' encoding='windows-1252'?>
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
+    <Product Name='@WIX_PRODUCT_NAME@' Manufacturer='@WIX_MANUFACTURER@'
+        Id='@WIX_PRODUCT_ID@'
+        UpgradeCode='@WIX_UPGRADE_CODE@'
+        Language='1033' Codepage='1252' Version='@CMAKE_PROJECT_VERSION@'>
+
+        <Package Id='*' Keywords='Installer' Description="@WIX_PRODUCT_NAME@ 
Installer"
+            Comments='@WIX_COPYRIGHT_COMMENT@' 
Platform="@WIX_PACKAGE_PLATFORM@"
+            InstallerVersion='301' Languages='1033' Compressed='yes' 
SummaryCodepage='1252' />
+
+        <Media Id='1' Cabinet='package.cab' EmbedCab='yes' DiskPrompt='CD-ROM 
#1' />
+        <Property Id='DiskPrompt' Value="@WIX_PRODUCT_NAME@ Installation [1]" 
/>
+
+        <Directory Id='TARGETDIR' Name='SourceDir'>
+            <Directory Id='@WIX_PROGRAM_FILES_FOLDER_ID@' Name='ProgramFiles'>
+                <Directory Id='ApacheIgnite' Name='Apache Ignite'>
+                    <Directory Id='INSTALLDIR' Name='ODBC Driver'>
+                        <Component Id='Driver' Guid='@WIX_COMPONENT_ID@' 
Win64='@WIX_COMPONENT_IS_WIN64@'>
+                            <File Id='IgniteOdbcDll' Name='ignite.odbc.dll' 
DiskId='1' Source='@WIX_ODBC_LIBRARY_PATH@' KeyPath='yes'/>
+
+                            <RegistryValue Root='HKLM' 
Key='Software\ODBC\ODBCINST.INI\ODBC Drivers' Name='Apache Ignite' 
Type='string' Value='Installed'/>
+
+                            <RegistryKey Id='OdbcDriverRegInfo' Root='HKLM' 
Key='Software\ODBC\ODBCINST.INI\Apache Ignite' ForceCreateOnInstall='yes' 
ForceDeleteOnUninstall='yes'>
+                                <RegistryValue Type='string' 
Name='DriverODBCVer' Value='03.00'/>
+                                <RegistryValue Type='string' Name='Driver' 
Value='[#IgniteOdbcDll]'/>
+                                <RegistryValue Type='string' Name='Setup' 
Value='[#IgniteOdbcDll]'/>
+                                <RegistryValue Type='integer' 
Name='UsageCount' Value='1'/>
+                            </RegistryKey>
+                        </Component>
+                    </Directory>
+                </Directory>
+            </Directory>
+        </Directory>
+
+        <Feature Id='Complete' Title='ODBC Driver' 
Description='@WIX_PRODUCT_NAME@.' Level='1'
+            ConfigurableDirectory='INSTALLDIR' Absent='disallow' 
AllowAdvertise='no' InstallDefault='local'>
+            <ComponentRef Id='Driver' />
+        </Feature>
+
+        <Property Id="WIXUI_INSTALLDIR" Value="INSTALLDIR" />
+
+        <UI Id="WixUI_InstallDir">
+            <TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" />
+            <TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" />
+            <TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" 
Bold="yes" />
+
+            <Property Id="DefaultUIFont" Value="WixUI_Font_Normal" />
+            <Property Id="WixUI_Mode" Value="InstallDir" />
+
+            <DialogRef Id="BrowseDlg" />
+            <DialogRef Id="DiskCostDlg" />
+            <DialogRef Id="ErrorDlg" />
+            <DialogRef Id="FatalError" />
+            <DialogRef Id="FilesInUse" />
+            <DialogRef Id="MsiRMFilesInUse" />
+            <DialogRef Id="PrepareDlg" />
+            <DialogRef Id="ProgressDlg" />
+            <DialogRef Id="ResumeDlg" />
+            <DialogRef Id="UserExit" />
+
+            <Publish Dialog="BrowseDlg" Control="OK" Event="DoAction" 
Value="WixUIValidatePath" Order="3">1</Publish>
+            <Publish Dialog="BrowseDlg" Control="OK" Event="SpawnDialog" 
Value="InvalidDirDlg" 
Order="4"><![CDATA[WIXUI_INSTALLDIR_VALID<>"1"]]></Publish>
+
+            <Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" 
Value="Return" Order="999">1</Publish>
+
+            <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" 
Value="InstallDirDlg">NOT Installed</Publish>
+            <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" 
Value="VerifyReadyDlg">Installed AND PATCH</Publish>
+
+            <Publish Dialog="InstallDirDlg" Control="Back" Event="NewDialog" 
Value="WelcomeDlg">1</Publish>
+            <Publish Dialog="InstallDirDlg" Control="Next" 
Event="SetTargetPath" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish>
+            <Publish Dialog="InstallDirDlg" Control="Next" Event="DoAction" 
Value="WixUIValidatePath" Order="2">NOT WIXUI_DONTVALIDATEPATH</Publish>
+            <Publish Dialog="InstallDirDlg" Control="Next" Event="SpawnDialog" 
Value="InvalidDirDlg" Order="3"><![CDATA[NOT WIXUI_DONTVALIDATEPATH AND 
WIXUI_INSTALLDIR_VALID<>"1"]]></Publish>
+            <Publish Dialog="InstallDirDlg" Control="Next" Event="NewDialog" 
Value="VerifyReadyDlg" Order="4">WIXUI_DONTVALIDATEPATH OR 
WIXUI_INSTALLDIR_VALID="1"</Publish>
+            <Publish Dialog="InstallDirDlg" Control="ChangeFolder" 
Property="_BrowseProperty" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish>
+            <Publish Dialog="InstallDirDlg" Control="ChangeFolder" 
Event="SpawnDialog" Value="BrowseDlg" Order="2">1</Publish>
+
+            <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" 
Value="InstallDirDlg" Order="1">NOT Installed</Publish>
+            <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" 
Value="MaintenanceTypeDlg" Order="2">Installed AND NOT PATCH</Publish>
+            <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" 
Value="WelcomeDlg" Order="2">Installed AND PATCH</Publish>
+
+            <Publish Dialog="MaintenanceWelcomeDlg" Control="Next" 
Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish>
+
+            <Publish Dialog="MaintenanceTypeDlg" Control="RepairButton" 
Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
+            <Publish Dialog="MaintenanceTypeDlg" Control="RemoveButton" 
Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
+            <Publish Dialog="MaintenanceTypeDlg" Control="Back" 
Event="NewDialog" Value="MaintenanceWelcomeDlg">1</Publish>
+
+            <Property Id="ARPNOMODIFY" Value="1" />
+        </UI>
+
+        <UIRef Id="WixUI_Common" />
+        <UIRef Id="WixUI_ErrorProgressText" />
+
+    </Product>
+</Wix>

Reply via email to