That being said, is there an easier way by using a Docker container I could
use to build this in?

On Sat, 31 Aug 2019 at 12:44, Chris Teoh <chris.t...@gmail.com> wrote:

> Hey there,
>
> Brand new to Arrow here.
>
> Trying to build it following the instructions and I get errors with the
> ORC module building cpp
>
> In file included from
> /Users/test/GitHub/arrow/cpp/build/orc_ep-prefix/src/orc_ep/c++/src/wrap/orc-proto-wrapper.cc:44:
>
> /Users/test/GitHub/arrow/cpp/build/orc_ep-prefix/src/orc_ep-build/c++/src/orc_proto.pb.cc:960:145:
> error: possible misuse of comma operator here [-Werror,-Wcomma]
> static bool dynamic_init_dummy_orc_5fproto_2eproto = (
>  
> ::PROTOBUF_NAMESPACE_ID::internal::AddDescriptors(&descriptor_table_orc_5fproto_2eproto),
> true);
>
>                                                                       ^
>
> /Users/test/GitHub/arrow/cpp/build/orc_ep-prefix/src/orc_ep-build/c++/src/orc_proto.pb.cc:960:57:
> note: cast expression to void to silence warning
> static bool dynamic_init_dummy_orc_5fproto_2eproto = (
>  
> ::PROTOBUF_NAMESPACE_ID::internal::AddDescriptors(&descriptor_table_orc_5fproto_2eproto),
> true);
>
> I can disable the ORC module and that part builds fine, build command is:-
>
> pushd arrow/cpp/build
>
>
>
> cmake -DPYTHON_EXECUTABLE=$VIRTUAL_ENV/bin/python
> -DCMAKE_INSTALL_PREFIX=$ARROW_HOME \
>
>       -DCMAKE_INSTALL_LIBDIR=lib \
>
>       -DARROW_FLIGHT=ON \
>
>       -DARROW_GANDIVA=ON \
>
>       -DARROW_ORC=OFF \
>
>       -DARROW_PARQUET=ON \
>
>       -DARROW_PYTHON=ON \
>
>       -DARROW_PLASMA=ON \
>
>       -DARROW_BUILD_TESTS=ON \
>
>       ..
>
> make -j4
>
> make install
>
> popd
>
> then I try to build the python module:-
>
> pushd arrow/python
> export PYARROW_WITH_FLIGHT=1
> export PYARROW_WITH_GANDIVA=1
> export PYARROW_WITH_ORC=0
> export PYARROW_WITH_PARQUET=1
> python setup.py build_ext --inplace
> popd
>
> and get:-
> running build_ext
> creating build
> creating build/temp.macosx-10.14-intel-2.7
> -- Running cmake for pyarrow
> cmake -DPYTHON_EXECUTABLE=/Users/test/GitHub/pyarrow/bin/python
>  -DPYARROW_BUILD_FLIGHT=on -DPYARROW_BUILD_PARQUET=on
> -DPYARROW_BOOST_USE_SHARED=on -DPYARROW_BUILD_GANDIVA=on
> -DCMAKE_BUILD_TYPE=release /Users/test/GitHub/arrow/python
> -- The C compiler identification is AppleClang 10.0.1.10010046
> -- The CXX compiler identification is AppleClang 10.0.1.10010046
> -- Check for working C compiler:
> /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
> -- Check for working C compiler:
> /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
> -- works
> -- Detecting C compiler ABI info
> -- Detecting C compiler ABI info - done
> -- Detecting C compile features
> -- Detecting C compile features - done
> -- Check for working CXX compiler:
> /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
> -- Check for working CXX compiler:
> /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
> -- works
> -- Detecting CXX compiler ABI info
> -- Detecting CXX compiler ABI info - done
> -- Detecting CXX compile features
> -- Detecting CXX compile features - done
> -- Compiler command: env LANG=C
> /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
> -v
> -- Compiler version: Apple LLVM version 10.0.1 (clang-1001.0.46.4)
> Target: x86_64-apple-darwin18.6.0
> Thread model: posix
> InstalledDir:
> /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
>
> -- Compiler id: Clang
> Selected compiler clang 4.1.0svn
> -- Performing Test CXX_SUPPORTS_SSE4_2
> -- Performing Test CXX_SUPPORTS_SSE4_2 - Success
> -- Performing Test CXX_SUPPORTS_ALTIVEC
> -- Performing Test CXX_SUPPORTS_ALTIVEC - Success
> -- Performing Test CXX_SUPPORTS_ARMCRC
> -- Performing Test CXX_SUPPORTS_ARMCRC - Failed
> -- Performing Test CXX_SUPPORTS_ARMV8_CRC_CRYPTO
> -- Performing Test CXX_SUPPORTS_ARMV8_CRC_CRYPTO - Failed
> -- Arrow build warning level: PRODUCTION
> Configured for RELEASE build (set with cmake
> -DCMAKE_BUILD_TYPE={release,debug,...})
> -- Build Type: RELEASE
> -- Build output directory:
> /Users/test/GitHub/arrow/python/build/temp.macosx-10.14-intel-2.7/release
> -- Found PythonInterp: /Users/test/GitHub/pyarrow/bin/python (found
> version "2.7.10")
> -- Found PythonLibs:
> /System/Library/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib
> -- Found NumPy: version "1.16.5"
> /Users/test/GitHub/pyarrow/lib/python2.7/site-packages/numpy/core/include
> -- Found PkgConfig: /usr/local/bin/pkg-config (found version "0.29.2")
> -- Found the Arrow core library: /Users/test/GitHub/dist/lib/libarrow.dylib
> -- Found the Arrow Python library:
> /Users/test/GitHub/dist/lib/libarrow_python.dylib
> -- Added shared library dependency arrow_shared:
> /Users/test/GitHub/dist/lib/libarrow.dylib
> -- Added shared library dependency arrow_python_shared:
> /Users/test/GitHub/dist/lib/libarrow_python.dylib
> -- Checking for module 'parquet'
> --   No package 'parquet' found
> --  Could not find the parquet library. Looked in  system search paths.
> CMake Error at CMakeLists.txt:417 (message):
>   Unable to locate Parquet libraries
>
>
> -- Configuring incomplete, errors occurred!
>
> My "dist" folder is as follows:-
> dist
> dist/bin
> dist/bin/plasma-store-server
> dist/include
> dist/include/plasma
> dist/include/plasma/client.h
> dist/include/plasma/events.h
> dist/include/plasma/common.h
> dist/include/plasma/compat.h
> dist/include/plasma/test_util.h
> dist/include/arrow
> dist/include/arrow/type.h
> dist/include/arrow/memory_pool.h
> dist/include/arrow/status.h
> dist/include/arrow/visitor_inline.h
> dist/include/arrow/util
> dist/include/arrow/util/compression_zstd.h
> dist/include/arrow/util/compiler_util.h
> dist/include/arrow/util/bit_stream_utils.h
> dist/include/arrow/util/range.h
> dist/include/arrow/util/checked_cast.h
> dist/include/arrow/util/config.h
> dist/include/arrow/util/string_builder.h
> dist/include/arrow/util/io_util.h
> dist/include/arrow/util/uri.h
> dist/include/arrow/util/task_group.h
> dist/include/arrow/util/neon_util.h
> dist/include/arrow/util/ubsan.h
> dist/include/arrow/util/int_util.h
> dist/include/arrow/util/atomic_shared_ptr.h
> dist/include/arrow/util/bpacking.h
> dist/include/arrow/util/sse_util.h
> dist/include/arrow/util/decimal.h
> dist/include/arrow/util/compression_brotli.h
> dist/include/arrow/util/logging.h
> dist/include/arrow/util/compression.h
> dist/include/arrow/util/compression_zlib.h
> dist/include/arrow/util/functional.h
> dist/include/arrow/util/stl.h
> dist/include/arrow/util/thread_pool.h
> dist/include/arrow/util/key_value_metadata.h
> dist/include/arrow/util/parsing.h
> dist/include/arrow/util/macros.h
> dist/include/arrow/util/stopwatch.h
> dist/include/arrow/util/compression_bz2.h
> dist/include/arrow/util/compression_snappy.h
> dist/include/arrow/util/memory.h
> dist/include/arrow/util/hashing.h
> dist/include/arrow/util/cpu_info.h
> dist/include/arrow/util/basic_decimal.h
> dist/include/arrow/util/compression_lz4.h
> dist/include/arrow/util/bit_util.h
> dist/include/arrow/util/visibility.h
> dist/include/arrow/util/type_traits.h
> dist/include/arrow/util/parallel.h
> dist/include/arrow/util/trie.h
> dist/include/arrow/util/rle_encoding.h
> dist/include/arrow/util/windows_compatibility.h
> dist/include/arrow/util/iterator.h
> dist/include/arrow/util/utf8.h
> dist/include/arrow/util/string_view.h
> dist/include/arrow/util/align_util.h
> dist/include/arrow/util/string.h
> dist/include/arrow/util/variant.h
> dist/include/arrow/util/hash_util.h
> dist/include/arrow/python
> dist/include/arrow/python/inference.h
> dist/include/arrow/python/pyarrow.h
> dist/include/arrow/python/python_to_arrow.h
> dist/include/arrow/python/flight.h
> dist/include/arrow/python/numpy_interop.h
> dist/include/arrow/python/config.h
> dist/include/arrow/python/deserialize.h
> dist/include/arrow/python/pyarrow_lib.h
> dist/include/arrow/python/pyarrow_api.h
> dist/include/arrow/python/decimal.h
> dist/include/arrow/python/api.h
> dist/include/arrow/python/numpy_to_arrow.h
> dist/include/arrow/python/common.h
> dist/include/arrow/python/io.h
> dist/include/arrow/python/benchmark.h
> dist/include/arrow/python/numpy_convert.h
> dist/include/arrow/python/iterators.h
> dist/include/arrow/python/visibility.h
> dist/include/arrow/python/serialize.h
> dist/include/arrow/python/type_traits.h
> dist/include/arrow/python/init.h
> dist/include/arrow/python/helpers.h
> dist/include/arrow/python/platform.h
> dist/include/arrow/python/extension_type.h
> dist/include/arrow/python/arrow_to_pandas.h
> dist/include/arrow/array
> dist/include/arrow/array/builder_dict.h
> dist/include/arrow/array/builder_adaptive.h
> dist/include/arrow/array/builder_base.h
> dist/include/arrow/array/builder_binary.h
> dist/include/arrow/array/builder_union.h
> dist/include/arrow/array/concatenate.h
> dist/include/arrow/array/diff.h
> dist/include/arrow/array/builder_nested.h
> dist/include/arrow/array/builder_time.h
> dist/include/arrow/array/builder_decimal.h
> dist/include/arrow/array/builder_primitive.h
> dist/include/arrow/type_fwd.h
> dist/include/arrow/dataset
> dist/include/arrow/dataset/file_base.h
> dist/include/arrow/dataset/discovery.h
> dist/include/arrow/dataset/disk_store.h
> dist/include/arrow/dataset/type_fwd.h
> dist/include/arrow/dataset/file_json.h
> dist/include/arrow/dataset/api.h
> dist/include/arrow/dataset/dataset.h
> dist/include/arrow/dataset/file_csv.h
> dist/include/arrow/dataset/scanner.h
> dist/include/arrow/dataset/partition.h
> dist/include/arrow/dataset/writer.h
> dist/include/arrow/dataset/file_feather.h
> dist/include/arrow/dataset/file_parquet.h
> dist/include/arrow/dataset/visibility.h
> dist/include/arrow/dataset/filter.h
> dist/include/arrow/dataset/transaction.h
> dist/include/arrow/dataset/test_util.h
> dist/include/arrow/flight
> dist/include/arrow/flight/client.h
> dist/include/arrow/flight/types.h
> dist/include/arrow/flight/api.h
> dist/include/arrow/flight/server_auth.h
> dist/include/arrow/flight/customize_protobuf.h
> dist/include/arrow/flight/client_auth.h
> dist/include/arrow/flight/visibility.h
> dist/include/arrow/flight/server.h
> dist/include/arrow/flight/platform.h
> dist/include/arrow/flight/test_util.h
> dist/include/arrow/io
> dist/include/arrow/io/hdfs.h
> dist/include/arrow/io/interfaces.h
> dist/include/arrow/io/buffered.h
> dist/include/arrow/io/test_common.h
> dist/include/arrow/io/file.h
> dist/include/arrow/io/mman.h
> dist/include/arrow/io/api.h
> dist/include/arrow/io/compressed.h
> dist/include/arrow/io/memory.h
> dist/include/arrow/io/readahead.h
> dist/include/arrow/result.h
> dist/include/arrow/memory_pool_test.h
> dist/include/arrow/record_batch.h
> dist/include/arrow/sparse_tensor.h
> dist/include/arrow/filesystem
> dist/include/arrow/filesystem/filesystem.h
> dist/include/arrow/filesystem/mockfs.h
> dist/include/arrow/filesystem/localfs.h
> dist/include/arrow/filesystem/path_util.h
> dist/include/arrow/filesystem/s3fs.h
> dist/include/arrow/filesystem/test_util.h
> dist/include/arrow/scalar.h
> dist/include/arrow/visitor.h
> dist/include/arrow/stl.h
> dist/include/arrow/api.h
> dist/include/arrow/testing
> dist/include/arrow/testing/gtest_util.h
> dist/include/arrow/testing/util.h
> dist/include/arrow/testing/gtest_common.h
> dist/include/arrow/testing/random.h
> dist/include/arrow/buffer.h
> dist/include/arrow/compare.h
> dist/include/arrow/json
> dist/include/arrow/json/reader.h
> dist/include/arrow/json/test_common.h
> dist/include/arrow/json/chunker.h
> dist/include/arrow/json/parser.h
> dist/include/arrow/json/converter.h
> dist/include/arrow/json/options.h
> dist/include/arrow/json/api.h
> dist/include/arrow/json/rapidjson_defs.h
> dist/include/arrow/json/chunked_builder.h
> dist/include/arrow/buffer_builder.h
> dist/include/arrow/compute
> dist/include/arrow/compute/kernels
> dist/include/arrow/compute/kernels/take.h
> dist/include/arrow/compute/kernels/count.h
> dist/include/arrow/compute/kernels/aggregate.h
> dist/include/arrow/compute/kernels/boolean.h
> dist/include/arrow/compute/kernels/sum.h
> dist/include/arrow/compute/kernels/compare.h
> dist/include/arrow/compute/kernels/cast.h
> dist/include/arrow/compute/kernels/mean.h
> dist/include/arrow/compute/kernels/isin.h
> dist/include/arrow/compute/kernels/filter.h
> dist/include/arrow/compute/kernels/sort_to_indices.h
> dist/include/arrow/compute/kernels/hash.h
> dist/include/arrow/compute/type_fwd.h
> dist/include/arrow/compute/context.h
> dist/include/arrow/compute/api.h
> dist/include/arrow/compute/expression.h
> dist/include/arrow/compute/kernel.h
> dist/include/arrow/compute/benchmark_util.h
> dist/include/arrow/compute/operation.h
> dist/include/arrow/compute/logical_type.h
> dist/include/arrow/compute/test_util.h
> dist/include/arrow/allocator.h
> dist/include/arrow/csv
> dist/include/arrow/csv/reader.h
> dist/include/arrow/csv/test_common.h
> dist/include/arrow/csv/chunker.h
> dist/include/arrow/csv/parser.h
> dist/include/arrow/csv/converter.h
> dist/include/arrow/csv/options.h
> dist/include/arrow/csv/api.h
> dist/include/arrow/csv/column_builder.h
> dist/include/arrow/array.h
> dist/include/arrow/builder.h
> dist/include/arrow/vendored
> dist/include/arrow/vendored/datetime
> dist/include/arrow/vendored/datetime/tz_private.h
> dist/include/arrow/vendored/datetime/ios.h
> dist/include/arrow/vendored/datetime/date.h
> dist/include/arrow/vendored/datetime/visibility.h
> dist/include/arrow/vendored/datetime/tz.h
> dist/include/arrow/vendored/datetime.h
> dist/include/arrow/vendored/variant.hpp
> dist/include/arrow/vendored/string_view.hpp
> dist/include/arrow/table.h
> dist/include/arrow/ipc
> dist/include/arrow/ipc/feather.h
> dist/include/arrow/ipc/reader.h
> dist/include/arrow/ipc/test_common.h
> dist/include/arrow/ipc/json_simple.h
> dist/include/arrow/ipc/message.h
> dist/include/arrow/ipc/options.h
> dist/include/arrow/ipc/api.h
> dist/include/arrow/ipc/dictionary.h
> dist/include/arrow/ipc/util.h
> dist/include/arrow/ipc/writer.h
> dist/include/arrow/ipc/json_integration.h
> dist/include/arrow/table_builder.h
> dist/include/arrow/type_traits.h
> dist/include/arrow/tensor.h
> dist/include/arrow/pretty_print.h
> dist/include/arrow/extension_type.h
> dist/include/gandiva
> dist/include/gandiva/engine.h
> dist/include/gandiva/decimal_ir.h
> dist/include/gandiva/simple_arena.h
> dist/include/gandiva/lvalue.h
> dist/include/gandiva/function_registry_math_ops.h
> dist/include/gandiva/function_registry_string.h
> dist/include/gandiva/condition.h
> dist/include/gandiva/tree_expr_builder.h
> dist/include/gandiva/function_registry_common.h
> dist/include/gandiva/node_visitor.h
> dist/include/gandiva/projector.h
> dist/include/gandiva/lru_cache.h
> dist/include/gandiva/expr_decomposer.h
> dist/include/gandiva/gandiva_aliases.h
> dist/include/gandiva/func_descriptor.h
> dist/include/gandiva/llvm_types.h
> dist/include/gandiva/literal_holder.h
> dist/include/gandiva/selection_vector_impl.h
> dist/include/gandiva/function_ir_builder.h
> dist/include/gandiva/selection_vector.h
> dist/include/gandiva/decimal_scalar.h
> dist/include/gandiva/cache.h
> dist/include/gandiva/expression_registry.h
> dist/include/gandiva/configuration.h
> dist/include/gandiva/node.h
> dist/include/gandiva/field_descriptor.h
> dist/include/gandiva/logging.h
> dist/include/gandiva/dex.h
> dist/include/gandiva/llvm_includes.h
> dist/include/gandiva/function_registry_timestamp_arithmetic.h
> dist/include/gandiva/basic_decimal_scalar.h
> dist/include/gandiva/native_function.h
> dist/include/gandiva/exported_funcs.h
> dist/include/gandiva/function_registry_datetime.h
> dist/include/gandiva/filter_cache_key.h
> dist/include/gandiva/expression.h
> dist/include/gandiva/function_holder_registry.h
> dist/include/gandiva/function_registry_arithmetic.h
> dist/include/gandiva/exported_funcs_registry.h
> dist/include/gandiva/function_registry_hash.h
> dist/include/gandiva/value_validity_pair.h
> dist/include/gandiva/expr_validator.h
> dist/include/gandiva/gdv_function_stubs.h
> dist/include/gandiva/dex_visitor.h
> dist/include/gandiva/annotator.h
> dist/include/gandiva/local_bitmaps_holder.h
> dist/include/gandiva/projector_cache_key.h
> dist/include/gandiva/date_utils.h
> dist/include/gandiva/decimal_type_util.h
> dist/include/gandiva/function_signature.h
> dist/include/gandiva/random_generator_holder.h
> dist/include/gandiva/regex_util.h
> dist/include/gandiva/bitmap_accumulator.h
> dist/include/gandiva/visibility.h
> dist/include/gandiva/to_date_holder.h
> dist/include/gandiva/decimal_xlarge.h
> dist/include/gandiva/filter.h
> dist/include/gandiva/arrow.h
> dist/include/gandiva/compiled_expr.h
> dist/include/gandiva/llvm_generator.h
> dist/include/gandiva/in_holder.h
> dist/include/gandiva/execution_context.h
> dist/include/gandiva/function_holder.h
> dist/include/gandiva/eval_batch.h
> dist/include/gandiva/function_registry.h
> dist/include/gandiva/like_holder.h
> dist/include/parquet
> dist/include/parquet/printer.h
> dist/include/parquet/column_writer.h
> dist/include/parquet/murmur3.h
> dist/include/parquet/bloom_filter.h
> dist/include/parquet/file_reader.h
> dist/include/parquet/thrift.h
> dist/include/parquet/types.h
> dist/include/parquet/arrow
> dist/include/parquet/arrow/reader.h
> dist/include/parquet/arrow/schema.h
> dist/include/parquet/arrow/writer.h
> dist/include/parquet/arrow/test_util.h
> dist/include/parquet/encoding.h
> dist/include/parquet/parquet_version.h
> dist/include/parquet/schema.h
> dist/include/parquet/metadata.h
> dist/include/parquet/hasher.h
> dist/include/parquet/file_writer.h
> dist/include/parquet/statistics.h
> dist/include/parquet/api
> dist/include/parquet/api/reader.h
> dist/include/parquet/api/schema.h
> dist/include/parquet/api/io.h
> dist/include/parquet/api/writer.h
> dist/include/parquet/column_reader.h
> dist/include/parquet/column_scanner.h
> dist/include/parquet/deprecated_io.h
> dist/include/parquet/exception.h
> dist/include/parquet/column_page.h
> dist/include/parquet/windows_compatibility.h
> dist/include/parquet/platform.h
> dist/include/parquet/test_util.h
> dist/include/parquet/properties.h
> dist/lib
> dist/lib/libparquet.15.0.0.dylib
> dist/lib/libarrow_flight_testing.a
> dist/lib/libarrow_flight_testing.15.0.0.dylib
> dist/lib/pkgconfig
> dist/lib/pkgconfig/arrow-dataset.pc
> dist/lib/pkgconfig/gandiva.pc
> dist/lib/pkgconfig/parquet.pc
> dist/lib/pkgconfig/arrow-python.pc
> dist/lib/pkgconfig/arrow-compute.pc
> dist/lib/pkgconfig/plasma.pc
> dist/lib/pkgconfig/arrow.pc
> dist/lib/pkgconfig/arrow-flight.pc
> dist/lib/libarrow_flight_testing.dylib
> dist/lib/cmake
> dist/lib/cmake/arrow
> dist/lib/cmake/arrow/arrowConfigVersion.cmake
> dist/lib/cmake/arrow/arrowConfig.cmake
> dist/lib/cmake/arrow/arrowTargets-release.cmake
> dist/lib/cmake/arrow/arrowTargets.cmake
> dist/lib/libarrow.15.0.0.dylib
> dist/lib/libparquet.dylib
> dist/lib/libgandiva.dylib
> dist/lib/libparquet.a
> dist/lib/libarrow_flight.dylib
> dist/lib/libarrow_flight.a
> dist/lib/libarrow_dataset.a
> dist/lib/libarrow_python.15.dylib
> dist/lib/libarrow_python.a
> dist/lib/libarrow_dataset.15.0.0.dylib
> dist/lib/libgandiva.15.0.0.dylib
> dist/lib/libarrow_python.15.0.0.dylib
> dist/lib/libgandiva.a
> dist/lib/libarrow.dylib
> dist/lib/libarrow.15.dylib
> dist/lib/libparquet.15.dylib
> dist/lib/libplasma.a
> dist/lib/libarrow.a
> dist/lib/libarrow_flight_testing.15.dylib
> dist/lib/libarrow_testing.15.0.0.dylib
> dist/lib/libplasma.dylib
> dist/lib/libplasma.15.dylib
> dist/lib/libplasma.15.0.0.dylib
> dist/lib/libarrow_testing.dylib
> dist/lib/libarrow_flight.15.dylib
> dist/lib/libarrow_dataset.15.dylib
> dist/lib/libarrow_python.dylib
> dist/lib/libarrow_dataset.dylib
> dist/lib/libgandiva.15.dylib
> dist/lib/libarrow_testing.15.dylib
> dist/lib/libarrow_flight.15.0.0.dylib
> dist/lib/libarrow_testing.a
>
> My LD_LIBRARY_PATH:-
> echo $LD_LIBRARY_PATH
> /Users/test/GitHub/dist/lib
>
> Any help would be much appreciated.
>
> Kind Regards
> Chris
>
> --
> Chris
>


-- 
Chris

Reply via email to