Skip to content

Commit a1cb687

Browse files
committed
BDX-1340: Package Parquet from the existing Arrow dependency pair
1 parent 7c673d7 commit a1cb687

4 files changed

Lines changed: 104 additions & 2 deletions

File tree

‎ci/scripts/jni_build.sh‎

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,81 @@ else
8787
mv "${prefix_dir}"/lib/* "${dist_dir}"/
8888
fi
8989
github_actions_group_end
90+
91+
if [ -n "${5:-}" ]; then
92+
github_actions_group_begin "Stage Arrow Parquet release libraries"
93+
case "$(uname)" in
94+
Linux) os=linux ;;
95+
Darwin) os=osx ;;
96+
esac
97+
arch=$(uname -m)
98+
case "${arch}" in
99+
arm64 | aarch64) arch=aarch_64 ;;
100+
esac
101+
package_dir="${dist_dir}/arrow_parquet/${os}-${arch}"
102+
mkdir -p "${package_dir}/lib/pkgconfig" "${package_dir}/META-INF"
103+
cp -R "${arrow_install_dir}/include" "${package_dir}/"
104+
cp "${5}/LICENSE.txt" "${package_dir}/META-INF/LICENSE"
105+
cp "${5}/NOTICE.txt" "${package_dir}/META-INF/NOTICE"
106+
git -c safe.directory="${5}" -C "${5}" rev-parse HEAD >"${package_dir}/ARROW_CPP_REVISION"
107+
parquet_metadata=$(find "${arrow_install_dir}" -type f -name parquet.pc -print -quit)
108+
if [ -z "${parquet_metadata}" ]; then
109+
echo "Missing installed Parquet pkg-config metadata" >&2
110+
exit 1
111+
fi
112+
export PKG_CONFIG_PATH="$(dirname "${parquet_metadata}"):${6:+${6}:}${PKG_CONFIG_PATH:-}"
113+
library_flags=$(pkg-config --static --libs-only-L parquet arrow-compute)
114+
read -ra library_dirs <<<"${library_flags}"
115+
library_flags=$(pkg-config --static --libs parquet arrow-compute)
116+
read -ra libraries <<<"${library_flags}"
117+
cpp_version=$(pkg-config --modversion parquet)
118+
link_flags=()
119+
for flag in "${libraries[@]}"; do
120+
case "${flag}" in
121+
-L*) continue ;;
122+
-lc | -lm | -ldl | -lpthread | -lrt | -lstdc++ | -lc++ | -lresolv)
123+
link_flags+=("${flag}")
124+
continue
125+
;;
126+
-l*)
127+
archive=""
128+
for directory in "${library_dirs[@]}"; do
129+
candidate="${directory#-L}/lib${flag#-l}.a"
130+
if [ -f "${candidate}" ]; then
131+
archive="${candidate}"
132+
break
133+
fi
134+
done
135+
if [ -z "${archive}" ]; then
136+
archive=$(c++ -print-file-name="lib${flag#-l}.a")
137+
fi
138+
if [ ! -f "${archive}" ]; then
139+
if [ "${os}" = osx ] && [[ "${flag}" = -lz || "${flag}" = -lcurl ]]; then
140+
link_flags+=("${flag}")
141+
continue
142+
fi
143+
echo "Missing static dependency: ${flag}" >&2
144+
exit 1
145+
fi
146+
cp "${archive}" "${package_dir}/lib/"
147+
;;
148+
*.a)
149+
cp "${flag}" "${package_dir}/lib/"
150+
archive_name=$(basename "${flag}" .a)
151+
flag="-l${archive_name#lib}"
152+
;;
153+
esac
154+
link_flags+=("${flag}")
155+
done
156+
cat >"${package_dir}/lib/pkgconfig/arrow-parquet.pc" <<EOF
157+
prefix=\${pcfiledir}/../..
158+
libdir=\${prefix}/lib
159+
includedir=\${prefix}/include
160+
Name: Arrow Parquet
161+
Description: Static Arrow C++ Parquet libraries (requires C++20 for Arrow 23)
162+
Version: ${cpp_version}
163+
Libs: -L\${libdir} ${link_flags[*]}
164+
Cflags: -I\${includedir} -DARROW_STATIC -DARROW_COMPUTE_STATIC -DPARQUET_STATIC
165+
EOF
166+
github_actions_group_end
167+
fi

‎ci/scripts/jni_full_build.sh‎

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,28 @@ github_actions_group_end
8585
popd
8686

8787
github_actions_group_begin "Prepare artifacts"
88+
version=$(python3 -c 'import sys, xml.etree.ElementTree as ET; print(ET.parse(sys.argv[1]).getroot().find("{http://maven.apache.org/POM/4.0.0}version").text)' "${source_dir}/pom.xml")
89+
parquet_artifact="${dist_dir}/arrow-parquet-${version}"
90+
for platform in linux-x86_64 linux-aarch_64 osx-aarch_64; do
91+
package_dir="${jni_build_dir}/arrow_parquet/${platform}"
92+
test -f "${package_dir}/lib/pkgconfig/arrow-parquet.pc"
93+
cmp "${jni_build_dir}/arrow_parquet/linux-x86_64/ARROW_CPP_REVISION" "${package_dir}/ARROW_CPP_REVISION"
94+
jar cf "${parquet_artifact}-${platform}.jar" -C "${package_dir}" .
95+
done
96+
jar cf "${parquet_artifact}.jar" -C "${package_dir}" META-INF -C "${package_dir}" ARROW_CPP_REVISION
97+
cat >"${parquet_artifact}.pom" <<EOF
98+
<project xmlns="http://maven.apache.org/POM/4.0.0">
99+
<modelVersion>4.0.0</modelVersion>
100+
<groupId>org.apache.arrow</groupId>
101+
<artifactId>arrow-parquet</artifactId>
102+
<version>${version}</version>
103+
<packaging>jar</packaging>
104+
<name>Arrow Parquet</name>
105+
<licenses><license><name>Apache License, Version 2.0</name>
106+
<url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
107+
</license></licenses>
108+
</project>
109+
EOF
88110
# copy all jar, zip and pom files to the distribution folder
89111
find ~/.m2/repository/org/apache/arrow \
90112
"(" \

‎ci/scripts/jni_macos_build.sh‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,8 @@ export JAVA_JNI_CMAKE_ARGS="${jni_cmake_args}"
208208
"${source_dir}" \
209209
"${install_dir}" \
210210
"${build_dir}" \
211-
"${dist_dir}"
211+
"${dist_dir}" "${arrow_dir}" \
212+
"${VCPKG_ROOT_LOCAL:+${VCPKG_ROOT_LOCAL}/installed/${vcpkg_triplet}/lib/pkgconfig}"
212213

213214
if [ "${ARROW_USE_CCACHE}" == "ON" ]; then
214215
github_actions_group_begin "ccache statistics after build"

‎ci/scripts/jni_manylinux_build.sh‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,8 @@ export JAVA_JNI_CMAKE_ARGS
103103
"${source_dir}" \
104104
"${install_dir}" \
105105
"${build_dir}" \
106-
"${dist_dir}"
106+
"${dist_dir}" "${arrow_dir}" \
107+
"${VCPKG_ROOT}/installed/${VCPKG_TARGET_TRIPLET}/lib/pkgconfig"
107108

108109
if [ "${ARROW_USE_CCACHE}" == "ON" ]; then
109110
github_actions_group_begin "ccache statistics after build"

0 commit comments

Comments
 (0)