Skip to content

Commit 942d105

Browse files
ivandaschMmuzaf
authored andcommitted
IGNITE-15678 CPP: Implement building windows installer of ODBC Driver on CMake - Fixes #9470.
Signed-off-by: Ivan Daschinsky <ivandasch@apache.org>
1 parent 544c3bd commit 942d105

3 files changed

Lines changed: 184 additions & 8 deletions

File tree

modules/platforms/cpp/CMakeLists.txt

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,6 @@ project(Ignite.C++ VERSION 2.11.1.60260)
2020

2121
set(CMAKE_CXX_STANDARD 98)
2222

23-
find_package(Java 1.8 REQUIRED)
24-
find_package(JNI REQUIRED)
25-
2623
set(CMAKE_PROJECT_VERSION ${PROJECT_VERSION})
2724
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")
2825
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)
5249
add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS)
5350
endif()
5451

52+
option (WITH_CORE ON)
5553
option (WITH_ODBC OFF)
54+
option (WITH_ODBC_MSI OFF)
5655
option (WITH_THIN_CLIENT OFF)
5756
option (WITH_TESTS OFF)
5857
option (WARNINGS_AS_ERRORS OFF)
5958

59+
if (${WITH_CORE} OR ${WITH_TESTS})
60+
find_package(Java 1.8 REQUIRED)
61+
find_package(JNI REQUIRED)
62+
endif()
63+
6064
if (${WARNINGS_AS_ERRORS})
6165
if (MSVC)
6266
add_compile_options(/WX)
@@ -67,9 +71,12 @@ endif()
6771

6872
add_subdirectory(common)
6973
add_subdirectory(binary)
70-
add_subdirectory(jni)
71-
add_subdirectory(core)
72-
add_subdirectory(ignite)
74+
75+
if (${WITH_CORE} OR ${WITH_TESTS})
76+
add_subdirectory(jni)
77+
add_subdirectory(core)
78+
add_subdirectory(ignite)
79+
endif()
7380

7481
if (${WITH_TESTS})
7582
enable_testing()

modules/platforms/cpp/odbc/CMakeLists.txt

Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,12 +96,68 @@ if (WIN32)
9696
if (MSVC_VERSION GREATER_EQUAL 1900)
9797
target_link_libraries(${TARGET} legacy_stdio_definitions)
9898
endif()
99-
100-
set_target_properties(${TARGET} PROPERTIES OUTPUT_NAME "ignite.odbc")
99+
100+
set_target_properties(${TARGET} PROPERTIES OUTPUT_NAME "ignite.odbc")
101101
else()
102102
target_link_libraries(${TARGET} ignite-common ignite-binary ignite-network)
103103
endif()
104104

105+
if (WIN32 AND ${WITH_ODBC_MSI})
106+
find_program(WIX_CANDLE candle)
107+
if(NOT WIX_CANDLE)
108+
message(FATAL_ERROR "WIX candle.exe not found! Have you installed WIX Toolset or forgotten to add it to Path?")
109+
endif()
110+
111+
find_program(WIX_LIGHT light)
112+
if(NOT WIX_LIGHT)
113+
message(FATAL_ERROR "WIX light.exe not found! Have you installed WIX Toolset or forgotten to add it to Path?")
114+
endif()
115+
116+
set(WIX_ODBC_LIBRARY_PATH ".\\ignite.odbc.dll")
117+
118+
set(WIX_PROJECT_NAME "Apache Ignite")
119+
set(WIX_MANUFACTURER "The Apache Software Foundation")
120+
set(WIX_COPYRIGHT_COMMENT "Apache, Apache Ignite, the Apache feather and the Apache Ignite logo are trademarks of The Apache Software Foundation.")
121+
122+
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
123+
set(WIX_BIT_SUFFIX "64-bit")
124+
set(WIX_PRODUCT_ID "F3E308E4-910C-4AF5-82DE-2ACF4D64830E")
125+
set(WIX_UPGRADE_CODE "1D7AEFDF-6CD2-4FB5-88F2-811A89832D6D")
126+
set(WIX_COMPONENT_ID "E5F0DDF2-DD3C-4196-8A08-70921858A52F")
127+
set(WIX_PROGRAM_FILES_FOLDER_ID "ProgramFiles64Folder")
128+
set(WIX_COMPONENT_IS_WIN64 "yes")
129+
set(WIX_PACKAGE_PLATFORM "x64")
130+
set(WIX_INSTALLER_PREFIX ${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE}/ignite-odbc-amd64)
131+
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
132+
set(WIX_BIT_SUFFIX "32-bit")
133+
set(WIX_PRODUCT_ID "D39CBABA-1E21-4701-AA5C-91EDA07B383B")
134+
set(WIX_UPGRADE_CODE "743902A4-365C-424E-B226-5B2898A3941E")
135+
set(WIX_COMPONENT_ID "4AFA26EE-C639-4EF2-A9B2-281119BB4BB5")
136+
set(WIX_PROGRAM_FILES_FOLDER_ID "ProgramFilesFolder")
137+
set(WIX_COMPONENT_IS_WIN64 "no")
138+
set(WIX_PACKAGE_PLATFORM "x86")
139+
set(WIX_INSTALLER_PREFIX ${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE}/ignite-odbc-x86)
140+
endif()
141+
142+
set(WIX_PRODUCT_NAME "${WIX_PROJECT_NAME} ODBC ${WIX_BIT_SUFFIX} Driver")
143+
144+
configure_file(
145+
"${CMAKE_CURRENT_LIST_DIR}/install/ignite-odbc.wxs.in"
146+
"${WIX_INSTALLER_PREFIX}.wxs"
147+
@ONLY
148+
)
149+
150+
add_custom_command(
151+
TARGET ${TARGET} POST_BUILD
152+
COMMAND ${WIX_CANDLE} ${WIX_INSTALLER_PREFIX}.wxs -out ${WIX_INSTALLER_PREFIX}.wxobj
153+
COMMAND ${WIX_LIGHT} -ext WixUIExtension ${WIX_INSTALLER_PREFIX}.wxobj -out ${WIX_INSTALLER_PREFIX}.msi
154+
)
155+
endif()
156+
105157
target_include_directories(${TARGET} INTERFACE include)
106158

