diff --git a/.github/workflows/build_wheels.yml b/.github/workflows/build_wheels.yml index 7bcde0b3d..d840a18e1 100644 --- a/.github/workflows/build_wheels.yml +++ b/.github/workflows/build_wheels.yml @@ -41,7 +41,7 @@ jobs: CIBW_BUILD: "cp3{7,8,9}-*" CIBW_SKIP: "cp3{5,6}-macosx* pp* *-musllinux_*" - CIBW_BEFORE_BUILD_MACOS: brew install coreutils protobuf zstd zlib libmagic llvm@9 pcre2 antlr4-cpp-runtime googletest gflags yaml-cpp celero wget boost && bash ./scripts/macos/install_aws-sdk-cpp.sh + CIBW_BEFORE_BUILD_MACOS: bash ./scripts/macos/brew_dependencies.sh && bash ./scripts/macos/install_aws-sdk-cpp.sh CIBW_PROJECT_REQUIRES_PYTHON: ">=3.7" # set this environment variable to include the Lambda zip from the previous build step diff --git a/scripts/macos/brew_dependencies.sh b/scripts/macos/brew_dependencies.sh new file mode 100755 index 000000000..71d659d47 --- /dev/null +++ b/scripts/macos/brew_dependencies.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +# This script installs all required dependencies via brew +# for instructions on how to install brew, visit https://brew.sh/ + +brew install coreutils protobuf zstd zlib libmagic llvm@9 pcre2 gflags yaml-cpp celero wget boost googletest + +# latest antlr4-cpp-runtime 4.10 and googletest have a conflict +# in addition to 4.10 requiring C++20 to compile. +# Therefore, install old 4.9.3 Antlr4 version +# i.e., it used to be brew install antlr4-cpp-runtime, now use the following: +brew tap-new tuplex/brew +brew extract --version='4.9.3' antlr4-cpp-runtime tuplex/brew +brew install antlr4-cpp-runtime@4.9.3 diff --git a/tuplex/CMakeLists.txt b/tuplex/CMakeLists.txt index 272f0dcf1..52861ffb2 100755 --- a/tuplex/CMakeLists.txt +++ b/tuplex/CMakeLists.txt @@ -21,7 +21,7 @@ option(USE_LD_GOLD "Use GNU gold linker" ON) # set default MacOS target, if not set. # cf. https://cmake.org/cmake/help/latest/variable/CMAKE_OSX_DEPLOYMENT_TARGET.html -if(NOT CMAKE_OSX_DEPLOYMENT_TARGET) +if(NOT CMAKE_OSX_DEPLOYMENT_TARGET OR "${CMAKE_OSX_DEPLOYMENT_TARGET}" STREQUAL "") # use high sierra target per default set(CMAKE_OSX_DEPLOYMENT_TARGET 10.13) endif() @@ -133,6 +133,12 @@ enable_testing() # detect MacOS Version because at least 10.13 is required when building with AWS SDK if(APPLE) execute_process(COMMAND bash -c "sw_vers | grep -Eo '([0-9]{1,}\.)+[0-9]{1,}' | head -1" OUTPUT_VARIABLE MACOSX_VERSION_STRING OUTPUT_STRIP_TRAILING_WHITESPACE) + + if(NOT CMAKE_OSX_DEPLOYMENT_TARGET OR "${CMAKE_OSX_DEPLOYMENT_TARGET}" STREQUAL "") + # use high sierra target per default + set(CMAKE_OSX_DEPLOYMENT_TARGET 10.13) + endif() + message(STATUS "Detected macOS ${MACOSX_VERSION_STRING} host platform, building for deployment target ${CMAKE_OSX_DEPLOYMENT_TARGET}. To use a different deployment target either set CMAKE_OSX_DEPLOYMENT_TARGET or the environment variable MACOSX_DEPLOYMENT_TARGET to the desired version.") endif() diff --git a/tuplex/cmake/FindANTLR4Runtime.cmake b/tuplex/cmake/FindANTLR4Runtime.cmake index c4c58d4c8..df6362bf9 100644 --- a/tuplex/cmake/FindANTLR4Runtime.cmake +++ b/tuplex/cmake/FindANTLR4Runtime.cmake @@ -9,7 +9,6 @@ # find include (is e.g. in /usr/local/include/antlr4-runtime/antlr4-runtime.h find_path(ANTLR4Runtime_INCLUDE_DIR NAMES "antlr4-runtime.h" PATH_SUFFIXES "antlr4-runtime") - # find lib find_library(ANTLR4Runtime_LIB antlr4-runtime) diff --git a/tuplex/codegen/CMakeLists.txt b/tuplex/codegen/CMakeLists.txt index 7b6b28756..2d205ce46 100755 --- a/tuplex/codegen/CMakeLists.txt +++ b/tuplex/codegen/CMakeLists.txt @@ -105,7 +105,6 @@ endif() # BOOST libs include_directories(${Boost_INCLUDE_DIR}) - # ANTLR4 Runtime (installed e.g. via brew install antlr4-cpp-runtime) find_package(ANTLR4Runtime REQUIRED) diff --git a/tuplex/codegen/src/SymbolTable.cc b/tuplex/codegen/src/SymbolTable.cc index d6e426bc8..99f9bb9d6 100644 --- a/tuplex/codegen/src/SymbolTable.cc +++ b/tuplex/codegen/src/SymbolTable.cc @@ -818,7 +818,9 @@ namespace tuplex { if(jt != scope->symbols.end()) { auto symbol = jt->second; python::Type matchType = python::Type::UNKNOWN; - if(symbol->findFunctionTypeBasedOnParameterType(parameterType, matchType)) + + // symbol may be nullptr, this indicates e.g. an attribute. + if(symbol && symbol->findFunctionTypeBasedOnParameterType(parameterType, matchType)) return matchType; } } diff --git a/tuplex/test/core/SymbolsTest.cc b/tuplex/test/core/SymbolsTest.cc new file mode 100644 index 000000000..fff2b8f40 --- /dev/null +++ b/tuplex/test/core/SymbolsTest.cc @@ -0,0 +1,27 @@ +//--------------------------------------------------------------------------------------------------------------------// +// // +// Tuplex: Blazing Fast Python Data Science // +// // +// // +// (c) 2017 - 2021, Tuplex team // +// Created by Leonhard Spiegelberg first on 4/22/2022 // +// License: Apache 2.0 // +//--------------------------------------------------------------------------------------------------------------------// + +#include "gtest/gtest.h" +#include +#include "../../utils/include/Utils.h" +#include "TestUtils.h" + +class SymbolProcessTest : public PyTest {}; + +TEST_F(SymbolProcessTest, MissingSymbol) { + // make sure code doesn't crash when symbols are missing + using namespace tuplex; + using namespace std; + // c.csv(...).mapColumn('title', lambda x: split(x)[0]) --> split is a non-defined symbol! + auto path = "../resources/zillow_data.csv"; + Context c(microTestOptions()); + + auto v = c.csv(path).mapColumn("title", UDF("lambda x: split(x)[0]")).collectAsVector(); +} \ No newline at end of file