Skip to content

Commit 9199d85

Browse files
committed
Extract ODBC installer
Need to add `component` to other parts to be able to select the ODBC components Add product ID to Windows installer With stable product and upgrade id, Windows will be able to properly recognize ODBC installer as the same product, and prevent double-installation from happening. Update README Co-Authored-By: alinalibq <alina.li@improving.com>
1 parent 5aa7dd1 commit 9199d85

13 files changed

Lines changed: 310 additions & 15 deletions

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,3 +107,6 @@ java/.mvn/.develocity/
107107
# rat
108108
filtered_rat.txt
109109
rat.txt
110+
111+
# rc
112+
*.rc

ci/scripts/cpp_build.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ else
213213
-DARROW_FLIGHT=${ARROW_FLIGHT:-OFF} \
214214
-DARROW_FLIGHT_SQL=${ARROW_FLIGHT_SQL:-OFF} \
215215
-DARROW_FLIGHT_SQL_ODBC=${ARROW_FLIGHT_SQL_ODBC:-OFF} \
216+
-DARROW_FLIGHT_SQL_ODBC_INSTALLER=${ARROW_FLIGHT_SQL_ODBC_INSTALLER:-OFF} \
216217
-DARROW_FUZZING=${ARROW_FUZZING:-OFF} \
217218
-DARROW_GANDIVA_PC_CXX_FLAGS=${ARROW_GANDIVA_PC_CXX_FLAGS:-} \
218219
-DARROW_GANDIVA=${ARROW_GANDIVA:-OFF} \

cpp/CMakeLists.txt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -720,9 +720,13 @@ endif()
720720
721721
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../LICENSE.txt
722722
${CMAKE_CURRENT_SOURCE_DIR}/../NOTICE.txt
723-
${CMAKE_CURRENT_SOURCE_DIR}/README.md DESTINATION "${ARROW_DOC_DIR}")
723+
${CMAKE_CURRENT_SOURCE_DIR}/README.md
724+
DESTINATION "${ARROW_DOC_DIR}"
725+
COMPONENT arrow_doc)
724726
725-
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/gdb_arrow.py DESTINATION "${ARROW_GDB_DIR}")
727+
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/gdb_arrow.py
728+
DESTINATION "${ARROW_GDB_DIR}"
729+
COMPONENT arrow_gdb)
726730
727731
#
728732
# Validate and print out Arrow configuration options

cpp/CMakePresets.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@
180180
"ARROW_BUILD_EXAMPLES": "ON",
181181
"ARROW_BUILD_UTILITIES": "ON",
182182
"ARROW_FLIGHT_SQL_ODBC": "ON",
183+
"ARROW_FLIGHT_SQL_ODBC_INSTALLER": "ON",
183184
"ARROW_TENSORFLOW": "ON",
184185
"PARQUET_BUILD_EXAMPLES": "ON",
185186
"PARQUET_BUILD_EXECUTABLES": "ON"

