Skip to content

Commit ce5c956

Browse files
committed
Extract ODBC installer
Need to add `component` to other parts to be able to select the ODBC components Co-Authored-By: alinalibq <[email protected]>
1 parent 42f27ab commit ce5c956

File tree

13 files changed

+247
-15
lines changed

13 files changed

+247
-15
lines changed

.github/workflows/cpp.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@ jobs:
311311
ARROW_FLIGHT: ON
312312
ARROW_FLIGHT_SQL: ON
313313
ARROW_FLIGHT_SQL_ODBC: ON
314+
ARROW_FLIGHT_SQL_ODBC_INSTALLER: ON
314315
ARROW_GANDIVA: ON
315316
ARROW_GCS: ON
316317
ARROW_HDFS: OFF

.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
@@ -214,6 +214,7 @@ else
214214
-DARROW_FLIGHT=${ARROW_FLIGHT:-OFF} \
215215
-DARROW_FLIGHT_SQL=${ARROW_FLIGHT_SQL:-OFF} \
216216
-DARROW_FLIGHT_SQL_ODBC=${ARROW_FLIGHT_SQL_ODBC:-OFF} \
217+
-DARROW_FLIGHT_SQL_ODBC_INSTALLER=${ARROW_FLIGHT_SQL_ODBC_INSTALLER:-OFF} \
217218
-DARROW_FUZZING=${ARROW_FUZZING:-OFF} \
218219
-DARROW_GANDIVA_PC_CXX_FLAGS=${ARROW_GANDIVA_PC_CXX_FLAGS:-} \
219220
-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
@@ -179,6 +179,7 @@
179179
"ARROW_BUILD_EXAMPLES": "ON",
180180
"ARROW_BUILD_UTILITIES": "ON",
181181
"ARROW_FLIGHT_SQL_ODBC": "ON",
182+
"ARROW_FLIGHT_SQL_ODBC_INSTALLER": "ON",
182183
"ARROW_TENSORFLOW": "ON",
183184
"PARQUET_BUILD_EXAMPLES": "ON",
184185
"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

@@ -2394,20 +2395,22 @@ function(build_gtest)
23942395
endforeach()
23952396
install(DIRECTORY "${googletest_SOURCE_DIR}/googlemock/include/"
23962397
"${googletest_SOURCE_DIR}/googletest/include/"
2397-
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
2398+
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
2399+
COMPONENT gtest_dir)
23982400
add_library(arrow::GTest::gtest_headers INTERFACE IMPORTED)
23992401
target_include_directories(arrow::GTest::gtest_headers
24002402
INTERFACE "${googletest_SOURCE_DIR}/googlemock/include/"
24012403
"${googletest_SOURCE_DIR}/googletest/include/")
24022404
install(TARGETS gmock gmock_main gtest gtest_main
24032405
EXPORT arrow_testing_targets
2404-
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
2405-
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
2406-
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}")
2406+
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT gtest_runtime
2407+
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT gtest_archive
2408+
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT gtest_library)
24072409
if(MSVC)
24082410
install(FILES $<TARGET_PDB_FILE:gmock> $<TARGET_PDB_FILE:gmock_main>
24092411
$<TARGET_PDB_FILE:gtest> $<TARGET_PDB_FILE:gtest_main>
24102412
DESTINATION "${CMAKE_INSTALL_BINDIR}"
2413+
COMPONENT gtest_pdb
24112414
OPTIONAL)
24122415
endif()
24132416
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
@@ -345,7 +345,8 @@ endmacro()
345345
configure_file("util/config.h.cmake" "util/config.h" ESCAPE_QUOTES)
346346
configure_file("util/config_internal.h.cmake" "util/config_internal.h" ESCAPE_QUOTES)
347347
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/util/config.h"
348-
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/arrow/util")
348+
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/arrow/util"
349+
COMPONENT arrow_config)
349350

350351
set(ARROW_SRCS
351352
builder.cc
@@ -1039,7 +1040,8 @@ if(ARROW_BUILD_BUNDLED_DEPENDENCIES)
10391040
get_target_property(arrow_bundled_dependencies_path arrow_bundled_dependencies
10401041
IMPORTED_LOCATION)
10411042
install(FILES ${arrow_bundled_dependencies_path} ${INSTALL_IS_OPTIONAL}
1042-
DESTINATION ${CMAKE_INSTALL_LIBDIR})
1043+
DESTINATION ${CMAKE_INSTALL_LIBDIR}
1044+
COMPONENT arrow_bundled_dependencies)
10431045
string(PREPEND ARROW_PC_LIBS_PRIVATE " -larrow_bundled_dependencies")
10441046
list(INSERT ARROW_STATIC_INSTALL_INTERFACE_LIBS 0 "Arrow::arrow_bundled_dependencies")
10451047
endif()
@@ -1156,6 +1158,7 @@ if(ARROW_BUILD_SHARED AND NOT WIN32)
11561158
if(ARROW_GDB_AUTO_LOAD_LIBARROW_GDB_INSTALL)
11571159
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libarrow_gdb.py"
11581160
DESTINATION "${ARROW_GDB_AUTO_LOAD_LIBARROW_GDB_DIR}"
1161+
COMPONENT arrow_gdb
11591162
RENAME "$<TARGET_FILE_NAME:arrow_shared>-gdb.py")
11601163
endif()
11611164
endif()
@@ -1219,11 +1222,13 @@ arrow_install_all_headers("arrow")
12191222

12201223
config_summary_cmake_setters("${CMAKE_CURRENT_BINARY_DIR}/ArrowOptions.cmake")
12211224
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ArrowOptions.cmake
1222-
DESTINATION "${ARROW_CMAKE_DIR}/Arrow")
1225+
DESTINATION "${ARROW_CMAKE_DIR}/Arrow"
1226+
COMPONENT arrow_options_cmake)
12231227

12241228
# For backward compatibility for find_package(arrow)
12251229
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/arrow-config.cmake
1226-
DESTINATION "${ARROW_CMAKE_DIR}/Arrow")
1230+
DESTINATION "${ARROW_CMAKE_DIR}/Arrow"
1231+
COMPONENT arrow_config_cmake)
12271232

12281233
#
12291234
# Unit tests

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

Lines changed: 91 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,75 @@ 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+
endif()
158+
# GH-47876 TODO: create macOS Installer using cpack
159+
# GH-47877 TODO: create Linux Installer using cpack
160+
161+
# Load CPack after all CPACK* variables are set
162+
include(CPack)
163+
cpack_add_component(flight_sql_odbc_lib
164+
DISPLAY_NAME "ODBC library"
165+
DESCRIPTION "ODBC library bin, required to install"
166+
REQUIRED)
167+
endif()
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)