Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion bin/compile
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ source $basedir/../lib/datadog
source $basedir/../lib/scout
source $basedir/../lib/newrelic
source $basedir/../lib/pecl
source $basedir/../lib/pecl_oci8

if [ "$PHP_BUILDPACK_NO_NODE" != "true" ] ; then
source $basedir/../lib/nodejs
Expand All @@ -24,6 +25,7 @@ fi

BUILD_DIR="$1"
CACHE_DIR="$2"
ENV_DIR="$3"

cd "$BUILD_DIR"
mkdir -p "$CACHE_DIR/package"
Expand Down Expand Up @@ -417,7 +419,7 @@ if [ "$PHP_BUILDPACK_NO_NODE" != "true" ] ; then
install_node_deps "$BUILD_DIR"
fi

install_composer_deps "$BUILD_DIR"
install_composer_deps "${BUILD_DIR}" "${CACHE_DIR}" "${ENV_DIR}"

# Detect PHP framework
# Set FRAMEWORK if not set in environment by user
Expand Down Expand Up @@ -475,6 +477,7 @@ mv /app/vendor/php vendor/php
[ -d "/app/vendor/libtidy" ] && mv /app/vendor/libtidy vendor/libtidy
[ -d "/app/vendor/libsodium" ] && mv /app/vendor/libsodium vendor/libsodium
[ -d "/app/vendor/libwebp" ] && mv /app/vendor/libwebp vendor/libwebp
[ -d "/app/vendor/oracle-client" ] && mv /app/vendor/oracle-client vendor/oracle-client

mkdir -p "bin" "vendor/bin"

Expand Down
12 changes: 10 additions & 2 deletions lib/composer
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,18 @@ function install_composer_deps() {
fi
fetch_package "$PHP_BASE_URL" "libsodium-${sodium_version}" "/app/vendor/libsodium" | indent
else
if [[ $ext = 'oci8' ]]; then
echo "Installing libaio for oci8" | indent
install_env_file="$(install_apt_libaio "${BUILD_DIR}" "${CACHE_DIR}" "${ENV_DIR}")"
# Source environment to export LD_LIBRARY_PATH
source "${install_env_file}"
rm "${install_env_file}"

install_oracle_client_extension "${BUILD_DIR}" "${CACHE_DIR}"
fi
local ext_version=$(jq --raw-output ".require | .[\"ext-${ext}\"]" < "${BUILD_DIR}/composer.json")
install_pecl_extension $ext "$ext_version" "$CACHE_DIR" | indent
install_pecl_extension $ext "$ext_version" "${BUILD_DIR}" "$CACHE_DIR" | indent
fi

# TODO I don't think this instruction should be executed for all extensions
fetch_package "$PHP_BASE_URL" "ext/$(php_api_version)/php-${ext}" "/app/vendor/php" 2>/dev/null || true | indent
done
Expand Down
10 changes: 9 additions & 1 deletion lib/pecl
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,20 @@ function install_pecl_extension() {
curl --silent --location "https://pecl.php.net/get/${extension_name}-${version}.tgz" | tar xz

pushd ${extension_name}-${version} > /dev/null
/app/vendor/php/bin/phpize > /dev/null

/app/vendor/php/bin/phpize &> /dev/null

local configure_extension_args_var_name="PHP_PECL_EXTENSION_CONFIGURE_ARGS_$extension_name"
local configure_extension_args=$(printenv $configure_extension_args_var_name)
local flags=$(echo $configure_extension_args | sed "s|\$BUILD_DIR|$build_dir|")

if [[ $extension_name = 'oci8' ]]; then
if [ -e "${3}/${apt_deps_buildpack_dir}/export" ]; then
source "${3}/${apt_deps_buildpack_dir}/export"
fi
flags="--with-oci8=instantclient,${ORACLE_HOME}"
fi

./configure --with-php-config=/app/vendor/php/bin/php-config $flags > /dev/null

make > /dev/null
Expand Down
48 changes: 48 additions & 0 deletions lib/pecl_oci8
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
function install_apt_libaio() {
# ----
# Install libaio to install oci8
local build_dir="${1}"
local cache_dir="${2}"
local env_dir="${3}"

echo "libaio1" > "${build_dir}/Aptfile"

apt_deps_buildpack_dir=$(mktemp apt_buildpack_XXXX)
rm "${apt_deps_buildpack_dir}"

readonly apt_buildpack_url="https://github.com/Scalingo/apt-buildpack.git"
git clone --quiet --depth=1 "${apt_buildpack_url}" "${build_dir}/$apt_deps_buildpack_dir" >/dev/null 2>/dev/null

"${build_dir}/${apt_deps_buildpack_dir}/bin/compile" "${build_dir}" "${cache_dir}" "${env_dir}" > /dev/null

# Source new libs for future buildpack (update of LD_LIBRARY_PATH)
export_file="${build_dir}/oci8_apt_export"
cp "${build_dir}/${apt_deps_buildpack_dir}/export" "${export_file}"

echo "${export_file}"
}

function install_oracle_client_extension() {
# ----
# Install oracle client
local build_dir="${1}"
local cache_dir="${2}"

local oracle_install_dir="${build_dir}/vendor/oracle-client/"
mkdir -p "${oracle_install_dir}"

curl --silent https://download.oracle.com/otn_software/linux/instantclient/instantclient-basic-linuxx64.zip --output oracleclient.zip
unzip -q oracleclient.zip -d "${oracle_install_dir}"
rm oracleclient.zip

export ORACLE_HOME="${oracle_install_dir}$(ls ${oracle_install_dir})"
export LD_LIBRARY_PATH="${ORACLE_HOME}/lib:${ORACLE_HOME}:${LD_LIBRARY_PATH}"

curl --silent https://download.oracle.com/otn_software/linux/instantclient/instantclient-sdk-linuxx64.zip --output oraclesdk.zip
unzip -q oraclesdk.zip -d "${oracle_install_dir}"
rm oraclesdk.zip

local startup_script="${1}/.profile.d/oracle-client.sh"
echo "export ORACLE_HOME=${ORACLE_HOME}" >> "${startup_script}"
echo "export LD_LIBRARY_PATH=${ORACLE_HOME}/lib:${ORACLE_HOME}:\${LD_LIBRARY_PATH}" >> "${startup_script}"
}