Squashed 'third_party/seasocks/' content from commit 016dc60

Change-Id: I195fa5bfd0c0e3cc66fbbefcc7b5170bafcf7a36
git-subtree-dir: third_party/seasocks
git-subtree-split: 016dc60b247e0d1d563aea6d22a9075e6884ab9f
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..6261306
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,145 @@
+default: all
+
+AR=ar
+ARFLAGS=cru
+CXX=@CXX@
+CXXFLAGS=@CXXFLAGS@
+VALGRIND=@VALGRIND@
+LDFLAGS=@LDFLAGS@
+# hack for drw gcc on ubuntu
+GCC_MULTIARCH := $(shell gcc -print-multiarch 2>/dev/null)
+ifneq ($(GCC_MULTIARCH),)
+  export LIBRARY_PATH = /usr/lib/$(GCC_MULTIARCH)
+  export C_INCLUDE_PATH = /usr/include/$(GCC_MULTIARCH)
+  export CPLUS_INCLUDE_PATH = /usr/include/$(GCC_MULTIARCH)
+endif
+
+C_SRC=src/main/c
+TEST_SRC=src/test/c
+APPS_SRC=src/app/c
+
+VERSION_STRING:=SeaSocks/$(or $(VERSION),unversioned) ($(shell git describe --always --dirty || echo non-git))
+
+CXXFLAGS += -fPIC -Wall -Werror '-DSEASOCKS_VERSION_STRING="$(VERSION_STRING)"' -I$(C_SRC)
+
+.PHONY: all clean run test spotless header-checks valgrind-test
+
+OBJ_DIR=obj
+BIN_DIR=bin
+
+CPP_SRCS=$(shell find $(C_SRC) -name '*.cpp')
+H_SRCS=$(shell find $(C_SRC) -name '*.h')
+TEST_SRCS=$(shell find $(TEST_SRC) -name '*.cpp')
+APPS_CPP_SRCS=$(shell find $(APPS_SRC) -name '*.cpp')
+TARGETS=$(patsubst $(APPS_SRC)/%.cpp,$(BIN_DIR)/%,$(APPS_CPP_SRCS))
+
+apps: $(TARGETS)
+all: apps $(BIN_DIR)/libseasocks.so $(BIN_DIR)/libseasocks.a test header-checks valgrind-test
+
+debug:
+	echo $($(DEBUG_VAR))
+
+OBJS=$(patsubst $(C_SRC)/%.cpp,$(OBJ_DIR)/%.o,$(CPP_SRCS))
+HCS=$(patsubst $(C_SRC)/%.h,$(OBJ_DIR)/%.hc,$(H_SRCS))
+TEST_OBJS=$(patsubst $(TEST_SRC)/%.cpp,$(OBJ_DIR)/%.o,$(TEST_SRCS))
+APPS_OBJS=$(patsubst $(APPS_SRC)/%.cpp,$(OBJ_DIR)/%.o,$(APPS_CPP_SRCS))
+ALL_OBJS=$(OBJS) $(APPS_OBJS) $(TEST_OBJS)
+GEN_OBJS=$(OBJ_DIR)/embedded.o
+
+-include $(ALL_OBJS:.o=.d)
+
+$(APPS_OBJS) : $(OBJ_DIR)/%.o : $(APPS_SRC)/%.cpp
+	@mkdir -p $(dir $@)
+	$(CXX) $(CXXFLAGS) -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" -c -o "$@" "$<"
+
+$(OBJS) : $(OBJ_DIR)/%.o : $(C_SRC)/%.cpp
+	@mkdir -p $(dir $@)
+	$(CXX) $(CXXFLAGS) -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" -c -o "$@" "$<"
+
+$(HCS) : $(OBJ_DIR)/%.hc : $(C_SRC)/%.h
+	@mkdir -p $(dir $@)
+	@echo "Checking header file is self-contained: $<"
+	@$(CXX) -fsyntax-only $(CXXFLAGS) -o /dev/null -c -w $<
+	@touch $@
+
+$(TEST_OBJS) : $(OBJ_DIR)/%.o : $(TEST_SRC)/%.cpp
+	@mkdir -p $(dir $@)
+	$(CXX) $(CXXFLAGS) -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" -c -o "$@" "$<"
+
+$(TARGETS) : $(BIN_DIR)/% : $(OBJ_DIR)/%.o $(OBJS) $(GEN_OBJS)
+	@mkdir -p $(BIN_DIR)
+	$(CXX) $(CXXFLAGS) -o $@ $^
+
+$(BIN_DIR)/libseasocks.so: $(OBJS) $(GEN_OBJS)
+	@mkdir -p $(BIN_DIR)
+	$(CXX) -shared $(CXXFLAGS) -o $@ $^
+
+$(BIN_DIR)/libseasocks.a: $(OBJS) $(GEN_OBJS)
+	@mkdir -p $(BIN_DIR)
+	@-rm -f $(BIN_DIR)/libseasocks.a
+	$(AR) $(ARFLAGS) $@ $^
+
+EMBEDDED_CONTENT:=$(shell find src/main/web -type f)
+$(OBJ_DIR)/embedded.o: scripts/gen_embedded.py $(EMBEDDED_CONTENT) src/main/c/internal/Embedded.h
+	@mkdir -p $(dir $@)
+	scripts/gen_embedded.py $(EMBEDDED_CONTENT) | $(CXX) $(CXXFLAGS) -x c++ -c -o "$@" -
+
+header-checks: $(HCS)
+
+run: $(BIN_DIR)/ws_test
+	$(BIN_DIR)/ws_test
+
+ifneq ("@GMOCK_DIR@", "")
+GMOCK_DIR = @GMOCK_DIR@
+GTEST_DIR = $(GMOCK_DIR)/gtest
+CXXFLAGS += -isystem $(GTEST_DIR)/include -isystem $(GMOCK_DIR)/include
+GTEST_HEADERS = $(GTEST_DIR)/include/gtest/*.h \
+				$(GTEST_DIR)/include/gtest/internal/*.h
+GMOCK_HEADERS = $(GMOCK_DIR)/include/gmock/*.h \
+				$(GMOCK_DIR)/include/gmock/internal/*.h \
+				$(GTEST_HEADERS)
+GTEST_SRCS_ = $(GTEST_DIR)/src/*.cc $(GTEST_DIR)/src/*.h $(GTEST_HEADERS)
+GMOCK_SRCS_ = $(GMOCK_DIR)/src/*.cc $(GMOCK_HEADERS)
+
+$(OBJ_DIR)/gtest-all.o : $(GTEST_SRCS_)
+	$(CXX) $(CXXFLAGS) -I$(GTEST_DIR) -I$(GMOCK_DIR) $(CXXFLAGS) \
+		-c $(GTEST_DIR)/src/gtest-all.cc -o $@
+
+$(OBJ_DIR)/gmock-all.o : $(GMOCK_SRCS_)
+	$(CXX) $(CXXFLAGS) -I$(GTEST_DIR) -I$(GMOCK_DIR) $(CXXFLAGS) \
+		-c $(GMOCK_DIR)/src/gmock-all.cc -o $@
+
+$(BIN_DIR)/tests: $(TEST_OBJS) $(BIN_DIR)/libseasocks.a \
+	$(OBJ_DIR)/gmock-all.o $(OBJ_DIR)/gtest-all.o
+	$(CXX) $(LDFLAGS) $(CXXFLAGS) -I $(TEST_SRC) -o $@ $^ 
+
+.tests-pass: $(BIN_DIR)/tests
+	@rm -f .tests-pass
+	$(BIN_DIR)/tests
+	@touch .tests-pass
+
+test: .tests-pass
+
+ifneq ("@VALGRIND@", "")
+valgrind-test: .tests-pass
+	$(VALGRIND) --leak-check=full --error-exitcode=2 -- $(BIN_DIR)/tests
+else
+valgrind-test:
+	@echo "Not running valgrind-test as no valgrind binary found during configure"
+endif
+
+else
+
+test:
+	@echo "Not running tests as no gmock/gtest specified during configure"
+	@echo "To configure, specify with --with-gmock=PATH_TO_GMOCK"
+test-valgrind: test
+
+endif
+
+clean:
+	rm -rf $(OBJ_DIR) $(BIN_DIR) *.tar.gz .tests-pass
+
+spotless: clean
+	rm -rf lib include config.log configure config.status src/main/c/internal/Config.h Makefile autom4te.cache
+