ctest: add tests for evlib foreign example

This just runs each of the eventlib-foreign cases that are enabled, it doesn't
do a client action during the test yet since that's hard to arrange with ctest,
but it will catch most breakage.

Change the LD_LIBRARY_PATH order when looking for evlib plugins, so that it
searches there first, if given
diff --git a/lib/core/context.c b/lib/core/context.c
index 921af1e..dd71b8b 100644
--- a/lib/core/context.c
+++ b/lib/core/context.c
@@ -486,48 +486,49 @@
 		if (!lws_check_opt(info->options, map[n].flag))
 			continue;
 
-		if (lws_plugins_init(&evlib_plugin_list,
+		/*
+		 * Check LD_LIBRARY_PATH override path first if present
+		 */
+
+		if (ld_env) {
+			char temp[128];
+			struct lws_tokenize ts;
+			const char * tok[2] = { temp, NULL };
+
+			memset(&ts, 0, sizeof(ts));
+			ts.start = ld_env;
+			ts.len = strlen(ld_env);
+			ts.flags = LWS_TOKENIZE_F_SLASH_NONTERM |
+				   LWS_TOKENIZE_F_DOT_NONTERM |
+				   LWS_TOKENIZE_F_MINUS_NONTERM |
+				   LWS_TOKENIZE_F_NO_INTEGERS |
+				   LWS_TOKENIZE_F_NO_FLOATS;
+
+			do {
+				ts.e = (int8_t)lws_tokenize(&ts);
+				if (ts.e != LWS_TOKZE_TOKEN)
+					continue;
+
+				lws_strnncpy(temp, ts.token,
+					     ts.token_len,
+					     sizeof(temp));
+
+				if (!lws_plugins_init(
+						&evlib_plugin_list, tok,
+						     "lws_evlib_plugin",
+						     map[n].name,
+						     NULL, NULL)) {
+					ok = 1;
+					break;
+				}
+
+			} while (ts.e > 0);
+		}
+
+		if (!ok &&
+		    !lws_plugins_init(&evlib_plugin_list,
 				     dlist, "lws_evlib_plugin",
-				     map[n].name, NULL, NULL)) {
-
-			/*
-			 * No joy in the canned paths, try LD_LIBRARY_PATH
-			 */
-
-			if (ld_env) {
-				char temp[128];
-				struct lws_tokenize ts;
-				const char * tok[2] = { temp, NULL };
-
-				memset(&ts, 0, sizeof(ts));
-				ts.start = ld_env;
-				ts.len = strlen(ld_env);
-				ts.flags = LWS_TOKENIZE_F_SLASH_NONTERM |
-					   LWS_TOKENIZE_F_DOT_NONTERM |
-					   LWS_TOKENIZE_F_NO_INTEGERS |
-					   LWS_TOKENIZE_F_NO_FLOATS;
-
-				do {
-					ts.e = (int8_t)lws_tokenize(&ts);
-					if (ts.e != LWS_TOKZE_TOKEN)
-						continue;
-
-					lws_strnncpy(temp, ts.token,
-						     ts.token_len,
-						     sizeof(temp));
-
-					if (!lws_plugins_init(
-							&evlib_plugin_list, tok,
-							     "lws_evlib_plugin",
-							     map[n].name,
-							     NULL, NULL)) {
-						ok = 1;
-						break;
-					}
-
-				} while (ts.e > 0);
-			}
-		} else
+				     map[n].name, NULL, NULL))
 			ok = 1;
 
 		if (!ok) {
diff --git a/minimal-examples/http-server/minimal-http-server-eventlib-foreign/CMakeLists.txt b/minimal-examples/http-server/minimal-http-server-eventlib-foreign/CMakeLists.txt
index 123e813..dd1ed19 100644
--- a/minimal-examples/http-server/minimal-http-server-eventlib-foreign/CMakeLists.txt
+++ b/minimal-examples/http-server/minimal-http-server-eventlib-foreign/CMakeLists.txt
@@ -91,6 +91,28 @@
 
 if (requirements)
 	add_executable(${SAMP} ${SRCS})
+	
+	#
+	# tests are running in the same machine context in parallel so they
+	# compete for the same ports.  Select a base port from which sai
+	# instance we are running in, add another digit at the actual test
+	# according to which subtest it is.  Then there can be no clashes
+	# regardless of how many build and tests in parallel.
+	#
+
+	set(PORT_HSEF_SRV "961")
+	if ("$ENV{SAI_INSTANCE_IDX}" STREQUAL "0")
+		set(PORT_HSEF_SRV 962)
+	endif()
+	if ("$ENV{SAI_INSTANCE_IDX}" STREQUAL "1")
+		set(PORT_HSEF_SRV 963)
+	endif()
+	if ("$ENV{SAI_INSTANCE_IDX}" STREQUAL "2")
+		set(PORT_HSEF_SRV 964)
+	endif()
+	if ("$ENV{SAI_INSTANCE_IDX}" STREQUAL "3")
+		set(PORT_HSEF_SRV 965)
+	endif()
 
 	if (websockets_shared)
 		target_link_libraries(${SAMP} websockets_shared ${extralibs} ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS})
