update Windows support
Stefan Schuermans

Stefan Schuermans commited on 2017-09-23 20:43:55
Showing 9 changed files, with 100 additions and 38 deletions.

... ...
@@ -8,6 +8,7 @@
8 8
 #include <string.h>
9 9
 #ifdef WIN32
10 10
 #include <winsock2.h>
11
+#include <ws2tcpip.h>
11 12
 #define close closesocket
12 13
 #else
13 14
 #include <unistd.h>
... ...
@@ -8,6 +8,7 @@
8 8
 #include <string.h>
9 9
 #ifdef WIN32
10 10
 #include <winsock2.h>
11
+#include <ws2tcpip.h>
11 12
 #define close closesocket
12 13
 #define strcasecmp stricmp
13 14
 #else
... ...
@@ -5,45 +5,60 @@
5 5
 
6 6
 CC:=gcc
7 7
 CFLAGS:=-Wall -Wextra -Werror -fPIC -O2 -I..
8
-LIB_LFLAGS:=
9
-BIN_LFLAGS:=-L. -Wl,-rpath,'$$ORIGIN'
8
+LIB_LDFLAGS:=
9
+LIB_LDLIBS:=
10
+BIN_LDFLAGS:=-L.
11
+BIN_LDLIBS:=
10 12
 AR:=ar
11 13
 RANLIB:=ranlib
12 14
 
13
-ifneq ($(MAKECMDGOALS),clean)
14
-include ../version.mk
15
-include ../config/config.mk
15
+-include ../version.mk
16
+-include ../config/config.mk
17
+
18
+LIB_OBJS:=BlinkenColorizer.o BlinkenFrame.o BlinkenMovie.o \
19
+          BlinkenProto.o Tools.o
20
+
21
+ifeq ($(BLINKENLIB_CFG_MNG),1)
22
+LIB_OBJS+=BlinkenMng.o
23
+LIB_LDLIBS+=-lmng -lz
16 24
 endif
17 25
 
26
+ifeq ($(BLINKENLIB_CFG_GIF),1)
27
+LIB_OBJS+=BlinkenGif.o
28
+LIB_LDLIBS+=-lgif
29
+endif
30
+
31
+ifeq ($(BLINKENLIB_CFG_WIN),1)
32
+LIB_LDLIBS+=-lws2_32
33
+BIN_LDLIBS+=-lws2_32
34
+SHLIBEXT:=dll
35
+else
18 36
 ifeq ($(BLINKENLIB_CFG_OSX),1)
19
-SHLIBEXT:=dylib
20 37
 CFLAGS+=-I/sw/include
21
-LFLAGS+=-L/sw/lib
22
-SONAMEOPT=
38
+LIB_LDFLAGS+=-L/sw/lib
39
+BIN_LDFLAGS+=-L/sw/lib -Wl,-rpath,'$$ORIGIN'
40
+SHLIBEXT:=dylib
23 41
 else
42
+LIB_LDFLAGS+=-Wl,-soname,libBlinkenLib.$(SHLIBEXT).$(VERSION_MAJOR)
43
+BIN_LDFLAGS+=-Wl,-rpath,'$$ORIGIN'
24 44
 SHLIBEXT:=so
25
-SONAMEOPT:=-Wl,-soname,libBlinkenLib.$(SHLIBEXT).$(VERSION_MAJOR)
26 45
 endif
27
-
28
-ifeq ($(BLINKENLIB_CFG_MNG),1)
29
-BLINKEN_MNG_H:=BlinkenMng.h
30
-BLINKEN_MNG_O:=BlinkenMng.o
31
-LMNG:=-lmng -lz
32 46
 endif
33 47
 
34
-ifeq ($(BLINKENLIB_CFG_GIF),1)
35
-BLINKEN_GIF_H:=BlinkenGif.h
36
-BLINKEN_GIF_O:=BlinkenGif.o
37
-LGIF:=-lgif
38
-endif
48
+.PHONY: all clean
49
+.SUFFIXES:
50
+SUFFIXES:=
51
+.SECONDARY:
39 52
 
