]> git.xonotic.org Git - xonotic/darkplaces.git/commitdiff
Update build system, fix and enable ODE by default
authornikoli <nikoli@d7cf8633-e32d-0410-b094-e92efae38249>
Wed, 24 Jul 2013 16:27:58 +0000 (16:27 +0000)
committernikoli <nikoli@d7cf8633-e32d-0410-b094-e92efae38249>
Wed, 24 Jul 2013 16:27:58 +0000 (16:27 +0000)
Fixed crash when running in Hardened Gentoo with libode installed.
Fixed building and running with USEODE disabled.
Use same LINK_TO_NAME, LIB_NAME, CFLAGS_NAME style for dependencies.
Link to libz and libode by default.

git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@11979 d7cf8633-e32d-0410-b094-e92efae38249

BSDmakefile
crypto.c
makefile
makefile.inc
prvm_cmds.c
snd_modplug.c
world.c
world.h

index ac9793a06a0f6db3a0c065836add4438f2922ff4..8293e46c2fec9f16ca72db6347e3086c2806165e 100644 (file)
@@ -50,10 +50,38 @@ EXE_CLNEXUIZ=$(EXE_UNIXCLNEXUIZ)
 EXE_SVNEXUIZ=$(EXE_UNIXSVNEXUIZ)
 EXE_SDLNEXUIZ=$(EXE_UNIXSDLNEXUIZ)
 
-# libjpeg dependency (set these to "" if you want to use dynamic loading instead)
+# set these to "" if you want to use dynamic loading instead
+# zlib
+CFLAGS_LIBZ=-DLINK_TO_ZLIB
+LIB_Z=-lz
+
+# jpeg
 CFLAGS_LIBJPEG=-DLINK_TO_LIBJPEG
 LIB_JPEG=-ljpeg
 
+# ode
+ODE_CONFIG?=ode-config
+LIB_ODE=`$(ODE_CONFIG) --libs`
+CFLAGS_ODE=`$(ODE_CONFIG) --cflags` -DUSEODE -DLINK_TO_LIBODE
+
+# d0_blind_id
+# most distros do not have d0_blind_id package, dlopen will used by default
+# LIB_CRYPTO=-ld0_blind_id
+# CFLAGS_CRYPTO=-DLINK_TO_CRYPTO
+# LIB_CRYPTO_RIJNDAEL=-ld0_rijndael
+# CFLAGS_CRYPTO_RIJNDAEL=-DLINK_TO_CRYPTO_RIJNDAEL
+LIB_CRYPTO=
+CFLAGS_CRYPTO=
+LIB_CRYPTO_RIJNDAEL=
+CFLAGS_CRYPTO_RIJNDAEL=
+
+# modplug
+# now ogg is mostly used, modplug is required rarely, keep it dlopen by default
+# LIB_SND_MODPLUG=-lmodplug
+# CFLAGS_SND_MODPLUG=-DLINK_TO_LIBMODPLUG
+LIB_SND_MODPLUG=
+CFLAGS_SND_MODPLUG=
+
 .endif
 
 
