Skip to content

Commit d7d67a6

Browse files
authored
Merge pull request #26 from rails-sqlserver/fix_buildpaths
Fix buildpaths
2 parents 1689df6 + a54fb3c commit d7d67a6

File tree

1 file changed

+26
-50
lines changed

1 file changed

+26
-50
lines changed

bin/compile

Lines changed: 26 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ debug_topic() {
4646
echo "[DEBUG] -----> $*"
4747
fi
4848
}
49-
5049
error() { echo " ! $*" ; >&2 exit 1 ; }
5150
indent() {
5251
local command; command='s/^/ /'
@@ -58,13 +57,13 @@ indent() {
5857

5958
BUILD_DIR="$1"
6059
CACHE_DIR="$2"
60+
mkdir -p "$BUILD_DIR" "$CACHE_DIR"
6161
# shellcheck disable=SC2034
6262
ENV_DIR="${3}"
6363
# echo "$STACK"
6464
# echo "$SOURCE_VERSION"
6565
# See https://devcenter.heroku.com/articles/buildpack-api#bin-compile-summary
6666

67-
mkdir -p "$BUILD_DIR" "$CACHE_DIR"
6867
# Store which STACK we are running on in the cache to bust the cache if it changes
6968
if [ -f "${CACHE_DIR}/.freetds/STACK" ]; then
7069
CACHED_STACK=$(cat "$CACHE_DIR/.freetds/STACK")
@@ -79,54 +78,39 @@ BIN_DIR="$(cd "$(dirname "$0")"; pwd)" # absolute path
7978
LP_DIR="$(cd "$(dirname "$0")"; cd ..; pwd)"
8079
ROOT_DIR="$(dirname "$BIN_DIR")"
8180

82-
info "BIN_DIR=${BIN_DIR}, ROOT_DIR=${ROOT_DIR}, BUILD_DIR=${BUILD_DIR}, CACHE_DIR=${CACHE_DIR}, CACHED_STACK=${CACHED_STACK} pwd=$(pwd)"
83-
84-
debug_exported_env_vars() {
85-
debug "ENV VARS"
86-
debug "ENV VARS: PATH=${PATH:-}"
87-
debug "ENV VARS: FREETDS_DIR=${FREETDS_DIR:-}"
88-
debug "ENV VARS: LD_LIBRARY_PATH=${LD_LIBRARY_PATH:-}"
89-
debug "ENV VARS: LD_RUN_PATH=${LD_RUN_PATH:-}"
90-
debug "ENV VARS: LIBRARY_PATH=${LIBRARY_PATH:-}"
91-
debug "ENV VARS: SYBASE=${SYBASE:-}"
92-
}
93-
94-
debug_topic "debug env vars before load_env_vars"
95-
debug_exported_env_vars
81+
info "BIN_DIR=${BIN_DIR}, ROOT_DIR=${ROOT_DIR}, BUILD_DIR=${BUILD_DIR}, CACHE_DIR=${CACHE_DIR}, STACK=${STACK} CACHED_STACK=${CACHED_STACK} pwd=$(pwd)"
9682

9783
load_env_vars() {
9884
local env_var; env_var="${1:-}"
9985
until [ -z "$env_var" ]; do [ -f "$ENV_DIR/$env_var" ] && export "$env_var=$(cat "$ENV_DIR/$env_var")"; shift ; env_var="${1:-}" ; done
10086
}
10187
load_env_vars "FREETDS_VERSION" "FREETDS_ARCHIVE_NAME" "TDS_VERSION" "FREETDS_REBUILD" "USE_GNUTLS"
10288

103-
debug_topic "debug env vars after load_env_vars"
104-
debug_exported_env_vars
105-
10689
FREETDS_VERSION="${FREETDS_VERSION:-1.00.109}"
10790
FREETDS_ARCHIVE_NAME="${FREETDS_ARCHIVE_NAME:-freetds-${FREETDS_VERSION}}"
10891
TDS_VERSION="${TDS_VERSION:-7.3}" # or TDSVER
10992
USE_GNUTLS="${USE_GNUTLS:---with-gnutls}"
11093

111-
FREETDS_CACHE_DIR="$CACHE_DIR/freetds/cache"
94+
FREETDS_CACHE_DIR="$CACHE_DIR"
11295
mkdir -p "${FREETDS_CACHE_DIR}"
11396
CACHED_TAR="${FREETDS_CACHE_DIR}/freetds-${FREETDS_VERSION}-heroku.tar.bz2"
114-
if [[ "$CACHED_STACK" != "$STACK" ]] ; then
97+
if [ "$CACHED_STACK" != "$STACK" ] ; then
11598
topic "Stack has changed. Clearing cache"
11699
rm -f "$CACHED_TAR"
117100
elif [ "${FREETDS_REBUILD:-}" = "true" ]; then
118101
# Default rebuild to true since I'm having issues linking the library to tiny_tds gem with a cached build.
119102
topic "FREETDS_REBUILD is true. Clearing cache"
120103
rm -f "$CACHED_TAR"
121104
fi
122-
123105
# This installation target is in the BUILD_DIR, which means that
124106
# it'll end up in the slug at runtime.
125-
BUILD_TARGET_DIR="${BUILD_DIR}/.freetds"
107+
# Assert $BUILD_TARGET_DIR = $HOME/freetds | $BUILD_DIR/freetds # /app/freetds
108+
BUILD_TARGET_DIR="${BUILD_DIR}/freetds" # /app/freetds
126109
mkdir -p "${BUILD_TARGET_DIR}"
127110

128111
# This is the path that will be used at dyno runtime, and in which we build.
129-
APP_TARGET_DIR="${HOME:-app}/.freetds" # /app/freetds"
112+
# Assert $APP_TARGET_DIR = $HOME/freetds # /app/freetds
113+
APP_TARGET_DIR="${HOME:-app}/freetds"
130114
mkdir -p "${APP_TARGET_DIR}"
131115

132116
configure_app_env_vars() {
@@ -135,15 +119,16 @@ configure_app_env_vars() {
135119

136120
# These exports must point to /app, because the profile is
137121
# executed in a running dyno, not the buildpack environment
122+
# Assert $APP_TARGET_DIR = $HOME/freetds # /app/freetds
138123
cat <<EOF > "${BUILD_DIR}/.profile.d/freetds.sh"
139-
export PATH="\${HOME}/.freetds/bin:\$PATH"
124+
export PATH="\${HOME}/freetds/bin:\$PATH"
140125
# tiny_tds extconf.rb uses FREETDS_DIR
141126
# https://github.com/rails-sqlserver/tiny_tds/blob/5046755ca91594003f8b3ca541d136f3ed859973/ext/tiny_tds/extconf.rb#L36-L38
142-
export FREETDS_DIR="\${HOME}/.freetds"
143-
export LD_LIBRARY_PATH="\${HOME}/.freetds/lib:\${LD_LIBRARY_PATH:-}"
144-
export LD_RUN_PATH="\${HOME}/.freetds/lib:\${LD_RUN_PATH:-}"
145-
export LIBRARY_PATH="\${HOME}/.freetds/lib:\${LIBRARY_PATH:-}"
146-
export SYBASE="\${HOME}/.freetds"
127+
export FREETDS_DIR="\${HOME}/freetds"
128+
export LD_LIBRARY_PATH="\${HOME}/freetds/lib:\${LD_LIBRARY_PATH:-/usr/local/lib}"
129+
export LD_RUN_PATH="\${HOME}/freetds/lib:\${LD_RUN_PATH:-/usr/local/lib}"
130+
export LIBRARY_PATH="\${HOME}/freetds/lib:\${LIBRARY_PATH:-/usr/local/lib}"
131+
export SYBASE="\${HOME}/freetds"
147132
EOF
148133
chmod +x "${BUILD_DIR}/.profile.d/freetds.sh"
149134
echo "configured APP env vars:" | indent
@@ -155,33 +140,34 @@ EOF
155140
configure_buildpack_env_vars() {
156141
# These exports point to the build directory, not to /app, so that
157142
# they work for later buildpacks.
158-
# Assert $BUILD_TARGET_DIR = $HOME/.freetds # /app/freetds
159-
# Assert $APP_TARGET_DIR = $HOME/.freetds # /app/freetds
160-
export PATH="${HOME}/.freetds/bin:$PATH"
161-
export FREETDS_DIR="${HOME}/.freetds"
162-
export LD_LIBRARY_PATH="${HOME}/.freetds/lib:${LD_LIBRARY_PATH:-}"
163-
export LD_RUN_PATH="${HOME}/.freetds/lib:${LD_RUN_PATH:-}"
164-
export LIBRARY_PATH="${HOME}/.freetds/lib:${LIBRARY_PATH:-}"
165-
export SYBASE="${HOME}/.freetds"
143+
# Assert $BUILD_TARGET_DIR = $HOME/freetds | $BUILD_DIR/freetds # /app/freetds
144+
export PATH="${BUILD_TARGET_DIR}/bin:$PATH"
145+
export FREETDS_DIR="${BUILD_TARGET_DIR}"
146+
export LD_LIBRARY_PATH="${BUILD_TARGET_DIR}/lib:${LD_LIBRARY_PATH:-/usr/local/lib}"
147+
export LD_RUN_PATH="${BUILD_TARGET_DIR}/lib:${LD_RUN_PATH:-/usr/local/lib}"
148+
export LIBRARY_PATH="${BUILD_TARGET_DIR}/lib:${LIBRARY_PATH:-/usr/local/lib}"
149+
# Assert $APP_TARGET_DIR = $HOME/freetds # /app/freetds
150+
export SYBASE="${APP_TARGET_DIR}"
166151
# give environment to later buildpacks
167152
export | grep -E -e ' (PATH|LD_LIBRARY_PATH|LD_RUN_PATH|LIBRARY_PATH|FREETDS_DIR|SYBASE)=' > "${LP_DIR}/export"
168153

169154
echo "configured BUILDPACK env vars:" | indent
170155
indent < "${LP_DIR}/export"
171156

172157
topic "Rewrite package-config files"
173-
find "$BUILD_DIR/.freetds" -type f -ipath '*/pkgconfig/*.pc' | xargs --no-run-if-empty -n 1 sed -i -e 's!^prefix=\(.*\)$!prefix='"$BUILD_DIR"'/.freetds\1!g'
158+
# shellcheck disable=SC2038
159+
find "$BUILD_DIR/freetds" -type f -ipath '*/pkgconfig/*.pc' | xargs --no-run-if-empty -n 1 sed -i -e 's!^prefix=\(.*\)$!prefix='"$BUILD_DIR"'/freetds\1!g'
174160
}
175161

176162
download_and_extract_freetds_archive() {
177163
FREETDS_FILE="$FREETDS_ARCHIVE_NAME.tar.gz"
178164
FREETDS_URL="https://www.freetds.org/files/stable/${FREETDS_FILE}"
179165
# TODO(BF): Consider calculating and verifying SHA256: openssl dgst -sha256 < "$FREETDS_FILE"
180166
curl -s "$FREETDS_URL" | tar xzvf - -C "${BUILD_DIR}" > "${BUILD_DIR}/build_log-unpack.log" # Can't write to the archive dir until it exists
167+
mv "${BUILD_DIR}/build_log-unpack.log" "${BUILD_DIR}/${FREETDS_ARCHIVE_NAME}/"
181168
if [ "$HEROKU_FREETDS_BUILDPACK_DEBUG" = "true" ]; then
182169
debug "$(cat "${BUILD_DIR}/build_log-unpack.log")"
183170
fi
184-
mv "${BUILD_DIR}/build_log-unpack.log" "${BUILD_DIR}/${FREETDS_ARCHIVE_NAME}/"
185171
}
186172

187173
build_and_install_freetds() {
@@ -246,11 +232,7 @@ cache_build_artifacts_for_future_deploys() {
246232
main() {
247233
topic "FreeTDS ${FREETDS_VERSION} building in ${BUILD_DIR}"
248234

249-
debug_topic "debug env vars before configure_app_env_vars"
250-
debug_exported_env_vars
251235
configure_app_env_vars
252-
debug_topic "debug env vars after configure_app_env_vars"
253-
debug_exported_env_vars
254236

255237
if [ ! -f "$CACHED_TAR" ]; then
256238
info "Cached files not found - downloading and unpacking..."
@@ -267,14 +249,8 @@ main() {
267249
info "Unpacking cached files..."
268250
tar xjf "${CACHED_TAR}" -C "${BUILD_TARGET_DIR}" | indent
269251

270-
debug_topic "debug env vars before configure_buildpack_env_vars"
271-
debug_exported_env_vars
272-
273252
configure_buildpack_env_vars
274253

275-
debug_topic "debug env vars after configure_buildpack_env_vars"
276-
debug_exported_env_vars
277-
278254
info "Install of FreeTDS ${FREETDS_VERSION} complete"
279255
}
280256

0 commit comments

Comments
 (0)