# -*- makefile -*-

OBJECTS = init.o poll.o errors.o processx-connection.o   \
          processx-vector.o create-time.o base64.o       \
	  unix/childlist.o unix/connection.o             \
          unix/processx.o unix/sigchld.o unix/utils.o    \
	  unix/named_pipe.o cleancall.o

all: tools/px tools/sock supervisor/supervisor client$(SHLIB_EXT) $(SHLIB) strip

strip: $(SHLIB) tools/px tools/sock supervisor/supervisor client$(SHLIB_EXT)
	@if which strip >/dev/null && which uname >/dev/null && test "`uname`" = "Linux" && test "$$_R_SHLIB_STRIP_" = "true" && test -n "$$R_STRIP_SHARED_LIB"; then \
		echo stripping $(SHLIB) tools/px tools/sock supervisor/supervisor client$(SHLIB_EXT); \
		echo $$R_STRIP_SHARED_LIB $(SHLIB) tools/px tools/sock supervisor/supervisor client$(SHLIB_EXT); \
		$$R_STRIP_SHARED_LIB $(SHLIB) tools/px tools/sock supervisor/supervisor client$(SHLIB_EXT); \
	fi

.PHONY: all clean strip

tools/px: tools/px.c
	$(CC) $(CFLAGS) $(LDFLAGS) -Wall tools/px.c -o tools/px

supervisor/supervisor: supervisor/supervisor.c supervisor/utils.c
	$(CC) $(CFLAGS) $(LDFLAGS) supervisor/supervisor.c \
	      supervisor/utils.c -o supervisor/supervisor

tools/sock: tools/sock.c
	$(CC) $(CFLAGS) $(LDFLAGS) -I../inst/include -Wall tools/sock.c -o tools/sock

CLIENT_OBJECTS = base64.o client.o errors.o

client$(SHLIB_EXT): $(CLIENT_OBJECTS)
	$(SHLIB_LINK) -o client$(SHLIB_EXT) $(CLIENT_OBJECTS) $(PKG_LIBS) \
		$(SHLIB_LIBADD) $(LIBR)
	@if [ -n "${PROCESSX_UNLINK_R}" ]; then \
	    echo Removing libR.so dependency from client.so; \
	    patchelf --remove-needed libR.so client$(SHLIB_EXT); \
	fi

clean:
	rm -rf $(SHLIB) $(OBJECTS) $(CLIENT_OBJECTS)		\
	    supervisor/supervisor supervisor/supervisor.dSYM 	\
	    supervisor/supervisor.exe tools/px tools/sock	\
	    client$(SHLIB_EXT)