index a681379c8ee1650f0dfb74c895969250e9ccde3d..2baa5a97fd0d921a3962f346b47761bc8f6e9deb 100644 (file)
--- a/crypto.c
+++ b/crypto.c
@@ -102,7 +102,7 @@ static size_t Crypto_UnParsePack(char *buf, size_t len, unsigned long header, co
 
 #define USE_AES
 
-#ifdef CRYPTO_STATIC
+#ifdef LINK_TO_CRYPTO
 
 #include <d0_blind_id/d0_blind_id.h>
 
@@ -285,7 +285,7 @@ static void Crypto_CloseLibrary (void)
 
 #endif
 
-#ifdef CRYPTO_RIJNDAEL_STATIC
+#ifdef LINK_TO_CRYPTO_RIJNDAEL
 
 #include <d0_blind_id/d0_rijndael.h>
 
index 35de328396cb28f3f0d9338264f4e9082d901409..920a9e84b9c0a51f18f53b27be632ed011e92751 100644 (file)
--- a/makefile
+++ b/makefile
@@ -78,9 +78,7 @@ ifeq ($(DP_MAKE_TARGET), linux)
        EXE_SVNEXUIZ=$(EXE_UNIXSVNEXUIZ)
        EXE_SDLNEXUIZ=$(EXE_UNIXSDLNEXUIZ)
 
-       # libjpeg dependency (set these to "" if you want to use dynamic loading instead)
-       CFLAGS_LIBJPEG=-DLINK_TO_LIBJPEG
-       LIB_JPEG=-ljpeg
+       DP_LINK_LIBS=shared
 endif
 
 # Mac OS X configuration
@@ -111,10 +109,7 @@ ifeq ($(DP_MAKE_TARGET), macosx)
                CFLAGS_MAKEDEP=
        endif
 
-       # libjpeg dependency (set these to "" if you want to use dynamic loading instead)
-       # we don't currently link to libjpeg on Mac because the OS does not have an easy way to load libjpeg and we provide our own in the .app
-       CFLAGS_LIBJPEG=
-       LIB_JPEG=
+       DP_LINK_LIBS=dlopen
 
        # on OS X, we don't build the CL by default because it uses deprecated
        # and not-implemented-in-64bit Carbon
@@ -151,9 +146,7 @@ ifeq ($(DP_MAKE_TARGET), sunos)
        EXE_SVNEXUIZ=$(EXE_UNIXSVNEXUIZ)
        EXE_SDLNEXUIZ=$(EXE_UNIXSDLNEXUIZ)
 
-       # libjpeg dependency (set these to "" if you want to use dynamic loading instead)
-       CFLAGS_LIBJPEG=-DLINK_TO_LIBJPEG
-       LIB_JPEG=-ljpeg
+       DP_LINK_LIBS=shared
 endif
 
 # BSD configuration
@@ -184,9 +177,7 @@ endif
        EXE_SVNEXUIZ=$(EXE_UNIXSVNEXUIZ)
        EXE_SDLNEXUIZ=$(EXE_UNIXSDLNEXUIZ)
 
-       # libjpeg dependency (set these to "" if you want to use dynamic loading instead)
-       CFLAGS_LIBJPEG=-DLINK_TO_LIBJPEG
-       LIB_JPEG=-ljpeg
+       DP_LINK_LIBS=shared
 endif
 
 # Win32 configuration
@@ -241,10 +232,58 @@ ifeq ($(DP_MAKE_TARGET), mingw)
        EXE_SVNEXUIZ=$(EXE_WINSVNEXUIZ)
        EXE_SDLNEXUIZ=$(EXE_WINSDLNEXUIZ)
 
-       # libjpeg dependency (set these to "" if you want to use dynamic loading instead)
+       DP_LINK_LIBS=shared
+endif
+
+# set these to "" if you want to use dynamic loading instead
+# zlib
+ifeq ($(DP_LINK_LIBS), shared)
+       CFLAGS_LIBZ=-DLINK_TO_ZLIB
+       LIB_Z=-lz
+endif
+ifeq ($(DP_LINK_LIBS), dlopen)
+       CFLAGS_LIBZ=
+       LIB_Z=
+endif
+
+# jpeg
+ifeq ($(DP_LINK_LIBS), shared)
        CFLAGS_LIBJPEG=-DLINK_TO_LIBJPEG
        LIB_JPEG=-ljpeg
 endif
+ifeq ($(DP_LINK_LIBS), dlopen)
+       CFLAGS_LIBJPEG=
+       LIB_JPEG=
+endif
+
+# ode
+ifeq ($(DP_LINK_LIBS), shared)
+       ODE_CONFIG?=ode-config
+       LIB_ODE=`$(ODE_CONFIG) --libs`
+       CFLAGS_ODE=`$(ODE_CONFIG) --cflags` -DUSEODE -DLINK_TO_LIBODE
+endif
+ifeq ($(DP_LINK_LIBS), dlopen)
+       LIB_ODE=
+       CFLAGS_ODE=-DUSEODE
+endif
+
+# d0_blind_id
+# most distros do not have d0_blind_id package, dlopen will used by default
+# LIB_CRYPTO=-ld0_blind_id
+# CFLAGS_CRYPTO=-DLINK_TO_CRYPTO
+# LIB_CRYPTO_RIJNDAEL=-ld0_rijndael
+# CFLAGS_CRYPTO_RIJNDAEL=-DLINK_TO_CRYPTO_RIJNDAEL
+LIB_CRYPTO=
+CFLAGS_CRYPTO=
+LIB_CRYPTO_RIJNDAEL=
+CFLAGS_CRYPTO_RIJNDAEL=
+
+# modplug
+# now ogg is mostly used, modplug is required rarely, keep it dlopen by default
+# LIB_SND_MODPLUG=-lmodplug
+# CFLAGS_SND_MODPLUG=-DLINK_TO_LIBMODPLUG
+LIB_SND_MODPLUG=
+CFLAGS_SND_MODPLUG=
 
 ##### Sound configuration #####
 
index be52ef6b8523d000948a48ba202a858239528baf..72d1856ab0cd6ae05f6f76cc6c5cd85d6285b05f 100644 (file)
@@ -25,11 +25,6 @@ CC?=gcc
 CPUOPTIMIZATIONS?=-fno-math-errno -ffinite-math-only -fno-rounding-math -fno-signaling-nans -fno-trapping-math
 # NOTE: *never* *ever* use the -ffast-math or -funsafe-math-optimizations flag
 
-# Additional stuff for libode
-LIB_ODE=`[ -n "$(DP_ODE_STATIC_LIBDIR)" ] && "$(DP_ODE_STATIC_LIBDIR)/../bin/ode-config" --libs` `[ -n "$(DP_ODE_STATIC_LIBDIR)" ] && echo -lstdc++`
-CFLAGS_ODE=`[ -n "$(DP_ODE_STATIC_LIBDIR)" ] && "$(DP_ODE_STATIC_LIBDIR)/../bin/ode-config" --cflags || { [ -n "$(DP_ODE_DYNAMIC)" ] && echo \ -DODE_DYNAMIC; }` `[ -n "$(DP_ODE_STATIC_LIBDIR)" ] && echo -DODE_STATIC`
-
-
 SDL_CONFIG?=sdl-config
 SDLCONFIG_UNIXCFLAGS?=`$(SDL_CONFIG) --cflags`
 SDLCONFIG_UNIXCFLAGS_X11?=
@@ -47,17 +42,6 @@ STRIP?=strip
 
 OBJ_SND_COMMON=snd_main.o snd_mem.o snd_mix.o snd_ogg.o snd_wav.o snd_modplug.o
 
-# statically loading d0_blind_id
-LIB_CRYPTO=`[ -n "$(DP_CRYPTO_STATIC_LIBDIR)" ] && echo \ $(DP_CRYPTO_STATIC_LIBDIR)/libd0_blind_id.a`
-LIB_GMP=`[ -n "$(DP_CRYPTO_STATIC_LIBDIR)" ] && { [ -n "$(DP_GMP_STATIC_LIBDIR)" ] && echo \ $(DP_GMP_STATIC_LIBDIR)/libgmp.a || echo \ -lgmp; }`
-CFLAGS_CRYPTO=`[ -n "$(DP_CRYPTO_STATIC_LIBDIR)" ] && echo \ -I$(DP_CRYPTO_STATIC_LIBDIR)/../include\ -DCRYPTO_STATIC`
-LIB_CRYPTO_RIJNDAEL=`[ -n "$(DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR)" ] && echo \ $(DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR)/libd0_rijndael.a`
-CFLAGS_CRYPTO_RIJNDAEL=`[ -n "$(DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR)" ] && echo \ -I$(DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR)/../include\ -DCRYPTO_RIJNDAEL_STATIC`
-
-# Additional stuff for libmodplug
-LIB_SND_MODPLUG=`[ -n "$(DP_MODPLUG_STATIC_LIBDIR)" ] && echo \ $(DP_MODPLUG_STATIC_LIBDIR)/libmodplug.a\ -lstdc++`
-CFLAGS_SND_MODPLUG=`[ -n "$(DP_MODPLUG_STATIC_LIBDIR)" ] && echo \ -I$(DP_MODPLUG_STATIC_LIBDIR)/../include\ -DSND_MODPLUG_STATIC`
-
 # No sound
 OBJ_SND_NULL=snd_null.o
 LIB_SND_NULL=
@@ -187,7 +171,7 @@ OBJ_SDL= builddate.c sys_sdl.o vid_sdl.o thread_sdl.o $(OBJ_SND_COMMON) snd_sdl.
 
 
 # Compilation
-CFLAGS_COMMON=$(CFLAGS_MAKEDEP) $(CFLAGS_PRELOAD) $(CFLAGS_FS) $(CFLAGS_WARNINGS) $(CFLAGS_LIBJPEG) $(CFLAGS_D3D) -D_FILE_OFFSET_BITS=64 -D__KERNEL_STRICT_NAMES
+CFLAGS_COMMON=$(CFLAGS_MAKEDEP) $(CFLAGS_PRELOAD) $(CFLAGS_FS) $(CFLAGS_WARNINGS) $(CFLAGS_LIBZ) $(CFLAGS_LIBJPEG) $(CFLAGS_D3D) -D_FILE_OFFSET_BITS=64 -D__KERNEL_STRICT_NAMES
 CFLAGS_DEBUG=-ggdb
 CFLAGS_PROFILE=-g -pg -ggdb -fprofile-arcs
 CFLAGS_RELEASE=
@@ -218,7 +202,7 @@ LDFLAGS_RELEASE=$(OPTIM_RELEASE) -DSVNREVISION=`{ test -d .svn && svnversion; }
 
 OBJ_GLX= builddate.c sys_linux.o vid_glx.o thread_pthread.o keysym2ucs.o $(OBJ_SOUND) $(OBJ_CD) $(OBJ_COMMON)
 
-LDFLAGS_UNIXCOMMON=-lm $(LIB_ODE) $(LIB_JPEG) $(LIB_CRYPTO) $(LIB_GMP) $(LIB_CRYPTO_RIJNDAEL)
+LDFLAGS_UNIXCOMMON=-lm $(LIB_ODE) $(LIB_Z) $(LIB_JPEG) $(LIB_CRYPTO) $(LIB_CRYPTO_RIJNDAEL)
 LDFLAGS_UNIXCL=-L$(UNIX_X11LIBPATH) -lX11 -lXpm -lXext -lXxf86vm -pthread $(LIB_SOUND)
 LDFLAGS_UNIXCL_PRELOAD=-lz -ljpeg -lpng -logg -ltheora -lvorbis -lvorbisenc -lvorbisfile -lcurl -lmodplug
 LDFLAGS_UNIXSV_PRELOAD=-lz -ljpeg -lpng -lcurl
@@ -303,9 +287,9 @@ OBJ_WGL= builddate.c sys_win.o vid_wgl.o thread_null.o $(OBJ_SND_WIN) $(OBJ_WINC
 
 # Link
 # see LDFLAGS_WINCOMMON in makefile
-LDFLAGS_WINCL=$(LDFLAGS_WINCOMMON) $(LIB_CRYPTO) $(LIB_GMP) $(LIB_CRYPTO_RIJNDAEL) -mwindows -lwinmm -luser32 -lgdi32 -ldxguid -ldinput -lcomctl32 -lws2_32 $(LDFLAGS_D3D) $(LIB_JPEG)
-LDFLAGS_WINSV=$(LDFLAGS_WINCOMMON) $(LIB_CRYPTO) $(LIB_GMP) $(LIB_CRYPTO_RIJNDAEL) -mconsole -lwinmm -lws2_32 $(LIB_JPEG)
-LDFLAGS_WINSDL=$(LDFLAGS_WINCOMMON) $(LIB_CRYPTO) $(LIB_GMP) $(LIB_CRYPTO_RIJNDAEL) $(SDLCONFIG_LIBS) $(LIB_SND_MODPLUG) -lwinmm -lws2_32 $(LIB_JPEG)
+LDFLAGS_WINCL=$(LDFLAGS_WINCOMMON) $(LIB_CRYPTO) $(LIB_CRYPTO_RIJNDAEL) -mwindows -lwinmm -luser32 -lgdi32 -ldxguid -ldinput -lcomctl32 -lws2_32 $(LDFLAGS_D3D) $(LIB_Z) $(LIB_JPEG)
+LDFLAGS_WINSV=$(LDFLAGS_WINCOMMON) $(LIB_CRYPTO) $(LIB_CRYPTO_RIJNDAEL) -mconsole -lwinmm -lws2_32 $(LIB_Z) $(LIB_JPEG)
+LDFLAGS_WINSDL=$(LDFLAGS_WINCOMMON) $(LIB_CRYPTO) $(LIB_CRYPTO_RIJNDAEL) $(SDLCONFIG_LIBS) $(LIB_SND_MODPLUG) -lwinmm -lws2_32 $(LIB_Z) $(LIB_JPEG)
 EXE_WINCL=darkplaces.exe
 EXE_WINSV=darkplaces-dedicated.exe
 EXE_WINSDL=darkplaces-sdl.exe
@@ -490,7 +474,7 @@ snd_modplug.o: snd_modplug.c
        $(CHECKLEVEL2)
        $(DO_CC) $(CFLAGS_SND_MODPLUG)
 
-#this checks ODE_DYNAMIC and ODE_STATIC when compiling so it needs the ODE flags as well
+#this checks USEODE when compiling so it needs the ODE flags as well
 prvm_cmds.o: prvm_cmds.c
        $(CHECKLEVEL2)
        $(DO_CC) $(CFLAGS_ODE)
index c9f5527966a790c4425a674193fe66484edfae6a..1c9c8099b7c26fcb03b9981561b6cdd81f86e60c 100644 (file)
@@ -17,7 +17,9 @@
 #include "mdfour.h"
 
 extern cvar_t prvm_backtraceforwarnings;
+#ifdef USEODE
 extern dllhandle_t ode_dll;
+#endif
 
 // LordHavoc: changed this to NOT use a return statement, so that it can be used in functions that must return a value
 void VM_Warning(prvm_prog_t *prog, const char *fmt, ...)
@@ -275,19 +277,21 @@ static qboolean checkextension(prvm_prog_t *prog, const char *name)
                        e++;
                if ((e - start) == len && !strncasecmp(start, name, len))
                {
+#ifdef USEODE
                        // special sheck for ODE
                        if (!strncasecmp("DP_PHYSICS_ODE", name, 14))
                        {
-#ifdef ODE_DYNAMIC
+#ifndef LINK_TO_LIBODE
                                return ode_dll ? true : false;
 #else
-#ifdef ODE_STATIC
+#ifdef LINK_TO_LIBODE
                                return true;
 #else
                                return false;
 #endif
 #endif
                        }
+#endif
 
                        // special sheck for d0_blind_id
                        if (!strcasecmp("DP_CRYPTO", name))
index 52a152a313c3d16b757a42d1070961481c6f522b..fa0e57f5c910ad626792a69aafeea4ea475b7ccd 100644 (file)
@@ -26,7 +26,7 @@
 #include "snd_main.h"
 #include "snd_modplug.h"
 
-#ifdef SND_MODPLUG_STATIC
+#ifdef LINK_TO_LIBMODPLUG
 
 #include <libmodplug/modplug.h>
 qboolean ModPlug_OpenLibrary (void)
@@ -252,7 +252,7 @@ static void ModPlug_GetSamplesFloat(channel_t *ch, sfx_t *sfx, int firstsamplefr
                        return;
                }
 
-#ifndef SND_MODPLUG_STATIC
+#ifndef LINK_TO_LIBMODPLUG
                if(qModPlug_SetMasterVolume)
 #endif
                        qModPlug_SetMasterVolume(per_ch->mf, 512); // max volume, DP scales down!
@@ -412,7 +412,7 @@ qboolean ModPlug_LoadModPlugFile (const char *filename, sfx_t *sfx)
                return false;
        }
 
-#ifndef SND_MODPLUG_STATIC
+#ifndef LINK_TO_LIBMODPLUG
        if(qModPlug_SetMasterVolume)
 #endif
                qModPlug_SetMasterVolume(mf, 512); // max volume, DP scales down!
diff --git a/world.c b/world.c
index abacf51d2ee614111f26d68ee9ea2cd02e08724d..4fe5fcf5db9595b59fea887651eb9e1a795a4e77 100644 (file)
--- a/world.c
+++ b/world.c
@@ -365,7 +365,7 @@ cvar_t physics_ode = {0, "physics_ode", "0", "run ODE physics (VERY experimental
 // LordHavoc: this large chunk of definitions comes from the ODE library
 // include files.
 
-#ifdef ODE_STATIC
+#ifdef LINK_TO_LIBODE
 #include "ode/ode.h"
 #else
 #ifdef WINAPI
@@ -1470,7 +1470,7 @@ dllhandle_t ode_dll = NULL;
 static void World_Physics_Init(void)
 {
 #ifdef USEODE
-#ifdef ODE_DYNAMIC
+#ifndef LINK_TO_LIBODE
        const char* dllnames [] =
        {
 # if defined(WIN32)
@@ -1520,14 +1520,14 @@ static void World_Physics_Init(void)
        Cvar_RegisterVariable(&physics_ode_allowconvex);
        Cvar_RegisterVariable(&physics_ode);
 
-#ifdef ODE_DYNAMIC
+#ifndef LINK_TO_LIBODE
        // Load the DLL
        if (Sys_LoadLibrary (dllnames, &ode_dll, odefuncs))
 #endif
        {
                dInitODE();
 //             dInitODE2(0);
-#ifdef ODE_DYNAMIC
+#ifndef LINK_TO_LIBODE
 # ifdef dSINGLE
                if (!dCheckConfiguration("ODE_single_precision"))
 # else
@@ -1559,12 +1559,12 @@ static void World_Physics_Init(void)
 static void World_Physics_Shutdown(void)
 {
 #ifdef USEODE
-#ifdef ODE_DYNAMIC
+#ifndef LINK_TO_LIBODE
        if (ode_dll)
 #endif
        {
                dCloseODE();
-#ifdef ODE_DYNAMIC
+#ifndef LINK_TO_LIBODE
                Sys_UnloadLibrary(&ode_dll);
                ode_dll = NULL;
 #endif
@@ -1616,7 +1616,7 @@ static void World_Physics_EnableODE(world_t *world)
        dVector3 center, extents;
        if (world->physics.ode)
                return;
-#ifdef ODE_DYNAMIC
+#ifndef LINK_TO_LIBODE
        if (!ode_dll)
                return;
 #endif
@@ -1722,9 +1722,9 @@ void World_Physics_RemoveFromEntity(world_t *world, prvm_edict_t *ed)
 
 void World_Physics_ApplyCmd(prvm_edict_t *ed, edict_odefunc_t *f)
 {
+#ifdef USEODE
        dBodyID body = (dBodyID)ed->priv.server->ode_body;
 
-#ifdef USEODE
        switch(f->type)
        {
        case ODEFUNC_ENABLE:
@@ -2160,7 +2160,7 @@ static void World_Physics_Frame_BodyFromEntity(world_t *world, prvm_edict_t *ed)
        qboolean *mapped, *used, convex_compatible;
        int numplanes = 0, numpoints = 0, i;
 
-#ifdef ODE_DYNAMIC
+#ifndef LINK_TO_LIBODE
        if (!ode_dll)
                return;
 #endif
@@ -3013,10 +3013,10 @@ static void nearCallback (void *data, dGeomID o1, dGeomID o2)
 void World_Physics_Frame(world_t *world, double frametime, double gravity)
 {
        prvm_prog_t *prog = world->prog;
+#ifdef USEODE
        double tdelta, tdelta2, tdelta3, simulationtime, collisiontime;
 
        tdelta = Sys_DirtyTime();
-#ifdef USEODE
        if (world->physics.ode && physics_ode.integer)
        {
                int i;
diff --git a/world.h b/world.h
index 18e9b00155b1bac6dec53d99449c2de3974c4ae8..e43ebd142c6ffc99f7fcfa01a5badb0baa86966d 100644 (file)
--- a/world.h
+++ b/world.h
@@ -119,15 +119,6 @@ int World_EntitiesInBox(world_t *world, const vec3_t mins, const vec3_t maxs, in
 void World_Start(world_t *world);
 void World_End(world_t *world);
 
-// physics macros
-#ifndef ODE_STATIC
-# define ODE_DYNAMIC 1
-#endif
-
-#if defined(ODE_STATIC) || defined(ODE_DYNAMIC)
-# define USEODE 1
-#endif
-
 // update physics
 // this is called by SV_Physics
 void World_Physics_Frame(world_t *world, double frametime, double gravity);