1# volatile information 2VERSION=0.4 3RELEASE=beta 4 5QUAKE2_DIR=/usr/local/games/quake2 6BIN_DIR=/usr/local/bin 7ARCH=i386 8SHLIBEXT=so 9Q2MODULE=game$(ARCH).$(SHLIBEXT) 10define NEWLINE 11 12 13endef 14 15# distribution settings 16DIST_BASE=relay 17DIST_DIR=$(DIST_BASE)-$(VERSION) 18 19# debug is the default build mode 20ifneq ($(MODE),debug) 21 ifneq ($(MODE),release) 22 MODE=debug 23 endif 24endif 25 26# default commands and build options 27CC=gcc 28LD=gcc 29CPPFLAGS=-Icommon 30CFLAGS=-Wall -fPIC 31LDFLAGS=-lm -ldl 32 33# commands 34DO_CC=$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $< 35DO_LINK=$(LD) $(LDFLAGS) -o $@ $^ 36DO_SHLINK=$(LD) $(LDFLAGS) -shared -o $@ $^ 37TAR=/bin/tar 38 39# include mode-specific build options (can override the above) 40 41# targets 42DEMOCONV_TARGET=$(OUT_DIR)/democonv/democonv 43DM2SERVER_TARGET=$(OUT_DIR)/dm2server/dm2server 44PROXY_TARGET=$(OUT_DIR)/proxy/$(Q2MODULE) 45RELAY_TARGET=$(OUT_DIR)/relay/$(Q2MODULE) 46REPLAY_TARGET=$(OUT_DIR)/replay/$(Q2MODULE) 47 48TARGETS = \ 49 $(DEMOCONV_TARGET) \ 50 $(DM2SERVER_TARGET) \ 51 $(PROXY_TARGET) \ 52 $(RELAY_TARGET) \ 53 $(REPLAY_TARGET) 54 55# objects 56DEMOCONV_OBJS = \ 57 $(OBJ_DIR)/common/block.o \ 58 $(OBJ_DIR)/common/bsp.o \ 59 $(OBJ_DIR)/common/cmd.o \ 60 $(OBJ_DIR)/common/dm2.o \ 61 $(OBJ_DIR)/common/endian.o \ 62 $(OBJ_DIR)/common/getopt.o \ 63 $(OBJ_DIR)/common/getopt1.o \ 64 $(OBJ_DIR)/common/mem.o \ 65 $(OBJ_DIR)/common/pak.o \ 66 $(OBJ_DIR)/common/q2utils.o \ 67 $(OBJ_DIR)/common/utils.o \ 68 $(OBJ_DIR)/democonv/dc_dm2.o \ 69 $(OBJ_DIR)/democonv/dc_main.o 70 71DM2SERVER_OBJS = \ 72 $(OBJ_DIR)/common/block.o \ 73 $(OBJ_DIR)/common/bsp.o \ 74 $(OBJ_DIR)/common/cmd.o \ 75 $(OBJ_DIR)/common/dm2.o \ 76 $(OBJ_DIR)/common/endian.o \ 77 $(OBJ_DIR)/common/mem.o \ 78 $(OBJ_DIR)/common/menu.o \ 79 $(OBJ_DIR)/common/net.o \ 80 $(OBJ_DIR)/common/pak.o \ 81 $(OBJ_DIR)/common/q2utils.o \ 82 $(OBJ_DIR)/common/utils.o \ 83 $(OBJ_DIR)/dm2server/sv_challenge.o \ 84 $(OBJ_DIR)/dm2server/sv_clcmds.o \ 85 $(OBJ_DIR)/dm2server/sv_client.o \ 86 $(OBJ_DIR)/dm2server/sv_cvar.o \ 87 $(OBJ_DIR)/dm2server/sv_dm2.o \ 88 $(OBJ_DIR)/dm2server/sv_main.o \ 89 $(OBJ_DIR)/dm2server/sv_menus.o \ 90 $(OBJ_DIR)/dm2server/sv_net.o \ 91 $(OBJ_DIR)/dm2server/sv_pmove.o \ 92 $(OBJ_DIR)/dm2server/sv_svcmds.o 93 94PROXY_OBJS = \ 95 $(OBJ_DIR)/common/proxy.o \ 96 $(OBJ_DIR)/proxy/p_main.o 97 98RELAY_OBJS = \ 99 $(OBJ_DIR)/common/block.o \ 100 $(OBJ_DIR)/common/cmd.o \ 101 $(OBJ_DIR)/common/dm2.o \ 102 $(OBJ_DIR)/common/endian.o \ 103 $(OBJ_DIR)/common/mem.o \ 104 $(OBJ_DIR)/common/pak.o \ 105 $(OBJ_DIR)/common/proxy.o \ 106 $(OBJ_DIR)/common/q2utils.o \ 107 $(OBJ_DIR)/common/utils.o \ 108 $(OBJ_DIR)/relay/r_export.o \ 109 $(OBJ_DIR)/relay/r_import.o \ 110 $(OBJ_DIR)/relay/r_main.o 111 112REPLAY_OBJS = \ 113 $(OBJ_DIR)/common/block.o \ 114 $(OBJ_DIR)/common/cmd.o \ 115 $(OBJ_DIR)/common/dm2.o \ 116 $(OBJ_DIR)/common/endian.o \ 117 $(OBJ_DIR)/common/mem.o \ 118 $(OBJ_DIR)/common/menu.o \ 119 $(OBJ_DIR)/common/pak.o \ 120 $(OBJ_DIR)/common/q2utils.o \ 121 $(OBJ_DIR)/common/utils.o \ 122 $(OBJ_DIR)/replay/rp_client.o \ 123 $(OBJ_DIR)/replay/rp_cmds.o \ 124 $(OBJ_DIR)/replay/rp_dm2.o \ 125 $(OBJ_DIR)/replay/rp_main.o \ 126 $(OBJ_DIR)/replay/rp_menus.o \ 127 $(OBJ_DIR)/replay/rp_q2utils.o \ 128 $(OBJ_DIR)/replay/rp_save.o \ 129 $(OBJ_DIR)/replay/rp_spawn.o \ 130 $(OBJ_DIR)/replay/rp_svcmds.o \ 131 $(OBJ_DIR)/replay/rp_utils.o \ 132 $(OBJ_DIR)/replay/rp_view.o 133 134SOURCES = \ 135 $(wildcard common/*.c) \ 136 $(wildcard democonv/*.c) \ 137 $(wildcard dm2server/*.c) \ 138 $(wildcard proxy/*.c) \ 139 $(wildcard relay/*.c) \ 140 $(wildcard replay/*.c) 141 142HEADERS = \ 143 $(wildcard common/*.h) \ 144 $(wildcard democonv/*.h) \ 145 $(wildcard dm2server/*.h) \ 146 $(wildcard proxy/*.h) \ 147 $(wildcard relay/*.h) \ 148 $(wildcard replay/*.h) 149 150PROJECTS = \ 151 democonv/democonv.dsp \ 152 dm2server/dm2server.dsp \ 153 proxy/proxy.dsp \ 154 relay/relay.dsp \ 155 replay/replay.dsp 156 157EXTRA_SOURCES = \ 158 COPYING \ 159 ChangeLog \ 160 FAQ \ 161 Makefile \ 162 README \ 163 proxify \ 164 165SOURCE_DISTFILES = $(SOURCES) $(HEADERS) $(PROJECTS) $(EXTRA_SOURCES) 166SOURCE_DIST = $(DIST_DIR).src.tar.gz 167 168# phony targets 169.PHONY: all clean \ 170 democonv clean-democonv \ 171 relay clean-relay \ 172 replay clean-replay \ 173 proxy clean-proxy \ 174 dist dist-clean \ 175 volatile \ 176 clean-depend 177 178# default build 179all: democonv dm2server proxy relay replay 180 181# rule to make directories if needed (use sort to remove duplicates) 182COMMON_DIRS=$(OBJ_DIR)/common 183DEMOCONV_DIRS=$(sort $(OUT_DIR)/democonv $(OBJ_DIR)/democonv) 184DM2SERVER_DIRS=$(sort $(OUT_DIR)/dm2server $(OBJ_DIR)/dm2server) 185PROXY_DIRS=$(sort $(OUT_DIR)/proxy $(OBJ_DIR)/proxy) 186RELAY_DIRS=$(sort $(OUT_DIR)/relay $(OBJ_DIR)/relay) 187REPLAY_DIRS=$(sort $(OUT_DIR)/replay $(OBJ_DIR)/replay) 188INSTALL_DIRS=$(QUAKE2_DIR)/release $(QUAKE2_DIR)/proxy $(QUAKE2_DIR)/proxy/relay $(QUAKE2_DIR)/proxy/replay 189 190$(COMMON_DIRS) $(DEMOCONV_DIRS) $(DM2SERVER_DIRS) $(PROXY_DIRS) $(RELAY_DIRS) $(REPLAY_DIRS) $(INSTALL_DIRS): 191 mkdir -p $@ 192 193# democonv make 194democonv : $(COMMON_DIRS) $(DEMOCONV_DIRS) $(DEMOCONV_TARGET) 195 196$(DEMOCONV_TARGET) : $(DEMOCONV_OBJS) 197 $(DO_LINK) 198 199# dm2server make 200dm2server : $(COMMON_DIRS) $(DM2SERVER_DIRS) $(DM2SERVER_TARGET) 201 202$(DM2SERVER_TARGET) : $(DM2SERVER_OBJS) 203 $(DO_LINK) 204 205# proxy make 206proxy: $(COMMON_DIRS) $(PROXY_DIRS) $(PROXY_TARGET) 207 208$(PROXY_TARGET): $(PROXY_OBJS) 209 $(DO_SHLINK) 210 211# relay make 212relay : $(COMMON_DIRS) $(RELAY_DIRS) $(RELAY_TARGET) 213 214$(RELAY_TARGET) : $(RELAY_OBJS) 215 $(DO_SHLINK) 216 217# replay make 218replay : $(COMMON_DIRS) $(REPLAY_DIRS) $(REPLAY_TARGET) 219 220$(REPLAY_TARGET): $(REPLAY_OBJS) 221 $(DO_SHLINK) 222 223# volatile make 224volatile: 225 @echo \#define RELAY_VERSION \"$(VERSION)\" > common/volatile.h 226 @echo \#define RELAY_RELEASE \"$(RELEASE)\" >> common/volatile.h 227 228# distribution make 229source-dir: 230 @[ -e $(DIST_DIR) ] && rm -rf $(DIST_DIR) || exit 0 231 @mkdir -m 755 $(DIST_DIR) 232 @mkdir -m 755 $(DIST_DIR)/common 233 @mkdir -m 755 $(DIST_DIR)/democonv 234 @mkdir -m 755 $(DIST_DIR)/dm2server 235 @mkdir -m 755 $(DIST_DIR)/proxy 236 @mkdir -m 755 $(DIST_DIR)/relay 237 @mkdir -m 755 $(DIST_DIR)/replay 238 @for file in $(SOURCE_DISTFILES); do \ 239 install -s -m 555 $$file $(DIST_DIR)/$$file; \ 240 chmod 644 $(DIST_DIR)/$$file; \ 241 done 242 @chmod 755 $(DIST_DIR)/proxify 243 244source-dist: source-dir 245 @[ -e $(SOURCE_DIST) ] && rm -f $(SOURCE_DIST) || exit 0 246 $(TAR) czf $(SOURCE_DIST) $(DIST_DIR) 247 @chmod 644 $(SOURCE_DIST) 248 249# install make 250install: $(INSTALL_DIRS) 251 install -s -m 555 $(DEMOCONV_TARGET) $(BIN_DIR) 252 install -s -m 555 $(DM2SERVER_TARGET) $(BIN_DIR) 253 install -s -m 555 $(PROXY_TARGET) $(QUAKE2_DIR)/release 254 install -s -m 555 $(RELAY_TARGET) $(QUAKE2_DIR)/proxy/relay 255 install -s -m 555 $(REPLAY_TARGET) $(QUAKE2_DIR)/proxy/replay 256 257# remove carriage returns 258remove-carriage-returns: 259 dos2unix $(SOURCES) $(HEADERS) $(EXTRA_SOURCES) 260 261lowercase: 262 lcfile $(SOURCES) $(HEADERS) 263 264# clean make 265clean-democonv: 266 rm -f $(DEMOCONV_OBJS) 267 rm -f $(DEMOCONV_TARGET) 268 269clean-dm2server: 270 rm -f $(DM2SERVER_OBJS) 271 rm -f $(DM2SERVER_TARGET) 272 273clean-proxy: 274 rm -f $(PROXY_OBJS) 275 rm -f $(PROXY_TARGET) 276 277clean-relay: 278 rm -f $(RELAY_OBJS) 279 rm -f $(RELAY_TARGET) 280 281clean-replay: 282 rm -f $(REPLAY_OBJS) 283 rm -f $(REPLAY_TARGET) 284 285clean: clean-democonv clean-dm2server clean-proxy clean-relay clean-replay clean-depend 286 287# common files 288$(OBJ_DIR)/common/%.o : common/%.c 289 $(DO_CC) 290 291# democonv files 292$(OBJ_DIR)/democonv/%.o : democonv/%.c 293 $(DO_CC) 294 295# dm2server files 296$(OBJ_DIR)/dm2server/%.o : dm2server/%.c 297 $(DO_CC) 298 299# relay files 300$(OBJ_DIR)/relay/%.o : relay/%.c 301 $(DO_CC) 302 303# replay files 304$(OBJ_DIR)/replay/%.o : replay/%.c 305 $(DO_CC) 306 307# proxy files 308$(OBJ_DIR)/proxy/%.o : proxy/%.c 309 $(DO_CC) 310 311# dependencies (uses the GNU dependency system) 312%.d: %.c 313 @set -e; $(CC) -MM $(CPPFLAGS) $< \ 314 | sed -e 's/^\($(notdir $*)\)\.o/$(subst /,\/,$*).o $(subst /,\/,$@)/g' > $@; \ 315 [ -s $@ ] || rm -f $@ 316 317clean-depend: 318 rm -f $(SOURCES:.c=.d) 319 320-include $(SOURCES:.c=.d) 321