ARROW-5370: [C++] Use system uriparser if available - #4525

Closed
wesm wants to merge 10 commits into
apache:masterfrom
wesm:ARROW-5370
Closed

ARROW-5370: [C++] Use system uriparser if available#4525
wesm wants to merge 10 commits into
apache:masterfrom
wesm:ARROW-5370

Conversation

@wesm

@wesmwesm commented Jun 12, 2019

Copy link
Copy Markdown
Member

This change will use uriparser >= 0.9.0 (found via pkgconfig) if it is available in the system toolchain, otherwise it will build from source. Using the SYSTEM method it will not fail for now if the version is not new enough given that the version we require is too new for many Linux distributions. We can look into supporting older uriparser some other time

@wesm
wesm requested a review from kouJune 12, 2019 02:03
@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

I tried this on Debian strecth. Debian stretch ships uriparser 0.8.4 https://packages.debian.org/search?suite=default&section=all&arch=any&searchon=names&keywords=uriparser

We use uriparser 0.9.0 API, uriParseSingleUriExA, here: https://github.com/apache/arrow/blob/master/cpp/src/arrow/util/uri.cc#L131
So we can't use uriparser 0.8.4.

I need the following patch to confirm this change:

diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 0841767e..ee0e24d4 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake@@ -56,6 +56,7 @@ set(ARROW_THIRDPARTY_DEPENDENCIES
RapidJSON
Snappy
Thrift
+ uriparser
ZLIB
ZSTD)
@@ -597,7 +598,7 @@ if(ARROW_WITH_URIPARSER)
endmacro()
if("${uriparser_SOURCE}" STREQUAL "AUTO")
- pkg_check_modules(URIPARSER_PC liburiparser)+ pkg_check_modules(URIPARSER_PC "liburiparser >= 0.9.0")
if(URIPARSER_PC_FOUND)
set(URIPARSER_INCLUDE_DIR "${URIPARSER_PC_INCLUDEDIR}")
list(APPEND URIPARSER_PC_LIBRARY_DIRS "${URIPARSER_PC_LIBDIR}")

+1 with this patch.

@wesm

wesm commented Jun 12, 2019

Copy link
Copy Markdown
MemberAuthor

OK, thanks, I'll incorporate this change.

@wesm
wesm marked this pull request as ready for review June 12, 2019 20:35
@wesm

wesm commented Jun 12, 2019

Copy link
Copy Markdown
MemberAuthor

@kou done. I'll merge once the build look ok

@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

Ah, sorry. Please wait.
I'm trying this with MinGW. It seems that liburiparser.pc in MSYS2 is broken. There is no version information:

prefix=/mingw64
exec_prefix=/mingw64
libdir=/mingw64/lib
includedir=/mingw64/include
Name: liburiparser
Description: URI parsing and handling library
Version: URL: https://uriparser.github.io/
Libs: -L${libdir} -luriparser
Cflags: -I${includedir}

uriparser package in MSYS2 provides files for CMake:

ls /mingw64/lib/cmake/uriparser-0.9.2/
uriparser-release.cmake
uriparser.cmake

So the following logic is better like we did for other packages:

find_package(uriparser)
if(NOT uriparser_FOUND)
pkg_check_modules(...)
...endif()

Note that uriparser package in Debian doesn't provide files for CMake yet.

@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

Wow! We already have cpp/cmake_modules/Finduriparser.cmake. We should use this.

@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

I didn't try yet but something the following will be better. (Finduriparser.cmake is renamed to FinduriparserAlt.cmake)

