Use 'deprecated' port compiler hook in rebar to generate a script
diff --git a/.gitignore b/.gitignore
index b43c9fe..fd5ac9e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,3 +22,6 @@
 ## Distribution files
 *.gz
 *.zip
+
+## Temporary script for compiling the port
+build_port.sh
diff --git a/rebar.config b/rebar.config
index 68cf7bd..4bb4e7d 100644
--- a/rebar.config
+++ b/rebar.config
@@ -1,15 +1,17 @@
 %% -*- mode: erlang;erlang-indent-level: 2;indent-tabs-mode: nil -*-
 {so_specs,
  [{"priv/bcrypt_nif.so",
-   ["c_src/blowfish.c", "c_src/bcrypt.c", "c_src/bcrypt_nif.c"]},
-  {"priv/bcrypt_port.so",
-   ["c_src/bcrypt_port.c"]}]}.
+   ["c_src/blowfish.c", "c_src/bcrypt.c", "c_src/bcrypt_nif.c"]}]}.
 
 {erl_opts, [debug_info]}.
 
+% This ugly hack is necessary because rebar's supported pre and post hooks
+% don't include the environment vars necessary for building port programs.
+{port_pre_script, {"echo -e \"#!/bin/sh\\n$CC $CFLAGS $ERL_CFLAGS "
+                   "c_src/bcrypt_port.c c_src/bcrypt.o c_src/blowfish.o "
+                   "$LDFLAGS $ERL_LDFLAGS -lpthread "
+                   "-o priv/bcrypt\" > build_port.sh",
+                   "build_port.sh"}}.
+{port_cleanup_script, "rm -f build_port.sh"}.
 {pre_hooks,  [{clean, "rm -f priv/bcrypt c_src/bcrypt_port.o"}]}.
-{post_hooks,
- [{compile,
-   "gcc -g -O2 -Wall c_src/bcrypt_port.o c_src/bcrypt.o"
-   " c_src/blowfish.o -lerl_interface -lei -lpthread"
-   " -o priv/bcrypt"}]}.
+{post_hooks, [{compile, "sh build_port.sh"}]}.