40
-LIB_OBJS:=BlinkenColorizer.o BlinkenFrame.o BlinkenMovie.o \
41
-          $(BLINKEN_MNG_O) $(BLINKEN_GIF_O) \
42
-          BlinkenProto.o Tools.o
53
+all: libBlinkenLib.a \
54
+     libBlinkenLib.$(SHLIBEXT).$(VERSION_MAJOR) \
55
+     libBlinkenLib.$(SHLIBEXT).$(VERSION) libBlinkenLib.$(SHLIBEXT)
43 56
 
44
-.phony: all clean
57
+all: BlinkenConv BlinkenSend BlinkenRecv
45 58
 
46
-all: libBlinkenLib.a libBlinkenLib.$(SHLIBEXT).$(VERSION_MAJOR) libBlinkenLib.$(SHLIBEXT).$(VERSION) libBlinkenLib.$(SHLIBEXT) BlinkenConv BlinkenSend BlinkenRecv BlinkenOutput BlinkenDeviceOutput
59
+ifeq ($(BLINKENLIB_CFG_WIN),0)
60
+all: BlinkenOutput BlinkenDeviceOutput
61
+endif
47 62
 
48 63
 config.h: ../config/config.h
49 64
 	cp $< $@
... ...
@@ -57,7 +72,10 @@ BlinkenProto.o: BlinkenProto.c BlinkenProto.h BlinkenProtoIntern.h
57 72
 BlinkenFrame.o: BlinkenFrame.c BlinkenConstants.h BlinkenColorizer.h BlinkenFrame.h BlinkenProto.h BlinkenProtoIntern.h Tools.h
58 73
 	$(CC) $(CFLAGS) -c -o $@ $<
59 74
 
60
-BlinkenMovie.o: BlinkenMovie.c BlinkenConstants.h BlinkenColorizer.h BlinkenFrame.h BlinkenProto.h BlinkenMovie.h $(BLINKEN_MNG_H) $(BLINKEN_GIF_H) Tools.h config.h
75
+BlinkenGif.o: BlinkenGif.c BlinkenConstants.h BlinkenColorizer.h BlinkenFrame.h BlinkenProto.h BlinkenMovie.h Tools.h config.h
76
+	$(CC) $(CFLAGS) -c -o $@ $<
77
+
78
+BlinkenMovie.o: BlinkenMovie.c BlinkenConstants.h BlinkenColorizer.h BlinkenFrame.h BlinkenProto.h BlinkenMovie.h BlinkenGif.h BlinkenMng.h Tools.h config.h
61 79
 	$(CC) $(CFLAGS) -c -o $@ $<
62 80
 
63 81
 BlinkenMng.o: BlinkenMng.c BlinkenConstants.h BlinkenColorizer.h BlinkenFrame.h BlinkenProto.h BlinkenMovie.h Tools.h config.h
... ...
@@ -71,7 +89,7 @@ libBlinkenLib.a: $(LIB_OBJS)
71 89
 	$(RANLIB) $@
72 90
 
73 91
 libBlinkenLib.$(SHLIBEXT).$(VERSION): $(LIB_OBJS)
74
-	$(CC) -shared $(SONAMEOPT) $(LIB_LFLAGS) -o $@ $+ $(LMNG) $(LGIF)
92
+	$(CC) -shared $(LIB_LDFLAGS) -o $@ $+ $(LIB_LDLIBS)
75 93
 
76 94
 libBlinkenLib.$(SHLIBEXT).$(VERSION_MAJOR): libBlinkenLib.$(SHLIBEXT).$(VERSION)
77 95
 	rm -f $@
... ...
@@ -88,31 +106,31 @@ BlinkenConv.o: BlinkenConv.c BlinkenLib.h config.h BlinkenColorizer.h BlinkenPro
88 106
 	$(CC) $(CFLAGS) -c -o $@ $<
89 107
 
90 108
 BlinkenConv: BlinkenConv.o libBlinkenLib.$(SHLIBEXT)
91
-	$(CC) $(BIN_LFLAGS) -o $@ $< -lBlinkenLib
109
+	$(CC) $(BIN_LDFLAGS) -o $@ $< -lBlinkenLib $(BIN_LDLIBS)
92 110
 
93 111
 BlinkenSend.o: BlinkenSend.c BlinkenLib.h config.h BlinkenColorizer.h BlinkenProto.h BlinkenFrame.h BlinkenMovie.h Tools2.h
94 112
 	$(CC) $(CFLAGS) -c -o $@ $<
95 113
 