diff --git a/cpp/cmake_modules/Finduriparser.cmake b/cpp/cmake_modules/FinduriparserAlt.cmake
similarity index 85%
rename from cpp/cmake_modules/Finduriparser.cmake
rename to cpp/cmake_modules/FinduriparserAlt.cmake
index a24cca47..95a9a7fe 100644
--- a/cpp/cmake_modules/Finduriparser.cmake+++ b/cpp/cmake_modules/FinduriparserAlt.cmake@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
-pkg_check_modules(uriparser_PC liburiparser)+pkg_check_modules(uriparser_PC "liburiparser >= 0.9.0")
if(uriparser_PC_FOUND)
set(uriparser_INCLUDE_DIR "${uriparser_PC_INCLUDEDIR}")
@@ -43,11 +43,13 @@ else()
find_path(uriparser_INCLUDE_DIR NAMES uriparser/Uri.h PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
endif()
-find_package_handle_standard_args(uriparser REQUIRED_VARS uriparser_LIB uriparser_INCLUDE_DIR)+find_package_handle_standard_args(uriparserAlt REQUIRED_VARS uriparser_LIB uriparser_INCLUDE_DIR)-if(uriparser_FOUND)+if(uriparserAlt_FOUND)
add_library(uriparser::uriparser UNKNOWN IMPORTED)
set_target_properties(uriparser::uriparser
PROPERTIES IMPORTED_LOCATION "${uriparser_LIB}"
- INTERFACE_INCLUDE_DIRECTORIES "${uriparser_INCLUDE_DIR}")+ INTERFACE_INCLUDE_DIRECTORIES "${uriparser_INCLUDE_DIR}"+ # URI_STATIC_BUILD required on Windows+ INTERFACE_COMPILE_DEFINITIONS "URI_NO_UNICODE")
endif()
diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 1fe04d79..8ad14b3c 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake@@ -590,9 +590,23 @@ macro(build_uriparser)
endmacro()
if(ARROW_WITH_URIPARSER)
- # Unless the user overrides uriparser_SOURCE, build uriparser ourselves- if("${uriparser_SOURCE}" STREQUAL "")- set(uriparser_SOURCE "BUNDLED")+ if(uriparser_SOURCE STREQUAL "AUTO")+ find_package(uriparser QUIET)+ if(NOT uriparser_FOUND)+ # Ubuntu doesn't package the CMake config+ find_package(uriparserAlt)+ endif()+ if(NOT uriparser_FOUND AND NOT uriparserAlt_FOUND)+ build_uriparser()+ endif()+ elseif(uriparser_SOURCE STREQUAL "BUNDLED")+ build_uriparser()+ elseif(uriparser_SOURCE STREQUAL "SYSTEM")+ find_package(uriparser QUIET)+ if(NOT uriparser_FOUND)+ # Ubuntu doesn't package the CMake config+ find_package(uriparserAlt REQUIRED)+ endif()
endif()
resolve_dependency(uriparser)

@wesm

wesm commented Jun 12, 2019

Copy link
Copy Markdown
MemberAuthor

Oh okay. Do you want to take over this PR and push the commits here? I didn't realize we had the CMake file

@kou

kou commented Jun 13, 2019

Copy link
Copy Markdown
Member

OK. I take over this.

@codecov-io

Copy link
Copy Markdown

Codecov Report

Merging #4525 into master will increase coverage by 0.41%.
The diff coverage is n/a.

Impacted file tree graph

@@ Coverage Diff @@## master #4525 +/- ##
==========================================
+ Coverage 88.16% 88.58% +0.41% 
==========================================
Files 852 860 +8 Lines 106398 108022 +1624 Branches 1253 1253 ==========================================
+ Hits 93806 95691 +1885 + Misses 12347 12052 -295 - Partials 245 279 +34
Impacted FilesCoverage Δ
go/arrow/datatype_fixedwidth.go13.15% <0%> (-6.08%)⬇️
cpp/src/arrow/vendored/datetime/date.h26.35% <0%> (-4.28%)⬇️
go/arrow/array/boolean.go88.88% <0%> (-4.22%)⬇️
r/R/array.R72% <0%> (-4%)⬇️
python/pyarrow/lib.pyx97.82% <0%> (-2.18%)⬇️
go/arrow/array/binary.go86.2% <0%> (-2.03%)⬇️
cpp/src/arrow/json/chunked-builder.cc81.58% <0%> (-1.26%)⬇️
cpp/src/arrow/ipc/writer.cc93.04% <0%> (-1.15%)⬇️
python/pyarrow/tests/test_flight.py79.26% <0%> (-0.82%)⬇️
cpp/src/arrow/array.cc90.43% <0%> (-0.21%)⬇️
... and 69 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 4ea86ff...5a06e06. Read the comment docs.

@kou

kou commented Jun 17, 2019

Copy link
Copy Markdown
Member

GLib CI failure on macOS is unrelated.
I'll merge this.

@koukou closed this in e1aebf6Jun 17, 2019
@wesm

wesm commented Jun 17, 2019

Copy link
Copy Markdown
MemberAuthor

This patch is breaking my local builds (Ubuntu 19.04)

-- Performing Test DOUBLE_CONVERSION_HAS_CASE_INSENSIBILITY - Failed
CMake Error at /home/wesm/miniconda/envs/arrow-3.7/share/cmake-3.14/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
Could NOT find uriparserAlt (missing: uriparser_LIB uriparser_INCLUDE_DIR)
(Required is at least version "0.9.0")
Call Stack (most recent call first):
/home/wesm/miniconda/envs/arrow-3.7/share/cmake-3.14/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
cmake_modules/FinduriparserAlt.cmake:81 (find_package_handle_standard_args)
cmake_modules/ThirdpartyToolchain.cmake:773 (find_package)
CMakeLists.txt:374 (include)
-- Configuring incomplete, errors occurred!
See also "/home/wesm/code/arrow/cpp/build/CMakeFiles/CMakeOutput.log".
See also "/home/wesm/code/arrow/cpp/build/CMakeFiles/CMakeError.log".

@wesm

wesm commented Jun 17, 2019

Copy link
Copy Markdown
MemberAuthor

The issue is that I'm using ARROW_DEPENDENCY_SOURCE=SYSTEM with a custom package prefix, and uriparser is not available in conda-forge. I'll have to pass -Duriparser_SOURCE=BUNDLED until this is remedied. I expect this is going to break our conda packages @kszucs

@kou

kou commented Jun 17, 2019

Copy link
Copy Markdown
Member

OK. You can use ARROW_DEPENDENCY_SOURCE=CONDA for your use case. This patch includes workaround for ARROW_DEPENDENCY_SOURCE=CONDA: https://github.com/apache/arrow/pull/4525/files#diff-2420b0c5b6bdad921f1d538f92d64b59R81

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@wesm@kou@codecov-io@fsaintjacques
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); (function(){ try { var __m = "github.com"; var __re = new RegExp('^' + "github\\.com" + '
Skip to content

ARROW-5370: [C++] Use system uriparser if available - #4525

Closed
wesm wants to merge 10 commits into
apache:masterfrom
wesm:ARROW-5370
Closed

ARROW-5370: [C++] Use system uriparser if available#4525
wesm wants to merge 10 commits into
apache:masterfrom
wesm:ARROW-5370

Conversation

@wesm

@wesmwesm commented Jun 12, 2019

Copy link
Copy Markdown
Member

This change will use uriparser >= 0.9.0 (found via pkgconfig) if it is available in the system toolchain, otherwise it will build from source. Using the SYSTEM method it will not fail for now if the version is not new enough given that the version we require is too new for many Linux distributions. We can look into supporting older uriparser some other time

@wesm
wesm requested a review from kouJune 12, 2019 02:03
@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

I tried this on Debian strecth. Debian stretch ships uriparser 0.8.4 https://packages.debian.org/search?suite=default&section=all&arch=any&searchon=names&keywords=uriparser

We use uriparser 0.9.0 API, uriParseSingleUriExA, here: https://github.com/apache/arrow/blob/master/cpp/src/arrow/util/uri.cc#L131
So we can't use uriparser 0.8.4.

I need the following patch to confirm this change:

diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 0841767e..ee0e24d4 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake@@ -56,6 +56,7 @@ set(ARROW_THIRDPARTY_DEPENDENCIES
RapidJSON
Snappy
Thrift
+ uriparser
ZLIB
ZSTD)
@@ -597,7 +598,7 @@ if(ARROW_WITH_URIPARSER)
endmacro()
if("${uriparser_SOURCE}" STREQUAL "AUTO")
- pkg_check_modules(URIPARSER_PC liburiparser)+ pkg_check_modules(URIPARSER_PC "liburiparser >= 0.9.0")
if(URIPARSER_PC_FOUND)
set(URIPARSER_INCLUDE_DIR "${URIPARSER_PC_INCLUDEDIR}")
list(APPEND URIPARSER_PC_LIBRARY_DIRS "${URIPARSER_PC_LIBDIR}")

+1 with this patch.

@wesm

wesm commented Jun 12, 2019

Copy link
Copy Markdown
MemberAuthor

OK, thanks, I'll incorporate this change.

@wesm
wesm marked this pull request as ready for review June 12, 2019 20:35
@wesm

wesm commented Jun 12, 2019

Copy link
Copy Markdown
MemberAuthor

@kou done. I'll merge once the build look ok

@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

Ah, sorry. Please wait.
I'm trying this with MinGW. It seems that liburiparser.pc in MSYS2 is broken. There is no version information:

prefix=/mingw64
exec_prefix=/mingw64
libdir=/mingw64/lib
includedir=/mingw64/include
Name: liburiparser
Description: URI parsing and handling library
Version: URL: https://uriparser.github.io/
Libs: -L${libdir} -luriparser
Cflags: -I${includedir}

uriparser package in MSYS2 provides files for CMake:

ls /mingw64/lib/cmake/uriparser-0.9.2/
uriparser-release.cmake
uriparser.cmake

So the following logic is better like we did for other packages:

find_package(uriparser)
if(NOT uriparser_FOUND)
pkg_check_modules(...)
...endif()

Note that uriparser package in Debian doesn't provide files for CMake yet.

@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

Wow! We already have cpp/cmake_modules/Finduriparser.cmake. We should use this.

@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

I didn't try yet but something the following will be better. (Finduriparser.cmake is renamed to FinduriparserAlt.cmake)

diff --git a/cpp/cmake_modules/Finduriparser.cmake b/cpp/cmake_modules/FinduriparserAlt.cmake
similarity index 85%
rename from cpp/cmake_modules/Finduriparser.cmake
rename to cpp/cmake_modules/FinduriparserAlt.cmake
index a24cca47..95a9a7fe 100644
--- a/cpp/cmake_modules/Finduriparser.cmake+++ b/cpp/cmake_modules/FinduriparserAlt.cmake@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
-pkg_check_modules(uriparser_PC liburiparser)+pkg_check_modules(uriparser_PC "liburiparser >= 0.9.0")
if(uriparser_PC_FOUND)
set(uriparser_INCLUDE_DIR "${uriparser_PC_INCLUDEDIR}")
@@ -43,11 +43,13 @@ else()
find_path(uriparser_INCLUDE_DIR NAMES uriparser/Uri.h PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
endif()
-find_package_handle_standard_args(uriparser REQUIRED_VARS uriparser_LIB uriparser_INCLUDE_DIR)+find_package_handle_standard_args(uriparserAlt REQUIRED_VARS uriparser_LIB uriparser_INCLUDE_DIR)-if(uriparser_FOUND)+if(uriparserAlt_FOUND)
add_library(uriparser::uriparser UNKNOWN IMPORTED)
set_target_properties(uriparser::uriparser
PROPERTIES IMPORTED_LOCATION "${uriparser_LIB}"
- INTERFACE_INCLUDE_DIRECTORIES "${uriparser_INCLUDE_DIR}")+ INTERFACE_INCLUDE_DIRECTORIES "${uriparser_INCLUDE_DIR}"+ # URI_STATIC_BUILD required on Windows+ INTERFACE_COMPILE_DEFINITIONS "URI_NO_UNICODE")
endif()
diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 1fe04d79..8ad14b3c 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake@@ -590,9 +590,23 @@ macro(build_uriparser)
endmacro()
if(ARROW_WITH_URIPARSER)
- # Unless the user overrides uriparser_SOURCE, build uriparser ourselves- if("${uriparser_SOURCE}" STREQUAL "")- set(uriparser_SOURCE "BUNDLED")+ if(uriparser_SOURCE STREQUAL "AUTO")+ find_package(uriparser QUIET)+ if(NOT uriparser_FOUND)+ # Ubuntu doesn't package the CMake config+ find_package(uriparserAlt)+ endif()+ if(NOT uriparser_FOUND AND NOT uriparserAlt_FOUND)+ build_uriparser()+ endif()+ elseif(uriparser_SOURCE STREQUAL "BUNDLED")+ build_uriparser()+ elseif(uriparser_SOURCE STREQUAL "SYSTEM")+ find_package(uriparser QUIET)+ if(NOT uriparser_FOUND)+ # Ubuntu doesn't package the CMake config+ find_package(uriparserAlt REQUIRED)+ endif()
endif()
resolve_dependency(uriparser)

@wesm

wesm commented Jun 12, 2019

Copy link
Copy Markdown
MemberAuthor

Oh okay. Do you want to take over this PR and push the commits here? I didn't realize we had the CMake file

@kou

kou commented Jun 13, 2019

Copy link
Copy Markdown
Member

OK. I take over this.

@codecov-io

Copy link
Copy Markdown

Codecov Report

Merging #4525 into master will increase coverage by 0.41%.
The diff coverage is n/a.

Impacted file tree graph

@@ Coverage Diff @@## master #4525 +/- ##
==========================================
+ Coverage 88.16% 88.58% +0.41% 
==========================================
Files 852 860 +8 Lines 106398 108022 +1624 Branches 1253 1253 ==========================================
+ Hits 93806 95691 +1885 + Misses 12347 12052 -295 - Partials 245 279 +34
Impacted FilesCoverage Δ
go/arrow/datatype_fixedwidth.go13.15% <0%> (-6.08%)⬇️
cpp/src/arrow/vendored/datetime/date.h26.35% <0%> (-4.28%)⬇️
go/arrow/array/boolean.go88.88% <0%> (-4.22%)⬇️
r/R/array.R72% <0%> (-4%)⬇️
python/pyarrow/lib.pyx97.82% <0%> (-2.18%)⬇️
go/arrow/array/binary.go86.2% <0%> (-2.03%)⬇️
cpp/src/arrow/json/chunked-builder.cc81.58% <0%> (-1.26%)⬇️
cpp/src/arrow/ipc/writer.cc93.04% <0%> (-1.15%)⬇️
python/pyarrow/tests/test_flight.py79.26% <0%> (-0.82%)⬇️
cpp/src/arrow/array.cc90.43% <0%> (-0.21%)⬇️
... and 69 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 4ea86ff...5a06e06. Read the comment docs.

@kou

kou commented Jun 17, 2019

Copy link
Copy Markdown
Member

GLib CI failure on macOS is unrelated.
I'll merge this.

@koukou closed this in e1aebf6Jun 17, 2019
@wesm

wesm commented Jun 17, 2019

Copy link
Copy Markdown
MemberAuthor

This patch is breaking my local builds (Ubuntu 19.04)

-- Performing Test DOUBLE_CONVERSION_HAS_CASE_INSENSIBILITY - Failed
CMake Error at /home/wesm/miniconda/envs/arrow-3.7/share/cmake-3.14/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
Could NOT find uriparserAlt (missing: uriparser_LIB uriparser_INCLUDE_DIR)
(Required is at least version "0.9.0")
Call Stack (most recent call first):
/home/wesm/miniconda/envs/arrow-3.7/share/cmake-3.14/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
cmake_modules/FinduriparserAlt.cmake:81 (find_package_handle_standard_args)
cmake_modules/ThirdpartyToolchain.cmake:773 (find_package)
CMakeLists.txt:374 (include)
-- Configuring incomplete, errors occurred!
See also "/home/wesm/code/arrow/cpp/build/CMakeFiles/CMakeOutput.log".
See also "/home/wesm/code/arrow/cpp/build/CMakeFiles/CMakeError.log".

@wesm

wesm commented Jun 17, 2019

Copy link
Copy Markdown
MemberAuthor

The issue is that I'm using ARROW_DEPENDENCY_SOURCE=SYSTEM with a custom package prefix, and uriparser is not available in conda-forge. I'll have to pass -Duriparser_SOURCE=BUNDLED until this is remedied. I expect this is going to break our conda packages @kszucs

@kou

kou commented Jun 17, 2019

Copy link
Copy Markdown
Member

OK. You can use ARROW_DEPENDENCY_SOURCE=CONDA for your use case. This patch includes workaround for ARROW_DEPENDENCY_SOURCE=CONDA: https://github.com/apache/arrow/pull/4525/files#diff-2420b0c5b6bdad921f1d538f92d64b59R81

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@wesm@kou@codecov-io@fsaintjacques
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ARROW-5370: [C++] Use system uriparser if available - #4525

Closed
wesm wants to merge 10 commits into
apache:masterfrom
wesm:ARROW-5370
Closed

ARROW-5370: [C++] Use system uriparser if available#4525
wesm wants to merge 10 commits into
apache:masterfrom
wesm:ARROW-5370

Conversation

@wesm

@wesmwesm commented Jun 12, 2019

Copy link
Copy Markdown
Member

This change will use uriparser >= 0.9.0 (found via pkgconfig) if it is available in the system toolchain, otherwise it will build from source. Using the SYSTEM method it will not fail for now if the version is not new enough given that the version we require is too new for many Linux distributions. We can look into supporting older uriparser some other time

@wesm
wesm requested a review from kouJune 12, 2019 02:03
@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

I tried this on Debian strecth. Debian stretch ships uriparser 0.8.4 https://packages.debian.org/search?suite=default&section=all&arch=any&searchon=names&keywords=uriparser

We use uriparser 0.9.0 API, uriParseSingleUriExA, here: https://github.com/apache/arrow/blob/master/cpp/src/arrow/util/uri.cc#L131
So we can't use uriparser 0.8.4.

I need the following patch to confirm this change:

diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 0841767e..ee0e24d4 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake@@ -56,6 +56,7 @@ set(ARROW_THIRDPARTY_DEPENDENCIES
RapidJSON
Snappy
Thrift
+ uriparser
ZLIB
ZSTD)
@@ -597,7 +598,7 @@ if(ARROW_WITH_URIPARSER)
endmacro()
if("${uriparser_SOURCE}" STREQUAL "AUTO")
- pkg_check_modules(URIPARSER_PC liburiparser)+ pkg_check_modules(URIPARSER_PC "liburiparser >= 0.9.0")
if(URIPARSER_PC_FOUND)
set(URIPARSER_INCLUDE_DIR "${URIPARSER_PC_INCLUDEDIR}")
list(APPEND URIPARSER_PC_LIBRARY_DIRS "${URIPARSER_PC_LIBDIR}")

+1 with this patch.

@wesm

wesm commented Jun 12, 2019

Copy link
Copy Markdown
MemberAuthor

OK, thanks, I'll incorporate this change.

@wesm
wesm marked this pull request as ready for review June 12, 2019 20:35
@wesm

wesm commented Jun 12, 2019

Copy link
Copy Markdown
MemberAuthor

@kou done. I'll merge once the build look ok

@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

Ah, sorry. Please wait.
I'm trying this with MinGW. It seems that liburiparser.pc in MSYS2 is broken. There is no version information:

prefix=/mingw64
exec_prefix=/mingw64
libdir=/mingw64/lib
includedir=/mingw64/include
Name: liburiparser
Description: URI parsing and handling library
Version: URL: https://uriparser.github.io/
Libs: -L${libdir} -luriparser
Cflags: -I${includedir}

uriparser package in MSYS2 provides files for CMake:

ls /mingw64/lib/cmake/uriparser-0.9.2/
uriparser-release.cmake
uriparser.cmake

So the following logic is better like we did for other packages:

find_package(uriparser)
if(NOT uriparser_FOUND)
pkg_check_modules(...)
...endif()

Note that uriparser package in Debian doesn't provide files for CMake yet.

@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

Wow! We already have cpp/cmake_modules/Finduriparser.cmake. We should use this.

@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

I didn't try yet but something the following will be better. (Finduriparser.cmake is renamed to FinduriparserAlt.cmake)

diff --git a/cpp/cmake_modules/Finduriparser.cmake b/cpp/cmake_modules/FinduriparserAlt.cmake
similarity index 85%
rename from cpp/cmake_modules/Finduriparser.cmake
rename to cpp/cmake_modules/FinduriparserAlt.cmake
index a24cca47..95a9a7fe 100644
--- a/cpp/cmake_modules/Finduriparser.cmake+++ b/cpp/cmake_modules/FinduriparserAlt.cmake@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
-pkg_check_modules(uriparser_PC liburiparser)+pkg_check_modules(uriparser_PC "liburiparser >= 0.9.0")
if(uriparser_PC_FOUND)
set(uriparser_INCLUDE_DIR "${uriparser_PC_INCLUDEDIR}")
@@ -43,11 +43,13 @@ else()
find_path(uriparser_INCLUDE_DIR NAMES uriparser/Uri.h PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
endif()
-find_package_handle_standard_args(uriparser REQUIRED_VARS uriparser_LIB uriparser_INCLUDE_DIR)+find_package_handle_standard_args(uriparserAlt REQUIRED_VARS uriparser_LIB uriparser_INCLUDE_DIR)-if(uriparser_FOUND)+if(uriparserAlt_FOUND)
add_library(uriparser::uriparser UNKNOWN IMPORTED)
set_target_properties(uriparser::uriparser
PROPERTIES IMPORTED_LOCATION "${uriparser_LIB}"
- INTERFACE_INCLUDE_DIRECTORIES "${uriparser_INCLUDE_DIR}")+ INTERFACE_INCLUDE_DIRECTORIES "${uriparser_INCLUDE_DIR}"+ # URI_STATIC_BUILD required on Windows+ INTERFACE_COMPILE_DEFINITIONS "URI_NO_UNICODE")
endif()
diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 1fe04d79..8ad14b3c 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake@@ -590,9 +590,23 @@ macro(build_uriparser)
endmacro()
if(ARROW_WITH_URIPARSER)
- # Unless the user overrides uriparser_SOURCE, build uriparser ourselves- if("${uriparser_SOURCE}" STREQUAL "")- set(uriparser_SOURCE "BUNDLED")+ if(uriparser_SOURCE STREQUAL "AUTO")+ find_package(uriparser QUIET)+ if(NOT uriparser_FOUND)+ # Ubuntu doesn't package the CMake config+ find_package(uriparserAlt)+ endif()+ if(NOT uriparser_FOUND AND NOT uriparserAlt_FOUND)+ build_uriparser()+ endif()+ elseif(uriparser_SOURCE STREQUAL "BUNDLED")+ build_uriparser()+ elseif(uriparser_SOURCE STREQUAL "SYSTEM")+ find_package(uriparser QUIET)+ if(NOT uriparser_FOUND)+ # Ubuntu doesn't package the CMake config+ find_package(uriparserAlt REQUIRED)+ endif()
endif()
resolve_dependency(uriparser)

@wesm

wesm commented Jun 12, 2019

Copy link
Copy Markdown
MemberAuthor

Oh okay. Do you want to take over this PR and push the commits here? I didn't realize we had the CMake file

@kou

kou commented Jun 13, 2019

Copy link
Copy Markdown
Member

OK. I take over this.

@codecov-io

Copy link
Copy Markdown

Codecov Report

Merging #4525 into master will increase coverage by 0.41%.
The diff coverage is n/a.

Impacted file tree graph

@@ Coverage Diff @@## master #4525 +/- ##
==========================================
+ Coverage 88.16% 88.58% +0.41% 
==========================================
Files 852 860 +8 Lines 106398 108022 +1624 Branches 1253 1253 ==========================================
+ Hits 93806 95691 +1885 + Misses 12347 12052 -295 - Partials 245 279 +34
Impacted FilesCoverage Δ
go/arrow/datatype_fixedwidth.go13.15% <0%> (-6.08%)⬇️
cpp/src/arrow/vendored/datetime/date.h26.35% <0%> (-4.28%)⬇️
go/arrow/array/boolean.go88.88% <0%> (-4.22%)⬇️
r/R/array.R72% <0%> (-4%)⬇️
python/pyarrow/lib.pyx97.82% <0%> (-2.18%)⬇️
go/arrow/array/binary.go86.2% <0%> (-2.03%)⬇️
cpp/src/arrow/json/chunked-builder.cc81.58% <0%> (-1.26%)⬇️
cpp/src/arrow/ipc/writer.cc93.04% <0%> (-1.15%)⬇️
python/pyarrow/tests/test_flight.py79.26% <0%> (-0.82%)⬇️
cpp/src/arrow/array.cc90.43% <0%> (-0.21%)⬇️
... and 69 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 4ea86ff...5a06e06. Read the comment docs.

@kou

kou commented Jun 17, 2019

Copy link
Copy Markdown
Member

GLib CI failure on macOS is unrelated.
I'll merge this.

@koukou closed this in e1aebf6Jun 17, 2019
@wesm

wesm commented Jun 17, 2019

Copy link
Copy Markdown
MemberAuthor

This patch is breaking my local builds (Ubuntu 19.04)

-- Performing Test DOUBLE_CONVERSION_HAS_CASE_INSENSIBILITY - Failed
CMake Error at /home/wesm/miniconda/envs/arrow-3.7/share/cmake-3.14/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
Could NOT find uriparserAlt (missing: uriparser_LIB uriparser_INCLUDE_DIR)
(Required is at least version "0.9.0")
Call Stack (most recent call first):
/home/wesm/miniconda/envs/arrow-3.7/share/cmake-3.14/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
cmake_modules/FinduriparserAlt.cmake:81 (find_package_handle_standard_args)
cmake_modules/ThirdpartyToolchain.cmake:773 (find_package)
CMakeLists.txt:374 (include)
-- Configuring incomplete, errors occurred!
See also "/home/wesm/code/arrow/cpp/build/CMakeFiles/CMakeOutput.log".
See also "/home/wesm/code/arrow/cpp/build/CMakeFiles/CMakeError.log".

@wesm

wesm commented Jun 17, 2019

Copy link
Copy Markdown
MemberAuthor

The issue is that I'm using ARROW_DEPENDENCY_SOURCE=SYSTEM with a custom package prefix, and uriparser is not available in conda-forge. I'll have to pass -Duriparser_SOURCE=BUNDLED until this is remedied. I expect this is going to break our conda packages @kszucs

@kou

kou commented Jun 17, 2019

Copy link
Copy Markdown
Member

OK. You can use ARROW_DEPENDENCY_SOURCE=CONDA for your use case. This patch includes workaround for ARROW_DEPENDENCY_SOURCE=CONDA: https://github.com/apache/arrow/pull/4525/files#diff-2420b0c5b6bdad921f1d538f92d64b59R81

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@wesm@kou@codecov-io@fsaintjacques
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length \u003e 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ARROW-5370: [C++] Use system uriparser if available - #4525

Closed
wesm wants to merge 10 commits into
apache:masterfrom
wesm:ARROW-5370
Closed

ARROW-5370: [C++] Use system uriparser if available#4525
wesm wants to merge 10 commits into
apache:masterfrom
wesm:ARROW-5370

Conversation

@wesm

@wesmwesm commented Jun 12, 2019

Copy link
Copy Markdown
Member

This change will use uriparser >= 0.9.0 (found via pkgconfig) if it is available in the system toolchain, otherwise it will build from source. Using the SYSTEM method it will not fail for now if the version is not new enough given that the version we require is too new for many Linux distributions. We can look into supporting older uriparser some other time

@wesm
wesm requested a review from kouJune 12, 2019 02:03
@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

I tried this on Debian strecth. Debian stretch ships uriparser 0.8.4 https://packages.debian.org/search?suite=default&section=all&arch=any&searchon=names&keywords=uriparser

We use uriparser 0.9.0 API, uriParseSingleUriExA, here: https://github.com/apache/arrow/blob/master/cpp/src/arrow/util/uri.cc#L131
So we can't use uriparser 0.8.4.

I need the following patch to confirm this change:

diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 0841767e..ee0e24d4 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake@@ -56,6 +56,7 @@ set(ARROW_THIRDPARTY_DEPENDENCIES
RapidJSON
Snappy
Thrift
+ uriparser
ZLIB
ZSTD)
@@ -597,7 +598,7 @@ if(ARROW_WITH_URIPARSER)
endmacro()
if("${uriparser_SOURCE}" STREQUAL "AUTO")
- pkg_check_modules(URIPARSER_PC liburiparser)+ pkg_check_modules(URIPARSER_PC "liburiparser >= 0.9.0")
if(URIPARSER_PC_FOUND)
set(URIPARSER_INCLUDE_DIR "${URIPARSER_PC_INCLUDEDIR}")
list(APPEND URIPARSER_PC_LIBRARY_DIRS "${URIPARSER_PC_LIBDIR}")

+1 with this patch.

@wesm

wesm commented Jun 12, 2019

Copy link
Copy Markdown
MemberAuthor

OK, thanks, I'll incorporate this change.

@wesm
wesm marked this pull request as ready for review June 12, 2019 20:35
@wesm

wesm commented Jun 12, 2019

Copy link
Copy Markdown
MemberAuthor

@kou done. I'll merge once the build look ok

@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

Ah, sorry. Please wait.
I'm trying this with MinGW. It seems that liburiparser.pc in MSYS2 is broken. There is no version information:

prefix=/mingw64
exec_prefix=/mingw64
libdir=/mingw64/lib
includedir=/mingw64/include
Name: liburiparser
Description: URI parsing and handling library
Version: URL: https://uriparser.github.io/
Libs: -L${libdir} -luriparser
Cflags: -I${includedir}

uriparser package in MSYS2 provides files for CMake:

ls /mingw64/lib/cmake/uriparser-0.9.2/
uriparser-release.cmake
uriparser.cmake

So the following logic is better like we did for other packages:

find_package(uriparser)
if(NOT uriparser_FOUND)
pkg_check_modules(...)
...endif()

Note that uriparser package in Debian doesn't provide files for CMake yet.

@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

Wow! We already have cpp/cmake_modules/Finduriparser.cmake. We should use this.

@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

I didn't try yet but something the following will be better. (Finduriparser.cmake is renamed to FinduriparserAlt.cmake)

diff --git a/cpp/cmake_modules/Finduriparser.cmake b/cpp/cmake_modules/FinduriparserAlt.cmake
similarity index 85%
rename from cpp/cmake_modules/Finduriparser.cmake
rename to cpp/cmake_modules/FinduriparserAlt.cmake
index a24cca47..95a9a7fe 100644
--- a/cpp/cmake_modules/Finduriparser.cmake+++ b/cpp/cmake_modules/FinduriparserAlt.cmake@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
-pkg_check_modules(uriparser_PC liburiparser)+pkg_check_modules(uriparser_PC "liburiparser >= 0.9.0")
if(uriparser_PC_FOUND)
set(uriparser_INCLUDE_DIR "${uriparser_PC_INCLUDEDIR}")
@@ -43,11 +43,13 @@ else()
find_path(uriparser_INCLUDE_DIR NAMES uriparser/Uri.h PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
endif()
-find_package_handle_standard_args(uriparser REQUIRED_VARS uriparser_LIB uriparser_INCLUDE_DIR)+find_package_handle_standard_args(uriparserAlt REQUIRED_VARS uriparser_LIB uriparser_INCLUDE_DIR)-if(uriparser_FOUND)+if(uriparserAlt_FOUND)
add_library(uriparser::uriparser UNKNOWN IMPORTED)
set_target_properties(uriparser::uriparser
PROPERTIES IMPORTED_LOCATION "${uriparser_LIB}"
- INTERFACE_INCLUDE_DIRECTORIES "${uriparser_INCLUDE_DIR}")+ INTERFACE_INCLUDE_DIRECTORIES "${uriparser_INCLUDE_DIR}"+ # URI_STATIC_BUILD required on Windows+ INTERFACE_COMPILE_DEFINITIONS "URI_NO_UNICODE")
endif()
diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 1fe04d79..8ad14b3c 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake@@ -590,9 +590,23 @@ macro(build_uriparser)
endmacro()
if(ARROW_WITH_URIPARSER)
- # Unless the user overrides uriparser_SOURCE, build uriparser ourselves- if("${uriparser_SOURCE}" STREQUAL "")- set(uriparser_SOURCE "BUNDLED")+ if(uriparser_SOURCE STREQUAL "AUTO")+ find_package(uriparser QUIET)+ if(NOT uriparser_FOUND)+ # Ubuntu doesn't package the CMake config+ find_package(uriparserAlt)+ endif()+ if(NOT uriparser_FOUND AND NOT uriparserAlt_FOUND)+ build_uriparser()+ endif()+ elseif(uriparser_SOURCE STREQUAL "BUNDLED")+ build_uriparser()+ elseif(uriparser_SOURCE STREQUAL "SYSTEM")+ find_package(uriparser QUIET)+ if(NOT uriparser_FOUND)+ # Ubuntu doesn't package the CMake config+ find_package(uriparserAlt REQUIRED)+ endif()
endif()
resolve_dependency(uriparser)

@wesm

wesm commented Jun 12, 2019

Copy link
Copy Markdown
MemberAuthor

Oh okay. Do you want to take over this PR and push the commits here? I didn't realize we had the CMake file

@kou

kou commented Jun 13, 2019

Copy link
Copy Markdown
Member

OK. I take over this.

@codecov-io

Copy link
Copy Markdown

Codecov Report

Merging #4525 into master will increase coverage by 0.41%.
The diff coverage is n/a.

Impacted file tree graph

@@ Coverage Diff @@## master #4525 +/- ##
==========================================
+ Coverage 88.16% 88.58% +0.41% 
==========================================
Files 852 860 +8 Lines 106398 108022 +1624 Branches 1253 1253 ==========================================
+ Hits 93806 95691 +1885 + Misses 12347 12052 -295 - Partials 245 279 +34
Impacted FilesCoverage Δ
go/arrow/datatype_fixedwidth.go13.15% <0%> (-6.08%)⬇️
cpp/src/arrow/vendored/datetime/date.h26.35% <0%> (-4.28%)⬇️
go/arrow/array/boolean.go88.88% <0%> (-4.22%)⬇️
r/R/array.R72% <0%> (-4%)⬇️
python/pyarrow/lib.pyx97.82% <0%> (-2.18%)⬇️
go/arrow/array/binary.go86.2% <0%> (-2.03%)⬇️
cpp/src/arrow/json/chunked-builder.cc81.58% <0%> (-1.26%)⬇️
cpp/src/arrow/ipc/writer.cc93.04% <0%> (-1.15%)⬇️
python/pyarrow/tests/test_flight.py79.26% <0%> (-0.82%)⬇️
cpp/src/arrow/array.cc90.43% <0%> (-0.21%)⬇️
... and 69 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 4ea86ff...5a06e06. Read the comment docs.

@kou

kou commented Jun 17, 2019

Copy link
Copy Markdown
Member

GLib CI failure on macOS is unrelated.
I'll merge this.

@koukou closed this in e1aebf6Jun 17, 2019
@wesm

wesm commented Jun 17, 2019

Copy link
Copy Markdown
MemberAuthor

This patch is breaking my local builds (Ubuntu 19.04)

-- Performing Test DOUBLE_CONVERSION_HAS_CASE_INSENSIBILITY - Failed
CMake Error at /home/wesm/miniconda/envs/arrow-3.7/share/cmake-3.14/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
Could NOT find uriparserAlt (missing: uriparser_LIB uriparser_INCLUDE_DIR)
(Required is at least version "0.9.0")
Call Stack (most recent call first):
/home/wesm/miniconda/envs/arrow-3.7/share/cmake-3.14/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
cmake_modules/FinduriparserAlt.cmake:81 (find_package_handle_standard_args)
cmake_modules/ThirdpartyToolchain.cmake:773 (find_package)
CMakeLists.txt:374 (include)
-- Configuring incomplete, errors occurred!
See also "/home/wesm/code/arrow/cpp/build/CMakeFiles/CMakeOutput.log".
See also "/home/wesm/code/arrow/cpp/build/CMakeFiles/CMakeError.log".

@wesm

wesm commented Jun 17, 2019

Copy link
Copy Markdown
MemberAuthor

The issue is that I'm using ARROW_DEPENDENCY_SOURCE=SYSTEM with a custom package prefix, and uriparser is not available in conda-forge. I'll have to pass -Duriparser_SOURCE=BUNDLED until this is remedied. I expect this is going to break our conda packages @kszucs

@kou

kou commented Jun 17, 2019

Copy link
Copy Markdown
Member

OK. You can use ARROW_DEPENDENCY_SOURCE=CONDA for your use case. This patch includes workaround for ARROW_DEPENDENCY_SOURCE=CONDA: https://github.com/apache/arrow/pull/4525/files#diff-2420b0c5b6bdad921f1d538f92d64b59R81

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@wesm@kou@codecov-io@fsaintjacques
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

ARROW-5370: [C++] Use system uriparser if available - #4525

Closed
wesm wants to merge 10 commits into
apache:masterfrom
wesm:ARROW-5370
Closed

ARROW-5370: [C++] Use system uriparser if available#4525
wesm wants to merge 10 commits into
apache:masterfrom
wesm:ARROW-5370

Conversation

@wesm

@wesmwesm commented Jun 12, 2019

Copy link
Copy Markdown
Member

This change will use uriparser >= 0.9.0 (found via pkgconfig) if it is available in the system toolchain, otherwise it will build from source. Using the SYSTEM method it will not fail for now if the version is not new enough given that the version we require is too new for many Linux distributions. We can look into supporting older uriparser some other time

@wesm
wesm requested a review from kouJune 12, 2019 02:03
@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

I tried this on Debian strecth. Debian stretch ships uriparser 0.8.4 https://packages.debian.org/search?suite=default&section=all&arch=any&searchon=names&keywords=uriparser

We use uriparser 0.9.0 API, uriParseSingleUriExA, here: https://github.com/apache/arrow/blob/master/cpp/src/arrow/util/uri.cc#L131
So we can't use uriparser 0.8.4.

I need the following patch to confirm this change:

diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 0841767e..ee0e24d4 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake@@ -56,6 +56,7 @@ set(ARROW_THIRDPARTY_DEPENDENCIES
RapidJSON
Snappy
Thrift
+ uriparser
ZLIB
ZSTD)
@@ -597,7 +598,7 @@ if(ARROW_WITH_URIPARSER)
endmacro()
if("${uriparser_SOURCE}" STREQUAL "AUTO")
- pkg_check_modules(URIPARSER_PC liburiparser)+ pkg_check_modules(URIPARSER_PC "liburiparser >= 0.9.0")
if(URIPARSER_PC_FOUND)
set(URIPARSER_INCLUDE_DIR "${URIPARSER_PC_INCLUDEDIR}")
list(APPEND URIPARSER_PC_LIBRARY_DIRS "${URIPARSER_PC_LIBDIR}")

+1 with this patch.

@wesm

wesm commented Jun 12, 2019

Copy link
Copy Markdown
MemberAuthor

OK, thanks, I'll incorporate this change.

@wesm
wesm marked this pull request as ready for review June 12, 2019 20:35
@wesm

wesm commented Jun 12, 2019

Copy link
Copy Markdown
MemberAuthor

@kou done. I'll merge once the build look ok

@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

Ah, sorry. Please wait.
I'm trying this with MinGW. It seems that liburiparser.pc in MSYS2 is broken. There is no version information:

prefix=/mingw64
exec_prefix=/mingw64
libdir=/mingw64/lib
includedir=/mingw64/include
Name: liburiparser
Description: URI parsing and handling library
Version: URL: https://uriparser.github.io/
Libs: -L${libdir} -luriparser
Cflags: -I${includedir}

uriparser package in MSYS2 provides files for CMake:

ls /mingw64/lib/cmake/uriparser-0.9.2/
uriparser-release.cmake
uriparser.cmake

So the following logic is better like we did for other packages:

find_package(uriparser)
if(NOT uriparser_FOUND)
pkg_check_modules(...)
...endif()

Note that uriparser package in Debian doesn't provide files for CMake yet.

@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

Wow! We already have cpp/cmake_modules/Finduriparser.cmake. We should use this.

@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

I didn't try yet but something the following will be better. (Finduriparser.cmake is renamed to FinduriparserAlt.cmake)

diff --git a/cpp/cmake_modules/Finduriparser.cmake b/cpp/cmake_modules/FinduriparserAlt.cmake
similarity index 85%
rename from cpp/cmake_modules/Finduriparser.cmake
rename to cpp/cmake_modules/FinduriparserAlt.cmake
index a24cca47..95a9a7fe 100644
--- a/cpp/cmake_modules/Finduriparser.cmake+++ b/cpp/cmake_modules/FinduriparserAlt.cmake@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
-pkg_check_modules(uriparser_PC liburiparser)+pkg_check_modules(uriparser_PC "liburiparser >= 0.9.0")
if(uriparser_PC_FOUND)
set(uriparser_INCLUDE_DIR "${uriparser_PC_INCLUDEDIR}")
@@ -43,11 +43,13 @@ else()
find_path(uriparser_INCLUDE_DIR NAMES uriparser/Uri.h PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
endif()
-find_package_handle_standard_args(uriparser REQUIRED_VARS uriparser_LIB uriparser_INCLUDE_DIR)+find_package_handle_standard_args(uriparserAlt REQUIRED_VARS uriparser_LIB uriparser_INCLUDE_DIR)-if(uriparser_FOUND)+if(uriparserAlt_FOUND)
add_library(uriparser::uriparser UNKNOWN IMPORTED)
set_target_properties(uriparser::uriparser
PROPERTIES IMPORTED_LOCATION "${uriparser_LIB}"
- INTERFACE_INCLUDE_DIRECTORIES "${uriparser_INCLUDE_DIR}")+ INTERFACE_INCLUDE_DIRECTORIES "${uriparser_INCLUDE_DIR}"+ # URI_STATIC_BUILD required on Windows+ INTERFACE_COMPILE_DEFINITIONS "URI_NO_UNICODE")
endif()
diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 1fe04d79..8ad14b3c 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake@@ -590,9 +590,23 @@ macro(build_uriparser)
endmacro()
if(ARROW_WITH_URIPARSER)
- # Unless the user overrides uriparser_SOURCE, build uriparser ourselves- if("${uriparser_SOURCE}" STREQUAL "")- set(uriparser_SOURCE "BUNDLED")+ if(uriparser_SOURCE STREQUAL "AUTO")+ find_package(uriparser QUIET)+ if(NOT uriparser_FOUND)+ # Ubuntu doesn't package the CMake config+ find_package(uriparserAlt)+ endif()+ if(NOT uriparser_FOUND AND NOT uriparserAlt_FOUND)+ build_uriparser()+ endif()+ elseif(uriparser_SOURCE STREQUAL "BUNDLED")+ build_uriparser()+ elseif(uriparser_SOURCE STREQUAL "SYSTEM")+ find_package(uriparser QUIET)+ if(NOT uriparser_FOUND)+ # Ubuntu doesn't package the CMake config+ find_package(uriparserAlt REQUIRED)+ endif()
endif()
resolve_dependency(uriparser)

@wesm

wesm commented Jun 12, 2019

Copy link
Copy Markdown
MemberAuthor

Oh okay. Do you want to take over this PR and push the commits here? I didn't realize we had the CMake file

@kou

kou commented Jun 13, 2019

Copy link
Copy Markdown
Member

OK. I take over this.

@codecov-io

Copy link
Copy Markdown

Codecov Report

Merging #4525 into master will increase coverage by 0.41%.
The diff coverage is n/a.

Impacted file tree graph

@@ Coverage Diff @@## master #4525 +/- ##
==========================================
+ Coverage 88.16% 88.58% +0.41% 
==========================================
Files 852 860 +8 Lines 106398 108022 +1624 Branches 1253 1253 ==========================================
+ Hits 93806 95691 +1885 + Misses 12347 12052 -295 - Partials 245 279 +34
Impacted FilesCoverage Δ
go/arrow/datatype_fixedwidth.go13.15% <0%> (-6.08%)⬇️
cpp/src/arrow/vendored/datetime/date.h26.35% <0%> (-4.28%)⬇️
go/arrow/array/boolean.go88.88% <0%> (-4.22%)⬇️
r/R/array.R72% <0%> (-4%)⬇️
python/pyarrow/lib.pyx97.82% <0%> (-2.18%)⬇️
go/arrow/array/binary.go86.2% <0%> (-2.03%)⬇️
cpp/src/arrow/json/chunked-builder.cc81.58% <0%> (-1.26%)⬇️
cpp/src/arrow/ipc/writer.cc93.04% <0%> (-1.15%)⬇️
python/pyarrow/tests/test_flight.py79.26% <0%> (-0.82%)⬇️
cpp/src/arrow/array.cc90.43% <0%> (-0.21%)⬇️
... and 69 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 4ea86ff...5a06e06. Read the comment docs.

@kou

kou commented Jun 17, 2019

Copy link
Copy Markdown
Member

GLib CI failure on macOS is unrelated.
I'll merge this.

@koukou closed this in e1aebf6Jun 17, 2019
@wesm

wesm commented Jun 17, 2019

Copy link
Copy Markdown
MemberAuthor

This patch is breaking my local builds (Ubuntu 19.04)

-- Performing Test DOUBLE_CONVERSION_HAS_CASE_INSENSIBILITY - Failed
CMake Error at /home/wesm/miniconda/envs/arrow-3.7/share/cmake-3.14/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
Could NOT find uriparserAlt (missing: uriparser_LIB uriparser_INCLUDE_DIR)
(Required is at least version "0.9.0")
Call Stack (most recent call first):
/home/wesm/miniconda/envs/arrow-3.7/share/cmake-3.14/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
cmake_modules/FinduriparserAlt.cmake:81 (find_package_handle_standard_args)
cmake_modules/ThirdpartyToolchain.cmake:773 (find_package)
CMakeLists.txt:374 (include)
-- Configuring incomplete, errors occurred!
See also "/home/wesm/code/arrow/cpp/build/CMakeFiles/CMakeOutput.log".
See also "/home/wesm/code/arrow/cpp/build/CMakeFiles/CMakeError.log".

@wesm

wesm commented Jun 17, 2019

Copy link
Copy Markdown
MemberAuthor

The issue is that I'm using ARROW_DEPENDENCY_SOURCE=SYSTEM with a custom package prefix, and uriparser is not available in conda-forge. I'll have to pass -Duriparser_SOURCE=BUNDLED until this is remedied. I expect this is going to break our conda packages @kszucs

@kou

kou commented Jun 17, 2019

Copy link
Copy Markdown
Member

OK. You can use ARROW_DEPENDENCY_SOURCE=CONDA for your use case. This patch includes workaround for ARROW_DEPENDENCY_SOURCE=CONDA: https://github.com/apache/arrow/pull/4525/files#diff-2420b0c5b6bdad921f1d538f92d64b59R81

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@wesm@kou@codecov-io@fsaintjacques
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ARROW-5370: [C++] Use system uriparser if available - #4525

Closed
wesm wants to merge 10 commits into
apache:masterfrom
wesm:ARROW-5370
Closed

ARROW-5370: [C++] Use system uriparser if available#4525
wesm wants to merge 10 commits into
apache:masterfrom
wesm:ARROW-5370

Conversation

@wesm

@wesmwesm commented Jun 12, 2019

Copy link
Copy Markdown
Member

This change will use uriparser >= 0.9.0 (found via pkgconfig) if it is available in the system toolchain, otherwise it will build from source. Using the SYSTEM method it will not fail for now if the version is not new enough given that the version we require is too new for many Linux distributions. We can look into supporting older uriparser some other time

@wesm
wesm requested a review from kouJune 12, 2019 02:03
@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

I tried this on Debian strecth. Debian stretch ships uriparser 0.8.4 https://packages.debian.org/search?suite=default&section=all&arch=any&searchon=names&keywords=uriparser

We use uriparser 0.9.0 API, uriParseSingleUriExA, here: https://github.com/apache/arrow/blob/master/cpp/src/arrow/util/uri.cc#L131
So we can't use uriparser 0.8.4.

I need the following patch to confirm this change:

diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 0841767e..ee0e24d4 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake@@ -56,6 +56,7 @@ set(ARROW_THIRDPARTY_DEPENDENCIES
RapidJSON
Snappy
Thrift
+ uriparser
ZLIB
ZSTD)
@@ -597,7 +598,7 @@ if(ARROW_WITH_URIPARSER)
endmacro()
if("${uriparser_SOURCE}" STREQUAL "AUTO")
- pkg_check_modules(URIPARSER_PC liburiparser)+ pkg_check_modules(URIPARSER_PC "liburiparser >= 0.9.0")
if(URIPARSER_PC_FOUND)
set(URIPARSER_INCLUDE_DIR "${URIPARSER_PC_INCLUDEDIR}")
list(APPEND URIPARSER_PC_LIBRARY_DIRS "${URIPARSER_PC_LIBDIR}")

+1 with this patch.

@wesm

wesm commented Jun 12, 2019

Copy link
Copy Markdown
MemberAuthor

OK, thanks, I'll incorporate this change.

@wesm
wesm marked this pull request as ready for review June 12, 2019 20:35
@wesm

wesm commented Jun 12, 2019

Copy link
Copy Markdown
MemberAuthor

@kou done. I'll merge once the build look ok

@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

Ah, sorry. Please wait.
I'm trying this with MinGW. It seems that liburiparser.pc in MSYS2 is broken. There is no version information:

prefix=/mingw64
exec_prefix=/mingw64
libdir=/mingw64/lib
includedir=/mingw64/include
Name: liburiparser
Description: URI parsing and handling library
Version: URL: https://uriparser.github.io/
Libs: -L${libdir} -luriparser
Cflags: -I${includedir}

uriparser package in MSYS2 provides files for CMake:

ls /mingw64/lib/cmake/uriparser-0.9.2/
uriparser-release.cmake
uriparser.cmake

So the following logic is better like we did for other packages:

find_package(uriparser)
if(NOT uriparser_FOUND)
pkg_check_modules(...)
...endif()

Note that uriparser package in Debian doesn't provide files for CMake yet.

@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

Wow! We already have cpp/cmake_modules/Finduriparser.cmake. We should use this.

@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

I didn't try yet but something the following will be better. (Finduriparser.cmake is renamed to FinduriparserAlt.cmake)

diff --git a/cpp/cmake_modules/Finduriparser.cmake b/cpp/cmake_modules/FinduriparserAlt.cmake
similarity index 85%
rename from cpp/cmake_modules/Finduriparser.cmake
rename to cpp/cmake_modules/FinduriparserAlt.cmake
index a24cca47..95a9a7fe 100644
--- a/cpp/cmake_modules/Finduriparser.cmake+++ b/cpp/cmake_modules/FinduriparserAlt.cmake@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
-pkg_check_modules(uriparser_PC liburiparser)+pkg_check_modules(uriparser_PC "liburiparser >= 0.9.0")
if(uriparser_PC_FOUND)
set(uriparser_INCLUDE_DIR "${uriparser_PC_INCLUDEDIR}")
@@ -43,11 +43,13 @@ else()
find_path(uriparser_INCLUDE_DIR NAMES uriparser/Uri.h PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
endif()
-find_package_handle_standard_args(uriparser REQUIRED_VARS uriparser_LIB uriparser_INCLUDE_DIR)+find_package_handle_standard_args(uriparserAlt REQUIRED_VARS uriparser_LIB uriparser_INCLUDE_DIR)-if(uriparser_FOUND)+if(uriparserAlt_FOUND)
add_library(uriparser::uriparser UNKNOWN IMPORTED)
set_target_properties(uriparser::uriparser
PROPERTIES IMPORTED_LOCATION "${uriparser_LIB}"
- INTERFACE_INCLUDE_DIRECTORIES "${uriparser_INCLUDE_DIR}")+ INTERFACE_INCLUDE_DIRECTORIES "${uriparser_INCLUDE_DIR}"+ # URI_STATIC_BUILD required on Windows+ INTERFACE_COMPILE_DEFINITIONS "URI_NO_UNICODE")
endif()
diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 1fe04d79..8ad14b3c 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake@@ -590,9 +590,23 @@ macro(build_uriparser)
endmacro()
if(ARROW_WITH_URIPARSER)
- # Unless the user overrides uriparser_SOURCE, build uriparser ourselves- if("${uriparser_SOURCE}" STREQUAL "")- set(uriparser_SOURCE "BUNDLED")+ if(uriparser_SOURCE STREQUAL "AUTO")+ find_package(uriparser QUIET)+ if(NOT uriparser_FOUND)+ # Ubuntu doesn't package the CMake config+ find_package(uriparserAlt)+ endif()+ if(NOT uriparser_FOUND AND NOT uriparserAlt_FOUND)+ build_uriparser()+ endif()+ elseif(uriparser_SOURCE STREQUAL "BUNDLED")+ build_uriparser()+ elseif(uriparser_SOURCE STREQUAL "SYSTEM")+ find_package(uriparser QUIET)+ if(NOT uriparser_FOUND)+ # Ubuntu doesn't package the CMake config+ find_package(uriparserAlt REQUIRED)+ endif()
endif()
resolve_dependency(uriparser)

@wesm

wesm commented Jun 12, 2019

Copy link
Copy Markdown
MemberAuthor

Oh okay. Do you want to take over this PR and push the commits here? I didn't realize we had the CMake file

@kou

kou commented Jun 13, 2019

Copy link
Copy Markdown
Member

OK. I take over this.

@codecov-io

Copy link
Copy Markdown

Codecov Report

Merging #4525 into master will increase coverage by 0.41%.
The diff coverage is n/a.

Impacted file tree graph

@@ Coverage Diff @@## master #4525 +/- ##
==========================================
+ Coverage 88.16% 88.58% +0.41% 
==========================================
Files 852 860 +8 Lines 106398 108022 +1624 Branches 1253 1253 ==========================================
+ Hits 93806 95691 +1885 + Misses 12347 12052 -295 - Partials 245 279 +34
Impacted FilesCoverage Δ
go/arrow/datatype_fixedwidth.go13.15% <0%> (-6.08%)⬇️
cpp/src/arrow/vendored/datetime/date.h26.35% <0%> (-4.28%)⬇️
go/arrow/array/boolean.go88.88% <0%> (-4.22%)⬇️
r/R/array.R72% <0%> (-4%)⬇️
python/pyarrow/lib.pyx97.82% <0%> (-2.18%)⬇️
go/arrow/array/binary.go86.2% <0%> (-2.03%)⬇️
cpp/src/arrow/json/chunked-builder.cc81.58% <0%> (-1.26%)⬇️
cpp/src/arrow/ipc/writer.cc93.04% <0%> (-1.15%)⬇️
python/pyarrow/tests/test_flight.py79.26% <0%> (-0.82%)⬇️
cpp/src/arrow/array.cc90.43% <0%> (-0.21%)⬇️
... and 69 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 4ea86ff...5a06e06. Read the comment docs.

@kou

kou commented Jun 17, 2019

Copy link
Copy Markdown
Member

GLib CI failure on macOS is unrelated.
I'll merge this.

@koukou closed this in e1aebf6Jun 17, 2019
@wesm

wesm commented Jun 17, 2019

Copy link
Copy Markdown
MemberAuthor

This patch is breaking my local builds (Ubuntu 19.04)

-- Performing Test DOUBLE_CONVERSION_HAS_CASE_INSENSIBILITY - Failed
CMake Error at /home/wesm/miniconda/envs/arrow-3.7/share/cmake-3.14/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
Could NOT find uriparserAlt (missing: uriparser_LIB uriparser_INCLUDE_DIR)
(Required is at least version "0.9.0")
Call Stack (most recent call first):
/home/wesm/miniconda/envs/arrow-3.7/share/cmake-3.14/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
cmake_modules/FinduriparserAlt.cmake:81 (find_package_handle_standard_args)
cmake_modules/ThirdpartyToolchain.cmake:773 (find_package)
CMakeLists.txt:374 (include)
-- Configuring incomplete, errors occurred!
See also "/home/wesm/code/arrow/cpp/build/CMakeFiles/CMakeOutput.log".
See also "/home/wesm/code/arrow/cpp/build/CMakeFiles/CMakeError.log".

@wesm

wesm commented Jun 17, 2019

Copy link
Copy Markdown
MemberAuthor

The issue is that I'm using ARROW_DEPENDENCY_SOURCE=SYSTEM with a custom package prefix, and uriparser is not available in conda-forge. I'll have to pass -Duriparser_SOURCE=BUNDLED until this is remedied. I expect this is going to break our conda packages @kszucs

@kou

kou commented Jun 17, 2019

Copy link
Copy Markdown
Member

OK. You can use ARROW_DEPENDENCY_SOURCE=CONDA for your use case. This patch includes workaround for ARROW_DEPENDENCY_SOURCE=CONDA: https://github.com/apache/arrow/pull/4525/files#diff-2420b0c5b6bdad921f1d538f92d64b59R81

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@wesm@kou@codecov-io@fsaintjacques
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ARROW-5370: [C++] Use system uriparser if available - #4525

Closed
wesm wants to merge 10 commits into
apache:masterfrom
wesm:ARROW-5370
Closed

ARROW-5370: [C++] Use system uriparser if available#4525
wesm wants to merge 10 commits into
apache:masterfrom
wesm:ARROW-5370

Conversation

@wesm

@wesmwesm commented Jun 12, 2019

Copy link
Copy Markdown
Member

This change will use uriparser >= 0.9.0 (found via pkgconfig) if it is available in the system toolchain, otherwise it will build from source. Using the SYSTEM method it will not fail for now if the version is not new enough given that the version we require is too new for many Linux distributions. We can look into supporting older uriparser some other time

@wesm
wesm requested a review from kouJune 12, 2019 02:03
@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

I tried this on Debian strecth. Debian stretch ships uriparser 0.8.4 https://packages.debian.org/search?suite=default&section=all&arch=any&searchon=names&keywords=uriparser

We use uriparser 0.9.0 API, uriParseSingleUriExA, here: https://github.com/apache/arrow/blob/master/cpp/src/arrow/util/uri.cc#L131
So we can't use uriparser 0.8.4.

I need the following patch to confirm this change:

diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 0841767e..ee0e24d4 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake@@ -56,6 +56,7 @@ set(ARROW_THIRDPARTY_DEPENDENCIES
RapidJSON
Snappy
Thrift
+ uriparser
ZLIB
ZSTD)
@@ -597,7 +598,7 @@ if(ARROW_WITH_URIPARSER)
endmacro()
if("${uriparser_SOURCE}" STREQUAL "AUTO")
- pkg_check_modules(URIPARSER_PC liburiparser)+ pkg_check_modules(URIPARSER_PC "liburiparser >= 0.9.0")
if(URIPARSER_PC_FOUND)
set(URIPARSER_INCLUDE_DIR "${URIPARSER_PC_INCLUDEDIR}")
list(APPEND URIPARSER_PC_LIBRARY_DIRS "${URIPARSER_PC_LIBDIR}")

+1 with this patch.

@wesm

wesm commented Jun 12, 2019

Copy link
Copy Markdown
MemberAuthor

OK, thanks, I'll incorporate this change.

@wesm
wesm marked this pull request as ready for review June 12, 2019 20:35
@wesm

wesm commented Jun 12, 2019

Copy link
Copy Markdown
MemberAuthor

@kou done. I'll merge once the build look ok

@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

Ah, sorry. Please wait.
I'm trying this with MinGW. It seems that liburiparser.pc in MSYS2 is broken. There is no version information:

prefix=/mingw64
exec_prefix=/mingw64
libdir=/mingw64/lib
includedir=/mingw64/include
Name: liburiparser
Description: URI parsing and handling library
Version: URL: https://uriparser.github.io/
Libs: -L${libdir} -luriparser
Cflags: -I${includedir}

uriparser package in MSYS2 provides files for CMake:

ls /mingw64/lib/cmake/uriparser-0.9.2/
uriparser-release.cmake
uriparser.cmake

So the following logic is better like we did for other packages:

find_package(uriparser)
if(NOT uriparser_FOUND)
pkg_check_modules(...)
...endif()

Note that uriparser package in Debian doesn't provide files for CMake yet.

@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

Wow! We already have cpp/cmake_modules/Finduriparser.cmake. We should use this.

@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

I didn't try yet but something the following will be better. (Finduriparser.cmake is renamed to FinduriparserAlt.cmake)

diff --git a/cpp/cmake_modules/Finduriparser.cmake b/cpp/cmake_modules/FinduriparserAlt.cmake
similarity index 85%
rename from cpp/cmake_modules/Finduriparser.cmake
rename to cpp/cmake_modules/FinduriparserAlt.cmake
index a24cca47..95a9a7fe 100644
--- a/cpp/cmake_modules/Finduriparser.cmake+++ b/cpp/cmake_modules/FinduriparserAlt.cmake@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
-pkg_check_modules(uriparser_PC liburiparser)+pkg_check_modules(uriparser_PC "liburiparser >= 0.9.0")
if(uriparser_PC_FOUND)
set(uriparser_INCLUDE_DIR "${uriparser_PC_INCLUDEDIR}")
@@ -43,11 +43,13 @@ else()
find_path(uriparser_INCLUDE_DIR NAMES uriparser/Uri.h PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
endif()
-find_package_handle_standard_args(uriparser REQUIRED_VARS uriparser_LIB uriparser_INCLUDE_DIR)+find_package_handle_standard_args(uriparserAlt REQUIRED_VARS uriparser_LIB uriparser_INCLUDE_DIR)-if(uriparser_FOUND)+if(uriparserAlt_FOUND)
add_library(uriparser::uriparser UNKNOWN IMPORTED)
set_target_properties(uriparser::uriparser
PROPERTIES IMPORTED_LOCATION "${uriparser_LIB}"
- INTERFACE_INCLUDE_DIRECTORIES "${uriparser_INCLUDE_DIR}")+ INTERFACE_INCLUDE_DIRECTORIES "${uriparser_INCLUDE_DIR}"+ # URI_STATIC_BUILD required on Windows+ INTERFACE_COMPILE_DEFINITIONS "URI_NO_UNICODE")
endif()
diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 1fe04d79..8ad14b3c 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake@@ -590,9 +590,23 @@ macro(build_uriparser)
endmacro()
if(ARROW_WITH_URIPARSER)
- # Unless the user overrides uriparser_SOURCE, build uriparser ourselves- if("${uriparser_SOURCE}" STREQUAL "")- set(uriparser_SOURCE "BUNDLED")+ if(uriparser_SOURCE STREQUAL "AUTO")+ find_package(uriparser QUIET)+ if(NOT uriparser_FOUND)+ # Ubuntu doesn't package the CMake config+ find_package(uriparserAlt)+ endif()+ if(NOT uriparser_FOUND AND NOT uriparserAlt_FOUND)+ build_uriparser()+ endif()+ elseif(uriparser_SOURCE STREQUAL "BUNDLED")+ build_uriparser()+ elseif(uriparser_SOURCE STREQUAL "SYSTEM")+ find_package(uriparser QUIET)+ if(NOT uriparser_FOUND)+ # Ubuntu doesn't package the CMake config+ find_package(uriparserAlt REQUIRED)+ endif()
endif()
resolve_dependency(uriparser)

@wesm

wesm commented Jun 12, 2019

Copy link
Copy Markdown
MemberAuthor

Oh okay. Do you want to take over this PR and push the commits here? I didn't realize we had the CMake file

@kou

kou commented Jun 13, 2019

Copy link
Copy Markdown
Member

OK. I take over this.

@codecov-io

Copy link
Copy Markdown

Codecov Report

Merging #4525 into master will increase coverage by 0.41%.
The diff coverage is n/a.

Impacted file tree graph

@@ Coverage Diff @@## master #4525 +/- ##
==========================================
+ Coverage 88.16% 88.58% +0.41% 
==========================================
Files 852 860 +8 Lines 106398 108022 +1624 Branches 1253 1253 ==========================================
+ Hits 93806 95691 +1885 + Misses 12347 12052 -295 - Partials 245 279 +34
Impacted FilesCoverage Δ
go/arrow/datatype_fixedwidth.go13.15% <0%> (-6.08%)⬇️
cpp/src/arrow/vendored/datetime/date.h26.35% <0%> (-4.28%)⬇️
go/arrow/array/boolean.go88.88% <0%> (-4.22%)⬇️
r/R/array.R72% <0%> (-4%)⬇️
python/pyarrow/lib.pyx97.82% <0%> (-2.18%)⬇️
go/arrow/array/binary.go86.2% <0%> (-2.03%)⬇️
cpp/src/arrow/json/chunked-builder.cc81.58% <0%> (-1.26%)⬇️
cpp/src/arrow/ipc/writer.cc93.04% <0%> (-1.15%)⬇️
python/pyarrow/tests/test_flight.py79.26% <0%> (-0.82%)⬇️
cpp/src/arrow/array.cc90.43% <0%> (-0.21%)⬇️
... and 69 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 4ea86ff...5a06e06. Read the comment docs.

@kou

kou commented Jun 17, 2019

Copy link
Copy Markdown
Member

GLib CI failure on macOS is unrelated.
I'll merge this.

@koukou closed this in e1aebf6Jun 17, 2019
@wesm

wesm commented Jun 17, 2019

Copy link
Copy Markdown
MemberAuthor

This patch is breaking my local builds (Ubuntu 19.04)

-- Performing Test DOUBLE_CONVERSION_HAS_CASE_INSENSIBILITY - Failed
CMake Error at /home/wesm/miniconda/envs/arrow-3.7/share/cmake-3.14/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
Could NOT find uriparserAlt (missing: uriparser_LIB uriparser_INCLUDE_DIR)
(Required is at least version "0.9.0")
Call Stack (most recent call first):
/home/wesm/miniconda/envs/arrow-3.7/share/cmake-3.14/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
cmake_modules/FinduriparserAlt.cmake:81 (find_package_handle_standard_args)
cmake_modules/ThirdpartyToolchain.cmake:773 (find_package)
CMakeLists.txt:374 (include)
-- Configuring incomplete, errors occurred!
See also "/home/wesm/code/arrow/cpp/build/CMakeFiles/CMakeOutput.log".
See also "/home/wesm/code/arrow/cpp/build/CMakeFiles/CMakeError.log".

@wesm

wesm commented Jun 17, 2019

Copy link
Copy Markdown
MemberAuthor

The issue is that I'm using ARROW_DEPENDENCY_SOURCE=SYSTEM with a custom package prefix, and uriparser is not available in conda-forge. I'll have to pass -Duriparser_SOURCE=BUNDLED until this is remedied. I expect this is going to break our conda packages @kszucs

@kou

kou commented Jun 17, 2019

Copy link
Copy Markdown
Member

OK. You can use ARROW_DEPENDENCY_SOURCE=CONDA for your use case. This patch includes workaround for ARROW_DEPENDENCY_SOURCE=CONDA: https://github.com/apache/arrow/pull/4525/files#diff-2420b0c5b6bdad921f1d538f92d64b59R81

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@wesm@kou@codecov-io@fsaintjacques
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

ARROW-5370: [C++] Use system uriparser if available - #4525

Closed
wesm wants to merge 10 commits into
apache:masterfrom
wesm:ARROW-5370
Closed

ARROW-5370: [C++] Use system uriparser if available#4525
wesm wants to merge 10 commits into
apache:masterfrom
wesm:ARROW-5370

Conversation

@wesm

@wesmwesm commented Jun 12, 2019

Copy link
Copy Markdown
Member

This change will use uriparser >= 0.9.0 (found via pkgconfig) if it is available in the system toolchain, otherwise it will build from source. Using the SYSTEM method it will not fail for now if the version is not new enough given that the version we require is too new for many Linux distributions. We can look into supporting older uriparser some other time

@wesm
wesm requested a review from kouJune 12, 2019 02:03
@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

I tried this on Debian strecth. Debian stretch ships uriparser 0.8.4 https://packages.debian.org/search?suite=default&section=all&arch=any&searchon=names&keywords=uriparser

We use uriparser 0.9.0 API, uriParseSingleUriExA, here: https://github.com/apache/arrow/blob/master/cpp/src/arrow/util/uri.cc#L131
So we can't use uriparser 0.8.4.

I need the following patch to confirm this change:

diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 0841767e..ee0e24d4 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake@@ -56,6 +56,7 @@ set(ARROW_THIRDPARTY_DEPENDENCIES
RapidJSON
Snappy
Thrift
+ uriparser
ZLIB
ZSTD)
@@ -597,7 +598,7 @@ if(ARROW_WITH_URIPARSER)
endmacro()
if("${uriparser_SOURCE}" STREQUAL "AUTO")
- pkg_check_modules(URIPARSER_PC liburiparser)+ pkg_check_modules(URIPARSER_PC "liburiparser >= 0.9.0")
if(URIPARSER_PC_FOUND)
set(URIPARSER_INCLUDE_DIR "${URIPARSER_PC_INCLUDEDIR}")
list(APPEND URIPARSER_PC_LIBRARY_DIRS "${URIPARSER_PC_LIBDIR}")

+1 with this patch.

@wesm

wesm commented Jun 12, 2019

Copy link
Copy Markdown
MemberAuthor

OK, thanks, I'll incorporate this change.

@wesm
wesm marked this pull request as ready for review June 12, 2019 20:35
@wesm

wesm commented Jun 12, 2019

Copy link
Copy Markdown
MemberAuthor

@kou done. I'll merge once the build look ok

@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

Ah, sorry. Please wait.
I'm trying this with MinGW. It seems that liburiparser.pc in MSYS2 is broken. There is no version information:

prefix=/mingw64
exec_prefix=/mingw64
libdir=/mingw64/lib
includedir=/mingw64/include
Name: liburiparser
Description: URI parsing and handling library
Version: URL: https://uriparser.github.io/
Libs: -L${libdir} -luriparser
Cflags: -I${includedir}

uriparser package in MSYS2 provides files for CMake:

ls /mingw64/lib/cmake/uriparser-0.9.2/
uriparser-release.cmake
uriparser.cmake

So the following logic is better like we did for other packages:

find_package(uriparser)
if(NOT uriparser_FOUND)
pkg_check_modules(...)
...endif()

Note that uriparser package in Debian doesn't provide files for CMake yet.

@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

Wow! We already have cpp/cmake_modules/Finduriparser.cmake. We should use this.

@kou

kou commented Jun 12, 2019

Copy link
Copy Markdown
Member

I didn't try yet but something the following will be better. (Finduriparser.cmake is renamed to FinduriparserAlt.cmake)

diff --git a/cpp/cmake_modules/Finduriparser.cmake b/cpp/cmake_modules/FinduriparserAlt.cmake
similarity index 85%
rename from cpp/cmake_modules/Finduriparser.cmake
rename to cpp/cmake_modules/FinduriparserAlt.cmake
index a24cca47..95a9a7fe 100644
--- a/cpp/cmake_modules/Finduriparser.cmake+++ b/cpp/cmake_modules/FinduriparserAlt.cmake@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
-pkg_check_modules(uriparser_PC liburiparser)+pkg_check_modules(uriparser_PC "liburiparser >= 0.9.0")
if(uriparser_PC_FOUND)
set(uriparser_INCLUDE_DIR "${uriparser_PC_INCLUDEDIR}")
@@ -43,11 +43,13 @@ else()
find_path(uriparser_INCLUDE_DIR NAMES uriparser/Uri.h PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
endif()
-find_package_handle_standard_args(uriparser REQUIRED_VARS uriparser_LIB uriparser_INCLUDE_DIR)+find_package_handle_standard_args(uriparserAlt REQUIRED_VARS uriparser_LIB uriparser_INCLUDE_DIR)-if(uriparser_FOUND)+if(uriparserAlt_FOUND)
add_library(uriparser::uriparser UNKNOWN IMPORTED)
set_target_properties(uriparser::uriparser
PROPERTIES IMPORTED_LOCATION "${uriparser_LIB}"
- INTERFACE_INCLUDE_DIRECTORIES "${uriparser_INCLUDE_DIR}")+ INTERFACE_INCLUDE_DIRECTORIES "${uriparser_INCLUDE_DIR}"+ # URI_STATIC_BUILD required on Windows+ INTERFACE_COMPILE_DEFINITIONS "URI_NO_UNICODE")
endif()
diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 1fe04d79..8ad14b3c 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake@@ -590,9 +590,23 @@ macro(build_uriparser)
endmacro()
if(ARROW_WITH_URIPARSER)
- # Unless the user overrides uriparser_SOURCE, build uriparser ourselves- if("${uriparser_SOURCE}" STREQUAL "")- set(uriparser_SOURCE "BUNDLED")+ if(uriparser_SOURCE STREQUAL "AUTO")+ find_package(uriparser QUIET)+ if(NOT uriparser_FOUND)+ # Ubuntu doesn't package the CMake config+ find_package(uriparserAlt)+ endif()+ if(NOT uriparser_FOUND AND NOT uriparserAlt_FOUND)+ build_uriparser()+ endif()+ elseif(uriparser_SOURCE STREQUAL "BUNDLED")+ build_uriparser()+ elseif(uriparser_SOURCE STREQUAL "SYSTEM")+ find_package(uriparser QUIET)+ if(NOT uriparser_FOUND)+ # Ubuntu doesn't package the CMake config+ find_package(uriparserAlt REQUIRED)+ endif()
endif()
resolve_dependency(uriparser)

@wesm

wesm commented Jun 12, 2019

Copy link
Copy Markdown
MemberAuthor

Oh okay. Do you want to take over this PR and push the commits here? I didn't realize we had the CMake file

@kou

kou commented Jun 13, 2019

Copy link
Copy Markdown
Member

OK. I take over this.

@codecov-io

Copy link
Copy Markdown

Codecov Report

Merging #4525 into master will increase coverage by 0.41%.
The diff coverage is n/a.

Impacted file tree graph

@@ Coverage Diff @@## master #4525 +/- ##
==========================================
+ Coverage 88.16% 88.58% +0.41% 
==========================================
Files 852 860 +8 Lines 106398 108022 +1624 Branches 1253 1253 ==========================================
+ Hits 93806 95691 +1885 + Misses 12347 12052 -295 - Partials 245 279 +34
Impacted FilesCoverage Δ
go/arrow/datatype_fixedwidth.go13.15% <0%> (-6.08%)⬇️
cpp/src/arrow/vendored/datetime/date.h26.35% <0%> (-4.28%)⬇️
go/arrow/array/boolean.go88.88% <0%> (-4.22%)⬇️
r/R/array.R72% <0%> (-4%)⬇️
python/pyarrow/lib.pyx97.82% <0%> (-2.18%)⬇️
go/arrow/array/binary.go86.2% <0%> (-2.03%)⬇️
cpp/src/arrow/json/chunked-builder.cc81.58% <0%> (-1.26%)⬇️
cpp/src/arrow/ipc/writer.cc93.04% <0%> (-1.15%)⬇️
python/pyarrow/tests/test_flight.py79.26% <0%> (-0.82%)⬇️
cpp/src/arrow/array.cc90.43% <0%> (-0.21%)⬇️
... and 69 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 4ea86ff...5a06e06. Read the comment docs.

@kou

kou commented Jun 17, 2019

Copy link
Copy Markdown
Member

GLib CI failure on macOS is unrelated.
I'll merge this.

@koukou closed this in e1aebf6Jun 17, 2019
@wesm

wesm commented Jun 17, 2019

Copy link
Copy Markdown
MemberAuthor

This patch is breaking my local builds (Ubuntu 19.04)

-- Performing Test DOUBLE_CONVERSION_HAS_CASE_INSENSIBILITY - Failed
CMake Error at /home/wesm/miniconda/envs/arrow-3.7/share/cmake-3.14/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
Could NOT find uriparserAlt (missing: uriparser_LIB uriparser_INCLUDE_DIR)
(Required is at least version "0.9.0")
Call Stack (most recent call first):
/home/wesm/miniconda/envs/arrow-3.7/share/cmake-3.14/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
cmake_modules/FinduriparserAlt.cmake:81 (find_package_handle_standard_args)
cmake_modules/ThirdpartyToolchain.cmake:773 (find_package)
CMakeLists.txt:374 (include)
-- Configuring incomplete, errors occurred!
See also "/home/wesm/code/arrow/cpp/build/CMakeFiles/CMakeOutput.log".
See also "/home/wesm/code/arrow/cpp/build/CMakeFiles/CMakeError.log".

@wesm

wesm commented Jun 17, 2019

Copy link
Copy Markdown
MemberAuthor

The issue is that I'm using ARROW_DEPENDENCY_SOURCE=SYSTEM with a custom package prefix, and uriparser is not available in conda-forge. I'll have to pass -Duriparser_SOURCE=BUNDLED until this is remedied. I expect this is going to break our conda packages @kszucs

@kou

kou commented Jun 17, 2019

Copy link
Copy Markdown
Member

OK. You can use ARROW_DEPENDENCY_SOURCE=CONDA for your use case. This patch includes workaround for ARROW_DEPENDENCY_SOURCE=CONDA: https://github.com/apache/arrow/pull/4525/files#diff-2420b0c5b6bdad921f1d538f92d64b59R81

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@wesm@kou@codecov-io@fsaintjacques