@@ -34,99 +34,47 @@ trap 'finish_error $LINENO' ERR
34
34
35
35
logstamp () { printf " [%s]" " $( TZ=' America/Chicago' date +' %Y-%m-%d %H:%M:%S' ) " ; }
36
36
topic () { echo " -----> $( logstamp) $* " ; }
37
- info () { echo " $* " ; }
38
- HEROKU_FREETDS_BUILDPACK_DEBUG=" ${HEROKU_FREETDS_BUILDPACK_DEBUG:- false} "
39
- debug () {
40
- if [ " $HEROKU_FREETDS_BUILDPACK_DEBUG " = " true" ]; then
41
- echo " [DEBUG] $* "
42
- fi
43
- }
44
- debug_topic () {
45
- if [ " $HEROKU_FREETDS_BUILDPACK_DEBUG " = " true" ]; then
46
- echo " [DEBUG] -----> $* "
47
- fi
48
- }
49
-
50
- error () { echo " ! $* " ; >&2 exit 1 ; }
51
- indent () {
52
- local command ; command=' s/^/ /'
53
- case $( uname) in
54
- Darwin) sed -l " $command " ;;
55
- * ) sed -u " $command " ;;
56
- esac
57
- }
37
+ info () { echo " $* " ; }
38
+ indent () { sed -u ' s/^/ /' ; } # it always runs on linux. on darwin is 'sed -l'
58
39
59
40
BUILD_DIR=" $1 "
60
41
CACHE_DIR=" $2 "
42
+ mkdir -p " $BUILD_DIR " " $CACHE_DIR "
61
43
# shellcheck disable=SC2034
62
44
ENV_DIR=" ${3} "
63
45
# echo "$STACK"
64
46
# echo "$SOURCE_VERSION"
65
47
# See https://devcenter.heroku.com/articles/buildpack-api#bin-compile-summary
66
48
67
- mkdir -p " $BUILD_DIR " " $CACHE_DIR "
68
- # Store which STACK we are running on in the cache to bust the cache if it changes
69
- if [ -f " ${CACHE_DIR} /.freetds/STACK" ]; then
70
- CACHED_STACK=$( cat " $CACHE_DIR /.freetds/STACK" )
71
- else
72
- CACHED_STACK=$STACK
73
- fi
74
- # Ensure we store the STACK in the cache for next time.
75
- mkdir -p " $CACHE_DIR /.freetds"
76
- echo " $STACK " > " $CACHE_DIR /.freetds/STACK"
77
-
78
49
BIN_DIR=" $( cd " $( dirname " $0 " ) " ; pwd) " # absolute path
79
50
LP_DIR=" $( cd " $( dirname " $0 " ) " ; cd ..; pwd) "
80
51
ROOT_DIR=" $( dirname " $BIN_DIR " ) "
81
52
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
53
+ info " BIN_DIR=${BIN_DIR} , ROOT_DIR=${ROOT_DIR} , BUILD_DIR=${BUILD_DIR} , CACHE_DIR=${CACHE_DIR} , pwd=$( pwd) "
96
54
97
55
load_env_vars () {
98
56
local env_var; env_var=" ${1:- } "
99
57
until [ -z " $env_var " ]; do [ -f " $ENV_DIR /$env_var " ] && export " $env_var =$( cat " $ENV_DIR /$env_var " ) " ; shift ; env_var=" ${1:- } " ; done
100
58
}
101
59
load_env_vars " FREETDS_VERSION" " FREETDS_ARCHIVE_NAME" " TDS_VERSION" " FREETDS_REBUILD" " USE_GNUTLS"
102
60
103
- debug_topic " debug env vars after load_env_vars"
104
- debug_exported_env_vars
105
-
106
61
FREETDS_VERSION=" ${FREETDS_VERSION:- 1.00.109} "
107
62
FREETDS_ARCHIVE_NAME=" ${FREETDS_ARCHIVE_NAME:- freetds-${FREETDS_VERSION} } "
108
63
TDS_VERSION=" ${TDS_VERSION:- 7.3} " # or TDSVER
109
64
USE_GNUTLS=" ${USE_GNUTLS:- --with-gnutls} "
110
65
111
- FREETDS_CACHE_DIR=" $CACHE_DIR /freetds/cache"
112
- mkdir -p " ${FREETDS_CACHE_DIR} "
113
- CACHED_TAR=" ${FREETDS_CACHE_DIR} /freetds-${FREETDS_VERSION} -heroku.tar.bz2"
114
- if [[ " $CACHED_STACK " != " $STACK " ]] ; then
115
- topic " Stack has changed. Clearing cache"
116
- rm -f " $CACHED_TAR "
117
- elif [ " ${FREETDS_REBUILD:- } " = " true" ]; then
118
- # Default rebuild to true since I'm having issues linking the library to tiny_tds gem with a cached build.
119
- topic " FREETDS_REBUILD is true. Clearing cache"
66
+ CACHED_TAR=" ${CACHE_DIR} /freetds-${FREETDS_VERSION} -heroku.tar.bz2"
67
+ # Default rebuild to true since I'm having issues linking the library to tiny_tds gem with a cached build.
68
+ if [ " ${FREETDS_REBUILD:- } " = " true" ]; then
120
69
rm -f " $CACHED_TAR "
121
70
fi
122
-
123
71
# This installation target is in the BUILD_DIR, which means that
124
72
# it'll end up in the slug at runtime.
125
- BUILD_TARGET_DIR=" ${BUILD_DIR} /. freetds"
73
+ BUILD_TARGET_DIR=" ${BUILD_DIR} /freetds"
126
74
mkdir -p " ${BUILD_TARGET_DIR} "
127
75
128
76
# 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"
77
+ APP_TARGET_DIR=" /app/freetds"
130
78
mkdir -p " ${APP_TARGET_DIR} "
131
79
132
80
configure_app_env_vars () {
@@ -136,51 +84,44 @@ configure_app_env_vars() {
136
84
# These exports must point to /app, because the profile is
137
85
# executed in a running dyno, not the buildpack environment
138
86
cat << EOF > "${BUILD_DIR} /.profile.d/freetds.sh"
139
- export PATH="\$ {HOME}/.freetds /bin:\$ PATH"
87
+ export PATH="${APP_TARGET_DIR} /bin:\$ PATH"
140
88
# tiny_tds extconf.rb uses FREETDS_DIR
141
89
# 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 "
90
+ export FREETDS_DIR="${APP_TARGET_DIR} "
91
+ export LD_LIBRARY_PATH="${APP_TARGET_DIR} / lib:${LD_LIBRARY_PATH:-/ usr / local / lib } "
92
+ export LD_RUN_PATH="${APP_TARGET_DIR} / lib:${LD_RUN_PATH:-/ usr / local / lib } "
93
+ export LIBRARY_PATH="${APP_TARGET_DIR} / lib:${LIBRARY_PATH:-/ usr / local / lib } "
94
+ export SYBASE="${APP_TARGET_DIR} "
147
95
EOF
148
96
chmod +x " ${BUILD_DIR} /.profile.d/freetds.sh"
149
97
echo " configured APP env vars:" | indent
150
98
indent < " ${BUILD_DIR} /.profile.d/freetds.sh"
151
- # shellcheck disable=SC1091
99
+ # shellcheck disable=SC1090
152
100
. " ${BUILD_DIR} /.profile.d/freetds.sh"
153
101
}
154
102
155
103
configure_buildpack_env_vars () {
156
104
# These exports point to the build directory, not to /app, so that
157
105
# 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"
106
+ export PATH=" ${BUILD_TARGET_DIR} /bin:$PATH "
107
+ export FREETDS_DIR=" ${BUILD_TARGET_DIR} "
108
+ export LD_LIBRARY_PATH=" ${BUILD_TARGET_DIR} /lib:${LD_LIBRARY_PATH:-/ usr/ local/ lib} "
109
+ export LD_RUN_PATH=" ${BUILD_TARGET_DIR} /lib:${LD_RUN_PATH:-/ usr/ local/ lib} "
110
+ export LIBRARY_PATH=" ${BUILD_TARGET_DIR} /lib:${LIBRARY_PATH:-/ usr/ local/ lib} "
111
+ export SYBASE=" ${APP_TARGET_DIR} "
166
112
# give environment to later buildpacks
167
- export | grep -E -e ' (PATH|LD_LIBRARY_PATH|LD_RUN_PATH| LIBRARY_PATH|FREETDS_DIR|SYBASE)=' > " ${LP_DIR} /export"
113
+ export | grep -E -e ' (PATH|LD_LIBRARY_PATH|LIBRARY_PATH|FREETDS_DIR|SYBASE)=' > " ${LP_DIR} /export"
168
114
169
115
echo " configured BUILDPACK env vars:" | indent
170
116
indent < " ${LP_DIR} /export"
171
-
172
- 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'
174
117
}
175
118
176
119
download_and_extract_freetds_archive () {
177
120
FREETDS_FILE=" $FREETDS_ARCHIVE_NAME .tar.gz"
178
121
FREETDS_URL=" https://www.freetds.org/files/stable/${FREETDS_FILE} "
122
+ # TODO(BF): Print log when HEROKUR_FREETDS_BUILDPACK_DEBUG is set
179
123
# TODO(BF): Consider calculating and verifying SHA256: openssl dgst -sha256 < "$FREETDS_FILE"
180
124
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
181
- if [ " $HEROKU_FREETDS_BUILDPACK_DEBUG " = " true" ]; then
182
- debug " $( cat " ${BUILD_DIR} /build_log-unpack.log" ) "
183
- fi
184
125
mv " ${BUILD_DIR} /build_log-unpack.log" " ${BUILD_DIR} /${FREETDS_ARCHIVE_NAME} /"
185
126
}
186
127
@@ -211,20 +152,13 @@ build_and_install_freetds() {
211
152
--disable-debug \
212
153
"--with-tdsver=${TDS_VERSION} "
213
154
EOF
155
+ # TODO(BF): Print log when HEROKUR_FREETDS_BUILDPACK_DEBUG is set
214
156
/bin/bash .build_options > build_log-configure.stdout.log 2> build_log-configure.stderr.log
215
- if [ " $HEROKU_FREETDS_BUILDPACK_DEBUG " = " true" ]; then
216
- debug " $( cat .build_options) "
217
- debug " $( cat build_log-configure.stdout.log) "
218
- debug " $( cat build_log-configure.stderr.log) "
219
- fi
220
157
# Flush make output to log since a file will be faster than printing to the screen.
158
+ # TODO(BF): Print log when HEROKUR_FREETDS_BUILDPACK_DEBUG is set
221
159
{
222
160
make && make install && make clean
223
161
} > build_log-make_install.stdout.log 2> build_log-make_install.stderr.log
224
- if [ " $HEROKU_FREETDS_BUILDPACK_DEBUG " = " true" ]; then
225
- debug " $( cat build_log-make_install.stdout.log) "
226
- debug " $( cat build_log-make_install.stderr.log) "
227
- fi
228
162
cp .build_options build_log-* " ${APP_TARGET_DIR} /"
229
163
230
164
cd " $BUILD_DIR "
@@ -246,11 +180,7 @@ cache_build_artifacts_for_future_deploys() {
246
180
main () {
247
181
topic " FreeTDS ${FREETDS_VERSION} building in ${BUILD_DIR} "
248
182
249
- debug_topic " debug env vars before configure_app_env_vars"
250
- debug_exported_env_vars
251
183
configure_app_env_vars
252
- debug_topic " debug env vars after configure_app_env_vars"
253
- debug_exported_env_vars
254
184
255
185
if [ ! -f " $CACHED_TAR " ]; then
256
186
info " Cached files not found - downloading and unpacking..."
@@ -267,14 +197,8 @@ main() {
267
197
info " Unpacking cached files..."
268
198
tar xjf " ${CACHED_TAR} " -C " ${BUILD_TARGET_DIR} " | indent
269
199
270
- debug_topic " debug env vars before configure_buildpack_env_vars"
271
- debug_exported_env_vars
272
-
273
200
configure_buildpack_env_vars
274
201
275
- debug_topic " debug env vars after configure_buildpack_env_vars"
276
- debug_exported_env_vars
277
-
278
202
info " Install of FreeTDS ${FREETDS_VERSION} complete"
279
203
}
280
204
0 commit comments