From bd09152affd77b86adb8cdc0c4a17754dd00d30b Mon Sep 17 00:00:00 2001 From: Aleksandar Fabijanic Date: Sun, 4 Jan 2026 22:13:58 -0600 Subject: [PATCH] feat(ODBC): nix shells for mssql and oracle #5144 (#5145) * feat(ODBC): nix shells for mssql and oracle #5144 * fix(cmake): not using cppignore #5146 * fix(Data/ODBC): Improve Nix CI container startup and debugging Oracle (oracle.nix): - Add --shm-size=1g for Oracle container (requires 1GB shared memory) - Add container state verification before exec commands - Add proper error handling with container log output on failure - Add pre-flight checks in build_and_test to verify container running - Add Podman environment info for CI debugging - Add progress indicators during Oracle startup wait - Exit with error in CI mode if container fails to start MSSQL (mssql.nix): - Add ODBCINSTINI environment variable - Add sync command to flush ODBC configs to disk - Add odbcinst verification commands Temporarily disable all ci except nix #5144 * try newer oracle version * use ubuntu 24.04 for nix ci (podman related) * chore(c): restore ci.yml * Update Data/ODBC/oracle.nix Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update Data/ODBC/oracle.nix Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update Data/ODBC/mssql.nix Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update Data/ODBC/oracle.nix Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix(odbc): verify oracle downloads #5144 * chore(doc): update nix documentation #5144 --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/workflows/ci.yml | 48 ++ ActiveRecord/testsuite/CMakeLists.txt | 7 +- CppParser/testsuite/CMakeLists.txt | 7 +- Crypto/testsuite/CMakeLists.txt | 7 +- Data/MySQL/testsuite/CMakeLists.txt | 7 +- Data/ODBC/.gitignore | 2 + Data/ODBC/mssql.nix | 268 +++++++++++ Data/ODBC/oracle.nix | 571 +++++++++++++++++++++++ Data/ODBC/testsuite/CMakeLists.txt | 7 +- Data/PostgreSQL/testsuite/CMakeLists.txt | 7 +- Data/SQLite/testsuite/CMakeLists.txt | 7 +- Data/testsuite/CMakeLists.txt | 7 +- Data/testsuite/testsuite.cmake | 7 +- Encodings/testsuite/CMakeLists.txt | 7 +- Foundation/testsuite/CMakeLists.txt | 7 +- JSON/testsuite/CMakeLists.txt | 7 +- JWT/testsuite/CMakeLists.txt | 7 +- MongoDB/testsuite/CMakeLists.txt | 8 +- Net/testsuite/CMakeLists.txt | 7 +- NetSSL_OpenSSL/testsuite/CMakeLists.txt | 7 +- NetSSL_Win/testsuite/CMakeLists.txt | 3 +- PDF/testsuite/CMakeLists.txt | 7 +- Prometheus/testsuite/CMakeLists.txt | 8 +- Redis/testsuite/CMakeLists.txt | 7 +- Util/testsuite/CMakeLists.txt | 7 +- XML/testsuite/CMakeLists.txt | 7 +- Zip/testsuite/CMakeLists.txt | 8 +- modules/testsuite/CMakeLists.txt | 7 +- 28 files changed, 1032 insertions(+), 24 deletions(-) create mode 100644 Data/ODBC/.gitignore create mode 100644 Data/ODBC/mssql.nix create mode 100644 Data/ODBC/oracle.nix diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 22d31a4bd..8ed3f1172 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1029,6 +1029,54 @@ jobs: PWD=`pwd` ctest --output-on-failure + nix-gcc-make-odbc-sqlserver: + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + + - name: Install Nix + uses: cachix/install-nix-action@v27 + with: + nix_path: nixpkgs=channel:nixos-unstable + + - name: Install uidmap for rootless podman + run: sudo apt-get update && sudo apt-get install -y uidmap + + - name: Configure subuid/subgid for rootless podman + run: | + sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $USER + + - uses: ./.github/actions/retry-action + with: + timeout_minutes: 90 + max_attempts: 3 + retry_on: any + command: nix-shell Data/ODBC/mssql.nix --pure --run "build_and_test" + + nix-gcc-make-odbc-oracle: + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + + - name: Install Nix + uses: cachix/install-nix-action@v27 + with: + nix_path: nixpkgs=channel:nixos-unstable + + - name: Install uidmap for rootless podman + run: sudo apt-get update && sudo apt-get install -y uidmap + + - name: Configure subuid/subgid for rootless podman + run: | + sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $USER + + - uses: ./.github/actions/retry-action + with: + timeout_minutes: 90 + max_attempts: 3 + retry_on: any + command: nix-shell Data/ODBC/oracle.nix --pure --run "build_and_test" + linux-gcc-cmake-sqlite-no-sqlparser: runs-on: ubuntu-24.04 steps: diff --git a/ActiveRecord/testsuite/CMakeLists.txt b/ActiveRecord/testsuite/CMakeLists.txt index 05a07a46a..7c21ffaff 100644 --- a/ActiveRecord/testsuite/CMakeLists.txt +++ b/ActiveRecord/testsuite/CMakeLists.txt @@ -19,10 +19,15 @@ if(ANDROID) COMMAND ${CMAKE_COMMAND} -DANDROID_NDK=${ANDROID_NDK} -DLIBRARY_DIR=${CMAKE_BINARY_DIR}/lib -DUNITTEST=${CMAKE_BINARY_DIR}/bin/ActiveRecord-testrunner -DTEST_PARAMETER=-all -P ${PROJECT_SOURCE_DIR}/cmake/ExecuteOnAndroid.cmake ) else() + if(WIN32) + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.win") + else() + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.lnx") + endif() add_test( NAME ActiveRecord WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ActiveRecord-testrunner -ignore ${PROJECT_SOURCE_DIR}/cppignore.lnx -all + COMMAND ActiveRecord-testrunner -ignore ${CPPIGNORE_FILE} -all ) set_tests_properties(ActiveRecord PROPERTIES ENVIRONMENT POCO_BASE=${PROJECT_SOURCE_DIR}) endif() diff --git a/CppParser/testsuite/CMakeLists.txt b/CppParser/testsuite/CMakeLists.txt index c482a6974..cc40f4bc3 100644 --- a/CppParser/testsuite/CMakeLists.txt +++ b/CppParser/testsuite/CMakeLists.txt @@ -19,10 +19,15 @@ if(ANDROID) COMMAND ${CMAKE_COMMAND} -DANDROID_NDK=${ANDROID_NDK} -DLIBRARY_DIR=${CMAKE_BINARY_DIR}/lib -DUNITTEST=${CMAKE_BINARY_DIR}/bin/CppParser-testrunner -DTEST_PARAMETER=-all -P ${PROJECT_SOURCE_DIR}/cmake/ExecuteOnAndroid.cmake ) else() + if(WIN32) + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.win") + else() + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.lnx") + endif() add_test( NAME CppParser WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND CppParser-testrunner -ignore ${PROJECT_SOURCE_DIR}/cppignore.lnx -all + COMMAND CppParser-testrunner -ignore ${CPPIGNORE_FILE} -all ) set_tests_properties(CppParser PROPERTIES ENVIRONMENT POCO_BASE=${PROJECT_SOURCE_DIR}) endif() diff --git a/Crypto/testsuite/CMakeLists.txt b/Crypto/testsuite/CMakeLists.txt index a9e04df70..d76938689 100644 --- a/Crypto/testsuite/CMakeLists.txt +++ b/Crypto/testsuite/CMakeLists.txt @@ -19,10 +19,15 @@ if(ANDROID) COMMAND ${CMAKE_COMMAND} -DANDROID_NDK=${ANDROID_NDK} -DLIBRARY_DIR=${CMAKE_BINARY_DIR}/lib -DUNITTEST=${CMAKE_BINARY_DIR}/bin/Crypto-testrunner -DTEST_PARAMETER=-all -P ${PROJECT_SOURCE_DIR}/cmake/ExecuteOnAndroid.cmake ) else() + if(WIN32) + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.win") + else() + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.lnx") + endif() add_test( NAME Crypto WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND Crypto-testrunner -ignore ${PROJECT_SOURCE_DIR}/cppignore.lnx -all + COMMAND Crypto-testrunner -ignore ${CPPIGNORE_FILE} -all ) set_tests_properties(Crypto PROPERTIES ENVIRONMENT POCO_BASE=${PROJECT_SOURCE_DIR}) endif() diff --git a/Data/MySQL/testsuite/CMakeLists.txt b/Data/MySQL/testsuite/CMakeLists.txt index 729b330fb..9425fc51e 100644 --- a/Data/MySQL/testsuite/CMakeLists.txt +++ b/Data/MySQL/testsuite/CMakeLists.txt @@ -19,10 +19,15 @@ if(ANDROID) COMMAND ${CMAKE_COMMAND} -DANDROID_NDK=${ANDROID_NDK} -DLIBRARY_DIR=${CMAKE_BINARY_DIR}/lib -DUNITTEST=${CMAKE_BINARY_DIR}/bin/DataMySQL-testrunner -DTEST_PARAMETER=-all -P ${PROJECT_SOURCE_DIR}/cmake/ExecuteOnAndroid.cmake ) else() + if(WIN32) + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.win") + else() + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.lnx") + endif() add_test( NAME DataMySQL WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND DataMySQL-testrunner -ignore ${PROJECT_SOURCE_DIR}/cppignore.lnx -all + COMMAND DataMySQL-testrunner -ignore ${CPPIGNORE_FILE} -all ) set_tests_properties(DataMySQL PROPERTIES ENVIRONMENT POCO_BASE=${PROJECT_SOURCE_DIR}) endif() diff --git a/Data/ODBC/.gitignore b/Data/ODBC/.gitignore new file mode 100644 index 000000000..25c116dd9 --- /dev/null +++ b/Data/ODBC/.gitignore @@ -0,0 +1,2 @@ +.nix-mssql-data/ +.nix-oracle-data/ diff --git a/Data/ODBC/mssql.nix b/Data/ODBC/mssql.nix new file mode 100644 index 000000000..38eb0a52a --- /dev/null +++ b/Data/ODBC/mssql.nix @@ -0,0 +1,268 @@ +# Nix shell environment for running Poco::Data::ODBC tests with SQL Server. +# +# Install Nix (if not already installed): +# sh <(curl -L https://nixos.org/nix/install) --daemon +# +# Prerequisites (Debian/Ubuntu): +# sudo apt-get install uidmap +# +# Usage: +# nix-shell mssql.nix [--pure] +# +# (--pure is recommended to avoid interference from host environment) +# +# This sets up SQL Server via Podman with the Microsoft ODBC driver, +# and configures the Poco build environment. The database starts +# automatically and stops when the shell exits. +# +# Test database: model (user: sa, password: Pocopoco1) +# +# Notes: +# - On first run, you may be prompted for sudo password to configure +# subuid/subgid for rootless podman (one-time setup). +# - The Microsoft ODBC driver (msodbcsql18) is unfree software; +# this shell.nix automatically allows it. +# +# Cleanup/Reset: +# To completely reset the environment (e.g., for a fresh start): +# podman stop poco-mssql-test && podman rm poco-mssql-test +# rm -rf Data/ODBC/.nix-mssql-data +# This removes the container and all cached data (ODBC config). + +{ + pkgs ? import { + config = { + allowUnfreePredicate = pkg: + let name = pkg.pname or (builtins.parseDrvName pkg.name).name; + in builtins.elem name [ "msodbcsql18" ]; + }; + } +}: + +let + dataDir = builtins.toString ./.nix-mssql-data; + containerName = "poco-mssql-test"; + mssqlPassword = "Pocopoco1"; + mssqlPort = "1433"; +in +pkgs.mkShell { + buildInputs = with pkgs; [ + # Container runtime + podman + + # Database tools + unixODBC + unixODBCDrivers.msodbcsql18 + libtool # for libltdl + + # Build tools + cmake + pkg-config + gnumake + gcc + clang + openssl + zlib + pcre2 + + # Standard utilities needed by Poco build + coreutils + findutils + gnugrep + gnused + gawk + hostname + which + procps # ps, pgrep, etc. + inetutils # netstat, etc. + ]; + + # ODBC configuration for Poco build + POCO_ODBC_INCLUDE = "${pkgs.unixODBC}/include"; + POCO_ODBC_LIB = "${pkgs.unixODBC}/lib"; + + ODBCSYSINI = "${dataDir}/odbc"; + ODBCINSTINI = "odbcinst.ini"; + ODBCINI = "${dataDir}/odbc/odbc.ini"; + + # SQL Server connection info for tests + POCO_ODBC_TEST_DATABASE_SERVER = "127.0.0.1"; + + shellHook = '' + export DATA_DIR="${dataDir}" + export CONTAINER_NAME="${containerName}" + export MSSQL_PASSWORD="${mssqlPassword}" + export MSSQL_PORT="${mssqlPort}" + + mkdir -p "$DATA_DIR" "$ODBCSYSINI" "$HOME/.config/containers" + + # Add system paths for setuid binaries needed by rootless podman + export PATH="$PATH:/usr/bin:/usr/sbin" + + # Check for newuidmap (required for rootless podman) + if ! command -v newuidmap >/dev/null 2>&1; then + echo "ERROR: newuidmap not found. On Debian/Ubuntu, install with:" + echo " sudo apt-get install uidmap" + echo "Then re-enter this nix-shell." + fi + + # Check and configure subuid/subgid for rootless podman + if ! grep -q "^$USER:" /etc/subuid 2>/dev/null; then + echo "Rootless podman requires subuid/subgid configuration." + SUDO_CMD="" + for s in /usr/bin/sudo /run/wrappers/bin/sudo /usr/local/bin/sudo; do + [ -x "$s" ] && SUDO_CMD="$s" && break + done + if [ -n "$SUDO_CMD" ]; then + echo "Running: $SUDO_CMD usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $USER" + "$SUDO_CMD" usermod --add-subuids 100000-165535 --add-subgids 100000-165535 "$USER" + else + echo "ERROR: sudo not found. Please run outside the nix-shell:" + echo " sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $USER" + fi + fi + + # Always run podman system migrate to pick up PATH and subuid changes + podman system migrate 2>/dev/null || true + + # Configure Podman policy for rootless mode if not present + if [ ! -f "$HOME/.config/containers/policy.json" ]; then + cat > "$HOME/.config/containers/policy.json" << 'POLICYJSON' +{ + "default": [ + { + "type": "insecureAcceptAnything" + } + ] +} +POLICYJSON + fi + + # Configure Poco and source environment + POCO_BASE="$(cd "$DATA_DIR/../../.." && pwd)" + (cd "$POCO_BASE" && ./configure) + source "$POCO_BASE/poco_env.bash" + + # Add ODBC driver and its dependencies to library path (after poco_env.bash which sets LD_LIBRARY_PATH) + export LD_LIBRARY_PATH="${pkgs.unixODBCDrivers.msodbcsql18}/lib:${pkgs.openssl.out}/lib:${pkgs.stdenv.cc.cc.lib}/lib:${pkgs.unixODBC}/lib''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" + + cat > "$ODBCSYSINI/odbcinst.ini" << EOF +[ODBC Driver 18 for SQL Server] +Description = Microsoft ODBC Driver 18 for SQL Server +Driver = ${pkgs.unixODBCDrivers.msodbcsql18}/lib/libmsodbcsql-18.1.so.1.1 +UsageCount = 1 +EOF + + cat > "$ODBCINI" << EOF +[PocoDataSQLServerTest] +Description = Poco SQL Server Test Database +Driver = ODBC Driver 18 for SQL Server +Server = 127.0.0.1 +Port = 1433 +Database = model +TrustServerCertificate = yes +Encrypt = no +EOF + + # Flush files to disk to avoid potential race conditions + sync + + # Verify ODBC configuration + echo "Verifying ODBC configuration..." + odbcinst -j + echo "Registered drivers:" + odbcinst -q -d + echo "Registered DSNs:" + odbcinst -q -s + + start_mssql() { + if ! podman ps --format '{{.Names}}' | grep -q "^${containerName}$"; then + # Check if container exists but is stopped + if podman ps -a --format '{{.Names}}' | grep -q "^${containerName}$"; then + echo "Starting existing SQL Server container..." + podman start "$CONTAINER_NAME" + else + echo "Creating and starting SQL Server container..." + podman run -d --replace \ + --name "$CONTAINER_NAME" \ + -e "ACCEPT_EULA=Y" \ + -e "MSSQL_SA_PASSWORD=$MSSQL_PASSWORD" \ + -e "MSSQL_PID=Express" \ + -p "$MSSQL_PORT:1433" \ + mcr.microsoft.com/mssql/server:2022-latest + fi + + echo "Waiting for SQL Server to be ready..." + for i in $(seq 1 30); do + if podman exec "$CONTAINER_NAME" /opt/mssql-tools18/bin/sqlcmd \ + -S localhost -U sa -P "$MSSQL_PASSWORD" \ + -C -Q "SELECT 1" > /dev/null 2>&1; then + echo "SQL Server is ready!" + break + fi + if [ "$i" -eq 30 ]; then + echo "Warning: SQL Server may not be fully ready yet" + fi + sleep 2 + done + else + echo "SQL Server container already running" + fi + } + + stop_mssql() { + if podman ps --format '{{.Names}}' | grep -q "^${containerName}$"; then + echo "Stopping SQL Server container..." + podman stop "$CONTAINER_NAME" > /dev/null 2>&1 || true + fi + } + + remove_mssql() { + stop_mssql + if podman ps -a --format '{{.Names}}' | grep -q "^${containerName}$"; then + echo "Removing SQL Server container..." + podman rm "$CONTAINER_NAME" > /dev/null 2>&1 || true + fi + } + + mssql_shell() { + podman exec -it "$CONTAINER_NAME" /opt/mssql-tools18/bin/sqlcmd \ + -S localhost -U sa -P "$MSSQL_PASSWORD" -C + } + + build_and_test() { + echo "Building Poco ODBC components..." + make -s -j$(nproc) -C "$POCO_BASE/CppUnit" + make -s -j$(nproc) -C "$POCO_BASE/Foundation" + make -s -j$(nproc) -C "$POCO_BASE/Data" + make -s -j$(nproc) -C "$POCO_BASE/Data/DataTest" + make -s -j$(nproc) -C "$POCO_BASE/Data/ODBC" + make -s -j$(nproc) -C "$POCO_BASE/Data/ODBC/testsuite" + + echo "Running ODBC tests..." + "$POCO_BASE/Data/ODBC/testsuite/bin/$OSNAME/$OSARCH/testrunner" -all + } + + trap stop_mssql EXIT + + export -f start_mssql stop_mssql remove_mssql mssql_shell build_and_test + + # Auto-start database + start_mssql + + # For CI, use: nix-shell mssql.nix --pure --run "build_and_test" + if [ -t 0 ]; then + echo "" + echo "=== Poco SQL Server ODBC Test Environment ===" + echo "Container: $CONTAINER_NAME" + echo "" + echo "Commands:" + echo " build_and_test - Build and run tests" + echo " start_mssql - Start the SQL Server container" + echo " stop_mssql - Stop the SQL Server container" + echo " remove_mssql - Stop and remove the SQL Server container" + echo " mssql_shell - Open SQL Server command line" + echo "" + fi + ''; +} diff --git a/Data/ODBC/oracle.nix b/Data/ODBC/oracle.nix new file mode 100644 index 000000000..572fe8b34 --- /dev/null +++ b/Data/ODBC/oracle.nix @@ -0,0 +1,571 @@ +# Nix shell environment for running Poco::Data::ODBC tests with Oracle. +# +# Install Nix (if not already installed): +# sh <(curl -L https://nixos.org/nix/install) --daemon +# +# Usage: +# nix-shell oracle.nix [--pure] +# +# (--pure is recommended to avoid interference from host environment) +# +# This sets up Oracle Free via Podman with the Oracle Instant Client ODBC driver, +# and configures the Poco build environment. The database starts +# automatically and stops when the shell exits. +# +# Test database: FREEPDB1 (user: poco, password: poco) +# +# Notes: +# - On first run, you may be prompted for sudo password to configure +# subuid/subgid for rootless podman (one-time setup). +# - Oracle Instant Client is downloaded automatically on first run. +# - The Oracle Free container image is publicly available (no login required). +# - The Oracle container image is large (~1.5GB) and may take time to download. +# - Oracle startup takes several minutes; be patient on first run. +# +# Cleanup/Reset: +# To completely reset the environment (e.g., after failed download or for a fresh start): +# podman stop poco-oracle-test && podman rm poco-oracle-test +# rm -rf Data/ODBC/.nix-oracle-data +# This removes the container and all cached data (ODBC config, Oracle Instant Client). + +{ pkgs ? import {} }: + +let + dataDir = builtins.toString ./.nix-oracle-data; + containerName = "poco-oracle-test"; + oraclePassword = "poco"; + oraclePort = "1521"; + instantClientVersion = "23_26"; + instantClientFullVersion = "23.26.0.0.0"; + instantClientPathVersion = "2326000"; + + # SHA256 checksums for Oracle Instant Client packages + # To update: download the files manually and run `sha256sum ` + # Or run with placeholders first - the script will compute and print the actual hashes. + # + # x64 checksums for version 23.26.0.0.0: + # (Set to "placeholder-update-after-first-download" to compute on first run) + instantClientBasicSha256_x64 = "placeholder-update-after-first-download"; + instantClientOdbcSha256_x64 = "placeholder-update-after-first-download"; + # ARM64 uses "latest" URLs without version numbers - hashes may change when Oracle updates + instantClientBasicSha256_arm64 = "9c9a32051e97f087016fb334b7ad5c0aea8511ca8363afd8e0dc6ec4fc515c32"; + instantClientOdbcSha256_arm64 = "11b2d0d53b15145a79b00837bbd6556314486f28e734ba909695c6f051c5d279"; +in +pkgs.mkShell { + buildInputs = with pkgs; [ + # Container runtime + podman + + # Database tools + unixODBC + libtool # for libltdl + libaio # required by Oracle Instant Client + + # Download tools + curl + unzip + cacert # SSL certificates for curl + + # Build tools + cmake + pkg-config + gnumake + gcc + clang + openssl + zlib + pcre2 + + # Standard utilities needed by Poco build + coreutils + findutils + gnugrep + gnused + gawk + hostname + which + procps # ps, pgrep, etc. + inetutils # netstat, etc. + ]; + + # ODBC configuration for Poco build + POCO_ODBC_INCLUDE = "${pkgs.unixODBC}/include"; + POCO_ODBC_LIB = "${pkgs.unixODBC}/lib"; + + ODBCSYSINI = "${dataDir}/odbc"; + ODBCINSTINI = "odbcinst.ini"; + ODBCINI = "${dataDir}/odbc/odbc.ini"; + + # Oracle connection info for tests + POCO_ODBC_TEST_DATABASE_SERVER = "127.0.0.1"; + + shellHook = '' + export DATA_DIR="${dataDir}" + export CONTAINER_NAME="${containerName}" + export ORACLE_PASSWORD="${oraclePassword}" + export ORACLE_PORT="${oraclePort}" + export INSTANT_CLIENT_VERSION="${instantClientVersion}" + export INSTANT_CLIENT_DIR="$DATA_DIR/instantclient_${instantClientVersion}" + + mkdir -p "$DATA_DIR" "$ODBCSYSINI" "$HOME/.config/containers" + + # Set SSL certificate path for curl + export SSL_CERT_FILE="${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt" + + # Add system paths for setuid binaries needed by rootless podman + export PATH="$PATH:/usr/bin:/usr/sbin" + + # Check for newuidmap (required for rootless podman) + if ! command -v newuidmap >/dev/null 2>&1; then + echo "ERROR: newuidmap not found. On Debian/Ubuntu, install with:" + echo " sudo apt-get install uidmap" + echo "Then re-enter this nix-shell." + fi + + # Check and configure subuid/subgid for rootless podman + if ! grep -q "^$USER:" /etc/subuid 2>/dev/null; then + echo "Rootless podman requires subuid/subgid configuration." + SUDO_CMD="" + for s in /usr/bin/sudo /run/wrappers/bin/sudo /usr/local/bin/sudo; do + [ -x "$s" ] && SUDO_CMD="$s" && break + done + if [ -n "$SUDO_CMD" ]; then + echo "Running: $SUDO_CMD usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $USER" + "$SUDO_CMD" usermod --add-subuids 100000-165535 --add-subgids 100000-165535 "$USER" + else + echo "ERROR: sudo not found. Please run outside the nix-shell:" + echo " sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $USER" + fi + fi + + # Always run podman system migrate to pick up PATH and subuid changes + podman system migrate 2>/dev/null || true + + # Show Podman info for debugging CI issues + echo "=== Podman Environment ===" + podman --version + echo "Podman info:" + podman info --format '{{.Host.OS}} {{.Host.Arch}} {{.Host.MemTotal}} {{.Host.SwapTotal}}' 2>/dev/null || true + echo "Storage driver: $(podman info --format '{{.Store.GraphDriverName}}' 2>/dev/null || echo 'unknown')" + echo "===========================" + + # Configure Podman policy for rootless mode if not present + if [ ! -f "$HOME/.config/containers/policy.json" ]; then + cat > "$HOME/.config/containers/policy.json" << 'POLICYJSON' +{ + "default": [ + { + "type": "insecureAcceptAnything" + } + ] +} +POLICYJSON + fi + + # Download Oracle Instant Client if not present + if [ ! -d "$INSTANT_CLIENT_DIR" ]; then + ( + set -e # Exit subshell on any error + echo "Downloading Oracle Instant Client..." + mkdir -p "$DATA_DIR/downloads" + cd "$DATA_DIR/downloads" + + # Detect architecture and set download URLs and expected checksums + # Note: ARM64 uses different URL format than x64 + ARCH=$(uname -m) + if [ "$ARCH" = "x86_64" ]; then + BASIC_URL="https://download.oracle.com/otn_software/linux/instantclient/${instantClientPathVersion}/instantclient-basic-linux.x64-${instantClientFullVersion}.zip" + ODBC_URL="https://download.oracle.com/otn_software/linux/instantclient/${instantClientPathVersion}/instantclient-odbc-linux.x64-${instantClientFullVersion}.zip" + BASIC_ZIP="instantclient-basic-linux.x64-${instantClientFullVersion}.zip" + ODBC_ZIP="instantclient-odbc-linux.x64-${instantClientFullVersion}.zip" + EXPECTED_BASIC_SHA256="${instantClientBasicSha256_x64}" + EXPECTED_ODBC_SHA256="${instantClientOdbcSha256_x64}" + elif [ "$ARCH" = "aarch64" ]; then + # ARM64 uses simplified URLs without version numbers + BASIC_URL="https://download.oracle.com/otn_software/linux/instantclient/instantclient-basic-linux-arm64.zip" + ODBC_URL="https://download.oracle.com/otn_software/linux/instantclient/instantclient-odbc-linux-arm64.zip" + BASIC_ZIP="instantclient-basic-linux-arm64.zip" + ODBC_ZIP="instantclient-odbc-linux-arm64.zip" + EXPECTED_BASIC_SHA256="${instantClientBasicSha256_arm64}" + EXPECTED_ODBC_SHA256="${instantClientOdbcSha256_arm64}" + else + echo "ERROR: Unsupported architecture: $ARCH" + exit 1 + fi + + echo "Downloading: $BASIC_URL" + curl -L -f -o "$BASIC_ZIP" "$BASIC_URL" || { echo "ERROR: Failed to download basic package"; exit 1; } + + echo "Downloading: $ODBC_URL" + curl -L -f -o "$ODBC_ZIP" "$ODBC_URL" || { echo "ERROR: Failed to download ODBC package"; exit 1; } + + # Validate downloaded files are actual ZIP files (not HTML error pages) + echo "Validating downloaded files..." + for zipfile in "$BASIC_ZIP" "$ODBC_ZIP"; do + filesize=$({ stat -c%s "$zipfile" 2>/dev/null || stat -f%z "$zipfile" 2>/dev/null || wc -c <"$zipfile"; }) + if [ -z "$filesize" ]; then + echo "ERROR: Failed to determine size of $zipfile" + exit 1 + fi + echo " $zipfile: $filesize bytes" + if [ "$filesize" -lt 100000 ]; then + echo "ERROR: $zipfile is too small ($filesize bytes) - likely an error page" + echo "Contents:" + head -20 "$zipfile" + exit 1 + fi + # Check ZIP magic number (PK) + if ! head -c2 "$zipfile" | grep -q "PK"; then + echo "ERROR: $zipfile is not a valid ZIP file" + echo "First 100 bytes:" + head -c100 "$zipfile" + exit 1 + fi + done + + # Verify SHA256 checksums for integrity/security + echo "Verifying SHA256 checksums..." + CHECKSUM_FILE="$DATA_DIR/checksums-$ARCH.txt" + verify_sha256() { + local file="$1" + local expected="$2" + local varname="$3" + local actual + actual=$(sha256sum "$file" | cut -d' ' -f1) + # Save computed checksum to file for easy updating of oracle.nix + echo "$varname = \"$actual\";" >> "$CHECKSUM_FILE" + if [ "$expected" = "placeholder-update-after-first-download" ]; then + echo "WARNING: No checksum configured for $file" + echo " Computed SHA256: $actual" + echo " Please update oracle.nix with this checksum for security." + return 0 + fi + if [ "$actual" != "$expected" ]; then + echo "ERROR: SHA256 checksum mismatch for $file" + echo " Expected: $expected" + echo " Actual: $actual" + echo "" + echo "This could indicate a corrupted download or a security compromise." + echo "If Oracle has released a new version, update the checksums in oracle.nix." + return 1 + fi + echo " $file: OK" + return 0 + } + + rm -f "$CHECKSUM_FILE" + NEEDS_CHECKSUM_UPDATE=0 + if [ "$ARCH" = "x86_64" ]; then + verify_sha256 "$BASIC_ZIP" "$EXPECTED_BASIC_SHA256" "instantClientBasicSha256_x64" || exit 1 + verify_sha256 "$ODBC_ZIP" "$EXPECTED_ODBC_SHA256" "instantClientOdbcSha256_x64" || exit 1 + [[ "$EXPECTED_BASIC_SHA256" == "placeholder"* ]] && NEEDS_CHECKSUM_UPDATE=1 + [[ "$EXPECTED_ODBC_SHA256" == "placeholder"* ]] && NEEDS_CHECKSUM_UPDATE=1 + else + verify_sha256 "$BASIC_ZIP" "$EXPECTED_BASIC_SHA256" "instantClientBasicSha256_arm64" || exit 1 + verify_sha256 "$ODBC_ZIP" "$EXPECTED_ODBC_SHA256" "instantClientOdbcSha256_arm64" || exit 1 + [[ "$EXPECTED_BASIC_SHA256" == "placeholder"* ]] && NEEDS_CHECKSUM_UPDATE=1 + [[ "$EXPECTED_ODBC_SHA256" == "placeholder"* ]] && NEEDS_CHECKSUM_UPDATE=1 + fi + if [ "$NEEDS_CHECKSUM_UPDATE" -eq 1 ] && [ -f "$CHECKSUM_FILE" ]; then + echo "" + echo "=== Copy these checksums to oracle.nix ===" + cat "$CHECKSUM_FILE" + echo "===========================================" + fi + + echo "Extracting Oracle Instant Client..." + unzip -o "$BASIC_ZIP" -d "$DATA_DIR" + unzip -o "$ODBC_ZIP" -d "$DATA_DIR" + ) + download_status=$? + + # Check if download subshell succeeded + if [ "$download_status" -ne 0 ]; then + echo "" + echo "=== ORACLE INSTANT CLIENT DOWNLOAD FAILED ===" + echo "Could not download or extract Oracle Instant Client." + echo "Please check network connectivity and try again." + echo "" + if [ ! -t 0 ]; then + exit 1 + fi + fi + + # Find the actual extracted directory (version may differ) + EXTRACTED_DIR=$(ls -d "$DATA_DIR"/instantclient_* 2>/dev/null | head -1) + if [ -n "$EXTRACTED_DIR" ] && [ "$EXTRACTED_DIR" != "$INSTANT_CLIENT_DIR" ]; then + echo "Linking $EXTRACTED_DIR to $INSTANT_CLIENT_DIR" + ln -sfn "$(basename "$EXTRACTED_DIR")" "$INSTANT_CLIENT_DIR" + fi + fi + + # Configure Poco and source environment + POCO_BASE="$(cd "$DATA_DIR/../../.." && pwd)" + (cd "$POCO_BASE" && ./configure) + source "$POCO_BASE/poco_env.bash" + + # Add Oracle Instant Client and ODBC dependencies to library path + export LD_LIBRARY_PATH="$INSTANT_CLIENT_DIR:${pkgs.libaio}/lib:${pkgs.openssl.out}/lib:${pkgs.stdenv.cc.cc.lib}/lib:${pkgs.unixODBC}/lib''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" + + # Find the ODBC driver library + echo "Looking for Oracle ODBC driver in: $INSTANT_CLIENT_DIR" + ls -la "$INSTANT_CLIENT_DIR"/libsqora* 2>/dev/null || echo "No libsqora files found" + ODBC_DRIVER_LIB=$(ls "$INSTANT_CLIENT_DIR"/libsqora.so* 2>/dev/null | head -1) + if [ -z "$ODBC_DRIVER_LIB" ]; then + echo "WARNING: Oracle ODBC driver library not found in $INSTANT_CLIENT_DIR" + echo "Contents of $INSTANT_CLIENT_DIR:" + ls -la "$INSTANT_CLIENT_DIR/" 2>/dev/null || echo "(failed to list directory)" + echo "No Oracle ODBC driver will be configured; odbcinst.ini may be invalid." + else + echo "Using ODBC driver library: $ODBC_DRIVER_LIB" + fi + + cat > "$ODBCSYSINI/odbcinst.ini" << EOF +[Oracle 23 ODBC driver] +Description = Oracle ODBC driver for Oracle 23 +Driver = $ODBC_DRIVER_LIB +UsageCount = 1 +EOF + echo "Wrote odbcinst.ini:" + cat "$ODBCSYSINI/odbcinst.ini" + + cat > "$ODBCINI" << EOF +[PocoDataOracleTest] +Description = Poco Oracle Test Database +Driver = Oracle 23 ODBC driver +ServerName = //127.0.0.1:${oraclePort}/FREEPDB1 +UserID = poco +Password = poco +EOF + + # Flush files to disk to avoid potential race conditions + sync + + # Verify ODBC configuration is correct + echo "Verifying ODBC configuration..." + odbcinst -j + echo "Registered drivers:" + odbcinst -q -d + echo "Registered DSNs:" + odbcinst -q -s + + start_oracle() { + if ! podman ps --format '{{.Names}}' | grep -q "^${containerName}$"; then + # Check if container exists but is stopped + if podman ps -a --format '{{.Names}}' | grep -q "^${containerName}$"; then + echo "Starting existing Oracle container..." + if ! podman start "$CONTAINER_NAME"; then + echo "ERROR: Failed to start existing container. Removing and recreating..." + podman rm -f "$CONTAINER_NAME" 2>/dev/null || true + fi + fi + + # Check if we need to create a new container + if ! podman ps --format '{{.Names}}' | grep -q "^${containerName}$"; then + echo "Creating and starting Oracle container (this may take a while on first run)..." + # Oracle requires at least 1GB of shared memory + if ! podman run -d --replace \ + --name "$CONTAINER_NAME" \ + --shm-size=1g \ + -e "ORACLE_PWD=$ORACLE_PASSWORD" \ + -p "$ORACLE_PORT:1521" \ + container-registry.oracle.com/database/free:23.5.0.0-lite; then + echo "ERROR: Failed to create Oracle container" + echo "Container logs:" + podman logs "$CONTAINER_NAME" 2>&1 || echo "(no logs available)" + return 1 + fi + fi + + # Wait for container to be in running state + echo "Waiting for container to reach running state..." + for i in $(seq 1 30); do + CONTAINER_STATE=$(podman inspect --format '{{.State.Status}}' "$CONTAINER_NAME" 2>/dev/null || echo "unknown") + echo "Container state: $CONTAINER_STATE" + if [ "$CONTAINER_STATE" = "running" ]; then + echo "Container is running" + break + elif [ "$CONTAINER_STATE" = "exited" ] || [ "$CONTAINER_STATE" = "dead" ]; then + echo "ERROR: Container exited unexpectedly" + echo "Container logs:" + podman logs "$CONTAINER_NAME" 2>&1 || echo "(no logs available)" + return 1 + fi + if [ "$i" -eq 30 ]; then + echo "ERROR: Container failed to reach running state within 60 seconds" + echo "Container logs:" + podman logs "$CONTAINER_NAME" 2>&1 || echo "(no logs available)" + return 1 + fi + sleep 2 + done + + echo "Waiting for Oracle to be ready (this may take several minutes)..." + for i in $(seq 1 180); do + # First verify container is still running + CONTAINER_STATE=$(podman inspect --format '{{.State.Status}}' "$CONTAINER_NAME" 2>/dev/null || echo "unknown") + if [ "$CONTAINER_STATE" != "running" ]; then + echo "ERROR: Container stopped unexpectedly (state: $CONTAINER_STATE)" + echo "Container logs:" + podman logs "$CONTAINER_NAME" 2>&1 || echo "(no logs available)" + return 1 + fi + + # Check if FREEPDB1 is accessible + if podman exec "$CONTAINER_NAME" bash -c 'echo "SELECT 1 FROM DUAL;" | sqlplus -s sys/poco@localhost:1521/FREEPDB1 as sysdba 2>&1' | grep -q "^[[:space:]]*1"; then + echo "Oracle FREEPDB1 is ready!" + + # Wait a bit more to ensure listener is fully stable + sleep 5 + + # Create test user if it doesn't exist + echo "Creating test user 'poco'..." + podman exec "$CONTAINER_NAME" bash -c 'sqlplus -s sys/poco@localhost:1521/FREEPDB1 as sysdba <&1 || echo "(no logs available)" + return 1 + fi + # Progress indicator every 30 seconds + if [ $((i % 15)) -eq 0 ]; then + echo "Still waiting for Oracle... ($((i * 2)) seconds elapsed)" + fi + sleep 2 + done + else + echo "Oracle container already running" + fi + } + + stop_oracle() { + if podman ps --format '{{.Names}}' | grep -q "^${containerName}$"; then + echo "Stopping Oracle container..." + podman stop "$CONTAINER_NAME" > /dev/null 2>&1 || true + fi + } + + remove_oracle() { + stop_oracle + if podman ps -a --format '{{.Names}}' | grep -q "^${containerName}$"; then + echo "Removing Oracle container..." + podman rm "$CONTAINER_NAME" > /dev/null 2>&1 || true + fi + } + + oracle_shell() { + podman exec -it "$CONTAINER_NAME" sqlplus poco/poco@localhost:1521/FREEPDB1 + } + + build_and_test() { + # Pre-flight check: Verify Oracle container is running + echo "=== Pre-flight checks ===" + CONTAINER_STATE=$(podman inspect --format '{{.State.Status}}' "$CONTAINER_NAME" 2>/dev/null || echo "not_found") + echo "Oracle container state: $CONTAINER_STATE" + if [ "$CONTAINER_STATE" != "running" ]; then + echo "ERROR: Oracle container is not running (state: $CONTAINER_STATE)" + echo "Attempting to restart Oracle..." + if ! start_oracle; then + echo "ERROR: Failed to start Oracle container" + return 1 + fi + fi + + echo "Building Poco ODBC components..." + make -s -j$(nproc) -C "$POCO_BASE/CppUnit" + make -s -j$(nproc) -C "$POCO_BASE/Foundation" + make -s -j$(nproc) -C "$POCO_BASE/Data" + make -s -j$(nproc) -C "$POCO_BASE/Data/DataTest" + make -s -j$(nproc) -C "$POCO_BASE/Data/ODBC" + make -s -j$(nproc) -C "$POCO_BASE/Data/ODBC/testsuite" + + echo "" + echo "=== ODBC Configuration Debug ===" + echo "ODBCSYSINI=$ODBCSYSINI" + echo "ODBCINSTINI=$ODBCINSTINI" + echo "ODBCINI=$ODBCINI" + echo "" + echo "--- odbcinst.ini contents ---" + cat "$ODBCSYSINI/odbcinst.ini" + echo "" + echo "--- odbc.ini contents ---" + cat "$ODBCINI" + echo "" + echo "--- odbcinst verification ---" + odbcinst -j + echo "" + echo "--- Registered drivers (odbcinst -q -d) ---" + odbcinst -q -d + echo "" + echo "--- Registered DSNs (odbcinst -q -s) ---" + odbcinst -q -s + echo "" + echo "--- Driver details ---" + odbcinst -q -d -n "Oracle 23 ODBC driver" 2>&1 || echo "(failed to query driver details)" + echo "" + echo "--- DSN details ---" + odbcinst -q -s -n "PocoDataOracleTest" 2>&1 || echo "(failed to query DSN details)" + echo "" + echo "--- Checking for system ODBC configs ---" + ls -la /etc/odbcinst.ini 2>/dev/null || echo "/etc/odbcinst.ini not found" + ls -la /etc/odbc.ini 2>/dev/null || echo "/etc/odbc.ini not found" + echo "" + echo "--- Verifying driver library exists ---" + ls -la "$INSTANT_CLIENT_DIR"/libsqora* 2>/dev/null || echo "No libsqora files found" + ldd "$INSTANT_CLIENT_DIR"/libsqora.so* 2>&1 | head -20 || echo "(ldd failed)" + echo "================================" + echo "" + + # Final container state check before running tests + CONTAINER_STATE=$(podman inspect --format '{{.State.Status}}' "$CONTAINER_NAME" 2>/dev/null || echo "not_found") + echo "Oracle container state before tests: $CONTAINER_STATE" + if [ "$CONTAINER_STATE" != "running" ]; then + echo "ERROR: Oracle container stopped during build!" + return 1 + fi + + echo "Running ODBC tests..." + "$POCO_BASE/Data/ODBC/testsuite/bin/$OSNAME/$OSARCH/testrunner" -all + } + + trap stop_oracle EXIT + + export -f start_oracle stop_oracle remove_oracle oracle_shell build_and_test + + # Auto-start database + if ! start_oracle; then + echo "" + echo "=== ORACLE CONTAINER FAILED TO START ===" + echo "The Oracle container could not be started. See errors above." + echo "" + # In non-interactive mode (CI), exit with error + if [ ! -t 0 ]; then + exit 1 + fi + fi + + # For CI, use: nix-shell oracle.nix --pure --run "build_and_test" + if [ -t 0 ]; then + echo "" + echo "=== Poco Oracle ODBC Test Environment ===" + echo "Container: $CONTAINER_NAME" + echo "" + echo "Commands:" + echo " build_and_test - Build and run tests" + echo " start_oracle - Start the Oracle container" + echo " stop_oracle - Stop the Oracle container" + echo " remove_oracle - Stop and remove the Oracle container" + echo " oracle_shell - Open SQL*Plus command line" + echo "" + fi + ''; +} diff --git a/Data/ODBC/testsuite/CMakeLists.txt b/Data/ODBC/testsuite/CMakeLists.txt index 7991a997c..03d965ddb 100644 --- a/Data/ODBC/testsuite/CMakeLists.txt +++ b/Data/ODBC/testsuite/CMakeLists.txt @@ -19,10 +19,15 @@ if(ANDROID) COMMAND ${CMAKE_COMMAND} -DANDROID_NDK=${ANDROID_NDK} -DLIBRARY_DIR=${CMAKE_BINARY_DIR}/lib -DUNITTEST=${CMAKE_BINARY_DIR}/bin/DataODBC-testrunner -DTEST_PARAMETER=-all -P ${PROJECT_SOURCE_DIR}/cmake/ExecuteOnAndroid.cmake ) else() + if(WIN32) + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.win") + else() + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.lnx") + endif() add_test( NAME DataODBC WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND DataODBC-testrunner -ignore ${PROJECT_SOURCE_DIR}/cppignore.lnx -all + COMMAND DataODBC-testrunner -ignore ${CPPIGNORE_FILE} -all ) set_tests_properties(DataODBC PROPERTIES ENVIRONMENT POCO_BASE=${PROJECT_SOURCE_DIR}) endif() diff --git a/Data/PostgreSQL/testsuite/CMakeLists.txt b/Data/PostgreSQL/testsuite/CMakeLists.txt index dd4f36a1b..75cf09944 100644 --- a/Data/PostgreSQL/testsuite/CMakeLists.txt +++ b/Data/PostgreSQL/testsuite/CMakeLists.txt @@ -12,10 +12,15 @@ POCO_SOURCES_AUTO_PLAT(TEST_SRCS OFF add_executable(DataPostgreSQL-testrunner ${TEST_SRCS}) set_target_properties(DataPostgreSQL-testrunner PROPERTIES DEBUG_POSTFIX "d") +if(WIN32) + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.win") +else() + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.lnx") +endif() add_test( NAME DataPostgreSQL WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND DataPostgreSQL-testrunner -ignore ${PROJECT_SOURCE_DIR}/cppignore.lnx -all + COMMAND DataPostgreSQL-testrunner -ignore ${CPPIGNORE_FILE} -all ) set_tests_properties(DataPostgreSQL PROPERTIES ENVIRONMENT POCO_BASE=${PROJECT_SOURCE_DIR}) target_link_libraries(DataPostgreSQL-testrunner PUBLIC Poco::DataPostgreSQL Poco::DataTest CppUnit) diff --git a/Data/SQLite/testsuite/CMakeLists.txt b/Data/SQLite/testsuite/CMakeLists.txt index bbdaad0d2..cac69c6a0 100644 --- a/Data/SQLite/testsuite/CMakeLists.txt +++ b/Data/SQLite/testsuite/CMakeLists.txt @@ -20,10 +20,15 @@ if(ANDROID) COMMAND ${CMAKE_COMMAND} -DANDROID_NDK=${ANDROID_NDK} -DLIBRARY_DIR=${CMAKE_BINARY_DIR}/lib -DUNITTEST=${CMAKE_BINARY_DIR}/bin/DataSQLite-testrunner -DTEST_PARAMETER=-all -P ${PROJECT_SOURCE_DIR}/cmake/ExecuteOnAndroid.cmake ) else() + if(WIN32) + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.win") + else() + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.lnx") + endif() add_test( NAME DataSQLite WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND DataSQLite-testrunner -ignore ${PROJECT_SOURCE_DIR}/cppignore.lnx -all + COMMAND DataSQLite-testrunner -ignore ${CPPIGNORE_FILE} -all ) set_tests_properties(DataSQLite PROPERTIES ENVIRONMENT POCO_BASE=${PROJECT_SOURCE_DIR}) endif() diff --git a/Data/testsuite/CMakeLists.txt b/Data/testsuite/CMakeLists.txt index f44be1805..59abc2122 100644 --- a/Data/testsuite/CMakeLists.txt +++ b/Data/testsuite/CMakeLists.txt @@ -20,10 +20,15 @@ if(ANDROID) COMMAND ${CMAKE_COMMAND} -DANDROID_NDK=${ANDROID_NDK} -DLIBRARY_DIR=${CMAKE_BINARY_DIR}/lib -DUNITTEST=${CMAKE_BINARY_DIR}/bin/Data-testrunner -DTEST_PARAMETER=-all -P ${PROJECT_SOURCE_DIR}/cmake/ExecuteOnAndroid.cmake ) else() + if(WIN32) + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.win") + else() + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.lnx") + endif() add_test( NAME Data WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND Data-testrunner -ignore ${PROJECT_SOURCE_DIR}/cppignore.lnx -all + COMMAND Data-testrunner -ignore ${CPPIGNORE_FILE} -all ) set_tests_properties(Data PROPERTIES ENVIRONMENT POCO_BASE=${PROJECT_SOURCE_DIR}) endif() diff --git a/Data/testsuite/testsuite.cmake b/Data/testsuite/testsuite.cmake index 74f60beca..7266f6250 100644 --- a/Data/testsuite/testsuite.cmake +++ b/Data/testsuite/testsuite.cmake @@ -19,10 +19,15 @@ if(ANDROID) COMMAND ${CMAKE_COMMAND} -DANDROID_NDK=${ANDROID_NDK} -DLIBRARY_DIR=${CMAKE_BINARY_DIR}/lib -DUNITTEST=${CMAKE_BINARY_DIR}/bin/Data-testrunner -DTEST_PARAMETER=-all -P ${PROJECT_SOURCE_DIR}/cmake/ExecuteOnAndroid.cmake ) else() + if(WIN32) + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.win") + else() + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.lnx") + endif() add_test( NAME Data WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND Data-testrunner -ignore ${PROJECT_SOURCE_DIR}/cppignore.lnx -all + COMMAND Data-testrunner -ignore ${CPPIGNORE_FILE} -all ) set_tests_properties(Data PROPERTIES ENVIRONMENT POCO_BASE=${PROJECT_SOURCE_DIR}) endif() diff --git a/Encodings/testsuite/CMakeLists.txt b/Encodings/testsuite/CMakeLists.txt index 2fab32a49..102ee2c13 100644 --- a/Encodings/testsuite/CMakeLists.txt +++ b/Encodings/testsuite/CMakeLists.txt @@ -19,10 +19,15 @@ if(ANDROID) COMMAND ${CMAKE_COMMAND} -DANDROID_NDK=${ANDROID_NDK} -DLIBRARY_DIR=${CMAKE_BINARY_DIR}/lib -DUNITTEST=${CMAKE_BINARY_DIR}/bin/Encodings-testrunner -DTEST_PARAMETER=-all -P ${CMAKE_SOURCE_DIR}/cmake/ExecuteOnAndroid.cmake ) else() + if(WIN32) + set(CPPIGNORE_FILE "${CMAKE_SOURCE_DIR}/cppignore.win") + else() + set(CPPIGNORE_FILE "${CMAKE_SOURCE_DIR}/cppignore.lnx") + endif() add_test( NAME Encodings WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND Encodings-testrunner -ignore ${CMAKE_SOURCE_DIR}/cppignore.lnx -all + COMMAND Encodings-testrunner -ignore ${CPPIGNORE_FILE} -all ) set_tests_properties(Encodings PROPERTIES ENVIRONMENT POCO_BASE=${CMAKE_SOURCE_DIR}) endif() diff --git a/Foundation/testsuite/CMakeLists.txt b/Foundation/testsuite/CMakeLists.txt index 7621a10eb..99256a667 100644 --- a/Foundation/testsuite/CMakeLists.txt +++ b/Foundation/testsuite/CMakeLists.txt @@ -36,10 +36,15 @@ if(ANDROID) COMMAND ${CMAKE_COMMAND} -DANDROID_NDK=${ANDROID_NDK} "-DTEST_FILES=${CMAKE_CURRENT_SOURCE_DIR}/data;${CMAKE_BINARY_DIR}/bin/TestApp;${CMAKE_BINARY_DIR}/bin/TestLibrary.so" -DLIBRARY_DIR=${CMAKE_BINARY_DIR}/lib -DUNITTEST=${CMAKE_BINARY_DIR}/bin/Foundation-testrunner -DTEST_PARAMETER=-all -P ${PROJECT_SOURCE_DIR}/cmake/ExecuteOnAndroid.cmake ) else() + if(WIN32) + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.win") + else() + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.lnx") + endif() add_test( NAME Foundation WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} - COMMAND Foundation-testrunner -ignore ${PROJECT_SOURCE_DIR}/cppignore.lnx -all + COMMAND Foundation-testrunner -ignore ${CPPIGNORE_FILE} -all ) set_tests_properties(Foundation PROPERTIES ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") # The SharedLibaryTest has to look for shared libraries in the working directory set_property(TEST Foundation APPEND PROPERTY ENVIRONMENT "PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}:$ENV{PATH}") # The ProcessTest has to look for the TestApp in the working directory diff --git a/JSON/testsuite/CMakeLists.txt b/JSON/testsuite/CMakeLists.txt index 73e9f2ab9..946fd1856 100644 --- a/JSON/testsuite/CMakeLists.txt +++ b/JSON/testsuite/CMakeLists.txt @@ -19,10 +19,15 @@ if(ANDROID) COMMAND ${CMAKE_COMMAND} -DANDROID_NDK=${ANDROID_NDK} "-DTEST_FILES=${CMAKE_CURRENT_SOURCE_DIR}/data;" -DLIBRARY_DIR=${CMAKE_BINARY_DIR}/lib -DUNITTEST=${CMAKE_BINARY_DIR}/bin/JSON-testrunner -DTEST_PARAMETER=-all -P ${PROJECT_SOURCE_DIR}/cmake/ExecuteOnAndroid.cmake ) else() + if(WIN32) + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.win") + else() + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.lnx") + endif() add_test( NAME JSON WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND JSON-testrunner -ignore ${PROJECT_SOURCE_DIR}/cppignore.lnx -all + COMMAND JSON-testrunner -ignore ${CPPIGNORE_FILE} -all ) set_tests_properties(JSON PROPERTIES ENVIRONMENT POCO_BASE=${PROJECT_SOURCE_DIR}) # The test is run in the build directory. So the test data is copied there too diff --git a/JWT/testsuite/CMakeLists.txt b/JWT/testsuite/CMakeLists.txt index 1eb30ea0b..861e40124 100644 --- a/JWT/testsuite/CMakeLists.txt +++ b/JWT/testsuite/CMakeLists.txt @@ -19,10 +19,15 @@ if(ANDROID) COMMAND ${CMAKE_COMMAND} -DANDROID_NDK=${ANDROID_NDK} -DLIBRARY_DIR=${CMAKE_BINARY_DIR}/lib -DUNITTEST=${CMAKE_BINARY_DIR}/bin/JWT-testrunner -DTEST_PARAMETER=-all -P ${PROJECT_SOURCE_DIR}/cmake/ExecuteOnAndroid.cmake ) else() + if(WIN32) + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.win") + else() + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.lnx") + endif() add_test( NAME JWT WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND JWT-testrunner -ignore ${PROJECT_SOURCE_DIR}/cppignore.lnx -all + COMMAND JWT-testrunner -ignore ${CPPIGNORE_FILE} -all ) set_tests_properties(JWT PROPERTIES ENVIRONMENT POCO_BASE=${PROJECT_SOURCE_DIR}) endif() diff --git a/MongoDB/testsuite/CMakeLists.txt b/MongoDB/testsuite/CMakeLists.txt index 4d0805fe4..aee2d0a3a 100644 --- a/MongoDB/testsuite/CMakeLists.txt +++ b/MongoDB/testsuite/CMakeLists.txt @@ -19,9 +19,15 @@ if(ANDROID) COMMAND ${CMAKE_COMMAND} -DANDROID_NDK=${ANDROID_NDK} -DLIBRARY_DIR=${CMAKE_BINARY_DIR}/lib -DUNITTEST=${CMAKE_BINARY_DIR}/bin/MongoDB-testrunner -DTEST_PARAMETER=-all -P ${PROJECT_SOURCE_DIR}/cmake/ExecuteOnAndroid.cmake ) else() + if(WIN32) + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.win") + else() + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.lnx") + endif() add_test( NAME MongoDB - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND MongoDB-testrunner -ignore ${PROJECT_SOURCE_DIR}/cppignore.lnx -all + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMAND MongoDB-testrunner -ignore ${CPPIGNORE_FILE} -all ) set_tests_properties(MongoDB PROPERTIES ENVIRONMENT POCO_BASE=${PROJECT_SOURCE_DIR}) endif() diff --git a/Net/testsuite/CMakeLists.txt b/Net/testsuite/CMakeLists.txt index c1f2909c9..59edc4cec 100644 --- a/Net/testsuite/CMakeLists.txt +++ b/Net/testsuite/CMakeLists.txt @@ -19,10 +19,15 @@ if(ANDROID) COMMAND ${CMAKE_COMMAND} -DANDROID_NDK=${ANDROID_NDK} -DLIBRARY_DIR=${CMAKE_BINARY_DIR}/lib -DUNITTEST=${CMAKE_BINARY_DIR}/bin/Net-testrunner -DTEST_PARAMETER=-all -P ${PROJECT_SOURCE_DIR}/cmake/ExecuteOnAndroid.cmake ) else() + if(WIN32) + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.win") + else() + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.lnx") + endif() add_test( NAME Net WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND Net-testrunner -ignore ${PROJECT_SOURCE_DIR}/cppignore.lnx -all + COMMAND Net-testrunner -ignore ${CPPIGNORE_FILE} -all ) set_tests_properties(Net PROPERTIES ENVIRONMENT POCO_BASE=${PROJECT_SOURCE_DIR}) endif() diff --git a/NetSSL_OpenSSL/testsuite/CMakeLists.txt b/NetSSL_OpenSSL/testsuite/CMakeLists.txt index e5c0a36c1..297cee0d0 100644 --- a/NetSSL_OpenSSL/testsuite/CMakeLists.txt +++ b/NetSSL_OpenSSL/testsuite/CMakeLists.txt @@ -20,10 +20,15 @@ if(ANDROID) COMMAND ${CMAKE_COMMAND} -DANDROID_NDK=${ANDROID_NDK} "-DTEST_FILES=${CMAKE_CURRENT_SOURCE_DIR}/any.pem;${CMAKE_CURRENT_SOURCE_DIR}/rootcert.pem;${CMAKE_CURRENT_SOURCE_DIR}/testrunner.xml" -DLIBRARY_DIR=${CMAKE_BINARY_DIR}/lib -DUNITTEST=${CMAKE_BINARY_DIR}/bin/NetSSL-testrunner -DTEST_PARAMETER=-all -P ${PROJECT_SOURCE_DIR}/cmake/ExecuteOnAndroid.cmake ) else() + if(WIN32) + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.win") + else() + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.lnx") + endif() add_test( NAME NetSSL WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} - COMMAND NetSSL-testrunner -ignore ${PROJECT_SOURCE_DIR}/cppignore.lnx -all + COMMAND NetSSL-testrunner -ignore ${CPPIGNORE_FILE} -all ) set_tests_properties(NetSSL PROPERTIES ENVIRONMENT POCO_BASE=${PROJECT_SOURCE_DIR}) # The test is run in the build directory. So the test data is copied there too diff --git a/NetSSL_Win/testsuite/CMakeLists.txt b/NetSSL_Win/testsuite/CMakeLists.txt index 1a46ee653..939bffff1 100644 --- a/NetSSL_Win/testsuite/CMakeLists.txt +++ b/NetSSL_Win/testsuite/CMakeLists.txt @@ -12,10 +12,11 @@ POCO_SOURCES_AUTO_PLAT(TEST_SRCS OFF add_executable(NetSSLWin-testrunner ${TEST_SRCS}) set_target_properties(NetSSLWin-testrunner PROPERTIES DEBUG_POSTFIX "d") +# NetSSL_Win is Windows-only, so always use cppignore.win add_test( NAME NetSSLWin WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} - COMMAND NetSSLWin-testrunner -ignore ${CMAKE_SOURCE_DIR}/cppignore.lnx -all + COMMAND NetSSLWin-testrunner -ignore ${CMAKE_SOURCE_DIR}/cppignore.win -all ) set_tests_properties(NetSSLWin PROPERTIES ENVIRONMENT POCO_BASE=${CMAKE_SOURCE_DIR}) target_link_libraries(NetSSLWin-testrunner PUBLIC Poco::NetSSL Poco::Util Poco::XML CppUnit) diff --git a/PDF/testsuite/CMakeLists.txt b/PDF/testsuite/CMakeLists.txt index 4ec58bd69..05979f2f8 100644 --- a/PDF/testsuite/CMakeLists.txt +++ b/PDF/testsuite/CMakeLists.txt @@ -19,10 +19,15 @@ if(ANDROID) COMMAND ${CMAKE_COMMAND} -DANDROID_NDK=${ANDROID_NDK} -DLIBRARY_DIR=${CMAKE_BINARY_DIR}/lib -DUNITTEST=${CMAKE_BINARY_DIR}/bin/PDF-testrunner -DTEST_PARAMETER=-all -P ${PROJECT_SOURCE_DIR}/cmake/ExecuteOnAndroid.cmake ) else() + if(WIN32) + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.win") + else() + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.lnx") + endif() add_test( NAME PDF WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND PDF-testrunner -ignore ${PROJECT_SOURCE_DIR}/cppignore.lnx -all + COMMAND PDF-testrunner -ignore ${CPPIGNORE_FILE} -all ) set_tests_properties(PDF PROPERTIES ENVIRONMENT POCO_BASE=${PROJECT_SOURCE_DIR}) endif() diff --git a/Prometheus/testsuite/CMakeLists.txt b/Prometheus/testsuite/CMakeLists.txt index 2af5d520d..f3288b70b 100644 --- a/Prometheus/testsuite/CMakeLists.txt +++ b/Prometheus/testsuite/CMakeLists.txt @@ -19,9 +19,15 @@ if(ANDROID) COMMAND ${CMAKE_COMMAND} -DANDROID_NDK=${ANDROID_NDK} -DLIBRARY_DIR=${CMAKE_BINARY_DIR}/lib -DUNITTEST=${CMAKE_BINARY_DIR}/bin/Prometheus-testrunner -DTEST_PARAMETER=-all -P ${PROJECT_SOURCE_DIR}/cmake/ExecuteOnAndroid.cmake ) else() + if(WIN32) + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.win") + else() + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.lnx") + endif() add_test( NAME Prometheus - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND Prometheus-testrunner -ignore ${PROJECT_SOURCE_DIR}/cppignore.lnx -all + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMAND Prometheus-testrunner -ignore ${CPPIGNORE_FILE} -all ) set_tests_properties(Prometheus PROPERTIES ENVIRONMENT POCO_BASE=${PROJECT_SOURCE_DIR}) endif() diff --git a/Redis/testsuite/CMakeLists.txt b/Redis/testsuite/CMakeLists.txt index 6cb83a48f..4efe627dc 100644 --- a/Redis/testsuite/CMakeLists.txt +++ b/Redis/testsuite/CMakeLists.txt @@ -19,10 +19,15 @@ if(ANDROID) COMMAND ${CMAKE_COMMAND} -DANDROID_NDK=${ANDROID_NDK} -DLIBRARY_DIR=${CMAKE_BINARY_DIR}/lib -DUNITTEST=${CMAKE_BINARY_DIR}/bin/Redis-testrunner -DTEST_PARAMETER=-all -P ${PROJECT_SOURCE_DIR}/cmake/ExecuteOnAndroid.cmake ) else() + if(WIN32) + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.win") + else() + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.lnx") + endif() add_test( NAME Redis WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND Redis-testrunner -ignore ${PROJECT_SOURCE_DIR}/cppignore.lnx -all + COMMAND Redis-testrunner -ignore ${CPPIGNORE_FILE} -all ) set_tests_properties(Redis PROPERTIES ENVIRONMENT POCO_BASE=${PROJECT_SOURCE_DIR}) endif() diff --git a/Util/testsuite/CMakeLists.txt b/Util/testsuite/CMakeLists.txt index 420397cdb..6375a83f8 100644 --- a/Util/testsuite/CMakeLists.txt +++ b/Util/testsuite/CMakeLists.txt @@ -26,10 +26,15 @@ if(ANDROID) COMMAND ${CMAKE_COMMAND} -DANDROID_NDK=${ANDROID_NDK} -DLIBRARY_DIR=${CMAKE_BINARY_DIR}/lib -DUNITTEST=${CMAKE_BINARY_DIR}/bin/Util-testrunner -DTEST_PARAMETER=-all -P ${PROJECT_SOURCE_DIR}/cmake/ExecuteOnAndroid.cmake ) else() + if(WIN32) + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.win") + else() + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.lnx") + endif() add_test( NAME Util WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND Util-testrunner -ignore ${PROJECT_SOURCE_DIR}/cppignore.lnx -all + COMMAND Util-testrunner -ignore ${CPPIGNORE_FILE} -all ) set_tests_properties(Util PROPERTIES ENVIRONMENT POCO_BASE=${PROJECT_SOURCE_DIR}) endif() diff --git a/XML/testsuite/CMakeLists.txt b/XML/testsuite/CMakeLists.txt index 89a2c16e8..4d3de6579 100644 --- a/XML/testsuite/CMakeLists.txt +++ b/XML/testsuite/CMakeLists.txt @@ -19,10 +19,15 @@ if(ANDROID) COMMAND ${CMAKE_COMMAND} -DANDROID_NDK=${ANDROID_NDK} -DLIBRARY_DIR=${CMAKE_BINARY_DIR}/lib -DUNITTEST=${CMAKE_BINARY_DIR}/bin/XML-testrunner -DTEST_PARAMETER=-all -P ${CMAKE_SOURCE_DIR}/cmake/ExecuteOnAndroid.cmake ) else() + if(WIN32) + set(CPPIGNORE_FILE "${CMAKE_SOURCE_DIR}/cppignore.win") + else() + set(CPPIGNORE_FILE "${CMAKE_SOURCE_DIR}/cppignore.lnx") + endif() add_test( NAME XML WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND XML-testrunner -ignore ${CMAKE_SOURCE_DIR}/cppignore.lnx -all + COMMAND XML-testrunner -ignore ${CPPIGNORE_FILE} -all ) set_tests_properties(XML PROPERTIES ENVIRONMENT POCO_BASE=${CMAKE_SOURCE_DIR}) endif() diff --git a/Zip/testsuite/CMakeLists.txt b/Zip/testsuite/CMakeLists.txt index 20ba02cb3..dd72bde05 100644 --- a/Zip/testsuite/CMakeLists.txt +++ b/Zip/testsuite/CMakeLists.txt @@ -19,9 +19,15 @@ if(ANDROID) COMMAND ${CMAKE_COMMAND} -DANDROID_NDK=${ANDROID_NDK} "-DTEST_FILES=${CMAKE_CURRENT_SOURCE_DIR}/data;" -DLIBRARY_DIR=${CMAKE_BINARY_DIR}/lib -DUNITTEST=${CMAKE_BINARY_DIR}/bin/Zip-testrunner -DTEST_PARAMETER=-all -P ${PROJECT_SOURCE_DIR}/cmake/ExecuteOnAndroid.cmake ) else() + if(WIN32) + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.win") + else() + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.lnx") + endif() add_test( NAME Zip - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND Zip-testrunner -ignore ${PROJECT_SOURCE_DIR}/cppignore.lnx -all + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMAND Zip-testrunner -ignore ${CPPIGNORE_FILE} -all ) set_tests_properties(Zip PROPERTIES ENVIRONMENT POCO_BASE=${PROJECT_SOURCE_DIR}) # The test is run in the build directory. So the test data is copied there too diff --git a/modules/testsuite/CMakeLists.txt b/modules/testsuite/CMakeLists.txt index 7ebb58473..4dfdaf982 100644 --- a/modules/testsuite/CMakeLists.txt +++ b/modules/testsuite/CMakeLists.txt @@ -22,10 +22,15 @@ if(ANDROID) COMMAND ${CMAKE_COMMAND} -DANDROID_NDK=${ANDROID_NDK} -DLIBRARY_DIR=${CMAKE_BINARY_DIR}/lib -DUNITTEST=${CMAKE_BINARY_DIR}/bin/Modules-testrunner -DTEST_PARAMETER=-all -P ${PROJECT_SOURCE_DIR}/cmake/ExecuteOnAndroid.cmake ) else() + if(WIN32) + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.win") + else() + set(CPPIGNORE_FILE "${PROJECT_SOURCE_DIR}/cppignore.lnx") + endif() add_test( NAME Modules WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND Modules-testrunner -ignore ${PROJECT_SOURCE_DIR}/cppignore.lnx -all + COMMAND Modules-testrunner -ignore ${CPPIGNORE_FILE} -all ) set_tests_properties(Modules PROPERTIES ENVIRONMENT POCO_BASE=${PROJECT_SOURCE_DIR}) endif()