cpp/cmake_modules/BuildUtils.cmake

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -178,10 +178,12 @@ function(arrow_install_cmake_package PACKAGE_NAME EXPORT_NAME)
178178
write_basic_package_version_file("${BUILT_CONFIG_VERSION_CMAKE}"
179179
COMPATIBILITY SameMajorVersion)
180180
install(FILES "${BUILT_CONFIG_CMAKE}" "${BUILT_CONFIG_VERSION_CMAKE}"
181-
DESTINATION "${ARROW_CMAKE_DIR}/${PACKAGE_NAME}")
181+
DESTINATION "${ARROW_CMAKE_DIR}/${PACKAGE_NAME}"
182+
COMPONENT config_cmake_file)
182183
set(TARGETS_CMAKE "${PACKAGE_NAME}Targets.cmake")
183184
install(EXPORT ${EXPORT_NAME}
184185
DESTINATION "${ARROW_CMAKE_DIR}/${PACKAGE_NAME}"
186+
COMPONENT config_cmake_export
185187
NAMESPACE "${PACKAGE_NAME}::"
186188
FILE "${TARGETS_CMAKE}")
187189
endfunction()
@@ -403,8 +405,11 @@ function(ADD_ARROW_LIB LIB_NAME)
403405
install(TARGETS ${LIB_NAME}_shared ${INSTALL_IS_OPTIONAL}
404406
EXPORT ${LIB_NAME}_targets
405407
ARCHIVE DESTINATION ${INSTALL_ARCHIVE_DIR}
408+
COMPONENT ${LIB_NAME}_shared_archive
406409
LIBRARY DESTINATION ${INSTALL_LIBRARY_DIR}
410+
COMPONENT ${LIB_NAME}_shared_library
407411
RUNTIME DESTINATION ${INSTALL_RUNTIME_DIR}
412+
COMPONENT ${LIB_NAME}_shared_runtime
408413
INCLUDES
409414
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
410415
endif()
@@ -471,8 +476,11 @@ function(ADD_ARROW_LIB LIB_NAME)
471476
install(TARGETS ${LIB_NAME}_static ${INSTALL_IS_OPTIONAL}
472477
EXPORT ${LIB_NAME}_targets
473478
ARCHIVE DESTINATION ${INSTALL_ARCHIVE_DIR}
479+
COMPONENT ${LIB_NAME}_static_library
474480
LIBRARY DESTINATION ${INSTALL_LIBRARY_DIR}
481+
COMPONENT ${LIB_NAME}_static_library
475482
RUNTIME DESTINATION ${INSTALL_RUNTIME_DIR}
483+
COMPONENT ${LIB_NAME}_static_library
476484
INCLUDES
477485
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
478486
endif()
@@ -934,7 +942,9 @@ function(ARROW_INSTALL_ALL_HEADERS PATH)
934942
endif()
935943
list(APPEND PUBLIC_HEADERS ${HEADER})
936944
endforeach()
937-
install(FILES ${PUBLIC_HEADERS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${PATH}")
945+
install(FILES ${PUBLIC_HEADERS}
946+
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${PATH}"
947+
COMPONENT ${HEADER}_header)
938948
endfunction()
939949

940950
function(ARROW_ADD_PKG_CONFIG MODULE)
@@ -944,7 +954,8 @@ function(ARROW_ADD_PKG_CONFIG MODULE)
944954
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/${MODULE}.pc"
945955
INPUT "${CMAKE_CURRENT_BINARY_DIR}/${MODULE}.pc.generate.in")
946956
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/${MODULE}.pc"
947-
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig/")
957+
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig/"
958+
COMPONENT ${MODULE}_pkg_config)
948959
endfunction()
949960

950961
# Implementations of lisp "car" and "cdr" functions

cpp/cmake_modules/ThirdpartyToolchain.cmake

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,8 @@ function(provide_cmake_module MODULE_NAME ARROW_CMAKE_PACKAGE_NAME)
236236
message(STATUS "Providing CMake module for ${MODULE_NAME} as part of ${ARROW_CMAKE_PACKAGE_NAME} CMake package"
237237
)
238238
install(FILES "${module}"
239-
DESTINATION "${ARROW_CMAKE_DIR}/${ARROW_CMAKE_PACKAGE_NAME}")
239+
DESTINATION "${ARROW_CMAKE_DIR}/${ARROW_CMAKE_PACKAGE_NAME}"
240+
COMPONENT ${MODULE_NAME}_module)
240241
endif()
241242
endfunction()
242243

@@ -2442,20 +2443,22 @@ function(build_gtest)
24422443
endforeach()
24432444
install(DIRECTORY "${googletest_SOURCE_DIR}/googlemock/include/"
24442445
"${googletest_SOURCE_DIR}/googletest/include/"
2445-
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
2446+
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
2447+
COMPONENT gtest_dir)
24462448
add_library(arrow::GTest::gtest_headers INTERFACE IMPORTED)
24472449
target_include_directories(arrow::GTest::gtest_headers
24482450
INTERFACE "${googletest_SOURCE_DIR}/googlemock/include/"
24492451
"${googletest_SOURCE_DIR}/googletest/include/")
24502452
install(TARGETS gmock gmock_main gtest gtest_main
24512453
EXPORT arrow_testing_targets
2452-
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
2453-
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
2454-
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}")
2454+
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT gtest_runtime
2455+
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT gtest_archive
2456+
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT gtest_library)
24552457
if(MSVC)
24562458
install(FILES $<TARGET_PDB_FILE:gmock> $<TARGET_PDB_FILE:gmock_main>
24572459
$<TARGET_PDB_FILE:gtest> $<TARGET_PDB_FILE:gtest_main>
24582460
DESTINATION "${CMAKE_INSTALL_BINDIR}"
2461+
COMPONENT gtest_pdb
24592462
OPTIONAL)
24602463
endif()
24612464
add_library(arrow::GTest::gmock ALIAS gmock)

cpp/src/arrow/CMakeLists.txt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,8 @@ string(REPLACE "${CMAKE_BINARY_DIR}" "<CMAKE_BINARY_DIR>" REDACTED_CXX_FLAGS
349349
configure_file("util/config.h.cmake" "util/config.h" ESCAPE_QUOTES)
350350
configure_file("util/config_internal.h.cmake" "util/config_internal.h" ESCAPE_QUOTES)
351351
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/util/config.h"
352-
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/arrow/util")
352+
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/arrow/util"
353+
COMPONENT arrow_config)
353354

