IGNITE-15678 CPP: Implement building windows installer of ODBC Driver on CMake - Fixes #9470.
Signed-off-by: Ivan Daschinsky <ivandasch@apache.org>
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 @@
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 @@
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 @@
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 (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>