@@ -98,4 +120,49 @@
 	else()
 		target_link_libraries(${SAMP} websockets ${extralibs} ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS})
 	endif()
+	
+	# notice we override the evlib plugin source via LD_LIBRARY_PATH so
+	# we are using the evlibs we just built, if any
+	
+	if (LWS_WITH_LIBUV)
+		add_test(NAME hs_evlib_foreign_uv COMMAND lws-minimal-http-server-eventlib-foreign --uv -p ${PORT_HSEF_SRV}1)
+		set_tests_properties(hs_evlib_foreign_uv
+			     PROPERTIES
+			     ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib"
+			     WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/http-server/minimal-http-server-eventlib-foreign
+			     TIMEOUT 50)
+	endif()
+	if (LWS_WITH_LIBEVENT)
+		add_test(NAME hs_evlib_foreign_event COMMAND lws-minimal-http-server-eventlib-foreign --event -p ${PORT_HSEF_SRV}2)
+		set_tests_properties(hs_evlib_foreign_event
+			     PROPERTIES
+			     ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib"
+			     WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/http-server/minimal-http-server-eventlib-foreign
+			     TIMEOUT 50)
+	endif()
+	if (LWS_WITH_LIBEV)
+		add_test(NAME hs_evlib_foreign_ev COMMAND lws-minimal-http-server-eventlib-foreign --ev -p ${PORT_HSEF_SRV}3)
+		set_tests_properties(hs_evlib_foreign_ev
+			     PROPERTIES
+			     ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib"
+			     WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/http-server/minimal-http-server-eventlib-foreign
+			     TIMEOUT 50)
+	endif()
+	if (LWS_WITH_GLIB)
+		add_test(NAME hs_evlib_foreign_glib COMMAND lws-minimal-http-server-eventlib-foreign --glib -p ${PORT_HSEF_SRV}4)
+		set_tests_properties(hs_evlib_foreign_glib
+			     PROPERTIES
+			     ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib"
+			     WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/http-server/minimal-http-server-eventlib-foreign
+			     TIMEOUT 50)
+	endif()
+	if (LWS_WITH_SDEVENT)
+		add_test(NAME hs_evlib_foreign_sd COMMAND lws-minimal-http-server-eventlib-foreign --sd -p ${PORT_HSEF_SRV}5)
+		set_tests_properties(hs_evlib_foreign_sd
+			     PROPERTIES
+			     ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib"
+			     WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/http-server/minimal-http-server-eventlib-foreign
+			     TIMEOUT 50)
+	endif()
+	
 endif()
diff --git a/minimal-examples/http-server/minimal-http-server-eventlib-foreign/minimal-http-server-eventlib-foreign.c b/minimal-examples/http-server/minimal-http-server-eventlib-foreign/minimal-http-server-eventlib-foreign.c
index ff9a897..2beec61 100644
--- a/minimal-examples/http-server/minimal-http-server-eventlib-foreign/minimal-http-server-eventlib-foreign.c
+++ b/minimal-examples/http-server/minimal-http-server-eventlib-foreign/minimal-http-server-eventlib-foreign.c
@@ -152,6 +152,8 @@
 
 	memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */
 	info.port = 7681;
+	if ((p = lws_cmdline_option(argc, argv, "-p")))
+		info.port = atoi(p);
 	info.mounts = &mount;
 	info.error_document_404 = "/404.html";
 	info.pcontext = &context;