354355
set(ARROW_SRCS
355356
builder.cc
@@ -1044,7 +1045,8 @@ if(ARROW_BUILD_BUNDLED_DEPENDENCIES)
10441045
get_target_property(arrow_bundled_dependencies_path arrow_bundled_dependencies
10451046
IMPORTED_LOCATION)
10461047
install(FILES ${arrow_bundled_dependencies_path} ${INSTALL_IS_OPTIONAL}
1047-
DESTINATION ${CMAKE_INSTALL_LIBDIR})
1048+
DESTINATION ${CMAKE_INSTALL_LIBDIR}
1049+
COMPONENT arrow_bundled_dependencies)
10481050
string(PREPEND ARROW_PC_LIBS_PRIVATE " -larrow_bundled_dependencies")
10491051
list(INSERT ARROW_STATIC_INSTALL_INTERFACE_LIBS 0 "Arrow::arrow_bundled_dependencies")
10501052
endif()
@@ -1161,6 +1163,7 @@ if(ARROW_BUILD_SHARED AND NOT WIN32)
11611163
if(ARROW_GDB_AUTO_LOAD_LIBARROW_GDB_INSTALL)
11621164
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libarrow_gdb.py"
11631165
DESTINATION "${ARROW_GDB_AUTO_LOAD_LIBARROW_GDB_DIR}"
1166+
COMPONENT arrow_gdb
11641167
RENAME "$<TARGET_FILE_NAME:arrow_shared>-gdb.py")
11651168
endif()
11661169
endif()
@@ -1224,11 +1227,13 @@ arrow_install_all_headers("arrow")
12241227

12251228
config_summary_cmake_setters("${CMAKE_CURRENT_BINARY_DIR}/ArrowOptions.cmake")
12261229
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ArrowOptions.cmake
1227-
DESTINATION "${ARROW_CMAKE_DIR}/Arrow")
1230+
DESTINATION "${ARROW_CMAKE_DIR}/Arrow"
1231+
COMPONENT arrow_options_cmake)
12281232

12291233
# For backward compatibility for find_package(arrow)
12301234
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/arrow-config.cmake
1231-
DESTINATION "${ARROW_CMAKE_DIR}/Arrow")
1235+
DESTINATION "${ARROW_CMAKE_DIR}/Arrow"
1236+
COMPONENT arrow_config_cmake)
12321237

12331238
#
12341239
# Unit tests

cpp/src/arrow/flight/sql/odbc/CMakeLists.txt

Lines changed: 92 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,28 @@ add_subdirectory(tests)
3838

3939
arrow_install_all_headers("arrow/flight/sql/odbc")
4040

41+
# ODBC Release information
42+
set(ODBC_PACKAGE_VERSION_MAJOR "1")
43+
set(ODBC_PACKAGE_VERSION_MINOR "0")
44+
set(ODBC_PACKAGE_VERSION_PATCH "0")
45+
set(ODBC_PACKAGE_NAME "Apache Arrow Flight SQL ODBC")
46+
set(ODBC_PACKAGE_VENDOR "Apache Arrow")
47+
4148
set(ARROW_FLIGHT_SQL_ODBC_SRCS entry_points.cc odbc_api.cc)
4249

4350
if(WIN32)
44-
list(APPEND ARROW_FLIGHT_SQL_ODBC_SRCS odbc.def)
51+
set(VER_FILEVERSION
52+
"${ODBC_PACKAGE_VERSION_MAJOR},${ODBC_PACKAGE_VERSION_MINOR},${ODBC_PACKAGE_VERSION_PATCH},0"
53+
)
54+
set(VER_FILEVERSION_STR
55+
${ODBC_PACKAGE_VERSION_MAJOR}.${ODBC_PACKAGE_VERSION_MINOR}.${ODBC_PACKAGE_VERSION_PATCH}
56+
)
57+
set(VER_COMPANYNAME_STR ${ODBC_PACKAGE_VENDOR})
58+
set(VER_PRODUCTNAME_STR ${ODBC_PACKAGE_NAME})
59+
60+
configure_file("install/versioninfo.rc.in" "install/versioninfo.rc" @ONLY)
61+
62+
list(APPEND ARROW_FLIGHT_SQL_ODBC_SRCS odbc.def install/versioninfo.rc)
4563
endif()
4664

