$ git clone http://tcclient.ion.nu/tc_client.git
commit e5ad8e79c924c66605836ed69e376b9ac373944b
Author: Alicia <...>
Date:   Sun Oct 23 16:43:50 2016 +0200

    Enabled compiling in a directory separate from the source directory.

diff --git a/ChangeLog b/ChangeLog
index f5f29c4..1cbb0ea 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,6 @@
 0.41:
 Added some compatibility code for OSX.
+Enabled compiling in a directory separate from the source directory.
 tc_client-gtk: bugfix: don't rely on stack allocated variables for GUI callbacks.
 tc_client-gtk: install the camera placeholder animation for the 'install' target.
 tc_client-gtk: mark outgoing video keyframes as keyframes.
diff --git a/configure b/configure
index 63f8c89..659666c 100755
--- a/configure
+++ b/configure
@@ -286,5 +286,17 @@ else
 fi
 rm -f endiantest.c endiantest
 
+srcdir="`dirname "$0"`"
+if [ "." != "$srcdir" ]; then
+  sed -e "/^camplaceholder\\.gif/{s| | ${srcdir}/|g;n;s|\t|\t${srcdir}/|;}" "${srcdir}/Makefile" > Makefile
+  for dir in '' utilities/ utilities/camviewer/ utilities/cursedchat/ utilities/gtk/ utilities/irchack/ utilities/libcamera/ utilities/modbot/; do
+    mkdir -p "$dir"
+    echo "${dir}%.o: ${srcdir}/${dir}%.c" >> Makefile
+    echo ' $(CC) $(CFLAGS) -c $<...>> Makefile
+  done
+  echo "utilities/libcamera/%.o: ${srcdir}/utilities/libcamera/%.cpp" >> Makefile
+  echo ' $(CXX) $(CXXFLAGS) -c $<...>> Makefile
+fi
+
 echo Done
 make confinfo
diff --git a/utilities/gtk/gencamplaceholder.sh b/utilities/gtk/gencamplaceholder.sh
index 2e5c92b..449fb54 100755
--- a/utilities/gtk/gencamplaceholder.sh
+++ b/utilities/gtk/gencamplaceholder.sh
@@ -1,4 +1,5 @@
 #!/bin/sh
+path="`dirname "$0"`"
 spinnerpos='+281+341
 +270+369
 +281+397
@@ -18,12 +19,12 @@ seq()
 }
 {
   for frame in `seq 1 16`; do
-    echo '( ( utilities/gtk/camplaceholder.xcf -layers Merge )'
+    echo "( ( ${path}/camplaceholder.xcf -layers Merge )"
     for spinner in `seq 1 8`; do
       pos="`echo "$spinnerpos" | sed -n -e "${spinner}p"`"
       dotframe="`expr '(' "$frame" + "$spinner" '*' 2 ')' '%' 16`"
       if [ "$dotframe" -gt 11 ]; then dotframe=11; fi # TODO: use identify | wc -l to get the max frame ID?
-      echo "( -geometry "$pos" "utilities/gtk/spinnerdot.xcf[${dotframe}]" ) -composite"
+      echo "( -geometry "$pos" "${path}/spinnerdot.xcf[${dotframe}]" ) -composite"
     done
     echo ')'
   done