* remove -Wextra from makefile to make older compilers happy
[blender.git] / extern / verse / dist / Makefile
1 #
2 # Makefile for Verse core; API and reference server.
3 # This pretty much requires GNU Make, I think.
4 #
5 # This build is slightly complicated that part of the C code that
6 # needs to go into the API implementation is generated by building
7 # and running other C files (this is the protocol definition).
8 #
9
10 CC      ?= gcc
11 CFLAGS  ?= "-I$(shell pwd)" -Wall -Wpointer-arith -Wno-unused-parameter -ansi -g # -pg -O2 -finline-functions
12 LDFLAGS ?= # -pg
13
14 AR      ?= ar
15 ARFLAGS = rus
16 RANLIB  ?= ranlib
17
18 TARGETS = libverse.a verse
19
20 .PHONY: all clean cleanprot
21
22 # Automatically generated protocol things.
23 PROT_DEF  = $(wildcard v_cmd_def_*.c)
24 PROT_TOOL = v_cmd_gen.c $(PROT_DEF)
25 PROT_OUT  = v_gen_pack_init.c v_gen_unpack_func.h verse.h \
26                 $(patsubst v_cmd_def_%.c,v_gen_pack_%_node.c, $(PROT_DEF))
27
28 # The API implementation is the protocol code plus a few bits.
29 LIBVERSE_SRC =  $(PROT_OUT) v_bignum.c v_cmd_buf.c v_connect.c \
30                 v_connection.c v_connection.h v_encryption.c \
31                 v_func_storage.c v_internal_verse.h v_man_pack_node.c \
32                 v_network.c v_network.h v_network_in_que.c v_network_out_que.c \
33                 v_pack.c v_pack.h v_pack_method.c v_prime.c v_randgen.c v_util.c \
34                 verse_ms.c
35
36 LIBVERSE_OBJ = $(patsubst %h,, $(LIBVERSE_SRC:%.c=%.o))
37
38 # The server is a simple 1:1 mapping, so just use wildcards.
39 VERSE_SRC = $(wildcard vs_*.c)
40 VERSE_OBJ = $(VERSE_SRC:%.c=%.o)
41
42 # -----------------------------------------------------
43
44 all:            $(TARGETS)
45
46 verse:          $(VERSE_OBJ) libverse.a
47                 $(CC) $(LDFLAGS) -o $@ $^
48
49 libverse.a:     libverse.a($(LIBVERSE_OBJ))
50
51 # -----------------------------------------------------
52
53 # Here are the automatically generated pieces of the puzzle.
54 # Basically, we generate v_gen_pack_X_node.c files by compiling
55 # the v_cmd_def_X.c files together with some driver glue and
56 # running the result.
57 #
58
59 # The autogen outputs all depend on the tool.
60 $(PROT_OUT):    mkprot
61                 ./mkprot
62
63 # Build the protocol maker, from the definitions themselves.
64 mkprot:         $(PROT_TOOL) verse_header.h
65                 $(CC) -DV_GENERATE_FUNC_MODE -o $@ $(PROT_TOOL)
66
67 # Clean away all the generated parts of the protocol implementation.
68 cleanprot:      clean
69                 rm -f mkprot $(PROT_OUT)
70
71 # -----------------------------------------------------
72
73 clean:
74         rm -f *.o $(TARGETS) mkprot
75
76 # -----------------------------------------------------
77
78 # Utter ugliness to create release archives. Needs to improve, but should work for a while.
79 dist:
80         RELEASE=$$( \
81         R=`grep V_RELEASE_NUMBER verse.h | tr -s ' \t' | tr -d '"\r' | cut -d'  ' -f3` ; \
82         P=`grep V_RELEASE_PATCH verse.h | tr -s ' \t' | tr -d '"\r' | cut -d'   ' -f3` ; \
83         L=`grep V_RELEASE_LABEL verse.h | tr -s ' \t' | tr -d '"\r' | cut -d'   ' -f3` ; echo r$${R}p$$P$$L ) ; \
84         if [ $$RELEASE ]; then ( \
85          rm -rf  /tmp/verse; \
86          mkdir -p /tmp/verse; \
87          cp -a * /tmp/verse; \
88          cd /tmp && zip verse-$$RELEASE.zip -r verse -x 'verse/*CVS*' -x 'verse/.*' ; \
89          ); mv /tmp/verse-$$RELEASE.zip . \
90         ;else \
91           echo "Couldn't auto-set RELEASE from verse.h, something is fishy" \
92         ;fi