96 114
 BlinkenSend: BlinkenSend.o Tools2.o libBlinkenLib.$(SHLIBEXT)
97
-	$(CC) $(BIN_LFLAGS) -o $@ $(filter %.o,$^) -lBlinkenLib
115
+	$(CC) $(BIN_LDFLAGS) -o $@ $(filter %.o,$^) -lBlinkenLib $(BIN_LDLIBS)
98 116
 
99 117
 BlinkenRecv.o: BlinkenRecv.c BlinkenLib.h config.h BlinkenColorizer.h BlinkenProto.h BlinkenFrame.h BlinkenMovie.h Tools2.h
100 118
 	$(CC) $(CFLAGS) -c -o $@ $<
101 119
 
102 120
 BlinkenRecv: BlinkenRecv.o Tools2.o libBlinkenLib.$(SHLIBEXT)
103
-	$(CC) $(BIN_LFLAGS) -o $@ $(filter %.o,$^) -lBlinkenLib
121
+	$(CC) $(BIN_LDFLAGS) -o $@ $(filter %.o,$^) -lBlinkenLib $(BIN_LDLIBS)
104 122
 
105 123
 BlinkenOutput.o: BlinkenOutput.c BlinkenLib.h config.h BlinkenColorizer.h BlinkenProto.h BlinkenFrame.h BlinkenMovie.h
106 124
 	$(CC) $(CFLAGS) -c -o $@ $<
107 125
 
108 126
 BlinkenOutput: BlinkenOutput.o libBlinkenLib.$(SHLIBEXT)
109
-	$(CC) $(BIN_LFLAGS) -o $@ $< -lBlinkenLib
127
+	$(CC) $(BIN_LDFLAGS) -o $@ $< -lBlinkenLib $(BIN_LDLIBS)
110 128
 
111 129
 BlinkenDeviceOutput.o: BlinkenDeviceOutput.c BlinkenLib.h config.h BlinkenColorizer.h BlinkenProto.h BlinkenFrame.h BlinkenMovie.h
112 130
 	$(CC) $(CFLAGS) -c -o $@ $<
113 131
 
114 132
 BlinkenDeviceOutput: BlinkenDeviceOutput.o libBlinkenLib.$(SHLIBEXT)
115
-	$(CC) $(BIN_LFLAGS) -o $@ $< -lBlinkenLib
133
+	$(CC) $(BIN_LDFLAGS) -o $@ $< -lBlinkenLib $(BIN_LDLIBS)
116 134
 
117 135
 clean:
118 136
 	rm -f BlinkenConv BlinkenSend BlinkenRecv BlinkenOutput BlinkenDeviceOutput libBlinkenLib.$(SHLIBEXT)* libBlinkenLib.a *.o config.h
... ...
@@ -8,6 +8,7 @@
8 8
 #include <string.h>
9 9
 #ifdef WIN32
10 10
 #include <winsock2.h>
11
+#include <ws2tcpip.h>
11 12
 #else
12 13
 #include <sys/types.h>
13 14
 #include <sys/socket.h>
... ...
@@ -17,6 +18,31 @@
17 18
 
18 19
 #include "Tools2.h"
19 20
 
21
+#ifdef WIN32
22
+static int inet_pton(int af, const char *src, void *dst)
23
+{
24
+  struct sockaddr_storage ss;
25
+  int size = sizeof(ss);
26
+  char src_copy[INET6_ADDRSTRLEN + 1];
27
+
28
+  ZeroMemory(&ss, sizeof(ss));
29
+  strncpy (src_copy, src, sizeof(src_copy));
30
+  src_copy[sizeof(src_copy) - 1] = 0;
31
+
32
+  if (WSAStringToAddress(src_copy, af, NULL, (struct sockaddr *)&ss, &size) == 0) {
33
+    switch(af) {
34
+      case AF_INET:
35
+        *(struct in_addr *)dst = ((struct sockaddr_in *)&ss)->sin_addr;
36
+        return 1;
37
+      case AF_INET6:
38
+        *(struct in6_addr *)dst = ((struct sockaddr_in6 *)&ss)->sin6_addr;
39
+        return 1;
40
+    }
41
+  }
42
+  return 0;
43
+}
44
+#endif
45
+
20 46
 // convert text to IPv4 address
21 47
 int txt2addr(char *text, struct sockaddr_in *addr)
