diff options
author | Robin H. Johnson <robbat2@gentoo.org> | 2015-08-08 13:49:04 -0700 |
---|---|---|
committer | Robin H. Johnson <robbat2@gentoo.org> | 2015-08-08 17:38:18 -0700 |
commit | 56bd759df1d0c750a065b8c845e93d5dfa6b549d (patch) | |
tree | 3f91093cdb475e565ae857f1c5a7fd339e2d781e /games-fps/sauerbraten | |
download | gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.gz gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.bz2 gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.zip |
proj/gentoo: Initial commit
This commit represents a new era for Gentoo:
Storing the gentoo-x86 tree in Git, as converted from CVS.
This commit is the start of the NEW history.
Any historical data is intended to be grafted onto this point.
Creation process:
1. Take final CVS checkout snapshot
2. Remove ALL ChangeLog* files
3. Transform all Manifests to thin
4. Remove empty Manifests
5. Convert all stale $Header$/$Id$ CVS keywords to non-expanded Git $Id$
5.1. Do not touch files with -kb/-ko keyword flags.
Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
X-Thanks: Alec Warner <antarus@gentoo.org> - did the GSoC 2006 migration tests
X-Thanks: Robin H. Johnson <robbat2@gentoo.org> - infra guy, herding this project
X-Thanks: Nguyen Thai Ngoc Duy <pclouds@gentoo.org> - Former Gentoo developer, wrote Git features for the migration
X-Thanks: Brian Harring <ferringb@gentoo.org> - wrote much python to improve cvs2svn
X-Thanks: Rich Freeman <rich0@gentoo.org> - validation scripts
X-Thanks: Patrick Lauer <patrick@gentoo.org> - Gentoo dev, running new 2014 work in migration
X-Thanks: Michał Górny <mgorny@gentoo.org> - scripts, QA, nagging
X-Thanks: All of other Gentoo developers - many ideas and lots of paint on the bikeshed
Diffstat (limited to 'games-fps/sauerbraten')
-rw-r--r-- | games-fps/sauerbraten/Manifest | 1 | ||||
-rw-r--r-- | games-fps/sauerbraten/files/sauerbraten-2013.01.04-QA.patch | 50 | ||||
-rw-r--r-- | games-fps/sauerbraten/files/sauerbraten-2013.01.04-master.patch | 323 | ||||
-rw-r--r-- | games-fps/sauerbraten/files/sauerbraten-2013.01.04-system-enet.patch | 64 | ||||
-rw-r--r-- | games-fps/sauerbraten/files/sauerbraten.conf | 28 | ||||
-rw-r--r-- | games-fps/sauerbraten/files/sauerbraten.init | 74 | ||||
-rw-r--r-- | games-fps/sauerbraten/files/sauerbraten_unix.patch | 19 | ||||
-rw-r--r-- | games-fps/sauerbraten/metadata.xml | 11 | ||||
-rw-r--r-- | games-fps/sauerbraten/sauerbraten-2013.01.04.ebuild | 127 |
9 files changed, 697 insertions, 0 deletions
diff --git a/games-fps/sauerbraten/Manifest b/games-fps/sauerbraten/Manifest new file mode 100644 index 000000000000..743dd098398b --- /dev/null +++ b/games-fps/sauerbraten/Manifest @@ -0,0 +1 @@ +DIST sauerbraten_2013_01_04_collect_edition_linux.tar.bz2 589939261 SHA256 3ecc27c318125883763130e45805eb7ba3a426234e5766ab0d00522f4a437bd1 SHA512 f89c9e69bb69596829661f551e4b63b2f2af96a01f075cb94a80e2bfae4f8664b7dab8f4850b91499817240e0311b64b049ea985c761ff7bb6d39ed75e6198cd WHIRLPOOL d10e354942180064ab44a2f8c8b13819240fde3537825908768d1ddda24f600971641b8a9cee4abee9539ec912bf265cb1771c001ad81a33e287c99e0f6906b8 diff --git a/games-fps/sauerbraten/files/sauerbraten-2013.01.04-QA.patch b/games-fps/sauerbraten/files/sauerbraten-2013.01.04-QA.patch new file mode 100644 index 000000000000..21f1b13c7a2a --- /dev/null +++ b/games-fps/sauerbraten/files/sauerbraten-2013.01.04-QA.patch @@ -0,0 +1,50 @@ +applied on top of sauerbraten-2013.01.04-system-enet.patch + +respect LDFLAGS, CXXFLAGS and CPPFLAGS +--- sauerbraten/src/Makefile ++++ sauerbraten/src/Makefile +@@ -1,4 +1,4 @@ +-CXXFLAGS= -O3 -fomit-frame-pointer ++CXXFLAGS ?= -O3 -fomit-frame-pointer + override CXXFLAGS+= -Wall -fsigned-char -fno-exceptions -fno-rtti + + PLATFORM= $(shell uname -s) +@@ -139,11 +139,11 @@ + -$(RM) $(CLIENT_PCH) $(CLIENT_OBJS) $(SERVER_OBJS) $(MASTER_OBJS) sauer_client sauer_server sauer_master + + %.h.gch: %.h +- $(CXX) $(CXXFLAGS) -o $(subst .h.gch,.tmp.h.gch,$@) $(subst .h.gch,.h,$@) ++ $(CXX) $(CPPFLAGS) $(CXXFLAGS) -o $(subst .h.gch,.tmp.h.gch,$@) $(subst .h.gch,.h,$@) + $(MV) $(subst .h.gch,.tmp.h.gch,$@) $@ + + %-standalone.o: %.cpp +- $(CXX) $(CXXFLAGS) -c -o $@ $(subst -standalone.o,.cpp,$@) ++ $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(subst -standalone.o,.cpp,$@) + + $(CLIENT_OBJS): CXXFLAGS += $(CLIENT_INCLUDES) + $(filter shared/%,$(CLIENT_OBJS)): $(filter shared/%,$(CLIENT_PCH)) +@@ -168,19 +168,19 @@ + install: all + else + client: $(CLIENT_OBJS) +- $(CXX) $(CXXFLAGS) -o sauer_client $(CLIENT_OBJS) $(CLIENT_LIBS) ++ $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o sauer_client $(CLIENT_OBJS) $(CLIENT_LIBS) + + server: $(SERVER_OBJS) +- $(CXX) $(CXXFLAGS) -o sauer_server $(SERVER_OBJS) $(SERVER_LIBS) ++ $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o sauer_server $(SERVER_OBJS) $(SERVER_LIBS) + + master: $(MASTER_OBJS) +- $(CXX) $(CXXFLAGS) -o sauer_master $(MASTER_OBJS) $(MASTER_LIBS) ++ $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o sauer_master $(MASTER_OBJS) $(MASTER_LIBS) + + shared/cube2font.o: shared/cube2font.c +- $(CXX) $(CXXFLAGS) -c -o $@ $< `freetype-config --cflags` ++ $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $< `freetype-config --cflags` + + cube2font: shared/cube2font.o +- $(CXX) $(CXXFLAGS) -o cube2font shared/cube2font.o `freetype-config --libs` -lz ++ $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o cube2font shared/cube2font.o `freetype-config --libs` -lz + + install: all + cp sauer_client ../bin_unix/$(PLATFORM_PREFIX)_client diff --git a/games-fps/sauerbraten/files/sauerbraten-2013.01.04-master.patch b/games-fps/sauerbraten/files/sauerbraten-2013.01.04-master.patch new file mode 100644 index 000000000000..730a69a2f4d0 --- /dev/null +++ b/games-fps/sauerbraten/files/sauerbraten-2013.01.04-master.patch @@ -0,0 +1,323 @@ +http://sourceforge.net/p/sauerbraten/code/4699/ + +--- a/src/shared/iengine.h ++++ b/src/shared/iengine.h +@@ -415,23 +415,6 @@ + extern int getservermtu(); + extern int getnumclients(); + extern uint getclientip(int n); +-extern void putint(ucharbuf &p, int n); +-extern void putint(packetbuf &p, int n); +-extern void putint(vector<uchar> &p, int n); +-extern int getint(ucharbuf &p); +-extern void putuint(ucharbuf &p, int n); +-extern void putuint(packetbuf &p, int n); +-extern void putuint(vector<uchar> &p, int n); +-extern int getuint(ucharbuf &p); +-extern void putfloat(ucharbuf &p, float f); +-extern void putfloat(packetbuf &p, float f); +-extern void putfloat(vector<uchar> &p, float f); +-extern float getfloat(ucharbuf &p); +-extern void sendstring(const char *t, ucharbuf &p); +-extern void sendstring(const char *t, packetbuf &p); +-extern void sendstring(const char *t, vector<uchar> &p); +-extern void getstring(char *t, ucharbuf &p, int len = MAXTRANS); +-extern void filtertext(char *dst, const char *src, bool whitespace = true, int len = sizeof(string)-1); + extern void localconnect(); + extern const char *disconnectreason(int reason); + extern void disconnect_client(int n, int reason); +--- a/src/engine/server.cpp ++++ b/src/engine/server.cpp +@@ -99,125 +99,6 @@ + va_end(args); + } + #endif +- +-// all network traffic is in 32bit ints, which are then compressed using the following simple scheme (assumes that most values are small). +- +-template<class T> +-static inline void putint_(T &p, int n) +-{ +- if(n<128 && n>-127) p.put(n); +- else if(n<0x8000 && n>=-0x8000) { p.put(0x80); p.put(n); p.put(n>>8); } +- else { p.put(0x81); p.put(n); p.put(n>>8); p.put(n>>16); p.put(n>>24); } +-} +-void putint(ucharbuf &p, int n) { putint_(p, n); } +-void putint(packetbuf &p, int n) { putint_(p, n); } +-void putint(vector<uchar> &p, int n) { putint_(p, n); } +- +-int getint(ucharbuf &p) +-{ +- int c = (char)p.get(); +- if(c==-128) { int n = p.get(); n |= char(p.get())<<8; return n; } +- else if(c==-127) { int n = p.get(); n |= p.get()<<8; n |= p.get()<<16; return n|(p.get()<<24); } +- else return c; +-} +- +-// much smaller encoding for unsigned integers up to 28 bits, but can handle signed +-template<class T> +-static inline void putuint_(T &p, int n) +-{ +- if(n < 0 || n >= (1<<21)) +- { +- p.put(0x80 | (n & 0x7F)); +- p.put(0x80 | ((n >> 7) & 0x7F)); +- p.put(0x80 | ((n >> 14) & 0x7F)); +- p.put(n >> 21); +- } +- else if(n < (1<<7)) p.put(n); +- else if(n < (1<<14)) +- { +- p.put(0x80 | (n & 0x7F)); +- p.put(n >> 7); +- } +- else +- { +- p.put(0x80 | (n & 0x7F)); +- p.put(0x80 | ((n >> 7) & 0x7F)); +- p.put(n >> 14); +- } +-} +-void putuint(ucharbuf &p, int n) { putuint_(p, n); } +-void putuint(packetbuf &p, int n) { putuint_(p, n); } +-void putuint(vector<uchar> &p, int n) { putuint_(p, n); } +- +-int getuint(ucharbuf &p) +-{ +- int n = p.get(); +- if(n & 0x80) +- { +- n += (p.get() << 7) - 0x80; +- if(n & (1<<14)) n += (p.get() << 14) - (1<<14); +- if(n & (1<<21)) n += (p.get() << 21) - (1<<21); +- if(n & (1<<28)) n |= -1<<28; +- } +- return n; +-} +- +-template<class T> +-static inline void putfloat_(T &p, float f) +-{ +- lilswap(&f, 1); +- p.put((uchar *)&f, sizeof(float)); +-} +-void putfloat(ucharbuf &p, float f) { putfloat_(p, f); } +-void putfloat(packetbuf &p, float f) { putfloat_(p, f); } +-void putfloat(vector<uchar> &p, float f) { putfloat_(p, f); } +- +-float getfloat(ucharbuf &p) +-{ +- float f; +- p.get((uchar *)&f, sizeof(float)); +- return lilswap(f); +-} +- +-template<class T> +-static inline void sendstring_(const char *t, T &p) +-{ +- while(*t) putint(p, *t++); +- putint(p, 0); +-} +-void sendstring(const char *t, ucharbuf &p) { sendstring_(t, p); } +-void sendstring(const char *t, packetbuf &p) { sendstring_(t, p); } +-void sendstring(const char *t, vector<uchar> &p) { sendstring_(t, p); } +- +-void getstring(char *text, ucharbuf &p, int len) +-{ +- char *t = text; +- do +- { +- if(t>=&text[len]) { text[len-1] = 0; return; } +- if(!p.remaining()) { *t = 0; return; } +- *t = getint(p); +- } +- while(*t++); +-} +- +-void filtertext(char *dst, const char *src, bool whitespace, int len) +-{ +- for(int c = uchar(*src); c; c = uchar(*++src)) +- { +- if(c == '\f') +- { +- if(!*++src) break; +- continue; +- } +- if(iscubeprint(c) || (iscubespace(c) && whitespace)) +- { +- *dst++ = c; +- if(!--len) break; +- } +- } +- *dst = '\0'; +-} + + enum { ST_EMPTY, ST_LOCAL, ST_TCPIP }; + +--- a/src/shared/tools.h ++++ b/src/shared/tools.h +@@ -1178,5 +1178,24 @@ + extern uint randomMT(); + extern int guessnumcpus(); + +-#endif +- ++extern void putint(ucharbuf &p, int n); ++extern void putint(packetbuf &p, int n); ++extern void putint(vector<uchar> &p, int n); ++extern int getint(ucharbuf &p); ++extern void putuint(ucharbuf &p, int n); ++extern void putuint(packetbuf &p, int n); ++extern void putuint(vector<uchar> &p, int n); ++extern int getuint(ucharbuf &p); ++extern void putfloat(ucharbuf &p, float f); ++extern void putfloat(packetbuf &p, float f); ++extern void putfloat(vector<uchar> &p, float f); ++extern float getfloat(ucharbuf &p); ++extern void sendstring(const char *t, ucharbuf &p); ++extern void sendstring(const char *t, packetbuf &p); ++extern void sendstring(const char *t, vector<uchar> &p); ++extern void getstring(char *t, ucharbuf &p, int len); ++template<class T, size_t N> static inline void getstring(T (&t)[N], ucharbuf &p) { getstring(t, p, N); } ++extern void filtertext(char *dst, const char *src, bool whitespace = true, int len = sizeof(string)-1); ++ ++#endif ++ +--- a/src/engine/master.cpp ++++ b/src/engine/master.cpp +@@ -514,7 +514,7 @@ + authreq &a = c.authreqs.add(); + a.reqtime = servtime; + a.id = id; +- uint seed[3] = { starttime, servtime, randomMT() }; ++ uint seed[3] = { uint(starttime), servtime, randomMT() }; + static vector<char> buf; + buf.setsize(0); + a.answer = genchallenge(u->pubkey, seed, sizeof(seed), buf); +--- a/src/shared/tools.cpp ++++ b/src/shared/tools.cpp +@@ -53,3 +53,124 @@ + return y; + } + ++///////////////////////// network /////////////////////// ++ ++// all network traffic is in 32bit ints, which are then compressed using the following simple scheme (assumes that most values are small). ++ ++template<class T> ++static inline void putint_(T &p, int n) ++{ ++ if(n<128 && n>-127) p.put(n); ++ else if(n<0x8000 && n>=-0x8000) { p.put(0x80); p.put(n); p.put(n>>8); } ++ else { p.put(0x81); p.put(n); p.put(n>>8); p.put(n>>16); p.put(n>>24); } ++} ++void putint(ucharbuf &p, int n) { putint_(p, n); } ++void putint(packetbuf &p, int n) { putint_(p, n); } ++void putint(vector<uchar> &p, int n) { putint_(p, n); } ++ ++int getint(ucharbuf &p) ++{ ++ int c = (char)p.get(); ++ if(c==-128) { int n = p.get(); n |= char(p.get())<<8; return n; } ++ else if(c==-127) { int n = p.get(); n |= p.get()<<8; n |= p.get()<<16; return n|(p.get()<<24); } ++ else return c; ++} ++ ++// much smaller encoding for unsigned integers up to 28 bits, but can handle signed ++template<class T> ++static inline void putuint_(T &p, int n) ++{ ++ if(n < 0 || n >= (1<<21)) ++ { ++ p.put(0x80 | (n & 0x7F)); ++ p.put(0x80 | ((n >> 7) & 0x7F)); ++ p.put(0x80 | ((n >> 14) & 0x7F)); ++ p.put(n >> 21); ++ } ++ else if(n < (1<<7)) p.put(n); ++ else if(n < (1<<14)) ++ { ++ p.put(0x80 | (n & 0x7F)); ++ p.put(n >> 7); ++ } ++ else ++ { ++ p.put(0x80 | (n & 0x7F)); ++ p.put(0x80 | ((n >> 7) & 0x7F)); ++ p.put(n >> 14); ++ } ++} ++void putuint(ucharbuf &p, int n) { putuint_(p, n); } ++void putuint(packetbuf &p, int n) { putuint_(p, n); } ++void putuint(vector<uchar> &p, int n) { putuint_(p, n); } ++ ++int getuint(ucharbuf &p) ++{ ++ int n = p.get(); ++ if(n & 0x80) ++ { ++ n += (p.get() << 7) - 0x80; ++ if(n & (1<<14)) n += (p.get() << 14) - (1<<14); ++ if(n & (1<<21)) n += (p.get() << 21) - (1<<21); ++ if(n & (1<<28)) n |= -1<<28; ++ } ++ return n; ++} ++ ++template<class T> ++static inline void putfloat_(T &p, float f) ++{ ++ lilswap(&f, 1); ++ p.put((uchar *)&f, sizeof(float)); ++} ++void putfloat(ucharbuf &p, float f) { putfloat_(p, f); } ++void putfloat(packetbuf &p, float f) { putfloat_(p, f); } ++void putfloat(vector<uchar> &p, float f) { putfloat_(p, f); } ++ ++float getfloat(ucharbuf &p) ++{ ++ float f; ++ p.get((uchar *)&f, sizeof(float)); ++ return lilswap(f); ++} ++ ++template<class T> ++static inline void sendstring_(const char *t, T &p) ++{ ++ while(*t) putint(p, *t++); ++ putint(p, 0); ++} ++void sendstring(const char *t, ucharbuf &p) { sendstring_(t, p); } ++void sendstring(const char *t, packetbuf &p) { sendstring_(t, p); } ++void sendstring(const char *t, vector<uchar> &p) { sendstring_(t, p); } ++ ++void getstring(char *text, ucharbuf &p, int len) ++{ ++ char *t = text; ++ do ++ { ++ if(t>=&text[len]) { text[len-1] = 0; return; } ++ if(!p.remaining()) { *t = 0; return; } ++ *t = getint(p); ++ } ++ while(*t++); ++} ++ ++void filtertext(char *dst, const char *src, bool whitespace, int len) ++{ ++ for(int c = uchar(*src); c; c = uchar(*++src)) ++ { ++ if(c == '\f') ++ { ++ if(!*++src) break; ++ continue; ++ } ++ if(iscubeprint(c) || (iscubespace(c) && whitespace)) ++ { ++ *dst++ = c; ++ if(!--len) break; ++ } ++ } ++ *dst = '\0'; ++} ++ diff --git a/games-fps/sauerbraten/files/sauerbraten-2013.01.04-system-enet.patch b/games-fps/sauerbraten/files/sauerbraten-2013.01.04-system-enet.patch new file mode 100644 index 000000000000..e87b280ba0c1 --- /dev/null +++ b/games-fps/sauerbraten/files/sauerbraten-2013.01.04-system-enet.patch @@ -0,0 +1,64 @@ +--- sauerbraten/src/Makefile ++++ sauerbraten/src/Makefile +@@ -4,7 +4,7 @@ + PLATFORM= $(shell uname -s) + PLATFORM_PREFIX= native + +-INCLUDES= -Ishared -Iengine -Ifpsgame -Ienet/include ++INCLUDES= -Ishared -Iengine -Ifpsgame + + STRIP= + ifeq (,$(findstring -g,$(CXXFLAGS))) +@@ -36,8 +36,8 @@ + endif + CLIENT_LIBS= -mwindows $(STD_LIBS) -L$(WINBIN) -L$(WINLIB) -lSDL -lSDL_image -lSDL_mixer -lzlib1 -lopengl32 -lenet -lws2_32 -lwinmm + else +-CLIENT_INCLUDES= $(INCLUDES) -I/usr/X11R6/include `sdl-config --cflags` +-CLIENT_LIBS= -Lenet/.libs -lenet -L/usr/X11R6/lib -lX11 `sdl-config --libs` -lSDL_image -lSDL_mixer -lz -lGL ++CLIENT_INCLUDES= $(INCLUDES) `sdl-config --cflags` ++CLIENT_LIBS= -lenet -lX11 `sdl-config --libs` -lSDL_image -lSDL_mixer -lz -lGL + endif + ifeq ($(PLATFORM),Linux) + CLIENT_LIBS+= -lrt +@@ -106,7 +106,7 @@ + MASTER_LIBS= $(STD_LIBS) -L$(WINBIN) -L$(WINLIB) -lzlib1 -lenet -lws2_32 -lwinmm + else + SERVER_INCLUDES= -DSTANDALONE $(INCLUDES) +-SERVER_LIBS= -Lenet/.libs -lenet -lz ++SERVER_LIBS= -lenet -lz + MASTER_LIBS= $(SERVER_LIBS) + endif + SERVER_OBJS= \ +@@ -135,15 +135,6 @@ + + all: client server + +-enet/Makefile: +- cd enet; ./configure --enable-shared=no --enable-static=yes +- +-libenet: enet/Makefile +- $(MAKE) -C enet/ all +- +-clean-enet: enet/Makefile +- $(MAKE) -C enet/ clean +- + clean: + -$(RM) $(CLIENT_PCH) $(CLIENT_OBJS) $(SERVER_OBJS) $(MASTER_OBJS) sauer_client sauer_server sauer_master + +@@ -176,13 +167,13 @@ + + install: all + else +-client: libenet $(CLIENT_OBJS) ++client: $(CLIENT_OBJS) + $(CXX) $(CXXFLAGS) -o sauer_client $(CLIENT_OBJS) $(CLIENT_LIBS) + +-server: libenet $(SERVER_OBJS) ++server: $(SERVER_OBJS) + $(CXX) $(CXXFLAGS) -o sauer_server $(SERVER_OBJS) $(SERVER_LIBS) + +-master: libenet $(MASTER_OBJS) ++master: $(MASTER_OBJS) + $(CXX) $(CXXFLAGS) -o sauer_master $(MASTER_OBJS) $(MASTER_LIBS) + + shared/cube2font.o: shared/cube2font.c diff --git a/games-fps/sauerbraten/files/sauerbraten.conf b/games-fps/sauerbraten/files/sauerbraten.conf new file mode 100644 index 000000000000..8d93bf62b788 --- /dev/null +++ b/games-fps/sauerbraten/files/sauerbraten.conf @@ -0,0 +1,28 @@ +# Config file for /etc/init.d/sauerbraten + +# Owner of Sauerbraten server processes (must be existing) +USER="%GAMES_USER_DED%" +GROUP="%GAMES_GROUP%" + + +# Whether to run the dedicated server +RUNSERVER="Yes" + +# Location of the dedicated server config directory +SERVERCONFIG="%SYSCONFDIR%" + +# Additional command line arguments to the dedicated server +SERVERARGS="" + + +# Whether to run the master server +RUNMASTER="No" + +# Location of the master server config directory +MASTERCONFIG="%SYSCONFDIR%" + +# What port should the masterserver use +MASTERPORT="28787" + +# What ip should the masterserver bind to +MASTERIP="" diff --git a/games-fps/sauerbraten/files/sauerbraten.init b/games-fps/sauerbraten/files/sauerbraten.init new file mode 100644 index 000000000000..95ca105d0d09 --- /dev/null +++ b/games-fps/sauerbraten/files/sauerbraten.init @@ -0,0 +1,74 @@ +#!/sbin/runscript + +depend() { + use net +} + +start() { + [ $(echo ${RUNMASTER} | tr '[:upper:]' '[:lower:]') = "yes" ] && start_master + [ $(echo ${RUNSERVER} | tr '[:upper:]' '[:lower:]') = "yes" ] && start_server + true +} + +start_server() { + ebegin "Starting Sauerbraten dedicated server" + + # Make sure necessary parameters are set + SERVERCONFIG="${SERVERCONFIG:-%SYSCONFDIR%}" + + if [ ! -d ${SERVERCONFIG} ]; then + einfo "No ${SERVERCONFIG} around. Creating new..." + mkdir ${SERVERCONFIG} + chown ${USER}:${GROUP} ${SERVERCONFIG} + fi + + start-stop-daemon \ + --quiet --start --user ${USER}:${GROUP} --chdir ${SERVERCONFIG} \ + --make-pidfile --pidfile %GAMES_STATEDIR%/run/sauerbraten/server.pid \ + --background --exec %LIBEXECDIR%/sauer_server -- ${SERVERARGS} + eend $? +} + +start_master() { + ebegin "Starting Sauerbraten master server" + + # Make sure necessary parameters are set + MASTERCONFIG="${MASTERCONFIG:-%SYSCONFDIR%}" + [ -n "${MASTERIP}" ] && MASTERPORT="${MASTERPORT:-28787}" + MASTERARGS="${MASTERCONFIG}/ ${MASTERPORT} ${MASTERIP}" + + if [ ! -d ${MASTERCONFIG} ]; then + einfo "No ${MASTERCONFIG} around. Creating new..." + mkdir ${MASTERCONFIG} + chown ${USER}:${GROUP} ${MASTERCONFIG} + fi + + start-stop-daemon \ + --quiet --start --user ${USER}:${GROUP} \ + --make-pidfile --pidfile %GAMES_STATEDIR%/run/sauerbraten/master.pid \ + --background --exec %LIBEXECDIR%/sauer_master -- ${MASTERARGS} + eend $? +} + +stop() { + [ $(echo ${RUNSERVER} | tr '[:upper:]' '[:lower:]') = "yes" ] && stop_server + [ $(echo ${RUNMASTER} | tr '[:upper:]' '[:lower:]') = "yes" ] && stop_master + true +} + +stop_server() { + ebegin "Stopping Sauerbraten dedicated server" + start-stop-daemon --stop --retry 3 --pidfile %GAMES_STATEDIR%/run/sauerbraten/server.pid + eend $? +} + +stop_master() { + ebegin "Stopping Sauerbraten master server" + start-stop-daemon --stop --retry 3 --pidfile %GAMES_STATEDIR%/run/sauerbraten/master.pid + eend $? +} + +restart() { + svc_stop + svc_start +} diff --git a/games-fps/sauerbraten/files/sauerbraten_unix.patch b/games-fps/sauerbraten/files/sauerbraten_unix.patch new file mode 100644 index 000000000000..db2a032becf6 --- /dev/null +++ b/games-fps/sauerbraten/files/sauerbraten_unix.patch @@ -0,0 +1,19 @@ +--- sauerbraten_unix.orig 2008-08-15 20:05:44.000000000 +0200 ++++ sauerbraten_unix 2008-08-15 22:49:47.000000000 +0200 +@@ -3,6 +3,7 @@ + #SAUER_DIR=~/sauerbraten + #SAUER_DIR=/usr/local/sauerbraten + SAUER_DIR=. ++SAUER_DATADIR=. + + # SAUER_OPTIONS contains any command line options you would like to start Sauerbraten with. + #SAUER_OPTIONS="-f" +@@ -46,7 +47,7 @@ + + if [ -x ${SAUER_DIR}/bin_unix/${MACHINE_NAME}${SYSTEM_NAME}client ] + then +- cd ${SAUER_DIR} ++ cd ${SAUER_DATADIR} + exec ${SAUER_DIR}/bin_unix/${MACHINE_NAME}${SYSTEM_NAME}client ${SAUER_OPTIONS} $@ + else + echo "Your platform does not have a pre-compiled Sauerbraten client." diff --git a/games-fps/sauerbraten/metadata.xml b/games-fps/sauerbraten/metadata.xml new file mode 100644 index 000000000000..b74f1a8331a6 --- /dev/null +++ b/games-fps/sauerbraten/metadata.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> + <herd>games</herd> + <use> + <flag name="server">Compile server support</flag> + </use> + <upstream> + <remote-id type="sourceforge">sauerbraten</remote-id> + </upstream> +</pkgmetadata> diff --git a/games-fps/sauerbraten/sauerbraten-2013.01.04.ebuild b/games-fps/sauerbraten/sauerbraten-2013.01.04.ebuild new file mode 100644 index 000000000000..c15a4d525692 --- /dev/null +++ b/games-fps/sauerbraten/sauerbraten-2013.01.04.ebuild @@ -0,0 +1,127 @@ +# Copyright 1999-2013 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=5 +inherit eutils flag-o-matic gnome2-utils games + +EDITION="collect_edition" +DESCRIPTION="Cube 2: Sauerbraten is an open source game engine (Cube 2) with freeware game data (Sauerbraten)" +HOMEPAGE="http://sauerbraten.org/" +SRC_URI="mirror://sourceforge/sauerbraten/sauerbraten/2013_01_04/sauerbraten_${PV//./_}_${EDITION}_linux.tar.bz2" + +LICENSE="ZLIB freedist" +SLOT="0" +KEYWORDS="amd64 x86" +IUSE="debug dedicated server" + +RDEPEND=" + sys-libs/zlib + >=net-libs/enet-1.3.6:1.3 + !dedicated? ( + media-libs/libsdl[X,opengl] + media-libs/sdl-mixer[vorbis] + media-libs/sdl-image[png,jpeg] + virtual/opengl + virtual/glu + x11-libs/libX11 )" +DEPEND="${RDEPEND}" + +S=${WORKDIR}/${PN} + +src_prepare() { + ecvs_clean + rm -rf sauerbraten_unix bin_unix src/{include,lib,vcpp} + + # Patch makefile to use system enet instead of bundled + # respect CXXFLAGS, LDFLAGS + epatch "${FILESDIR}"/${P}-{system-enet,QA,master}.patch + + # Fix links so they point to the correct directory + sed -i \ + -e 's:docs/::' \ + README.html \ + || die +} + +src_compile() { + use debug && append-cppflags -D_DEBUG + emake -C src master $(usex dedicated "server" "$(usex server "server client" "client")") +} + +src_install() { + local LIBEXECDIR="${GAMES_PREFIX}/lib" + local DATADIR="${GAMES_DATADIR}/${PN}" + local STATEDIR="${GAMES_STATEDIR}/${PN}" + + if ! use dedicated ; then + # Install the game data + insinto "${DATADIR}" + doins -r data packages + + # Install the client executable + exeinto "${LIBEXECDIR}" + doexe src/sauer_client + + # Install the client wrapper + games_make_wrapper "${PN}-client" "${LIBEXECDIR}/sauer_client -q\$HOME/.${PN} -r" "${DATADIR}" + + # Create menu entry + newicon -s 256 data/cube.png ${PN}.png + make_desktop_entry "${PN}-client" "Cube 2: Sauerbraten" + fi + + # Install the server config files + insinto "${STATEDIR}" + doins "server-init.cfg" + + # Install the server executables + exeinto "${LIBEXECDIR}" + doexe src/sauer_master + use dedicated || use server && doexe src/sauer_server + + games_make_wrapper "${PN}-server" \ + "${LIBEXECDIR}/sauer_server -k${DATADIR} -q${STATEDIR}" + games_make_wrapper "${PN}-master" \ + "${LIBEXECDIR}/sauer_master ${STATEDIR}" + + # Install the server init script + keepdir "${GAMES_STATEDIR}/run/${PN}" + cp "${FILESDIR}"/${PN}.init "${T}" || die + sed -i \ + -e "s:%SYSCONFDIR%:${STATEDIR}:g" \ + -e "s:%LIBEXECDIR%:${LIBEXECDIR}:g" \ + -e "s:%GAMES_STATEDIR%:${GAMES_STATEDIR}:g" \ + "${T}"/${PN}.init || die + newinitd "${T}"/${PN}.init ${PN} + cp "${FILESDIR}"/${PN}.conf "${T}" || die + sed -i \ + -e "s:%SYSCONFDIR%:${STATEDIR}:g" \ + -e "s:%LIBEXECDIR%:${LIBEXECDIR}:g" \ + -e "s:%GAMES_USER_DED%:${GAMES_USER_DED}:g" \ + -e "s:%GAMES_GROUP%:${GAMES_GROUP}:g" \ + "${T}"/${PN}.conf || die + newconfd "${T}"/${PN}.conf ${PN} + + nonfatal dodoc src/*.txt docs/dev/*.txt + nonfatal dohtml -r README.html docs/* + + prepgamesdirs +} + +pkg_preinst() { + games_pkg_preinst + gnome2_icon_savelist +} + +pkg_postinst() { + games_pkg_postinst + gnome2_icon_cache_update + + elog "If you plan to use map editor feature copy all map data from ${DATADIR}" + elog "to corresponding folder in your HOME/.${PN}" +} + +pkg_postrm() { + gnome2_icon_cache_update +} |