diff --git a/containers/cpp-mariadb/.devcontainer/Dockerfile b/containers/cpp-mariadb/.devcontainer/Dockerfile index 6127583d01..8cb28924be 100644 --- a/containers/cpp-mariadb/.devcontainer/Dockerfile +++ b/containers/cpp-mariadb/.devcontainer/Dockerfile @@ -17,7 +17,7 @@ ARG REINSTALL_CMAKE_VERSION_FROM_SOURCE="none" # Optionally install the cmake for vcpkg COPY ./reinstall-cmake.sh /tmp/ RUN if [ "${REINSTALL_CMAKE_VERSION_FROM_SOURCE}" != "none" ]; then \ - /tmp/reinstall-cmake.sh ${REINSTALL_CMAKE_VERSION_FROM_SOURCE}; \ + chmod +x /tmp/reinstall-cmake.sh && /tmp/reinstall-cmake.sh ${REINSTALL_CMAKE_VERSION_FROM_SOURCE}; \ fi \ && rm -f /tmp/reinstall-cmake.sh diff --git a/containers/cpp-mariadb/.devcontainer/install-mariadb.sh b/containers/cpp-mariadb/.devcontainer/install-mariadb.sh index b63bda010f..dcce9fee86 100755 --- a/containers/cpp-mariadb/.devcontainer/install-mariadb.sh +++ b/containers/cpp-mariadb/.devcontainer/install-mariadb.sh @@ -42,8 +42,29 @@ find_os_props() { esac } +# Run apt-get if needed. +apt_get_update_if_needed() { + if [ ! -d "/var/lib/apt/lists" ] || [ "$(ls /var/lib/apt/lists/ | wc -l)" = "0" ]; then + echo "Running apt-get update..." + apt-get update + else + echo "Skipping apt-get update." + fi +} + +# Check if packages are installed and installs them if not. +check_packages() { + if ! dpkg -s "$@" > /dev/null 2>&1; then + apt_get_update_if_needed + apt-get -y install --no-install-recommends "$@" + fi +} + TMP_DIR=$(mktemp -d -t maria-XXXXXXXXXX) MARIADB_CONNECTOR="" +SOURCE_INCLUDE_DIR="" +SOURCE_LIB_DIR="" +SOURCE_PLUGIN_DIR="" cleanup() { EXIT_CODE=$? @@ -57,25 +78,45 @@ cleanup() { trap cleanup EXIT #Set up external repository and install C Connector -apt install -y libmariadb3 libmariadb-dev +check_packages libmariadb3 libmariadb-dev #Depending on the OS, install different C++ connectors find_os_props -# Instructions are copied and modified from: https://mariadb.com/docs/clients/mariadb-connectors/connector-cpp/install/ -MARIADB_CONNECTOR=mariadb-connector-cpp-1.0.1-$OSURL + cd ${TMP_DIR} -curl -Ls https://dlm.mariadb.com/$OSTAG/connectors/cpp/connector-cpp-1.0.1/${MARIADB_CONNECTOR}.tar.gz -o ${MARIADB_CONNECTOR}.tar.gz -tar -xvzf ${MARIADB_CONNECTOR}.tar.gz && cd ${MARIADB_CONNECTOR} -install -d /usr/include/mariadb/conncpp -#Header Files being copied into the necessary directories -cp -R ./include/mariadb/* /usr/include/mariadb/ -cp -R ./include/mariadb/conncpp/* /usr/include/mariadb/conncpp -cp -R ./include/mariadb/conncpp/compat/* /usr/include/mariadb/conncpp/compat +if [ "$(dpkg --print-architecture)" = "arm64" ] ; then + # Instructions are copied and modified from: https://github.com/mariadb-corporation/mariadb-connector-cpp/blob/master/BUILD.md + # and from: https://mariadb.com/docs/clients/mariadb-connectors/connector-cpp/install/ + check_packages git cmake make gcc libssl-dev + git clone https://github.com/MariaDB-Corporation/mariadb-connector-cpp.git + mkdir build && cd build + cmake ../mariadb-connector-cpp/ -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCONC_WITH_UNIT_TESTS=Off -DCMAKE_INSTALL_PREFIX=/usr/local -DWITH_SSL=OPENSSL + cmake --build . --config RelWithDebInfo + make install + + SOURCE_INCLUDE_DIR="../mariadb-connector-cpp/include" + SOURCE_LIB_DIR="." + SOURCE_PLUGIN_DIR="./libmariadb" +else + # Instructions are copied and modified from: https://mariadb.com/docs/clients/mariadb-connectors/connector-cpp/install/ + MARIADB_CONNECTOR=mariadb-connector-cpp-1.0.1-$OSURL + curl -Ls https://dlm.mariadb.com/$OSTAG/connectors/cpp/connector-cpp-1.0.1/${MARIADB_CONNECTOR}.tar.gz -o ${MARIADB_CONNECTOR}.tar.gz + tar -xvzf ${MARIADB_CONNECTOR}.tar.gz && cd ${MARIADB_CONNECTOR} -install -d /usr/lib/mariadb + SOURCE_INCLUDE_DIR="./include/mariadb" + SOURCE_LIB_DIR="lib/mariadb" + SOURCE_PLUGIN_DIR="lib/mariadb/plugin" +fi + +install -d /usr/include/mariadb/conncpp/compat install -d /usr/lib/mariadb/plugin +#Header Files being copied into the necessary directories +cp -R ${SOURCE_INCLUDE_DIR}/* /usr/include/mariadb/ +cp -R ${SOURCE_INCLUDE_DIR}/conncpp/* /usr/include/mariadb/conncpp +cp -R ${SOURCE_INCLUDE_DIR}/conncpp/compat/* /usr/include/mariadb/conncpp/compat + #Shared libraries copied into usr/lib -cp lib/mariadb/libmariadbcpp.so /usr/lib -cp -R lib/mariadb/plugin/* /usr/lib/mariadb/plugin +cp ${SOURCE_LIB_DIR}/libmariadbcpp.so /usr/lib +cp ${SOURCE_PLUGIN_DIR}/*.so /usr/lib/mariadb/plugin diff --git a/containers/cpp-mariadb/README.md b/containers/cpp-mariadb/README.md index cdbb9b6c16..66546d724a 100644 --- a/containers/cpp-mariadb/README.md +++ b/containers/cpp-mariadb/README.md @@ -10,7 +10,7 @@ | *Categories* | Core, Languages | | *Definition type* | Docker Compose | | *Available image variants* | [See cpp definition](../cpp). | -| *Supported architecture(s)* | x86-64 for `bullseye`, `stretch`, `bionic`, and `hirsute` variants | +| *Supported architecture(s)* | x86-64, aarch64/arm64 for `bullseye`, `stretch`, `bionic`, and `hirsute` variants | | *Works in Codespaces* | Yes | | *Container host OS support* | Linux, macOS, Windows | | *Container OS* | Debian, Ubuntu | diff --git a/containers/cpp/.devcontainer/Dockerfile b/containers/cpp/.devcontainer/Dockerfile index 8018695ed8..6ed2792159 100644 --- a/containers/cpp/.devcontainer/Dockerfile +++ b/containers/cpp/.devcontainer/Dockerfile @@ -9,7 +9,7 @@ ARG REINSTALL_CMAKE_VERSION_FROM_SOURCE="none" # Optionally install the cmake for vcpkg COPY ./reinstall-cmake.sh /tmp/ RUN if [ "${REINSTALL_CMAKE_VERSION_FROM_SOURCE}" != "none" ]; then \ - /tmp/reinstall-cmake.sh ${REINSTALL_CMAKE_VERSION_FROM_SOURCE}; \ + chmod +x /tmp/reinstall-cmake.sh && /tmp/reinstall-cmake.sh ${REINSTALL_CMAKE_VERSION_FROM_SOURCE}; \ fi \ && rm -f /tmp/reinstall-cmake.sh