107159
install(TARGETS ${TARGET} LIBRARY DESTINATION lib)
160+
161+
if (WIN32 AND ${WITH_ODBC_MSI})
162+
install(FILES ${WIX_INSTALLER_PREFIX}.msi DESTINATION bin)
163+
endif()
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
<?xml version='1.0' encoding='windows-1252'?>
2+
3+
<!--
4+
Licensed to the Apache Software Foundation (ASF) under one or more
5+
contributor license agreements. See the NOTICE file distributed with
6+
this work for additional information regarding copyright ownership.
7+
The ASF licenses this file to You under the Apache License, Version 2.0
8+
(the "License"); you may not use this file except in compliance with
9+
the License. You may obtain a copy of the License at
10+
11+
http://www.apache.org/licenses/LICENSE-2.0
12+
13+
Unless required by applicable law or agreed to in writing, software
14+
distributed under the License is distributed on an "AS IS" BASIS,
15+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16+
See the License for the specific language governing permissions and
17+
limitations under the License.
18+
-->
19+
20+
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
21+
<Product Name='@WIX_PRODUCT_NAME@' Manufacturer='@WIX_MANUFACTURER@'
22+
Id='@WIX_PRODUCT_ID@'
23+
UpgradeCode='@WIX_UPGRADE_CODE@'
24+
Language='1033' Codepage='1252' Version='@CMAKE_PROJECT_VERSION@'>
25+
26+
<Package Id='*' Keywords='Installer' Description="@WIX_PRODUCT_NAME@ Installer"
27+
Comments='@WIX_COPYRIGHT_COMMENT@' Platform="@WIX_PACKAGE_PLATFORM@"
28+
InstallerVersion='301' Languages='1033' Compressed='yes' SummaryCodepage='1252' />
29+
30+
<Media Id='1' Cabinet='package.cab' EmbedCab='yes' DiskPrompt='CD-ROM #1' />
31+
<Property Id='DiskPrompt' Value="@WIX_PRODUCT_NAME@ Installation [1]" />
32+
33+
<Directory Id='TARGETDIR' Name='SourceDir'>
34+
<Directory Id='@WIX_PROGRAM_FILES_FOLDER_ID@' Name='ProgramFiles'>
35+
<Directory Id='ApacheIgnite' Name='Apache Ignite'>
36+
<Directory Id='INSTALLDIR' Name='ODBC Driver'>
37+
<Component Id='Driver' Guid='@WIX_COMPONENT_ID@' Win64='@WIX_COMPONENT_IS_WIN64@'>
38+
<File Id='IgniteOdbcDll' Name='ignite.odbc.dll' DiskId='1' Source='@WIX_ODBC_LIBRARY_PATH@' KeyPath='yes'/>
39+
40+
<RegistryValue Root='HKLM' Key='Software\ODBC\ODBCINST.INI\ODBC Drivers' Name='Apache Ignite' Type='string' Value='Installed'/>
41+
42+
<RegistryKey Id='OdbcDriverRegInfo' Root='HKLM' Key='Software\ODBC\ODBCINST.INI\Apache Ignite' ForceCreateOnInstall='yes' ForceDeleteOnUninstall='yes'>
43+
<RegistryValue Type='string' Name='DriverODBCVer' Value='03.00'/>
44+
<RegistryValue Type='string' Name='Driver' Value='[#IgniteOdbcDll]'/>
45+
<RegistryValue Type='string' Name='Setup' Value='[#IgniteOdbcDll]'/>
46+
<RegistryValue Type='integer' Name='UsageCount' Value='1'/>
47+
</RegistryKey>
48+
</Component>
49+
</Directory>
50+
</Directory>
51+
</Directory>
52+
</Directory>
53+
54+
<Feature Id='Complete' Title='ODBC Driver' Description='@WIX_PRODUCT_NAME@.' Level='1'
55+
ConfigurableDirectory='INSTALLDIR' Absent='disallow' AllowAdvertise='no' InstallDefault='local'>
56+
<ComponentRef Id='Driver' />
57+
</Feature>
58+
59+
<Property Id="WIXUI_INSTALLDIR" Value="INSTALLDIR" />
60+
61+
<UI Id="WixUI_InstallDir">
62+
<TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" />
63+
<TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" />
64+
<TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes" />
65+
66+
<Property Id="DefaultUIFont" Value="WixUI_Font_Normal" />
67+
<Property Id="WixUI_Mode" Value="InstallDir" />
68+
69+
<DialogRef Id="BrowseDlg" />
70+
<DialogRef Id="DiskCostDlg" />
71+
<DialogRef Id="ErrorDlg" />
72+
<DialogRef Id="FatalError" />
73+
<DialogRef Id="FilesInUse" />
74+
<DialogRef Id="MsiRMFilesInUse" />
75+
<DialogRef Id="PrepareDlg" />
76+
<DialogRef Id="ProgressDlg" />
77+
<DialogRef Id="ResumeDlg" />
78+
<DialogRef Id="UserExit" />
79+
80+
<Publish Dialog="BrowseDlg" Control="OK" Event="DoAction" Value="WixUIValidatePath" Order="3">1</Publish>
81+
<Publish Dialog="BrowseDlg" Control="OK" Event="SpawnDialog" Value="InvalidDirDlg" Order="4"><![CDATA[WIXUI_INSTALLDIR_VALID<>"1"]]></Publish>
82+
83+
<Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999">1</Publish>
84+
85+
<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="InstallDirDlg">NOT Installed</Publish>
86+
<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">Installed AND PATCH</Publish>
87+
88+
<Publish Dialog="InstallDirDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg">1</Publish>
89+
<Publish Dialog="InstallDirDlg" Control="Next" Event="SetTargetPath" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish>
90+
<Publish Dialog="InstallDirDlg" Control="Next" Event="DoAction" Value="WixUIValidatePath" Order="2">NOT WIXUI_DONTVALIDATEPATH</Publish>
91+
<Publish Dialog="InstallDirDlg" Control="Next" Event="SpawnDialog" Value="InvalidDirDlg" Order="3"><![CDATA[NOT WIXUI_DONTVALIDATEPATH AND WIXUI_INSTALLDIR_VALID<>"1"]]></Publish>
92+
<Publish Dialog="InstallDirDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg" Order="4">WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1"</Publish>
93+
<Publish Dialog="InstallDirDlg" Control="ChangeFolder" Property="_BrowseProperty" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish>
94+
<Publish Dialog="InstallDirDlg" Control="ChangeFolder" Event="SpawnDialog" Value="BrowseDlg" Order="2">1</Publish>
95+
96+
<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="InstallDirDlg" Order="1">NOT Installed</Publish>
97+
<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="2">Installed AND NOT PATCH</Publish>
98+
<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="2">Installed AND PATCH</Publish>
99+
100+
<Publish Dialog="MaintenanceWelcomeDlg" Control="Next" Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish>
101+
102+
<Publish Dialog="MaintenanceTypeDlg" Control="RepairButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
103+
<Publish Dialog="MaintenanceTypeDlg" Control="RemoveButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
104+
<Publish Dialog="MaintenanceTypeDlg" Control="Back" Event="NewDialog" Value="MaintenanceWelcomeDlg">1</Publish>
105+
106+
<Property Id="ARPNOMODIFY" Value="1" />
107+
</UI>
108+
109+
<UIRef Id="WixUI_Common" />
110+
<UIRef Id="WixUI_ErrorProgressText" />
111+
112+
</Product>
113+
</Wix>

0 commit comments

Comments
 (0)