From 03674a655d4363cf26a3dd53a3493ed4574a2de1 Mon Sep 17 00:00:00 2001 From: Andy Green Date: Wed, 16 Jan 2013 11:47:40 +0800 Subject: [PATCH] configure without client This leverages the refactor patches to introduce the ability to disable building any client side code in the library or the client side test apps. This will be a considerable size saving for embedded server-only case. Signed-off-by: Andy Green --- README-test-server | 4 ++++ configure.ac | 12 ++++++++++++ lib/Makefile.am | 12 ++++++++---- lib/handshake.c | 6 ++++-- lib/libwebsockets.c | 7 ++++++- test-server/Makefile.am | 43 +++++++++++++++++++++++++++++++---------- 6 files changed, 67 insertions(+), 17 deletions(-) diff --git a/README-test-server b/README-test-server index 500024d7..23af345b 100644 --- a/README-test-server +++ b/README-test-server @@ -75,6 +75,10 @@ There are several other possible configure options --without-testapps Just build the library not the test apps +--without-client Don't build the client part of the library nor the + test apps that need the client part. Useful to + minimize library footprint for embedded server-only + case Externally configurable important constants ------------------------------------------- diff --git a/configure.ac b/configure.ac index 60f74537..3bf09ae3 100644 --- a/configure.ac +++ b/configure.ac @@ -82,6 +82,18 @@ AC_ARG_WITH(testapps, AM_CONDITIONAL(NO_TESTAPPS, test x$no_testapps = xyes) +# +# +# +AC_ARG_WITH(client, + [ --without-client dont build the client part of the library ], + [ no_client=yes + ]) + +if test "x$no_client" = "xyes" ; then +CFLAGS="$CFLAGS -DLWS_NO_CLIENT" +fi +AM_CONDITIONAL(NO_CLIENT, test x$no_client = xyes) # # diff --git a/lib/Makefile.am b/lib/Makefile.am index 07500ad1..bf3586a6 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -3,17 +3,21 @@ include_HEADERS=libwebsockets.h dist_libwebsockets_la_SOURCES=libwebsockets.c \ handshake.c \ parsers.c \ - client.c \ - client-parser.c \ - output.c \ libwebsockets.h \ base64-decode.c \ - client-handshake.c \ + output.c \ extension.c \ extension-deflate-stream.c extension-deflate-stream.h \ extension-deflate-frame.c extension-deflate-frame.h\ private-libwebsockets.h +if NO_CLIENT +else +dist_libwebsockets_la_SOURCES+= client.c \ + client-parser.c \ + client-handshake.c +endif + if USE_BUILTIN_GETIFADDRS dist_libwebsockets_la_SOURCES += getifaddrs.c endif diff --git a/lib/handshake.c b/lib/handshake.c index c53d1d01..634ccc8d 100644 --- a/lib/handshake.c +++ b/lib/handshake.c @@ -561,6 +561,7 @@ libwebsocket_read(struct libwebsocket_context *context, //fwrite(buf, 1, len, stderr); #endif +#ifndef LWS_NO_CLIENT switch (wsi->mode) { case LWS_CONNMODE_WS_CLIENT_WAITING_PROXY_REPLY: case LWS_CONNMODE_WS_CLIENT_ISSUE_HANDSHAKE: @@ -574,7 +575,7 @@ libwebsocket_read(struct libwebsocket_context *context, default: break; } - +#endif /* LWS_CONNMODE_WS_SERVING */ for (n = 0; n < len; n++) @@ -702,6 +703,7 @@ libwebsocket_read(struct libwebsocket_context *context, case WSI_STATE_AWAITING_CLOSE_ACK: case WSI_STATE_ESTABLISHED: +#ifndef LWS_NO_CLIENT switch (wsi->mode) { case LWS_CONNMODE_WS_CLIENT: for (n = 0; n < len; n++) @@ -712,7 +714,7 @@ libwebsocket_read(struct libwebsocket_context *context, default: break; } - +#endif /* LWS_CONNMODE_WS_SERVING */ if (libwebsocket_interpret_incoming_packet(wsi, buf, len) < 0) diff --git a/lib/libwebsockets.c b/lib/libwebsockets.c index 63d286a8..ff152f11 100644 --- a/lib/libwebsockets.c +++ b/lib/libwebsockets.c @@ -773,8 +773,9 @@ libwebsocket_service_fd(struct libwebsocket_context *context, int more = 1; struct lws_tokens eff_buf; int opt = 1; +#ifndef LWS_NO_CLIENT extern int lws_client_socket_service(struct libwebsocket_context *context, struct libwebsocket *wsi, struct pollfd *pollfd); - +#endif /* * you can call us with pollfd = NULL to just allow the once-per-second * global timeout checks; if less than a second since the last check @@ -1273,7 +1274,11 @@ read_pending: break; default: +#ifdef LWS_NO_CLIENT + break; +#else return lws_client_socket_service(context, wsi, pollfd); +#endif } return 0; diff --git a/test-server/Makefile.am b/test-server/Makefile.am index 0a22b254..de0a2a21 100644 --- a/test-server/Makefile.am +++ b/test-server/Makefile.am @@ -1,48 +1,71 @@ -bin_PROGRAMS=libwebsockets-test-server libwebsockets-test-client libwebsockets-test-server-extpoll libwebsockets-test-fraggle +bin_PROGRAMS=libwebsockets-test-server libwebsockets-test-server-extpoll + +if NO_CLIENT +else +bin_PROGRAMS+=libwebsockets-test-client libwebsockets-test-fraggle +endif + libwebsockets_test_server_SOURCES=test-server.c libwebsockets_test_server_CFLAGS= libwebsockets_test_server_LDADD=-L../lib -lwebsockets -lz -libwebsockets_test_client_SOURCES=test-client.c -libwebsockets_test_client_CFLAGS= -libwebsockets_test_client_LDADD=-L../lib -lwebsockets -lz libwebsockets_test_server_extpoll_SOURCES=test-server.c libwebsockets_test_server_extpoll_CFLAGS=$(AM_CFLAGS) -DEXTERNAL_POLL libwebsockets_test_server_extpoll_LDADD=-L../lib -lwebsockets -lz +if NO_CLIENT +else +libwebsockets_test_client_SOURCES=test-client.c +libwebsockets_test_client_CFLAGS= +libwebsockets_test_client_LDADD=-L../lib -lwebsockets -lz libwebsockets_test_fraggle_SOURCES=test-fraggle.c libwebsockets_test_fraggle_CFLAGS= libwebsockets_test_fraggle_LDADD=-L../lib -lwebsockets -lz - +endif + if MINGW libwebsockets_test_server_CFLAGS+= -w -I../win32port/win32helpers -libwebsockets_test_client_CFLAGS+= -w -I../win32port/win32helpers libwebsockets_test_server_extpoll_CFLAGS+= -w -I../win32port/win32helpers +if NO_CLIENT +else +libwebsockets_test_client_CFLAGS+= -w -I../win32port/win32helpers libwebsockets_test_fraggle_CFLAGS+= -w -I../win32port/win32helpers +endif libwebsockets_test_server_LDADD+= -lm -luser32 -ladvapi32 -lkernel32 -lgcc -lws2_32 -lz -libwebsockets_test_client_LDADD+= -lm -luser32 -ladvapi32 -lkernel32 -lgcc -lws2_32 -lz libwebsockets_test_server_extpoll_LDADD+= -lm -luser32 -ladvapi32 -lkernel32 -lgcc -lws2_32 -lz +if NO_CLIENT +else +libwebsockets_test_client_LDADD+= -lm -luser32 -ladvapi32 -lkernel32 -lgcc -lws2_32 -lz libwebsockets_test_fraggle_LDADD+= -lm -luser32 -ladvapi32 -lkernel32 -lgcc -lws2_32 -lz +endif else libwebsockets_test_server_CFLAGS+= -Werror -libwebsockets_test_client_CFLAGS+= -Werror libwebsockets_test_server_extpoll_CFLAGS+= -Werror +if NO_CLIENT +else +libwebsockets_test_client_CFLAGS+= -Werror libwebsockets_test_fraggle_CFLAGS+= -Werror +endif endif libwebsockets_test_server_CFLAGS+= -Wall -std=gnu99 -pedantic -DINSTALL_DATADIR=\"@datadir@\" -DLWS_OPENSSL_CLIENT_CERTS=\"@clientcertdir@\" -libwebsockets_test_client_CFLAGS+= -Wall -std=gnu99 -pedantic -DINSTALL_DATADIR=\"@datadir@\" -DLWS_OPENSSL_CLIENT_CERTS=\"@clientcertdir@\" libwebsockets_test_server_extpoll_CFLAGS+= -Wall -std=gnu99 -pedantic -DINSTALL_DATADIR=\"@datadir@\" -DLWS_OPENSSL_CLIENT_CERTS=\"@clientcertdir@\" +if NO_CLIENT +else +libwebsockets_test_client_CFLAGS+= -Wall -std=gnu99 -pedantic -DINSTALL_DATADIR=\"@datadir@\" -DLWS_OPENSSL_CLIENT_CERTS=\"@clientcertdir@\" libwebsockets_test_fraggle_CFLAGS+= -Wall -std=gnu99 -pedantic -DINSTALL_DATADIR=\"@datadir@\" -DLWS_OPENSSL_CLIENT_CERTS=\"@clientcertdir@\" - +endif if NOPING else +if NO_CLIENT +else bin_PROGRAMS+=libwebsockets-test-ping libwebsockets_test_ping_SOURCES=test-ping.c libwebsockets_test_ping_LDADD=-L../lib -lwebsockets libwebsockets_test_ping_CFLAGS= -Wall -Werror -std=gnu99 -pedantic -DINSTALL_DATADIR=\"@datadir@\" -DLWS_OPENSSL_CLIENT_CERTS=\"@clientcertdir@\" endif +endif EXTRA_DIST=test.html favicon.ico libwebsockets.org-logo.png