summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorowent <owt5008137@live.com>2015-08-22 12:58:40 +0800
committerJan-Erik Rediger <janerik@fnordig.de>2016-04-20 16:10:02 +0200
commit6c53d6803aa460ac03f568c81a8335aa3ccfef6d (patch)
tree65c4c7006952cadebae9f0d66cd5b1a056d3ee89
parent2139f78c71a9ebfcfad27d8e7d5b6689d95aee78 (diff)
Add CI for Windows
- fix macro problem in mingw-gcc - fix typedef in cygwin
-rw-r--r--appveyor.yml86
-rw-r--r--fmacros.h4
-rw-r--r--test.c18
3 files changed, 99 insertions, 9 deletions
diff --git a/appveyor.yml b/appveyor.yml
new file mode 100644
index 0000000..b784aad
--- /dev/null
+++ b/appveyor.yml
@@ -0,0 +1,86 @@
+#
+# Appveyor configuration file for CI build of hiredis-happ on Windows (under Cygwin)
+#
+# For further details see http://www.appveyor.com
+#
+
+#
+# Custom environment variables
+#
+environment:
+ matrix:
+ - CYG_ROOT: C:\cygwin64
+ CYG_SETUP: setup-x86_64.exe
+ CYG_MIRROR: http://cygwin.mirror.constant.com
+ CYG_CACHE: C:\cygwin64\var\cache\setup
+ CYG_BASH: C:\cygwin64\bin\bash
+ CC: gcc
+ CFLAGS: -Werror
+ - CYG_ROOT: C:\cygwin
+ CYG_SETUP: setup-x86.exe
+ CYG_MIRROR: http://cygwin.mirror.constant.com
+ CYG_CACHE: C:\cygwin\var\cache\setup
+ CYG_BASH: C:\cygwin\bin\bash
+ CC: gcc
+ TARGET: 32bit
+ TARGET_VARS: 32bit-vars
+ CFLAGS: -Werror
+# - CC: clang
+# CFLAGS: -Werror
+# LDFLAGS:
+# - CC: clang
+# TARGET: 32bit
+# TARGET_VARS: 32bit-vars
+# CFLAGS: -Werror
+# LDFLAGS:
+#
+# Cache Cygwin files to speed up build
+#
+cache:
+ - '%CYG_CACHE%'
+
+#
+# Do a shallow clone of the repo to speed up build
+#
+clone_depth: 1
+
+#
+# Initialisation prior to pulling the Mono repository
+# Attempt to ensure we don't try to convert line endings to Win32 CRLF as this will cause build to fail
+#
+init:
+ - git config --global core.autocrlf input
+
+#
+# Install needed build dependencies
+#
+install:
+ - ps: 'Start-FileDownload "http://cygwin.com/$env:CYG_SETUP" -FileName "$env:CYG_SETUP"'
+ - '%CYG_SETUP% --quiet-mode --no-shortcuts --only-site --root "%CYG_ROOT%" --site "%CYG_MIRROR%" --local-package-dir "%CYG_CACHE%" --packages automake,bison,gcc-core,libtool,make,gettext-devel,gettext,intltool,pkg-config,clang,llvm > NUL 2>&1'
+ - '%CYG_BASH% -lc "cygcheck -dc cygwin"'
+
+# Cygwin build script
+#
+# NOTES:
+#
+# The stdin/stdout file descriptor appears not to be valid for the Appveyor
+# build which causes failures as certain functions attempt to redirect
+# default file handles. Ensure a dummy file descriptor is opened with 'exec'.
+#
+build_script:
+ - 'echo building...'
+ - '%CYG_BASH% -lc "cd $APPVEYOR_BUILD_FOLDER; exec 0</dev/null; make LDFLAGS=$LDFLAGS CC=$CC $TARGET CFLAGS=$CFLAGS && make LDFLAGS=$LDFLAGS CC=$CC $TARGET_VARS hiredis-example"'
+#
+# Run unit test
+# there is no valgrind in cygwin, so skipped
+# test_script:
+ #- '%CYG_BASH% -lc "cd $APPVEYOR_BUILD_FOLDER; exec 0</dev/null; <test command here>"'
+
+#
+# Only build the master branch
+#
+branches:
+ only:
+ - master
+
+# no need artifacts
diff --git a/fmacros.h b/fmacros.h
index 19d7b21..7a85121 100644
--- a/fmacros.h
+++ b/fmacros.h
@@ -6,6 +6,10 @@
#define _DEFAULT_SOURCE
#endif
+#if defined(__CYGWIN__)
+#include <sys/cdefs.h>
+#endif
+
#if defined(__sun__)
#define _POSIX_C_SOURCE 200112L
#elif defined(__linux__) || defined(__OpenBSD__) || defined(__NetBSD__)
diff --git a/test.c b/test.c
index 79148fd..c309df8 100644
--- a/test.c
+++ b/test.c
@@ -30,7 +30,7 @@ struct config {
struct {
const char *path;
- } unix;
+ } unix_sock;
};
/* The following lines make up our testing "framework" :) */
@@ -97,10 +97,10 @@ static redisContext *connect(struct config config) {
if (config.type == CONN_TCP) {
c = redisConnect(config.tcp.host, config.tcp.port);
} else if (config.type == CONN_UNIX) {
- c = redisConnectUnix(config.unix.path);
+ c = redisConnectUnix(config.unix_sock.path);
} else if (config.type == CONN_FD) {
/* Create a dummy connection just to get an fd to inherit */
- redisContext *dummy_ctx = redisConnectUnix(config.unix.path);
+ redisContext *dummy_ctx = redisConnectUnix(config.unix_sock.path);
if (dummy_ctx) {
int fd = disconnect(dummy_ctx, 1);
printf("Connecting to inherited fd %d\n", fd);
@@ -361,7 +361,7 @@ static void test_blocking_connection_errors(void) {
strcmp(c->errstr,"Connection refused") == 0);
redisFree(c);
- test("Returns error when the unix socket path doesn't accept connections: ");
+ test("Returns error when the unix_sock socket path doesn't accept connections: ");
c = redisConnectUnix((char*)"/tmp/idontexist.sock");
test_cond(c->err == REDIS_ERR_IO); /* Don't care about the message... */
redisFree(c);
@@ -482,7 +482,7 @@ static void test_blocking_connection_timeouts(struct config config) {
test("Reconnect properly uses owned parameters: ");
config.tcp.host = "foo";
- config.unix.path = "foo";
+ config.unix_sock.path = "foo";
redisReconnect(c);
reply = redisCommand(c, "PING");
test_cond(reply != NULL && reply->type == REDIS_REPLY_STATUS && strcmp(reply->str, "PONG") == 0);
@@ -736,7 +736,7 @@ int main(int argc, char **argv) {
.host = "127.0.0.1",
.port = 6379
},
- .unix = {
+ .unix_sock = {
.path = "/tmp/redis.sock"
}
};
@@ -757,7 +757,7 @@ int main(int argc, char **argv) {
cfg.tcp.port = atoi(argv[0]);
} else if (argc >= 2 && !strcmp(argv[0],"-s")) {
argv++; argc--;
- cfg.unix.path = argv[0];
+ cfg.unix_sock.path = argv[0];
} else if (argc >= 1 && !strcmp(argv[0],"--skip-throughput")) {
throughput = 0;
} else if (argc >= 1 && !strcmp(argv[0],"--skip-inherit-fd")) {
@@ -783,7 +783,7 @@ int main(int argc, char **argv) {
test_append_formatted_commands(cfg);
if (throughput) test_throughput(cfg);
- printf("\nTesting against Unix socket connection (%s):\n", cfg.unix.path);
+ printf("\nTesting against Unix socket connection (%s):\n", cfg.unix_sock.path);
cfg.type = CONN_UNIX;
test_blocking_connection(cfg);
test_blocking_connection_timeouts(cfg);
@@ -791,7 +791,7 @@ int main(int argc, char **argv) {
if (throughput) test_throughput(cfg);
if (test_inherit_fd) {
- printf("\nTesting against inherited fd (%s):\n", cfg.unix.path);
+ printf("\nTesting against inherited fd (%s):\n", cfg.unix_sock.path);
cfg.type = CONN_FD;
test_blocking_connection(cfg);
}