Use external libraries. * Bam checks for headers existence in a rather stupid way. It should be fixed to allow OptFindLibrary("pnglite", {"sys/types.h", "pnglite.h"}... * Multiple directores to look for headers are not yet implemented in bam, therefore these are really Fedora specific. * engine_openfile() search multiple paths, which we don't do. Lubomir Rintel <lkundrak@v3.sk> diff -up teeworlds-0.5.0-src/default.bam.extlibs teeworlds-0.5.0-src/default.bam --- teeworlds-0.5.0-src/default.bam.extlibs 2009-01-13 20:36:11.000000000 +0100 +++ teeworlds-0.5.0-src/default.bam 2009-01-18 19:08:33.000000000 +0100 @@ -7,6 +7,8 @@ config = NewConfig() config:Add(OptFindCompiler()) config:Add(OptTestCompileC("stackprotector", "int main(){return 0;}", "-fstack-protector -fstack-protector-all")) config:Add(OptFindLibrary("zlib", "zlib.h", false)) +config:Add(OptFindLibrary("wavpack", "wavpack/wavpack.h", false)) +config:Add(OptFindLibrary("pnglite", "sys/types.h", false)) config:Add(SDL.OptFind("sdl", true)) config:Finalize("config.bam") @@ -156,9 +161,30 @@ function build(settings) settings.cc.includes:Add("src/engine/external/zlib") end - -- build the small libraries - wavpack = Compile(settings, Collect("src/engine/external/wavpack/*.c")) - pnglite = Compile(settings, Collect("src/engine/external/pnglite/*.c")) + -- compile wavpack if needed + if config.wavpack.value == 1 then + settings.link.libs:Add("wavpack") + if config.wavpack.include_path then + settings.cc.includes:Add(config.wavpack.include_path) + end + wavpack = {} + else + wavpack = Compile(settings, Collect("src/engine/external/wavpack/*.c")) + settings.cc.includes:Add("src/engine/external") + end + + + -- compile pnglite if needed + if config.pnglite.value == 1 then + settings.link.libs:Add("pnglite") + if config.pnglite.include_path then + settings.cc.includes:Add(config.pnglite.include_path) + end + pnglite = {} + else + pnglite = Compile(settings, Collect("src/engine/external/pnglite/*.c")) + settings.cc.includes:Add("src/engine/external/pnglite") + end -- build game components engine_settings = settings:Copy() diff -up teeworlds-0.5.0-src/src/engine/client/ec_gfx.c.extlibs teeworlds-0.5.0-src/src/engine/client/ec_gfx.c --- teeworlds-0.5.0-src/src/engine/client/ec_gfx.c.extlibs 2009-01-13 20:36:11.000000000 +0100 +++ teeworlds-0.5.0-src/src/engine/client/ec_gfx.c 2009-01-18 18:43:39.000000000 +0100 @@ -18,7 +18,7 @@ #endif #include <base/system.h> -#include <engine/external/pnglite/pnglite.h> +#include <pnglite.h> #include <engine/e_client_interface.h> #include <engine/e_engine.h> diff -up teeworlds-0.5.0-src/src/engine/client/ec_snd.c.extlibs teeworlds-0.5.0-src/src/engine/client/ec_snd.c --- teeworlds-0.5.0-src/src/engine/client/ec_snd.c.extlibs 2009-01-13 20:36:11.000000000 +0100 +++ teeworlds-0.5.0-src/src/engine/client/ec_snd.c 2009-01-18 19:07:35.000000000 +0100 @@ -6,7 +6,7 @@ #include "SDL.h" -#include <engine/external/wavpack/wavpack.h> +#include <wavpack/wavpack.h> #include <stdio.h> #include <stdlib.h> #include <math.h> @@ -358,19 +358,12 @@ static void rate_convert(int sid) snd->num_frames = num_frames; } - -static IOHANDLE file = NULL; - -static int read_data(void *buffer, int size) -{ - return io_read(file, buffer, size); -} - int snd_load_wv(const char *filename) { SAMPLE *snd; int sid = -1; char error[100]; + char completefilename[512]; WavpackContext *context; /* don't waste memory on sound when we are stress testing */ @@ -381,19 +374,13 @@ int snd_load_wv(const char *filename) if(!sound_enabled) return 1; - file = engine_openfile(filename, IOFLAG_READ); /* TODO: use system.h stuff for this */ - if(!file) - { - dbg_msg("sound/wv", "failed to open %s", filename); - return -1; - } - sid = snd_alloc_id(); if(sid < 0) return -1; snd = &samples[sid]; - context = WavpackOpenFileInput(read_data, error); + engine_getpath(completefilename, sizeof(completefilename), filename, IOFLAG_READ); + context = WavpackOpenFileInput(completefilename, error, 0, 0); if (context) { int samples = WavpackGetNumSamples(context); @@ -445,12 +432,9 @@ int snd_load_wv(const char *filename) } else { - dbg_msg("sound/wv", "failed to open %s: %s", filename, error); + dbg_msg("sound/wv", "failed to open %s: %s", completefilename, error); } - io_close(file); - file = NULL; - if(config.debug) dbg_msg("sound/wv", "loaded %s", filename); diff -up teeworlds-0.5.0-src/src/tools/dilate.c.extlibs teeworlds-0.5.0-src/src/tools/dilate.c --- teeworlds-0.5.0-src/src/tools/dilate.c.extlibs 2009-01-13 20:36:11.000000000 +0100 +++ teeworlds-0.5.0-src/src/tools/dilate.c 2009-01-18 18:43:39.000000000 +0100 @@ -1,6 +1,9 @@ /* copyright (c) 2007 magnus auvinen, see licence.txt for more info */ -#include "../engine/external/pnglite/pnglite.c" +#include <sys/types.h> +#include <string.h> +#include <stdio.h> +#include <pnglite.h> typedef struct pixel_t { diff -up teeworlds-0.5.0-src/src/tools/tileset_borderfix.c.extlibs teeworlds-0.5.0-src/src/tools/tileset_borderfix.c --- teeworlds-0.5.0-src/src/tools/tileset_borderfix.c.extlibs 2009-01-13 20:36:11.000000000 +0100 +++ teeworlds-0.5.0-src/src/tools/tileset_borderfix.c 2009-01-18 18:43:39.000000000 +0100 @@ -1,6 +1,9 @@ /* copyright (c) 2007 magnus auvinen, see licence.txt for more info */ -#include "../engine/external/pnglite/pnglite.c" +#include <sys/types.h> +#include <string.h> +#include <stdio.h> +#include <pnglite.h> typedef struct pixel_t {