Refactoring checkstyle daemon into a more general purpose buck daemon.

Change-Id: I999541e8894f07061141b3a62414e491369f8d08
diff --git a/tools/build/conf/start-buck-daemon b/tools/build/conf/start-buck-daemon
new file mode 100755
index 0000000..e6e9c1e
--- /dev/null
+++ b/tools/build/conf/start-buck-daemon
@@ -0,0 +1,80 @@
+#!/bin/bash
+# -----------------------------------------------------------------------------
+# Launches Buck daemon if not already running and requests Buck task execution.
+# -----------------------------------------------------------------------------
+
+BUCK_DAEMON=$1
+TASK=${2:-unspecified}
+DATA=${3}
+
+# TODO: Figure out how to parametrize better
+BUCK_PROPS="-Dcheckstyle.config=$4 -Dcheckstyle.suppressions=$5"
+
+PORT_FILE="$1.port"
+
+function ppid() {
+    ps -p ${1:-$$} -o ppid= -o pid= -o comm=
+}
+
+function buck_pid() {
+    BUCK_PID=($(ppid))
+    while [ ${BUCK_PID[0]} -ne 0 ]; do
+        BUCK_PID=($(ppid $BUCK_PID))
+        if [ "${BUCK_PID[2]}" == "buck" ]; then
+            # use parent PID of buck
+            echo ${BUCK_PID[0]}
+            return
+        fi
+        if [ "${BUCK_PID[2]}" == "buckd" ] ||
+           [[ "${BUCK_PID[2]}" == *"python"* ]]; then
+            # use PID of buckd or python
+            echo ${BUCK_PID[1]}
+            return
+        fi
+    done
+    # fallback last read PID
+    echo ${BUCK_PID[1]}
+}
+
+function port() {
+    cat $PORT_FILE 2>/dev/null || echo 0
+}
+
+function check_socket() {
+    nc localhost $(port) < /dev/null 2>/dev/null
+    return $?
+}
+
+# check to see if buck daemon is running; if not, start it
+if ! check_socket; then
+    # Starting buck daemon...
+    #FIXME change to /dev/null if/when we are confident
+    nohup java $BUCK_PROPS -jar $BUCK_DAEMON $PORT_FILE $(buck_pid) >>/tmp/buck.daemon 2>&1 &
+
+    TRIES=20
+    i=0
+    # Wait for buck daemon to start for 2 seconds
+    while [ $i -lt $TRIES ]; do
+        if check_socket; then
+            CONNECTED=true
+            break
+        fi
+        let i=i+1
+        sleep 0.1
+    done
+    if [ -z "$CONNECTED" ]; then
+        echo "Failed to start buck daemon"
+        exit 3
+    fi
+fi
+
+# run the actual buck daemon client
+OUT=$((printf "%s\n" $TASK; cat $DATA) | nc localhost $(port))
+if [ $? -ne 0 ]; then
+    echo "Error connecting to buck daemon server"
+    exit 2
+fi
+if [ -n "$OUT" ]; then
+    printf "$OUT"
+    exit 1
+fi
\ No newline at end of file