4765
add_arrow_lib(arrow_flight_sql_odbc
@@ -75,3 +93,76 @@ add_arrow_lib(arrow_flight_sql_odbc
7593
foreach(LIB_TARGET ${ARROW_FLIGHT_SQL_ODBC_LIBRARIES})
7694
target_compile_definitions(${LIB_TARGET} PRIVATE ARROW_FLIGHT_SQL_ODBC_EXPORTING)
7795
endforeach()
96+
97+
# Construct ODBC Windows installer. Only Release installer is supported
98+
if(ARROW_FLIGHT_SQL_ODBC_INSTALLER)
99+
100+
include(InstallRequiredSystemLibraries)
101+
102+
set(CPACK_RESOURCE_FILE_LICENSE
103+
"${CMAKE_CURRENT_SOURCE_DIR}/../../../../../../LICENSE.txt")
104+
# Tentative version 1.0.0
105+
set(CPACK_PACKAGE_VERSION_MAJOR ${ODBC_PACKAGE_VERSION_MAJOR})
106+
set(CPACK_PACKAGE_VERSION_MINOR ${ODBC_PACKAGE_VERSION_MINOR})
107+
set(CPACK_PACKAGE_VERSION_PATCH ${ODBC_PACKAGE_VERSION_PATCH})
108+
109+
set(CPACK_PACKAGE_NAME ${ODBC_PACKAGE_NAME})
110+
set(CPACK_PACKAGE_VENDOR ${ODBC_PACKAGE_VENDOR})
111+
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Apache Arrow Flight SQL ODBC Driver")
112+
set(CPACK_PACKAGE_CONTACT "#GH-47787 TODO arrow maintainers")
113+
114+
# GH-47876 TODO: set up `flight_sql_odbc_lib` component for macOS Installer
115+
# GH-47877 TODO: set up `flight_sql_odbc_lib` component for Linux Installer
116+
if(WIN32)
117+
install(DIRECTORY "${BUILD_OUTPUT_ROOT_DIRECTORY}${CMAKE_BUILD_TYPE}/"
118+
DESTINATION bin
119+
COMPONENT flight_sql_odbc_lib
120+
FILES_MATCHING
121+
# Use regex for dll name patterns with versions
122+
PATTERN "abseil_dll.dll"
123+
PATTERN "arrow.dll"
124+
PATTERN "arrow_compute.dll"
125+
PATTERN "arrow_flight.dll"
126+
PATTERN "arrow_flight_sql.dll"
127+
PATTERN "arrow_flight_sql_odbc.dll"
128+
PATTERN "boost_locale*.dll"
129+
PATTERN "cares.dll"
130+
PATTERN "libcrypto*.dll"
131+
PATTERN "libprotobuf.dll"
132+
PATTERN "libssl*.dll"
133+
PATTERN "re2.dll"
134+
PATTERN "utf8proc.dll"
135+
PATTERN "zlib1.dll")
136+
137+
set(CPACK_WIX_EXTRA_SOURCES
138+
"${CMAKE_CURRENT_SOURCE_DIR}/install/arrow-flight-sql-odbc.wxs")
139+
set(CPACK_WIX_PATCH_FILE
140+
"${CMAKE_CURRENT_SOURCE_DIR}/install/arrow-flight-sql-odbc-patch.xml")
141+
142+
set(CPACK_WIX_UI_BANNER "${CMAKE_CURRENT_SOURCE_DIR}/install/arrow-wix-banner.bmp")
143+
endif()
144+
145+
get_cmake_property(CPACK_COMPONENTS_ALL COMPONENTS)
146+
set(CPACK_COMPONENTS_ALL Unspecified)
147+
list(APPEND CPACK_COMPONENTS_ALL "flight_sql_odbc_lib")
148+
149+
if(WIN32)
150+
# WiX msi installer on Windows
151+
# CPack is compatible with WiX V.5 and V.6
152+
set(CPACK_GENERATOR "WIX")
153+
set(CPACK_WIX_VERSION 4)
154+
155+
# Upgrade GUID is required to be unchanged for ODBC installer to upgrade
156+
set(CPACK_WIX_UPGRADE_GUID "DBF27A18-F8BF-423F-9E3A-957414D52C4B")
157+
set(CPACK_WIX_PRODUCT_GUID "279D087B-93B5-4DC3-BA69-BCF485022A26")
158+
endif()
159+
# GH-47876 TODO: create macOS Installer using cpack
160+
# GH-47877 TODO: create Linux Installer using cpack
161+
162+
# Load CPack after all CPACK* variables are set
163+
include(CPack)
164+
cpack_add_component(flight_sql_odbc_lib
165+
DISPLAY_NAME "ODBC library"
166+
DESCRIPTION "ODBC library bin, required to install"
167+
REQUIRED)
168+
endif()
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
<!---
2+
Licensed to the Apache Software Foundation (ASF) under one
3+
or more contributor license agreements. See the NOTICE file
4+
distributed with this work for additional information
5+
regarding copyright ownership. The ASF licenses this file
6+
to you under the Apache License, Version 2.0 (the
7+
"License"); you may not use this file except in compliance
8+
with the License. You may obtain a copy of the License at
9+
10+
http://www.apache.org/licenses/LICENSE-2.0
11+
12+
Unless required by applicable law or agreed to in writing,
13+
software distributed under the License is distributed on an
14+
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
KIND, either express or implied. See the License for the
16+
specific language governing permissions and limitations
17+
under the License.
18+
-->
19+
20+
## Steps to Register the 64-bit Apache Arrow ODBC driver on Windows
21+
22+
After the build succeeds, the ODBC DLL will be located in
23+
`build\debug\Debug` for a debug build and `build\release\Release` for a release build.
24+
25+
1. Open Windows Power Shell as administrator.
26+
27+
2. Register your ODBC DLL:
28+
Need to replace <path\to\repo> with actual path to repository in the commands.
29+
30+
i. `cd to repo.`
31+
ii. `cd <path\to\repo>`
32+
iii. Run script to register your ODBC DLL as Apache Arrow Flight SQL ODBC Driver
33+
`.\cpp\src\arrow\flight\sql\odbc\tests\install_odbc.cmd <path\to\repo>\cpp\build\< release | debug >\< Release | Debug>\arrow_flight_sql_odbc.dll`
34+
Example command for reference:
35+
`.\cpp\src\arrow\flight\sql\odbc\tests\install_odbc.cmd C:\path\to\arrow\cpp\build\release\Release\arrow_flight_sql_odbc.dll`
36+
37+
If the registration is successful, then Apache Arrow Flight SQL ODBC Driver
38+
should show as an available ODBC driver in the x64 ODBC Driver Manager.
39+
40+
## Steps to Generate Windows Installer
41+
1. Install WiX toolset v6 from [GitHub](https://github.com/wixtoolset/wix/releases/).
42+
2. Build with `ARROW_FLIGHT_SQL_ODBC=ON` and `ARROW_FLIGHT_SQL_ODBC_INSTALLER=ON`.
43+
3. `cd` to `build` folder.
44+
4. Run `cpack`.
45+
46+
If the generation is successful, you will find `Apache Arrow Flight SQL ODBC-<version>-win64.msi` generated under the `build` folder.
47+
48+
49+
## Steps to Enable Logging
50+
Arrow Flight SQL ODBC driver uses Arrow's internal logging framework. By default, the log messages are printed to the terminal.
51+
1. Set environment variable `ARROW_ODBC_LOG_LEVEL` to any of the following valid values to enable logging. If `ARROW_ODBC_LOG_LEVEL` is set to a non-empty string that does not match any of the following values, `DEBUG` level is used by default.
52+
53+
The characters are case-insensitive.
54+
- TRACE
55+
- DEBUG
56+
- INFO
57+
- WARNING
58+
- ERROR
59+
- FATAL
60+
61+
The Windows ODBC driver currently does not support writing log files. `ARROW_USE_GLOG` is required to write log files, and `ARROW_USE_GLOG` is disabled on Windows platform since plasma using `glog` is not fully tested on windows.
62+
63+
Note: GH-47670 running more than 1 tests with logging enabled is not fully supported.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<!--
2+
Licensed to the Apache Software Foundation (ASF) under one or more
3+
contributor license agreements. See the NOTICE file distributed with
4+
this work for additional information regarding copyright ownership.
5+
The ASF licenses this file to You under the Apache License, Version 2.0
6+
(the "License"); you may not use this file except in compliance with
7+
the License. You may obtain a copy of the License at
8+
9+
http://www.apache.org/licenses/LICENSE-2.0
10+
11+
Unless required by applicable law or agreed to in writing, software
12+
distributed under the License is distributed on an "AS IS" BASIS,
13+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
See the License for the specific language governing permissions and
15+
limitations under the License.
16+
-->
17+
18+
<CPackWiXPatch>
19+
<CPackWiXFragment Id="#PRODUCTFEATURE">
20+
<ComponentRef Id="ODBCRegistryEntries"/>
21+
</CPackWiXFragment>
22+
</CPackWiXPatch>

0 commit comments

Comments
 (0)