22 48
 {
... ...
@@ -8,6 +8,7 @@
8 8
 
9 9
 #ifdef WIN32
10 10
 #include <winsock2.h>
11
+#include <ws2tcpip.h>
11 12
 #else
12 13
 #include <arpa/inet.h>
13 14
 #endif
... ...
@@ -10,6 +10,8 @@ PACK_FILES:=BlinkenLib ChangeLog config examples install Makefile
10 10
 
11 11
 .PHONY: all conf clean distclean install uninstall update pack
12 12
 .SUFFIXES:
13
+SUFFIXES:=
14
+.SECONDARY:
13 15
 
14 16
 all: conf
15 17
 	$(MAKE) -C BlinkenLib all
... ...
@@ -17,12 +19,11 @@ all: conf
17 19
 conf:
18 20
 	$(MAKE) -C config all
19 21
 
20
-clean: conf
22
+clean:
21 23
 	$(MAKE) -C BlinkenLib clean
22 24
 
23 25
 distclean: clean
24 26
 	$(MAKE) -C config clean
25
-	rm -rf tmp
26 27
 
27 28
 install: all
28 29
 	$(MAKE) -C install install
... ...
@@ -23,3 +23,8 @@ cleaning source tree completely
23 23
 run "make distclean"
24 24
 this cleans all autodetected settings and all objects, libraries and binaries
25 25
 
26
+cross-compiling for Windows
27
+---------------------------
28
+clean source tree completely
29
+run "make CC=x86_64-w64-mingw32-gcc" in this directory
30
+
... ...
@@ -7,12 +7,18 @@ CC:=gcc
7 7
 INCDIR:=-I/sw/include
8 8
 LIBDIR:=-L/sw/lib
9 9
 
10
-CFGS:=$(addsuffix .cfg, osx mng gif gif4 gif5)
10
+CFGS:=$(addsuffix .cfg,win osx mng gif gif4 gif5)
11 11
 
12
-.phony: all clean
12
+.PHONY: all clean
13
+.SUFFIXES:
14
+SUFFIXES:=
15
+.SECONDARY:
13 16
 
14 17
 all: config.cfg config.mk config.h
15 18
 
19
+win.cfg:
20
+	if echo '#include <windows.h>' | $(CC) -E -x c - >/dev/null 2>/dev/null; then echo "WIN=1"; else echo "WIN=0"; fi >$@
21
+
16 22
 osx.cfg:
17 23
 	echo "OSX=" | tr -d '\n' >$@
18 24
 	(if [ "$$(uname -s)" == "Darwin" ]; then echo "1"; else echo "0"; fi) >>$@
... ...
@@ -32,7 +38,7 @@ gif.cfg: gif4.cfg gif5.cfg
32 38
 	((cat $^ | grep -q 1 && echo "1") || echo "0") >>$@
33 39
 
34 40
 config.cfg: $(CFGS)
35
-	cat $+ >config.cfg
41
+	cat $^ >config.cfg
36 42
 
37 43
 config.mk: config.cfg
38 44
 	sed 's/^\([A-Z0-9]*\)=\([01]\)$$/BLINKENLIB_CFG_\1:=\2/' <$< >$@
... ...
@@ -45,5 +51,5 @@ config.h: config.cfg Makefile ../version.mk
45 51
 	grep '^VERSION_[A-Z]*:=[0-9]*' ../version.mk | sed 's/^/#define BLINKENLIB_/;s/:=/ /' >>$@
46 52
 
47 53
 clean:
48
-	rm -f $(CFGS) config.mk config.h
54
+	rm -f $(CFGS) config.cfg config.mk config.h
49 55
 
... ...
@@ -33,7 +33,10 @@ HEADERS:=BlinkenLib.h BlinkenMovie.h BlinkenFrame.h BlinkenColorizer.h \
33 33
 LIBS:=libBlinkenLib.a libBlinkenLib.$(SHLIBEXT).$(VERSION)
34 34
 EXECS:=BlinkenConv BlinkenSend BlinkenRecv BlinkenOutput
35 35
 
36
-.phony: install uninstall
36
+.PHONY: install uninstall
37
+.SUFFIXES:
38
+SUFFIXES:=
39
+.SECONDARY:
37 40
 
38 41
 install:
39 42
 	$(INSTALL) -d $(PREFIX)/include/BlinkenLib
40 43