diff --git a/extensions/geoip/GeoIP.c b/extensions/geoip/GeoIP.c index c5ee3217..8e60424f 100644 --- a/extensions/geoip/GeoIP.c +++ b/extensions/geoip/GeoIP.c @@ -18,6 +18,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#define GEOIPDATADIR "" + #include "GeoIP.h" #ifndef _WIN32 diff --git a/extensions/geoip/Makefile b/extensions/geoip/Makefile new file mode 100644 index 00000000..1cf69223 --- /dev/null +++ b/extensions/geoip/Makefile @@ -0,0 +1,91 @@ +#(C)2004-2006 SourceMM Development Team +# Makefile written by David "BAILOPAN" Anderson + +SMSDK = ../.. +SRCDS = ~/srcds +SOURCEMM = ../../../../sourcemm + +##################################### +### EDIT BELOW FOR OTHER PROJECTS ### +##################################### + +PROJECT = geoip + +#Uncomment for SourceMM-enabled extensions +#LINK_HL2 = $(HL2LIB)/tier1_i486.a vstdlib_i486.so tier0_i486.so + +OBJECTS = extension.cpp smsdk_ext.cpp GeoIP.c + +############################################## +### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### +############################################## + +C_OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing +C_DEBUG_FLAGS = -g -ggdb3 +CPP_GCC4_FLAGS = -fvisibility=hidden -fvisibility-inlines-hidden +CPP = gcc-4.1 + +HL2PUB = $(HL2SDK)/public +HL2LIB = $(HL2SDK)/linux_sdk +HL2SDK = $(SOURCEMM)/hl2sdk +SMM_TRUNK = $(SOURCEMM)/trunk + +LINK = $(LINK_HL2) -static-libgcc + +INCLUDE = -I. -I.. -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \ + -I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I$(SMM_TRUNK) -I$(SMM_TRUNK)/sourcehook -I$(SMM_TRUNK)/sourcemm \ + -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn -I$(SMSDK)/public/extensions \ + +CFLAGS = -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Werror -fPIC -msse -DSOURCEMOD_BUILD +CPPFLAGS = -Wno-non-virtual-dtor -fno-exceptions -fno-rtti + +################################################ +### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### +################################################ + +ifeq "$(DEBUG)" "true" + BIN_DIR = Debug + CFLAGS = $(C_DEBUG_FLAGS) +else + BIN_DIR = Release + CFLAGS = $(C_OPT_FLAGS) +endif + + +GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) +ifeq "$(GCC_VERSION)" "4" + CPPFLAGS += $(CPP_GCC4_FLAGS) +endif + +BINARY = $(PROJECT).ext.so + +OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) +OBJ_LINUX := $(OBJECTS:%.c=$(BIN_DIR)/%.o) + +$(BIN_DIR)/%.o: %.cpp + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< + +$(BIN_DIR)/%.o: %.c + $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $< + +all: + mkdir -p $(BIN_DIR) + ln -sf $(SRCDS)/bin/vstdlib_i486.so vstdlib_i486.so + ln -sf $(SRCDS)/bin/tier0_i486.so tier0_i486.so + $(MAKE) extension + rm -rf $(BINARY) + +extension: $(OBJ_LINUX) + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) + +debug: + $(MAKE) all DEBUG=true + +default: all + +clean: + rm -rf Release/*.o + rm -rf Release/$(BINARY) + rm -rf Debug/*.o + rm -rf Debug/$(BINARY) + diff --git a/extensions/geoip/extension.cpp b/extensions/geoip/extension.cpp index ac9df7de..0212350d 100644 --- a/extensions/geoip/extension.cpp +++ b/extensions/geoip/extension.cpp @@ -93,4 +93,5 @@ const sp_nativeinfo_t geoip_natives[] = {"GeoipCode3", sm_Geoip_Code3}, {"GeoipCountry", sm_Geoip_Country}, {NULL, NULL}, -}; \ No newline at end of file +}; + diff --git a/extensions/geoip/smsdk_ext.cpp b/extensions/geoip/smsdk_ext.cpp index 01e3f42c..0dfcd408 100644 --- a/extensions/geoip/smsdk_ext.cpp +++ b/extensions/geoip/smsdk_ext.cpp @@ -1,10 +1,12 @@ #include +#include #include "smsdk_ext.h" IShareSys *g_pShareSys = NULL; IExtension *myself = NULL; IHandleSys *g_pHandleSys = NULL; ISourceMod *g_pSM = NULL; +IForwardManager *g_pForwards = NULL; PLATFORM_EXTERN_C IExtensionInterface *GetSMExtAPI() { @@ -40,6 +42,7 @@ bool SDKExtension::OnExtensionLoad(IExtension *me, IShareSys *sys, char *error, SM_GET_IFACE(HANDLESYSTEM, g_pHandleSys); SM_GET_IFACE(SOURCEMOD, g_pSM); + SM_GET_IFACE(FORWARDMANAGER, g_pForwards); if (SDK_OnLoad(error, err_max, late)) { @@ -277,3 +280,31 @@ bool SDKExtension::SDK_OnMetamodPauseChange(bool paused, char *error, size_t err } #endif + +/* Overload a few things to prevent libstdc++ linking */ +#if defined __linux__ +extern "C" void __cxa_pure_virtual(void) +{ +} + +void *operator new(size_t size) +{ + return malloc(size); +} + +void *operator new[](size_t size) +{ + return malloc(size); +} + +void operator delete(void *ptr) +{ + free(ptr); +} + +void operator delete[](void * ptr) +{ + free(ptr); +} +#endif + diff --git a/extensions/geoip/smsdk_ext.h b/extensions/geoip/smsdk_ext.h index 07362c78..16d931bc 100644 --- a/extensions/geoip/smsdk_ext.h +++ b/extensions/geoip/smsdk_ext.h @@ -7,6 +7,7 @@ #include #include #include +#include #if defined SMEXT_CONF_METAMOD #include @@ -123,6 +124,7 @@ extern IShareSys *g_pShareSys; extern IExtension *myself; extern IHandleSys *g_pHandleSys; extern ISourceMod *g_pSM; +extern IForwardManager *g_pForwards; #if defined SMEXT_CONF_METAMOD PLUGIN_GLOBALVARS();