From 40c1fee55af9e7347c9d3d39fbd1a4b1e10842e8 Mon Sep 17 00:00:00 2001 From: Scott Ehlert Date: Wed, 13 Feb 2013 01:14:37 -0600 Subject: [PATCH] Added support for Mac OS X and building with clang (bug 5601, r=dvander). --- amxmodx/CCmd.cpp | 2 +- amxmodx/CForward.h | 1 - amxmodx/CLang.cpp | 4 +- amxmodx/CLogEvent.cpp | 4 +- amxmodx/CLogEvent.h | 4 +- amxmodx/CMisc.h | 4 +- amxmodx/CModule.cpp | 2 +- amxmodx/CString.h | 2 +- amxmodx/Makefile | 179 ++++++++++--------- amxmodx/amx.cpp | 20 +-- amxmodx/amx.h | 8 +- amxmodx/amxcore.cpp | 2 +- amxmodx/amxdbg.cpp | 4 +- amxmodx/amxdbg.h | 4 +- amxmodx/amxjitsn.asm | 21 +-- amxmodx/amxmodx.cpp | 8 +- amxmodx/amxmodx.h | 18 +- amxmodx/amxxfile.cpp | 6 +- amxmodx/amxxlog.cpp | 6 +- amxmodx/binlog.cpp | 2 +- amxmodx/datastructs.h | 6 +- amxmodx/debugger.cpp | 4 +- amxmodx/file.cpp | 6 +- amxmodx/format.cpp | 5 + amxmodx/helpers-x86.asm | 2 +- amxmodx/md5.cpp | 4 +- amxmodx/md5.h | 4 +- amxmodx/meta_api.cpp | 22 +-- amxmodx/modules.cpp | 34 ++-- amxmodx/modules.h | 2 +- amxmodx/natives.cpp | 13 +- amxmodx/osdefs.h | 4 + amxmodx/sclinux.h | 8 +- amxmodx/sdk/amxxmodule.cpp | 6 +- amxmodx/sdk/amxxmodule.h | 53 +++--- amxmodx/sh_list.h | 2 +- amxmodx/sh_tinyhash.h | 15 +- amxmodx/sm_trie_tpl.h | 2 +- amxmodx/strptime.cpp | 6 +- amxmodx/util.cpp | 16 +- compiler/amxxpc/Makefile | 101 ++++++++--- compiler/amxxpc/amx.cpp | 60 +++---- compiler/amxxpc/amx.h | 8 +- compiler/amxxpc/amxdbg.h | 4 +- compiler/amxxpc/amxxpc.cpp | 17 +- compiler/amxxpc/amxxpc.h | 6 +- compiler/amxxpc/osdefs.h | 4 + compiler/amxxpc/sclinux.h | 4 + compiler/libpc300/Makefile | 112 +++++++++--- compiler/libpc300/amx.h | 8 +- compiler/libpc300/amxdbg.h | 4 +- compiler/libpc300/libpawnc.c | 5 +- compiler/libpc300/memfile.c | 1 + compiler/libpc300/memfile.h | 2 +- compiler/libpc300/osdefs.h | 4 + compiler/libpc300/sc.h | 2 +- compiler/libpc300/sc1.c | 33 ++-- compiler/libpc300/sc2.c | 39 ++--- compiler/libpc300/sc3.c | 18 +- compiler/libpc300/sc4.c | 4 +- compiler/libpc300/sc5.c | 4 +- compiler/libpc300/sc6.c | 4 +- compiler/libpc300/sc7.c | 6 +- compiler/libpc300/sci18n.c | 4 +- compiler/libpc300/sclinux.h | 4 + compiler/libpc300/sclist.c | 6 +- compiler/libpc300/scstate.c | 2 +- configs/hamdata.ini | 216 ++++++++++++++++++++++- dlls/cstrike/cstrike/CstrikeHacks.cpp | 20 ++- dlls/cstrike/cstrike/Makefile | 129 +++++++++----- dlls/cstrike/cstrike/cstrike.cpp | 4 +- dlls/cstrike/cstrike/cstrike.h | 6 +- dlls/cstrike/cstrike/sdk/amxxmodule.cpp | 6 +- dlls/cstrike/cstrike/sdk/amxxmodule.h | 53 +++--- dlls/cstrike/csx/Makefile | 129 +++++++++----- dlls/cstrike/csx/sdk/amxxmodule.cpp | 6 +- dlls/cstrike/csx/sdk/amxxmodule.h | 53 +++--- dlls/dod/dodfun/CMisc.cpp | 2 +- dlls/dod/dodfun/CMisc.h | 12 +- dlls/dod/dodfun/Makefile | 122 +++++++++---- dlls/dod/dodfun/sdk/amxxmodule.cpp | 6 +- dlls/dod/dodfun/sdk/amxxmodule.h | 53 +++--- dlls/dod/dodx/CMisc.h | 2 +- dlls/dod/dodx/Makefile | 122 +++++++++---- dlls/dod/dodx/NBase.cpp | 2 +- dlls/dod/dodx/moduleconfig.cpp | 2 +- dlls/dod/dodx/sdk/amxxmodule.cpp | 6 +- dlls/dod/dodx/sdk/amxxmodule.h | 53 +++--- dlls/engine/Makefile | 131 +++++++++----- dlls/engine/amxmod_compat.cpp | 4 +- dlls/engine/entity.cpp | 2 +- dlls/engine/sdk/CString.h | 2 +- dlls/engine/sdk/amxxmodule.cpp | 6 +- dlls/engine/sdk/amxxmodule.h | 53 +++--- dlls/fakemeta/Makefile | 128 +++++++++----- dlls/fakemeta/dllfunc.cpp | 8 +- dlls/fakemeta/engfunc.cpp | 6 +- dlls/fakemeta/forward.cpp | 22 +-- dlls/fakemeta/forwardmacros.h | 50 ++++++ dlls/fakemeta/pdata.cpp | 57 +++++++ dlls/fakemeta/sdk/CString.h | 2 +- dlls/fakemeta/sdk/amxxmodule.cpp | 6 +- dlls/fakemeta/sdk/amxxmodule.h | 53 +++--- dlls/fun/Makefile | 129 +++++++++----- dlls/fun/sdk/amxxmodule.cpp | 6 +- dlls/fun/sdk/amxxmodule.h | 53 +++--- dlls/geoip/Makefile | 135 ++++++++++----- dlls/geoip/sdk/amxxmodule.cpp | 6 +- dlls/geoip/sdk/amxxmodule.h | 53 +++--- dlls/hamsandwich/Makefile | 128 +++++++++----- dlls/hamsandwich/Trampolines.h | 32 ++-- dlls/hamsandwich/amxx_api.cpp | 4 +- dlls/hamsandwich/call_funcs.cpp | 116 ++++++------- dlls/hamsandwich/config/hamdata.ini | 218 +++++++++++++++++++++++- dlls/hamsandwich/config_parser.cpp | 4 +- dlls/hamsandwich/hook.h | 12 +- dlls/hamsandwich/hook_callbacks.cpp | 120 ++++++------- dlls/hamsandwich/hook_callbacks.h | 4 +- dlls/hamsandwich/pdata.cpp | 19 +++ dlls/hamsandwich/sdk/CString.h | 2 +- dlls/hamsandwich/sdk/amxxmodule.cpp | 6 +- dlls/hamsandwich/sdk/amxxmodule.h | 53 +++--- dlls/hamsandwich/srvcmd.cpp | 2 +- dlls/mysqlx/Makefile | 157 ++++++++++------- dlls/mysqlx/mysql/MysqlDriver.cpp | 4 +- dlls/mysqlx/sdk/amxxmodule.cpp | 6 +- dlls/mysqlx/sdk/amxxmodule.h | 53 +++--- dlls/mysqlx/sdk/sh_list.h | 2 +- dlls/mysqlx/sdk/sh_string.h | 2 +- dlls/mysqlx/thread/ThreadSupport.h | 2 +- dlls/mysqlx/threading.cpp | 2 +- dlls/ns/CString.h | 2 +- dlls/ns/CVector.h | 5 +- dlls/ns/Makefile | 152 ++++++++++------- dlls/ns/engineapi.cpp | 2 +- dlls/ns/natives/particles.cpp | 6 +- dlls/ns/ns.h | 2 +- dlls/ns/sdk/amxxmodule.cpp | 6 +- dlls/ns/sdk/amxxmodule.h | 53 +++--- dlls/ns/sh_list.h | 2 +- dlls/ns/utilfunctions.h | 2 +- dlls/nvault/Journal.cpp | 2 +- dlls/nvault/Makefile | 130 +++++++++----- dlls/nvault/NVault.cpp | 2 +- dlls/nvault/amxxapi.cpp | 2 +- dlls/nvault/sdk/CString.h | 2 +- dlls/nvault/sdk/amxxmodule.cpp | 6 +- dlls/nvault/sdk/amxxmodule.h | 53 +++--- dlls/nvault/sdk/sh_list.h | 2 +- dlls/nvault/sdk/sh_tinyhash.h | 2 +- dlls/regex/Makefile | 130 +++++++++----- dlls/regex/sdk/amxxmodule.cpp | 6 +- dlls/regex/sdk/amxxmodule.h | 53 +++--- dlls/sockets/Makefile | 130 +++++++++----- dlls/sockets/sdk/amxxmodule.cpp | 6 +- dlls/sockets/sdk/amxxmodule.h | 53 +++--- dlls/sockets/sockets.cpp | 2 +- dlls/sqlite/Makefile | 186 +++++++++++--------- dlls/sqlite/module.cpp | 2 +- dlls/sqlite/sdk/amxxmodule.cpp | 6 +- dlls/sqlite/sdk/amxxmodule.h | 53 +++--- dlls/sqlite/sdk/sh_list.h | 2 +- dlls/sqlite/sdk/sh_string.h | 2 +- dlls/sqlite/sqlite-source/expr.c | 4 +- dlls/sqlite/sqlitepp/SqliteDriver.cpp | 2 +- dlls/sqlite/thread/ThreadSupport.h | 2 +- dlls/tfcx/CMisc.h | 8 +- dlls/tfcx/Makefile | 123 +++++++++---- dlls/tfcx/sdk/amxxmodule.cpp | 6 +- dlls/tfcx/sdk/amxxmodule.h | 53 +++--- dlls/tfcx/tfcx.h | 2 +- dlls/ts/tsfun/Makefile | 122 +++++++++---- dlls/ts/tsfun/sdk/amxxmodule.cpp | 14 +- dlls/ts/tsfun/sdk/amxxmodule.h | 61 ++++--- dlls/ts/tsx/CMisc.h | 4 +- dlls/ts/tsx/Makefile | 124 ++++++++++---- dlls/ts/tsx/sdk/amxxmodule.cpp | 6 +- dlls/ts/tsx/sdk/amxxmodule.h | 53 +++--- installer/amxmodx-installer.nsi | 46 ++++- installer/builder/Build.cs | 24 +-- installer/builder/CoreMod.cs | 7 +- installer/builder/LinuxBuilder.cs | 2 +- installer/builder/MacBuilder.cs | 111 ++++++++++++ installer/builder/Main.cs | 46 ++++- installer/builder/Makefile | 4 +- installer/builder/Win32Builder.cs | 2 +- installer/builder/builder.csproj | 3 +- installer/builder/mac.info | 6 + plugins/compile.sh | 9 +- plugins/include/fakemeta.inc | 19 ++- plugins/include/hamsandwich.inc | 9 +- 191 files changed, 3835 insertions(+), 1946 deletions(-) create mode 100644 installer/builder/MacBuilder.cs create mode 100644 installer/builder/mac.info diff --git a/amxmodx/CCmd.cpp b/amxmodx/CCmd.cpp index cc61b7fa..803fd860 100755 --- a/amxmodx/CCmd.cpp +++ b/amxmodx/CCmd.cpp @@ -153,7 +153,7 @@ void CmdMngr::setCmdLink(CmdLink** a, Command* c, bool sorted) { int i = strcmp(c->getCommand(), (*a)->cmd->getCommand()); - if ((i < 0) || (i == 0) && (strcmp(c->getArgument(), (*a)->cmd->getArgument()) < 0)) + if ((i < 0) || ((i == 0) && (strcmp(c->getArgument(), (*a)->cmd->getArgument()) < 0))) break; a = &(*a)->next; diff --git a/amxmodx/CForward.h b/amxmodx/CForward.h index be5aa26f..d69a7201 100755 --- a/amxmodx/CForward.h +++ b/amxmodx/CForward.h @@ -144,7 +144,6 @@ public: class CSPForward { friend class CForwardMngr; - const char *m_FuncName; int m_NumParams; ForwardParam m_ParamTypes[FORWARD_MAX_PARAMS]; diff --git a/amxmodx/CLang.cpp b/amxmodx/CLang.cpp index 0c0cba49..89df306f 100755 --- a/amxmodx/CLang.cpp +++ b/amxmodx/CLang.cpp @@ -35,7 +35,7 @@ #include "format.h" #include "amxmod_compat.h" -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) #define _snprintf snprintf #endif @@ -108,7 +108,7 @@ size_t CLangMngr::strip(char *str, char *newstr, bool makelower) int flag = 0; size_t strln = strlen(str); - for (i = strln - 1; i >= 0; i--) + for (i = strln - 1; i < strln; i--) { if (str[i] == '\n' || str[i] == ' ' || str[i] == '\t') { diff --git a/amxmodx/CLogEvent.cpp b/amxmodx/CLogEvent.cpp index 4fcc3bb8..ca9b5e63 100755 --- a/amxmodx/CLogEvent.cpp +++ b/amxmodx/CLogEvent.cpp @@ -111,7 +111,7 @@ void LogEventsMngr::CLogEvent::registerFilter(char* filter) filters = new LogCond(cmp->pos, aa, filters); } -void LogEventsMngr::setLogString(char* frmt, va_list& vaptr) +void LogEventsMngr::setLogString(const char* frmt, va_list& vaptr) { ++logCounter; int len = vsnprintf(logString, 255, frmt, vaptr); @@ -128,7 +128,7 @@ void LogEventsMngr::setLogString(char* frmt, va_list& vaptr) logArgc = 0; } -void LogEventsMngr::setLogString(char* frmt, ...) +void LogEventsMngr::setLogString(const char* frmt, ...) { ++logCounter; va_list logArgPtr; diff --git a/amxmodx/CLogEvent.h b/amxmodx/CLogEvent.h index c54d3331..43241bd3 100755 --- a/amxmodx/CLogEvent.h +++ b/amxmodx/CLogEvent.h @@ -141,8 +141,8 @@ public: CLogEvent* registerLogEvent(CPluginMngr::CPlugin* plugin, int func, int pos); inline bool logEventsExist() { return arelogevents; } - void setLogString(char* frmt, va_list& vaptr); - void setLogString(char* frmt, ...); + void setLogString(const char* frmt, va_list& vaptr); + void setLogString(const char* frmt, ...); void parseLogString(); void executeLogEvents(); diff --git a/amxmodx/CMisc.h b/amxmodx/CMisc.h index d1aafb4e..807e55d5 100755 --- a/amxmodx/CMisc.h +++ b/amxmodx/CMisc.h @@ -342,7 +342,7 @@ public: } } - m_AuthData[sizeof(m_AuthData)-1]=0; + m_AuthData[arraysize(m_AuthData)-1]=0; }; const cell *GetAuthID(void) const @@ -361,7 +361,7 @@ public: } } - m_Password[sizeof(m_Password)-1]=0; + m_Password[arraysize(m_Password)-1]=0; }; const cell *GetPass(void) const diff --git a/amxmodx/CModule.cpp b/amxmodx/CModule.cpp index 2692b516..12c2c54a 100755 --- a/amxmodx/CModule.cpp +++ b/amxmodx/CModule.cpp @@ -220,7 +220,7 @@ bool CModule::queryModule() m_Handle = DLLOAD(m_Filename.c_str()); // load file if (!m_Handle) { -#if defined __linux__ +#if defined(__linux__) || defined(__APPLE__) AMXXLOG_Log("[AMXX] Module \"%s\" failed to load (%s)", m_Filename.c_str(), dlerror()); #endif m_Status = MODULE_BADLOAD; diff --git a/amxmodx/CString.h b/amxmodx/CString.h index b5398edd..fc59b1a6 100755 --- a/amxmodx/CString.h +++ b/amxmodx/CString.h @@ -244,7 +244,7 @@ public: if (is_space(v[len-1])) { - for (i=len-1; i>=0; i--) + for (i=len-1; i&1 | cut -b1) +LINK = -Lzlib -ifeq "$(GCC_VERSION)" "4" - OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden +INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \ + -I$(MM_ROOT) + +################################################ +### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### +################################################ + +OS := $(shell uname -s) + +ifeq "$(OS)" "Darwin" + OBJECTS += JIT/amxexecn-darwin.o JIT/amxjitsn-darwin.o JIT/natives-darwin-x86.o \ + JIT/helpers-darwin-x86.o + + CPP = $(CPP_OSX) + LIB_EXT = dylib + LIB_SUFFIX = _mm + CFLAGS += -DOSX + LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5 -Wl,-read_only_relocs,suppress -lz-darwin +else + OBJECTS += JIT/amxexecn.o JIT/amxjitsn.o JIT/natives-x86.o JIT/helpers-x86.o + + LIB_EXT = so + LIB_SUFFIX = _mm_i386 + CFLAGS += -DLINUX + LINK += -shared -lz endif +LINK += -m32 -lm -ldl + +CFLAGS += -DAMX_NOPROPLIST -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing \ + -m32 -Wall -Werror +CPPFLAGS += -fno-exceptions -fno-rtti + +BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT) + ifeq "$(DEBUG)" "true" BIN_DIR = Debug - CFLAGS = $(DEBUG_FLAGS) + CFLAGS += $(C_DEBUG_FLAGS) else BIN_DIR = Release - CFLAGS = $(OPT_FLAGS) + CFLAGS += $(C_OPT_FLAGS) + LINK += -s endif ifeq "$(BINLOG)" "true" - NAME := $(NAME)_bl + LIB_SUFFIX := _bl$(LIB_SUFFIX) BIN_DIR := $(BIN_DIR)BinLog OBJECTS += binlog.cpp CFLAGS += -DBINLOG_ENABLED endif -CFLAGS += -DLINUX -DAMX_NOPROPLIST -Wall -Werror -DHAVE_STDINT_H -static-libgcc -fno-rtti -fno-exceptions +IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0") -ifeq "$(AMD64)" "true" - BINARY = $(NAME)_$(BIN_SUFFIX_64) - CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -DAMD64 -m64 - LINK += -lz64 - OBJECTS += JIT/natives-amd64.o +ifeq "$(IS_CLANG)" "1" + CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/") + CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/") else - BINARY = $(NAME)_$(BIN_SUFFIX_32) - OBJECTS += JIT/amxexecn.o JIT/amxjitsn.o JIT/natives-x86.o - OBJECTS += JIT/helpers-x86.o - CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 - LINK += -lz - OPT_FLAGS += -march=i586 - CFLAGS += -m32 + CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1) + CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3) endif -OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) +# Clang || GCC >= 4 +ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1" + CFLAGS += $(C_GCC4_FLAGS) + CPPFLAGS += $(CPP_GCC4_FLAGS) +endif + +# Clang >= 3 || GCC >= 4.7 +ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1" + CFLAGS += -Wno-delete-non-virtual-dtor +endif + +# OS is Linux and not using clang +ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1" + LINK += -static-libgcc +endif + +OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) + +# This will break if we include other Makefiles, but is fine for now. It allows +# us to make a copy of this file that uses altered paths (ie. Makefile.mine) +# or other changes without mucking up the original. +MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) $(BIN_DIR)/%.o: %.cpp - $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $< + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< all: mkdir -p $(BIN_DIR) - $(MAKE) amxmodx + $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT) -amd64: - rm -f zlib/libz.a - $(MAKE) all AMD64=true - -amd64_debug: - rm -f zlib/libz.a - $(MAKE) all AMD64=true DEBUG=true - -amd64_binlog: - rm -f zlib/libz.a - $(MAKE) all AMD64=true BINLOG=true - -amd64_binlog_debug: - rm -f zlib/libz.a - $(MAKE) all AMD64=true BINLOG=true DEBUG=true - binlog: - $(MAKE) all BINLOG=true - + $(MAKE) -f $(MAKEFILE_NAME) all BINLOG=true + binlog_debug: - $(MAKE) all BINLOG=true DEBUG=true + $(MAKE) -f $(MAKEFILE_NAME) all BINLOG=true DEBUG=true -amxmodx: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) +$(PROJECT): $(OBJ_BIN) + $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY) -debug: - $(MAKE) all DEBUG=true +debug: + $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true default: all clean: - rm -rf Release/*.o - rm -rf Release/$(NAME)_$(BIN_SUFFIX_32) - rm -rf Release/$(NAME)_$(BIN_SUFFIX_64) - rm -rf ReleaseBinLog/*.o - rm -rf ReleaseBinLog/$(NAME)_bl_$(BIN_SUFFIX_32) - rm -rf ReleaseBinLog/$(NAME)_bl_$(BIN_SUFFIX_64) - rm -rf Debug/*.o - rm -rf Debug/$(NAME)_$(BIN_SUFFIX_32) - rm -rf Debug/$(NAME)_$(BIN_SUFFIX_64) - rm -rf DebugBinLog/*.o - rm -rf DebugBinLog/$(NAME)_bl_$(BIN_SUFFIX_32) - rm -rf DebugBinLog/$(NAME)_bl_$(BIN_SUFFIX_64) + rm -rf $(BIN_DIR)/*.o + rm -f $(BIN_DIR)/$(BINARY) + diff --git a/amxmodx/amx.cpp b/amxmodx/amx.cpp index 0dea05a6..13c7757e 100755 --- a/amxmodx/amx.cpp +++ b/amxmodx/amx.cpp @@ -48,7 +48,7 @@ #include #include #include "osdefs.h" -#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ +#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__ #include #include #include @@ -436,7 +436,7 @@ int AMXAPI amx_Callback(AMX *amx, cell index, cell *result, cell *params) hdr=(AMX_HEADER *)amx->base; assert(hdr->natives<=hdr->libraries); #if defined AMX_NATIVETABLE - if (indexbase; assert(hdr->magic==AMX_MAGIC); numlibraries=NUMENTRIES(hdr,libraries,pubvars); @@ -1040,14 +1040,14 @@ int AMXAPI amx_Cleanup(AMX *amx) strcat(funcname,"Cleanup"); #if defined _Windows libcleanup=(AMX_ENTRY)GetProcAddress((HINSTANCE)lib->address,funcname); - #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ + #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__ libcleanup=(AMX_ENTRY)dlsym((void*)lib->address,funcname); #endif if (libcleanup!=NULL) libcleanup(amx); #if defined _Windows FreeLibrary((HINSTANCE)lib->address); - #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ + #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__ dlclose((void*)lib->address); #endif } /* if */ @@ -3695,7 +3695,7 @@ int AMXAPI amx_GetAddr(AMX *amx,cell amx_addr,cell **phys_addr) data=(amx->data!=NULL) ? amx->data : amx->base+(int)hdr->dat; assert(phys_addr!=NULL); - if (amx_addr>=amx->hea && amx_addrstk || amx_addr<0 || amx_addr>=amx->stp) { + if ((amx_addr>=amx->hea && amx_addrstk) || amx_addr<0 || amx_addr>=amx->stp) { *phys_addr=NULL; return AMX_ERR_MEMACCESS; } /* if */ @@ -4094,7 +4094,7 @@ int AMXAPI amx_GetLibraries(AMX *amx) return numLibraries; } -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) #define _snprintf snprintf #endif diff --git a/amxmodx/amx.h b/amxmodx/amx.h index 78bb57c8..e56e0d28 100755 --- a/amxmodx/amx.h +++ b/amxmodx/amx.h @@ -24,7 +24,7 @@ #if defined FREEBSD && !defined __FreeBSD__ #define __FreeBSD__ #endif -#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ +#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__ #include #endif @@ -34,7 +34,7 @@ #if defined HAVE_STDINT_H #include #else - #if defined __LCC__ || defined __DMC__ || defined LINUX + #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__ #if defined HAVE_INTTYPES_H #include #else @@ -190,7 +190,7 @@ typedef int (AMXAPI *AMX_NATIVE_FILTER)(struct tagAMX *amx, int index); #endif #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack(1) /* structures must be packed (byte-aligned) */ #elif defined MACOS && defined __MWERKS__ #pragma options align=mac68k @@ -442,7 +442,7 @@ int AMXAPI amx_GetStringOld(char *dest,const cell *source,int use_wchar); amx_Register((amx), amx_NativeInfo((name),(func)), 1); #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack() /* reset default packing */ #elif defined MACOS && defined __MWERKS__ #pragma options align=reset diff --git a/amxmodx/amxcore.cpp b/amxmodx/amxcore.cpp index 82582dc2..af5ab4e5 100755 --- a/amxmodx/amxcore.cpp +++ b/amxmodx/amxcore.cpp @@ -180,7 +180,7 @@ static cell AMX_NATIVE_CALL setarg(AMX *amx, cell *params) /* adjust the address in "value" in case of an array access */ value+=params[2]*sizeof(cell); /* verify the address */ - if (value<0 || value>=amx->hea && valuestk) + if (value<0 || (value>=amx->hea && valuestk)) return 0; /* set the value indirectly */ * (cell *)(data+(int)value) = params[3]; diff --git a/amxmodx/amxdbg.cpp b/amxmodx/amxdbg.cpp index 4e0ba69c..0cd19ad5 100755 --- a/amxmodx/amxdbg.cpp +++ b/amxmodx/amxdbg.cpp @@ -462,8 +462,8 @@ int AMXAPI dbg_GetVariable(AMX_DBG *amxdbg, const char *symname, ucell scopeaddr break; /* check the range, keep a pointer to the symbol with the smallest range */ if (strcmp(amxdbg->symboltbl[index]->name, symname) == 0 - && (codestart == 0 && codeend == 0 - || amxdbg->symboltbl[index]->codestart >= codestart && amxdbg->symboltbl[index]->codeend <= codeend)) + && ((codestart == 0 && codeend == 0) + || (amxdbg->symboltbl[index]->codestart >= codestart && amxdbg->symboltbl[index]->codeend <= codeend))) { *sym = amxdbg->symboltbl[index]; codestart = amxdbg->symboltbl[index]->codestart; diff --git a/amxmodx/amxdbg.h b/amxmodx/amxdbg.h index 719c6e74..52d9e1cc 100755 --- a/amxmodx/amxdbg.h +++ b/amxmodx/amxdbg.h @@ -49,7 +49,7 @@ extern "C" { #endif #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack(1) /* structures must be packed (byte-aligned) */ #elif defined MACOS && defined __MWERKS__ #pragma options align=mac68k @@ -156,7 +156,7 @@ int AMXAPI dbg_GetArrayDim(AMX_DBG *amxdbg, const AMX_DBG_SYMBOL *sym, const AMX #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack() /* reset default packing */ #elif defined MACOS && defined __MWERKS__ #pragma options align=reset diff --git a/amxmodx/amxjitsn.asm b/amxmodx/amxjitsn.asm index ec0e2fe8..7f0ea739 100755 --- a/amxmodx/amxjitsn.asm +++ b/amxmodx/amxjitsn.asm @@ -303,14 +303,6 @@ %endif %endmacro - -%ifdef WIN32 -section .data exec -%else -section .text -%endif - - global asm_runJIT, _asm_runJIT global amx_exec_jit, _amx_exec_jit global getMaxCodeSize, _getMaxCodeSize @@ -436,15 +428,6 @@ reloc_done: pop ebp ret -; GWMV: -; The code below modifies itself to store the arguments to the Pawn opcodes -; in the compiled code. This is fine, but the .text section in an ELF executable -; is usually marked read-only, that's why this code is in the .data section. - -%ifndef WIN32 -section .data exec -%endif - OP_LOAD_PRI: ;nop; putval j_load_pri+2 @@ -1052,7 +1035,7 @@ OP_CALL: j_call: ;call 12345678h ; tasm chokes on this out of a sudden _PUSH 0 - j_call_e8 + j_call_e8: db 0e8h, 0, 0, 0, 0 CHECKCODESIZE j_call @@ -2591,4 +2574,4 @@ _amx_opcodelist_jit: DD OP_FLOAT_ROUND ; DA DD OP_FLOAT_CMP ; DA -END +END: diff --git a/amxmodx/amxmodx.cpp b/amxmodx/amxmodx.cpp index 8559e938..f126010b 100755 --- a/amxmodx/amxmodx.cpp +++ b/amxmodx/amxmodx.cpp @@ -146,7 +146,7 @@ static cell AMX_NATIVE_CALL server_print(AMX *amx, cell *params) /* 1 param */ static cell AMX_NATIVE_CALL engclient_print(AMX *amx, cell *params) /* 3 param */ { - int len; + int len = 0; char *msg; if (params[1] == 0) @@ -481,7 +481,7 @@ static cell AMX_NATIVE_CALL is_dedicated_server(AMX *amx, cell *params) static cell AMX_NATIVE_CALL is_linux_server(AMX *amx, cell *params) { -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) return 1; #else return 0; @@ -1005,7 +1005,7 @@ static cell AMX_NATIVE_CALL get_user_team(AMX *amx, cell *params) /* 3 param */ if (params[3]) { - char *szTeam = ""; + const char *szTeam = ""; switch (iTeam) { @@ -3843,7 +3843,7 @@ static cell AMX_NATIVE_CALL amx_mkdir(AMX *amx, cell *params) char *path = get_amxstring(amx, params[1], 0, len); char *realpath = build_pathname("%s", path); -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) return mkdir(realpath, 0700); #else return mkdir(realpath); diff --git a/amxmodx/amxmodx.h b/amxmodx/amxmodx.h index 6d6053cf..c7310b4a 100755 --- a/amxmodx/amxmodx.h +++ b/amxmodx/amxmodx.h @@ -32,7 +32,7 @@ #ifndef AMXMODX_H #define AMXMODX_H -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) #include #include #include "sclinux.h" @@ -86,7 +86,7 @@ extern AMX_NATIVE_INFO vector_Natives[]; extern AMX_NATIVE_INFO g_SortNatives[]; extern AMX_NATIVE_INFO g_DataStructNatives[]; -#ifndef __linux__ +#if defined(_WIN32) #define DLLOAD(path) (DLHANDLE)LoadLibrary(path) #define DLPROC(m, func) GetProcAddress(m, func) #define DLFREE(m) FreeLibrary(m) @@ -107,14 +107,14 @@ extern AMX_NATIVE_INFO g_DataStructNatives[]; #endif #endif -#ifndef __linux__ +#if defined(_WIN32) typedef HINSTANCE DLHANDLE; #else typedef void* DLHANDLE; #define INFINITE 0xFFFFFFFF #endif -#ifndef __linux__ +#if defined(_WIN32) #define PATH_SEP_CHAR '\\' #define ALT_SEP_CHAR '/' #else @@ -139,7 +139,7 @@ int UTIL_ReadFlags(const char* c); void UTIL_ClientPrint(edict_t *pEntity, int msg_dest, char *msg); void UTIL_FakeClientCommand(edict_t *pEdict, const char *cmd, const char *arg1 = NULL, const char *arg2 = NULL); void UTIL_GetFlags(char* flags, int flag); -void UTIL_HudMessage(edict_t *pEntity, const hudtextparms_t &textparms, char *pMessage); +void UTIL_HudMessage(edict_t *pEntity, const hudtextparms_t &textparms, const char *pMessage); void UTIL_IntToString(int value, char *output); void UTIL_ShowMOTD(edict_t *client, char *motd, int mlen, const char *name); void UTIL_ShowMenu(edict_t* pEntity, int slots, int time, char *menu, int mlen); @@ -276,8 +276,8 @@ void modules_callPluginsUnloaded(); void modules_callPluginsUnloading(); cell* get_amxaddr(AMX *amx, cell amx_addr); -char* build_pathname(char *fmt, ...); -char* build_pathname_r(char *buffer, size_t maxlen, char *fmt, ...); +char* build_pathname(const char *fmt, ...); +char* build_pathname_r(char *buffer, size_t maxlen, const char *fmt, ...); char* format_amxstring(AMX *amx, cell *params, int parm, int& len); AMX* get_amxscript(int, void**, const char**); const char* get_amxscriptname(AMX* amx); @@ -292,8 +292,8 @@ int unload_amxscript(AMX* amx, void** program); void copy_amxmemory(cell* dest, cell* src, int len); void get_modname(char*); -void print_srvconsole(char *fmt, ...); -void report_error(int code, char* fmt, ...); +void print_srvconsole(const char *fmt, ...); +void report_error(int code, const char* fmt, ...); void* alloc_amxmemory(void**, int size); void free_amxmemory(void **ptr); // get_localinfo diff --git a/amxmodx/amxxfile.cpp b/amxmodx/amxxfile.cpp index 037a7379..8283eec5 100755 --- a/amxmodx/amxxfile.cpp +++ b/amxmodx/amxxfile.cpp @@ -42,7 +42,7 @@ #define PACKED #endif -#if defined __linux__ +#if defined(__linux__) || defined(__APPLE__) #pragma pack(1) /* structures must be packed (byte-aligned) */ #else #pragma pack(1) /* structures must be packed (byte-aligned) */ @@ -127,7 +127,7 @@ CAmxxReader::CAmxxReader(const char *filename, int cellsize) for (mint8_t i = 0; i < m_Bh.numPlugins; i++) { - pe = &(m_Bh.plugins[i]); + pe = &(m_Bh.plugins[(unsigned)i]); DATAREAD(&pe->cellsize, sizeof(mint8_t), 1); DATAREAD(&pe->disksize, sizeof(int32_t), 1); DATAREAD(&pe->imagesize, sizeof(int32_t), 1); @@ -137,7 +137,7 @@ CAmxxReader::CAmxxReader(const char *filename, int cellsize) for (mint8_t i = 0; i < m_Bh.numPlugins; i++) { - pe = &(m_Bh.plugins[i]); + pe = &(m_Bh.plugins[(unsigned)i]); if (pe->cellsize == m_CellSize) { diff --git a/amxmodx/amxxlog.cpp b/amxmodx/amxxlog.cpp index 2a8575c4..9f469ca7 100755 --- a/amxmodx/amxxlog.cpp +++ b/amxmodx/amxxlog.cpp @@ -35,12 +35,12 @@ // 3 = HL Logs #include -#ifndef __linux__ +#if defined(_WIN32) #include #endif #include "amxmodx.h" -#ifndef __linux__ +#if defined(_WIN32WIN32) #define vsnprintf _vsnprintf #endif @@ -137,7 +137,7 @@ void CLog::MapChange() { // create dir if not existing char file[256]; -#ifdef __linux +#if defined(__linux__) || defined(__APPLE__) mkdir(build_pathname_r(file, sizeof(file)-1, "%s", g_log_dir.c_str()), 0700); #else mkdir(build_pathname_r(file, sizeof(file)-1, "%s", g_log_dir.c_str())); diff --git a/amxmodx/binlog.cpp b/amxmodx/binlog.cpp index 67dc17cf..4d72545e 100644 --- a/amxmodx/binlog.cpp +++ b/amxmodx/binlog.cpp @@ -46,7 +46,7 @@ bool BinLog::Open() if (!DirExists(path)) { mkdir(path -#if defined __linux__ +#if defined(__linux__) || defined(__APPLE__) , 0755 #endif ); diff --git a/amxmodx/datastructs.h b/amxmodx/datastructs.h index a1936314..3f397f61 100644 --- a/amxmodx/datastructs.h +++ b/amxmodx/datastructs.h @@ -215,8 +215,7 @@ public: int ShiftUpFrom(size_t which) { // No point shifting this. - if (this->count < 0 || - which > this->count) + if (which > this->count) { return 0; @@ -254,8 +253,7 @@ public: int Delete(size_t which) { // No point shifting this. - if (this->count < 0 || - which >= this->count) + if (which >= this->count) { return 0; } diff --git a/amxmodx/debugger.cpp b/amxmodx/debugger.cpp index cc47c528..ceff2ea9 100755 --- a/amxmodx/debugger.cpp +++ b/amxmodx/debugger.cpp @@ -614,9 +614,9 @@ void Debugger::FmtGenericMsg(AMX *amx, int error, char buffer[], size_t maxLengt if (a) filename = (*a).getName(); size_t len = strlen(filename); - for (size_t i=len-1; i>=0; i--) + for (size_t i=len-1; i #else #define WINDOWS_LEAN_AND_MEAN @@ -784,7 +784,7 @@ static cell AMX_NATIVE_CALL amx_ungetc(AMX *amx, cell *params) return ungetc(static_cast(params[2]), fp); } -#if defined __linux__ +#if defined(__linux__) || defined(__APPLE__) #define _rmdir rmdir #endif @@ -817,7 +817,7 @@ static cell AMX_NATIVE_CALL amx_rename(AMX *amx, cell *params) snprintf(f_new_r, sizeof(f_new_r)-1, "%s", fnew); } -#if defined __linux__ +#if defined(__linux__) || defined(__APPLE__) return (rename(f_old_r, f_new_r) == 0); #elif defined WIN32 return MoveFileA(f_old_r, f_new_r); diff --git a/amxmodx/format.cpp b/amxmodx/format.cpp index 0ba04516..fd5c043a 100644 --- a/amxmodx/format.cpp +++ b/amxmodx/format.cpp @@ -29,6 +29,11 @@ return 0; \ } +template size_t atcprintf(cell *, size_t, const cell *, AMX *, cell *, int *); +template size_t atcprintf(char *, size_t, const cell *, AMX *, cell *, int *); +template size_t atcprintf(cell *, size_t, const char *, AMX *, cell *, int *); +template size_t atcprintf(char *, size_t, const char *, AMX *, cell *, int *); + THash BadLang_Table; static cvar_t *amx_mldebug = NULL; diff --git a/amxmodx/helpers-x86.asm b/amxmodx/helpers-x86.asm index 3039cf2c..a2b61820 100644 --- a/amxmodx/helpers-x86.asm +++ b/amxmodx/helpers-x86.asm @@ -43,7 +43,7 @@ _amxx_CpuSupport: .fail: xor eax, eax -.end +.end: pop ebx diff --git a/amxmodx/md5.cpp b/amxmodx/md5.cpp index 14f3b9f1..564b3775 100755 --- a/amxmodx/md5.cpp +++ b/amxmodx/md5.cpp @@ -185,7 +185,7 @@ unsigned char *MD5::raw_digest(){ -char *MD5::hex_digest(){ +const char *MD5::hex_digest(){ int i; char *s= new char[33]; @@ -205,7 +205,7 @@ char *MD5::hex_digest(){ } -char *MD5::hex_digest(char buffer[33]){ +const char *MD5::hex_digest(char buffer[33]){ int i; diff --git a/amxmodx/md5.h b/amxmodx/md5.h index 045a4a90..50085315 100755 --- a/amxmodx/md5.h +++ b/amxmodx/md5.h @@ -59,8 +59,8 @@ public: // methods to acquire finalized result unsigned char *raw_digest (); // digest as a 16-byte binary array - char * hex_digest (); // digest as a 33-byte ascii-hex string - char * hex_digest (char buffer[33]); //same as above, passing buffer + const char *hex_digest (); // digest as a 33-byte ascii-hex string + const char *hex_digest (char buffer[33]); //same as above, passing buffer diff --git a/amxmodx/meta_api.cpp b/amxmodx/meta_api.cpp index dd058b0a..9b0170bd 100755 --- a/amxmodx/meta_api.cpp +++ b/amxmodx/meta_api.cpp @@ -198,7 +198,7 @@ void BuildPluginFileList(const char *initialdir, CStack & files) } _findclose(handle); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) build_pathname_r(path, sizeof(path)-1, "%s/", initialdir); struct dirent *ep; DIR *dp; @@ -254,7 +254,7 @@ void LoadExtraPluginsFromDir(const char *initialdir) // Precache stuff from force consistency calls // or check for pointed files won't be done -int C_PrecacheModel(char *s) +int C_PrecacheModel(const char *s) { if (!g_forcedmodules) { @@ -269,7 +269,7 @@ int C_PrecacheModel(char *s) RETURN_META_VALUE(MRES_IGNORED, 0); } -int C_PrecacheSound(char *s) +int C_PrecacheSound(const char *s) { if (!g_forcedsounds) { @@ -731,7 +731,7 @@ void C_ServerDeactivate_Post() time(&td); tm *curTime = localtime(&td); int i = 0; -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxmodx")), 0700); #else mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxmodx"))); @@ -740,7 +740,7 @@ void C_ServerDeactivate_Post() { char buffer[256]; sprintf(buffer, "%s/memreports/D%02d%02d%03d", get_localinfo("amxx_basedir", "addons/amxmodx"), curTime->tm_mon + 1, curTime->tm_mday, i); -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) mkdir(build_pathname("%s", g_log_dir.c_str()), 0700); if (mkdir(build_pathname(buffer), 0700) < 0) #else @@ -1083,7 +1083,7 @@ void C_StartFrame_Post(void) tm *curTime = localtime(&td); int i = 0; -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxmodx")), 0700); #else mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxmodx"))); @@ -1092,7 +1092,7 @@ void C_StartFrame_Post(void) { char buffer[256]; sprintf(buffer, "%s/memreports/D%02d%02d%03d", get_localinfo("amxx_basedir", "addons/amxmodx"), curTime->tm_mon + 1, curTime->tm_mday, i); -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) mkdir(build_pathname("%s", g_log_dir.c_str()), 0700); if (mkdir(build_pathname(buffer), 0700) < 0) #else @@ -1285,7 +1285,7 @@ void C_TraceLine_Post(const float *v1, const float *v2, int fNoMonsters, edict_t RETURN_META(MRES_IGNORED); } -void C_AlertMessage(ALERT_TYPE atype, char *szFmt, ...) +void C_AlertMessage(ALERT_TYPE atype, const char *szFmt, ...) { if (atype != at_logged) { @@ -1329,7 +1329,7 @@ void C_AlertMessage(ALERT_TYPE atype, char *szFmt, ...) RETURN_META(MRES_IGNORED); } -void C_ChangeLevel(char *map, char *what) +void C_ChangeLevel(const char *map, const char *what) { int ret = executeForwards(FF_ChangeLevel, map); if (ret) @@ -1371,7 +1371,7 @@ void C_CvarValue2(const edict_t *pEdict, int requestId, const char *cvar, const RETURN_META(MRES_HANDLED); } -C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) +C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) { gpMetaUtilFuncs = pMetaUtilFuncs; *pPlugInfo = &Plugin_info; @@ -1535,7 +1535,7 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason) return (TRUE); } -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) // linux prototype C_DLLEXPORT void GiveFnptrsToDll(enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals) { diff --git a/amxmodx/modules.cpp b/amxmodx/modules.cpp index f8a88727..0b00bfbc 100755 --- a/amxmodx/modules.cpp +++ b/amxmodx/modules.cpp @@ -29,8 +29,11 @@ * version. */ -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) +#if defined(__linux__) #include +#endif + #include #include #include "sclinux.h" @@ -86,7 +89,7 @@ bool DirExists(const char *dir) return false; } -void report_error(int code, char* fmt, ...) +void report_error(int code, const char* fmt, ...) { va_list argptr; char string[256]; @@ -106,7 +109,7 @@ void report_error(int code, char* fmt, ...) } } -void print_srvconsole(char *fmt, ...) +void print_srvconsole(const char *fmt, ...) { va_list argptr; static char string[384]; @@ -340,11 +343,14 @@ int load_amxscript(AMX *amx, void **program, const char *filename, char error[64 if ((err = amx_InitJIT(amx, (void *)rt, (void *)np)) == AMX_ERR_NONE) { //amx->base = (unsigned char FAR *)realloc(np, amx->code_size); -#ifndef __linux__ +#if defined(_WIN32) amx->base = (unsigned char *)VirtualAlloc(NULL, amx->code_size, MEM_COMMIT, PAGE_EXECUTE_READWRITE); -#else - //posix_memalign((void **)&(amx->base), sysconf(_SC_PAGESIZE), amx->code_size); +#elif defined(__GNUC__) +# if defined(__APPLE__) + amx->base = (unsigned char *)valloc(amx->code_size); +# else amx->base = (unsigned char *)memalign(sysconf(_SC_PAGESIZE), amx->code_size); +# endif mprotect((void *)amx->base, amx->code_size, PROT_READ|PROT_WRITE|PROT_EXEC); #endif if (amx->base) @@ -641,7 +647,7 @@ int unload_amxscript(AMX* amx, void** program) return AMX_ERR_NONE; #if defined JIT -#if defined __linux__ +#if defined(__linux__) || defined(__APPLE__) if ((flags & AMX_FLAG_JITC) != AMX_FLAG_JITC) { delete [] prg; @@ -720,7 +726,7 @@ void get_modname(char* buffer) strcpy(buffer, g_mod_name.c_str()); } -char* build_pathname(char *fmt, ...) +char* build_pathname(const char *fmt, ...) { static char string[256]; int b; @@ -746,7 +752,7 @@ char* build_pathname(char *fmt, ...) return string; } -char *build_pathname_r(char *buffer, size_t maxlen, char *fmt, ...) +char *build_pathname_r(char *buffer, size_t maxlen, const char *fmt, ...) { snprintf(buffer, maxlen, "%s%c", g_mod_name.c_str(), PATH_SEP_CHAR); @@ -771,7 +777,7 @@ char *build_pathname_r(char *buffer, size_t maxlen, char *fmt, ...) } // build pathname based on addons dir -char* build_pathname_addons(char *fmt, ...) +char* build_pathname_addons(const char *fmt, ...) { static char string[256]; @@ -875,7 +881,7 @@ bool ConvertModuleName(const char *pathString, String &path) path.append(PATH_SEP_CHAR); path.append(tmpname); path.append("_amxx"); -#if defined __linux__ +#if defined(__linux__) || defined(__APPLE__) #if defined AMD64 || PAWN_CELL_SIZE==64 path.append("_amd64"); #else @@ -888,6 +894,8 @@ bool ConvertModuleName(const char *pathString, String &path) path.append(".dll"); #elif defined __linux__ path.append(".so"); +#elif defined __APPLE__ + path.append(".dylib"); #endif return true; @@ -1179,8 +1187,6 @@ void modules_callPluginsUnloading() // new functions int MNF_AddNatives(AMX_NATIVE_INFO* natives) { - CList::iterator a = g_modules.begin(); - if (!g_CurrentlyCalledModule || g_ModuleCallReason != ModuleCall_Attach) return FALSE; // may only be called from attach @@ -1191,8 +1197,6 @@ int MNF_AddNatives(AMX_NATIVE_INFO* natives) int MNF_AddNewNatives(AMX_NATIVE_INFO *natives) { - CList::iterator a = g_modules.begin(); - if (!g_CurrentlyCalledModule || g_ModuleCallReason != ModuleCall_Attach) return FALSE; // may only be called from attach diff --git a/amxmodx/modules.h b/amxmodx/modules.h index 85b7a011..b05ea597 100755 --- a/amxmodx/modules.h +++ b/amxmodx/modules.h @@ -35,7 +35,7 @@ #include "amx.h" #undef DLLEXPORT -#ifndef __linux__ +#if defined(_WIN32) #define DLLEXPORT __declspec(dllexport) #else #define DLLEXPORT __attribute__((visibility("default"))) diff --git a/amxmodx/natives.cpp b/amxmodx/natives.cpp index 236ddd1e..15ba283d 100755 --- a/amxmodx/natives.cpp +++ b/amxmodx/natives.cpp @@ -35,8 +35,11 @@ #include "libraries.h" #include "format.h" -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) +#if defined(__linux__) #include +#endif + #include #include #include "sclinux.h" @@ -479,12 +482,16 @@ static cell AMX_NATIVE_CALL register_native(AMX *amx, cell *params) //we'll apply a safety buffer too //make our function int size = amxx_DynaCodesize(); -#ifndef __linux__ +#if defined(_WIN32) DWORD temp; pNative->pfn = new char[size + 10]; VirtualProtect(pNative->pfn, size+10, PAGE_EXECUTE_READWRITE, &temp); -#else +#elif defined(__GNUC__) +# if defined(__APPLE__) + pNative->pfn = (char *)valloc(size+10); +# else pNative->pfn = (char *)memalign(sysconf(_SC_PAGESIZE), size+10); +# endif mprotect((void *)pNative->pfn, size+10, PROT_READ|PROT_WRITE|PROT_EXEC); #endif diff --git a/amxmodx/osdefs.h b/amxmodx/osdefs.h index 60d61e68..6a85f600 100755 --- a/amxmodx/osdefs.h +++ b/amxmodx/osdefs.h @@ -39,6 +39,10 @@ #include #endif +#if defined __APPLE__ + #include +#endif + /* Linux NOW has these */ #if !defined BIG_ENDIAN #define BIG_ENDIAN 4321 diff --git a/amxmodx/sclinux.h b/amxmodx/sclinux.h index 649a734d..f28b8ca3 100755 --- a/amxmodx/sclinux.h +++ b/amxmodx/sclinux.h @@ -20,10 +20,10 @@ #define stricmp(a,b) strcasecmp(a,b) #define strnicmp(a,b,c) strncasecmp(a,b,c) -#if defined __linux__ && !defined _snprintf +#if ( defined(__linux__) || defined(__APPLE__) ) && !defined _snprintf #define _snprintf snprintf #endif -#if defined __linux__ && !defined _vsnprintf +#if ( defined(__linux__) || defined(__APPLE__) ) && !defined _vsnprintf //#define _vsnprintf vsnprintf #endif @@ -40,6 +40,10 @@ */ #if !defined __BYTE_ORDER # include +# if defined __APPLE__ +# include +# define __BYTE_ORDER BYTE_ORDER +# endif #endif #if defined __OpenBSD__ diff --git a/amxmodx/sdk/amxxmodule.cpp b/amxmodx/sdk/amxxmodule.cpp index a634e9ac..faf8f75c 100755 --- a/amxmodx/sdk/amxxmodule.cpp +++ b/amxmodx/sdk/amxxmodule.cpp @@ -2240,7 +2240,7 @@ static META_FUNCTIONS g_MetaFunctions_Table = GetEngineFunctions_Post }; -C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) +C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) { if ((int) CVAR_GET_FLOAT("developer") != 0) UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n", @@ -2334,7 +2334,7 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason) -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) // linux prototype C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) { @@ -3050,7 +3050,7 @@ char* UTIL_VarArgs( char *format, ... ) // UTIL_LogPrintf - Prints a logged message to console. // Preceded by LOG: ( timestamp ) < message > //========================================================= -void UTIL_LogPrintf( char *fmt, ... ) +void UTIL_LogPrintf( const char *fmt, ... ) { va_list argptr; static char string[1024]; diff --git a/amxmodx/sdk/amxxmodule.h b/amxmodx/sdk/amxxmodule.h index c53b72da..9e42b72f 100755 --- a/amxmodx/sdk/amxxmodule.h +++ b/amxmodx/sdk/amxxmodule.h @@ -20,11 +20,16 @@ // DLL Export #undef DLLEXPORT -#ifndef __linux__ +#if defined(_WIN32) #define DLLEXPORT __declspec(dllexport) #else #define DLLEXPORT __attribute__((visibility("default"))) +#endif + +#if defined(__linux__) && !defined(LINUX) #define LINUX +#elif defined(__APPLE__) && !defined(OSX) +#define OSX #endif #undef C_DLLEXPORT @@ -66,7 +71,7 @@ struct amxx_module_info_s #if defined HAVE_STDINT_H #include #else - #if defined __LCC__ || defined __DMC__ || defined LINUX + #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__ #if defined HAVE_INTTYPES_H #include #else @@ -308,7 +313,7 @@ typedef int (AMXAPI *AMX_DEBUG)(struct tagAMX *amx); #endif #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack(1) /* structures must be packed (byte-aligned) */ #elif defined MACOS && defined __MWERKS__ #pragma options align=mac68k @@ -395,7 +400,7 @@ enum { }; #if !defined AMX_NO_ALIGN - #if defined __linux__ + #if defined(__linux__) || defined(__APPLE__) #pragma pack() /* reset default packing */ #else #pragma pack(pop) /* reset previous packing */ @@ -406,7 +411,7 @@ enum { // ***** declare functions ***** #ifdef USE_METAMOD -void UTIL_LogPrintf( char *fmt, ... ); +void UTIL_LogPrintf( const char *fmt, ... ); void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage); short FixedSigned16( float value, float scale ); unsigned short FixedUnsigned16( float value, float scale ); @@ -833,11 +838,11 @@ int FN_AllowLagCompensation_Post(void); #ifdef FN_PrecacheModel -int FN_PrecacheModel(char *s); +int FN_PrecacheModel(const char *s); #endif // FN_PrecacheModel #ifdef FN_PrecacheSound -int FN_PrecacheSound(char *s); +int FN_PrecacheSound(const char *s); #endif // FN_PrecacheSound #ifdef FN_SetModel @@ -857,7 +862,7 @@ void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize #ifdef FN_ChangeLevel -void FN_ChangeLevel(char *s1, char *s2); +void FN_ChangeLevel(const char *s1, const char *s2); #endif // FN_ChangeLevel #ifdef FN_GetSpawnParms @@ -1261,19 +1266,19 @@ char *FN_GetInfoKeyBuffer(edict_t *e); #endif // FN_GetInfoKeyBuffer #ifdef FN_InfoKeyValue -char *FN_InfoKeyValue(char *infobuffer, char *key); +char *FN_InfoKeyValue(char *infobuffer, const char *key); #endif // FN_InfoKeyValue #ifdef FN_SetKeyValue -void FN_SetKeyValue(char *infobuffer, char *key, char *value); +void FN_SetKeyValue(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue #ifdef FN_SetClientKeyValue -void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue #ifdef FN_IsMapValid -int FN_IsMapValid(char *filename); +int FN_IsMapValid(const char *filename); #endif // FN_IsMapValid #ifdef FN_StaticDecal @@ -1281,7 +1286,7 @@ void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int mo #endif // FN_StaticDecal #ifdef FN_PrecacheGeneric -int FN_PrecacheGeneric(char *s); +int FN_PrecacheGeneric(const char *s); #endif // FN_PrecacheGeneric #ifdef FN_GetPlayerUserId @@ -1414,11 +1419,11 @@ const char *FN_GetPlayerAuthId(edict_t *e); #ifdef FN_PrecacheModel_Post -int FN_PrecacheModel_Post(char *s); +int FN_PrecacheModel_Post(const char *s); #endif // FN_PrecacheModel_Post #ifdef FN_PrecacheSound_Post -int FN_PrecacheSound_Post(char *s); +int FN_PrecacheSound_Post(const char *s); #endif // FN_PrecacheSound_Post #ifdef FN_SetModel_Post @@ -1438,7 +1443,7 @@ void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize_Post #ifdef FN_ChangeLevel_Post -void FN_ChangeLevel_Post(char *s1, char *s2); +void FN_ChangeLevel_Post(const char *s1, const char *s2); #endif // FN_ChangeLevel_Post #ifdef FN_GetSpawnParms_Post @@ -1842,19 +1847,19 @@ char *FN_GetInfoKeyBuffer_Post(edict_t *e); #endif // FN_GetInfoKeyBuffer_Post #ifdef FN_InfoKeyValue_Post -char *FN_InfoKeyValue_Post(char *infobuffer, char *key); +char *FN_InfoKeyValue_Post(char *infobuffer, const char *key); #endif // FN_InfoKeyValue_Post #ifdef FN_SetKeyValue_Post -void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value); +void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue_Post #ifdef FN_SetClientKeyValue_Post -void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue_Post #ifdef FN_IsMapValid_Post -int FN_IsMapValid_Post(char *filename); +int FN_IsMapValid_Post(const char *filename); #endif // FN_IsMapValid_Post #ifdef FN_StaticDecal_Post @@ -1862,7 +1867,7 @@ void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, i #endif // FN_StaticDecal_Post #ifdef FN_PrecacheGeneric_Post -int FN_PrecacheGeneric_Post(char *s); +int FN_PrecacheGeneric_Post(const char *s); #endif // FN_PrecacheGeneric_Post #ifdef FN_GetPlayerUserId_Post @@ -2116,7 +2121,7 @@ typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/); typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...); typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...); typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/); -typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...); +typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...); typedef const char * (*PFN_GET_MODNAME) (void); typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/); typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/); @@ -2175,8 +2180,8 @@ typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned i typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/); typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/); typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/); -typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); -typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */); typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/); typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/); diff --git a/amxmodx/sh_list.h b/amxmodx/sh_list.h index e632ceca..893c8c56 100644 --- a/amxmodx/sh_list.h +++ b/amxmodx/sh_list.h @@ -19,7 +19,7 @@ #endif #include -#include +#include //namespace SourceHook //{ diff --git a/amxmodx/sh_tinyhash.h b/amxmodx/sh_tinyhash.h index 2690bde4..b4564d21 100644 --- a/amxmodx/sh_tinyhash.h +++ b/amxmodx/sh_tinyhash.h @@ -54,12 +54,12 @@ typedef List * NodePtr; public: class const_iterator; - THash() : m_Buckets(NULL), m_numBuckets(0), m_percentUsed(0.0f), m_items(0) + THash() : m_Buckets(NULL), m_numBuckets(0), m_percentUsed(0.0f) { _Refactor(); } THash(const THash &other) : m_Buckets(new NodePtr[other.m_numBuckets]), - m_numBuckets(other.m_numBuckets), m_percentUsed(other.m_percentUsed), m_items(0) + m_numBuckets(other.m_numBuckets), m_percentUsed(other.m_percentUsed) { for (size_t i=0; i @@ -229,8 +224,6 @@ } } public: - friend class iterator; - friend class const_iterator; class iterator { friend class THash; @@ -304,8 +297,6 @@ *this = tmp; // :TODO: Maybe refactor to a lower size if required - - m_items--; } private: void _Inc() @@ -454,6 +445,8 @@ const THash *hash; bool end; }; + friend class iterator; + friend class const_iterator; public: iterator begin() { diff --git a/amxmodx/sm_trie_tpl.h b/amxmodx/sm_trie_tpl.h index 61b8f1e5..d0576929 100644 --- a/amxmodx/sm_trie_tpl.h +++ b/amxmodx/sm_trie_tpl.h @@ -34,7 +34,7 @@ #include #include -#include +#include #include enum NodeType diff --git a/amxmodx/strptime.cpp b/amxmodx/strptime.cpp index 13ce9587..eb3bfda5 100755 --- a/amxmodx/strptime.cpp +++ b/amxmodx/strptime.cpp @@ -10,7 +10,7 @@ #include #include -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) #define strnicmp strncasecmp #endif @@ -336,8 +336,10 @@ char *strptime(const char *buf, const char *fmt, struct tm *tm, short addthem) if (0 <= ti.qS) (*defoper) ( &tm->tm_sec , ti.qS ); if (0 <= ti.qM) (*defoper) ( &tm->tm_min , ti.qM ); //tm->tm_min = ti.qM; if (0 <= ti.qI) + { if (0 <= ti.qp) ti.qH = ti.qI % 12 + ti.qp * 12; - else (*defoper) ( &tm->tm_hour , ti.qI ); //tm->tm_hour = ti.qI; + else (*defoper) ( &tm->tm_hour , ti.qI ); //tm->tm_hour = ti.qI; + } if (0 <= ti.qH) (*defoper) ( &tm->tm_hour , ti.qH ); //tm->tm_hour = ti.qH; if (0 <= ti.qZ) (*defoper) ( &tm->tm_isdst , ti.qZ - 1 ); //tm->tm_isdst = ti.qZ - 1; if (0 <= ti.qy) ti.qY = ti.qy; diff --git a/amxmodx/util.cpp b/amxmodx/util.cpp index 0482f9cb..fcc30bcc 100755 --- a/amxmodx/util.cpp +++ b/amxmodx/util.cpp @@ -32,7 +32,7 @@ #include #include "amxmodx.h" -#if defined __linux__ && !defined _vsnprintf +#if ( defined(__linux__) || defined(__APPLE__) ) && !defined _vsnprintf #define _vsnprintf vsnprintf #endif @@ -157,8 +157,8 @@ void UTIL_IntToString(int value, char *output) if (tho) { - aaa += sprintf(&output[aaa], words[tho]); - aaa += sprintf(&output[aaa], words[29]); + aaa += sprintf(&output[aaa], "%s", words[tho]); + aaa += sprintf(&output[aaa], "%s", words[29]); value = value % 1000; } @@ -166,8 +166,8 @@ void UTIL_IntToString(int value, char *output) if (hun) { - aaa += sprintf(&output[aaa], words[hun]); - aaa += sprintf(&output[aaa], words[28]); + aaa += sprintf(&output[aaa], "%s", words[hun]); + aaa += sprintf(&output[aaa], "%s", words[28]); value = value % 100; } @@ -175,10 +175,10 @@ void UTIL_IntToString(int value, char *output) int unit = value % 10; if (ten) - aaa += sprintf(&output[aaa], words[(ten > 1) ? (ten + 18) : (unit + 10)]); + aaa += sprintf(&output[aaa], "%s", words[(ten > 1) ? (ten + 18) : (unit + 10)]); if (ten != 1 && (unit || (!value && !hun && !tho))) - sprintf(&output[aaa], words[unit]); + sprintf(&output[aaa], "%s", words[unit]); } char* UTIL_SplitHudMessage(const char *src) @@ -242,7 +242,7 @@ short FixedSigned16(float value, float scale) return (short)output; } -void UTIL_HudMessage(edict_t *pEntity, const hudtextparms_t &textparms, char *pMessage) +void UTIL_HudMessage(edict_t *pEntity, const hudtextparms_t &textparms, const char *pMessage) { if (pEntity) MESSAGE_BEGIN(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, NULL, pEntity); diff --git a/compiler/amxxpc/Makefile b/compiler/amxxpc/Makefile index 606b7920..0d834a10 100755 --- a/compiler/amxxpc/Makefile +++ b/compiler/amxxpc/Makefile @@ -1,46 +1,107 @@ -#(C)2004-2005 AMX Mod X Development Team +# (C)2004-2013 AMX Mod X Development Team # Makefile written by David "BAILOPAN" Anderson +##################################### ### EDIT BELOW FOR OTHER PROJECTS ### +##################################### -OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing -DEBUG_FLAGS = -g -ggdb3 -CPP = gcc-4.1 -BINARY = amxxpc - +PROJECT = amxxpc OBJECTS = amx.cpp amxxpc.cpp Binary.cpp -LINK = -lz /lib32/libstdc++.a +############################################## +### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### +############################################## -INCLUDE = -I. -L. +C_OPT_FLAGS = -DNDEBUG -O2 -funroll-loops -fomit-frame-pointer -pipe +C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3 +C_GCC4_FLAGS = -fvisibility=hidden +CPP_GCC4_FLAGS = -fvisibility-inlines-hidden +CPP = gcc +CPP_OSX = clang + +LINK = + +INCLUDE = -I. + +################################################ +### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### +################################################ + +OS := $(shell uname -s) + +ifeq "$(OS)" "Darwin" + CPP = $(CPP_OSX) + LIB_SUFFIX = _osx + CFLAGS += -DOSX + LINK += -lstdc++ -mmacosx-version-min=10.5 -lz-darwin +else + LIB_SUFFIX = + CFLAGS += -DLINUX + LINK += -lz /lib32/libstdc++.a +endif + +LINK += -m32 -lm -ldl -L. + +CFLAGS += -DAMX_ANSIONLY -DHAVE_STDINT_H -fno-strict-aliasing \ + -m32 -Wall -Werror +CPPFLAGS += -fexceptions -fno-rtti + +BINARY = $(PROJECT)$(LIB_SUFFIX) ifeq "$(DEBUG)" "true" BIN_DIR = Debug - CFLAGS = $(DEBUG_FLAGS) + CFLAGS += $(C_DEBUG_FLAGS) else BIN_DIR = Release - CFLAGS = $(OPT_FLAGS) + CFLAGS += $(C_OPT_FLAGS) endif -CFLAGS += -DLINUX -DNDEBUG -Wno-deprecated -fexceptions -DHAVE_STDINT_H -DAMX_ANSIONLY -fno-rtti -static-libgcc +IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0") -OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) +ifeq "$(IS_CLANG)" "1" + CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/") + CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/") +else + CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1) + CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3) +endif + +# Clang || GCC >= 4 +ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1" + CFLAGS += $(C_GCC4_FLAGS) + CPPFLAGS += $(CPP_GCC4_FLAGS) +endif + +# Clang >= 3 || GCC >= 4.7 +ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1" + CFLAGS += -Wno-delete-non-virtual-dtor +endif + +# OS is Linux and not using clang +ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1" + LINK += -static-libgcc +endif + +OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) + +# This will break if we include other Makefiles, but is fine for now. It allows +# us to make a copy of this file that uses altered paths (ie. Makefile.mine) +# or other changes without mucking up the original. +MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) $(BIN_DIR)/%.o: %.cpp - $(CPP) $(INCLUDE) $(CFLAGS) -m32 -o $@ -c $< + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< all: mkdir -p $(BIN_DIR) - $(MAKE) amxxpc + $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT) -amxxpc: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) -m32 $(OBJ_LINUX) $(LINK) -ldl -lm -o$(BIN_DIR)/$(BINARY) +$(PROJECT): $(OBJ_BIN) + $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY) default: all clean: - rm -rf Release/*.o - rm -rf Release/$(BINARY) - rm -rf Debug/*.o - rm -rf Debug/$(BINARY) + rm -rf $(BIN_DIR)/*.o + rm -f $(BIN_DIR)/$(BINARY) diff --git a/compiler/amxxpc/amx.cpp b/compiler/amxxpc/amx.cpp index 0a960779..9e63576e 100755 --- a/compiler/amxxpc/amx.cpp +++ b/compiler/amxxpc/amx.cpp @@ -42,7 +42,7 @@ #include /* for wchar_t */ #include #include "osdefs.h" -#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ +#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__ #include #if !defined AMX_NODYNALOAD #include @@ -815,12 +815,12 @@ static void expand(unsigned char *code, long codesize, long memsize) int AMXAPI amx_Init(AMX *amx,void *program) { AMX_HEADER *hdr; - #if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__) && !defined AMX_NODYNALOAD + #if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__) && !defined AMX_NODYNALOAD char libname[sNAMEMAX+8]; /* +1 for '\0', +3 for 'amx' prefix, +4 for extension */ #if defined _Windows typedef int (FAR WINAPI *AMX_ENTRY)(AMX _FAR *amx); HINSTANCE hlib; - #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ + #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__ typedef int (*AMX_ENTRY)(AMX *amx); void *hlib; #endif @@ -965,7 +965,7 @@ int AMXAPI amx_Init(AMX *amx,void *program) amx_BrowseRelocate(amx); /* load any extension modules that the AMX refers to */ - #if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__) && !defined AMX_NODYNALOAD + #if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__) && !defined AMX_NODYNALOAD hdr=(AMX_HEADER *)amx->base; numlibraries=NUMENTRIES(hdr,libraries,pubvars); for (i=0; ibase; assert(hdr->magic==AMX_MAGIC); numlibraries=NUMENTRIES(hdr,libraries,pubvars); @@ -1130,14 +1130,14 @@ int AMXAPI amx_Cleanup(AMX *amx) strcat(funcname,"Cleanup"); #if defined _Windows libcleanup=(AMX_ENTRY)GetProcAddress((HINSTANCE)lib->address,funcname); - #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ + #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__ libcleanup=(AMX_ENTRY)dlsym((void*)lib->address,funcname); #endif if (libcleanup!=NULL) libcleanup(amx); #if defined _Windows FreeLibrary((HINSTANCE)lib->address); - #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ + #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__ dlclose((void*)lib->address); #endif } /* if */ @@ -1666,7 +1666,7 @@ int AMXAPI amx_PushString(AMX *amx, cell *amx_addr, cell **phys_addr, const char * fast "indirect threaded" interpreter. */ -#define NEXT(cip) goto **cip++ +#define NEXT(cip) goto *(const void *)*cip++ int AMXAPI amx_Exec(AMX *amx, cell *retval, int index) { @@ -1846,14 +1846,14 @@ static const void * const amx_opcodelist[] = { NEXT(cip); op_load_i: /* verify address */ - if (pri>=hea && pri=(ucell)amx->stp) + if ((pri>=hea && pri=(ucell)amx->stp) ABORT(amx,AMX_ERR_MEMACCESS); pri= * (cell *)(data+(int)pri); NEXT(cip); op_lodb_i: GETPARAM(offs); /* verify address */ - if (pri>=hea && pri=(ucell)amx->stp) + if ((pri>=hea && pri=(ucell)amx->stp) ABORT(amx,AMX_ERR_MEMACCESS); switch (offs) { case 1: @@ -1919,14 +1919,14 @@ static const void * const amx_opcodelist[] = { NEXT(cip); op_stor_i: /* verify address */ - if (alt>=hea && alt=(ucell)amx->stp) + if ((alt>=hea && alt=(ucell)amx->stp) ABORT(amx,AMX_ERR_MEMACCESS); *(cell *)(data+(int)alt)=pri; NEXT(cip); op_strb_i: GETPARAM(offs); /* verify address */ - if (alt>=hea && alt=(ucell)amx->stp) + if ((alt>=hea && alt=(ucell)amx->stp) ABORT(amx,AMX_ERR_MEMACCESS); switch (offs) { case 1: @@ -1943,7 +1943,7 @@ static const void * const amx_opcodelist[] = { op_lidx: offs=pri*sizeof(cell)+alt; /* verify address */ - if (offs>=hea && offs=(ucell)amx->stp) + if ((offs>=hea && offs=(ucell)amx->stp) ABORT(amx,AMX_ERR_MEMACCESS); pri= * (cell *)(data+(int)offs); NEXT(cip); @@ -1951,7 +1951,7 @@ static const void * const amx_opcodelist[] = { GETPARAM(offs); offs=(pri << (int)offs)+alt; /* verify address */ - if (offs>=hea && offs=(ucell)amx->stp) + if ((offs>=hea && offs=(ucell)amx->stp) ABORT(amx,AMX_ERR_MEMACCESS); pri= * (cell *)(data+(int)offs); NEXT(cip); @@ -2388,13 +2388,13 @@ static const void * const amx_opcodelist[] = { /* verify top & bottom memory addresses, for both source and destination * addresses */ - if (pri>=hea && pri=(ucell)amx->stp) + if ((pri>=hea && pri=(ucell)amx->stp) ABORT(amx,AMX_ERR_MEMACCESS); - if ((pri+offs)>hea && (pri+offs)(ucell)amx->stp) + if (((pri+offs)>hea && (pri+offs)(ucell)amx->stp) ABORT(amx,AMX_ERR_MEMACCESS); - if (alt>=hea && alt=(ucell)amx->stp) + if ((alt>=hea && alt=(ucell)amx->stp) ABORT(amx,AMX_ERR_MEMACCESS); - if ((alt+offs)>hea && (alt+offs)(ucell)amx->stp) + if (((alt+offs)>hea && (alt+offs)(ucell)amx->stp) ABORT(amx,AMX_ERR_MEMACCESS); memcpy(data+(int)alt, data+(int)pri, (int)offs); NEXT(cip); @@ -2403,22 +2403,22 @@ static const void * const amx_opcodelist[] = { /* verify top & bottom memory addresses, for both source and destination * addresses */ - if (pri>=hea && pri=(ucell)amx->stp) + if ((pri>=hea && pri=(ucell)amx->stp) ABORT(amx,AMX_ERR_MEMACCESS); - if ((pri+offs)>hea && (pri+offs)(ucell)amx->stp) + if (((pri+offs)>hea && (pri+offs)(ucell)amx->stp) ABORT(amx,AMX_ERR_MEMACCESS); - if (alt>=hea && alt=(ucell)amx->stp) + if ((alt>=hea && alt=(ucell)amx->stp) ABORT(amx,AMX_ERR_MEMACCESS); - if ((alt+offs)>hea && (alt+offs)(ucell)amx->stp) + if (((alt+offs)>hea && (alt+offs)(ucell)amx->stp) ABORT(amx,AMX_ERR_MEMACCESS); pri=memcmp(data+(int)alt, data+(int)pri, (int)offs); NEXT(cip); op_fill: GETPARAM(offs); /* verify top & bottom memory addresses */ - if (alt>=hea && alt=(ucell)amx->stp) + if ((alt>=hea && alt=(ucell)amx->stp) ABORT(amx,AMX_ERR_MEMACCESS); - if ((alt+offs)>hea && (alt+offs)(ucell)amx->stp) + if (((alt+offs)>hea && (alt+offs)(ucell)amx->stp) ABORT(amx,AMX_ERR_MEMACCESS); for (i=(int)alt; offs>=(int)sizeof(cell); i+=sizeof(cell), offs-=sizeof(cell)) *(cell *)(data+i) = pri; @@ -3592,7 +3592,7 @@ int AMXAPI amx_GetAddr(AMX *amx,cell amx_addr,cell **phys_addr) data=(amx->data!=NULL) ? amx->data : amx->base+(int)hdr->dat; assert(phys_addr!=NULL); - if (amx_addr>=amx->hea && amx_addrstk || amx_addr<0 || amx_addr>=amx->stp) { + if ((amx_addr>=amx->hea && amx_addrstk) || amx_addr<0 || amx_addr>=amx->stp) { *phys_addr=NULL; return AMX_ERR_MEMACCESS; } /* if */ diff --git a/compiler/amxxpc/amx.h b/compiler/amxxpc/amx.h index f237b537..ba3d434a 100755 --- a/compiler/amxxpc/amx.h +++ b/compiler/amxxpc/amx.h @@ -24,7 +24,7 @@ #if defined FREEBSD && !defined __FreeBSD__ #define __FreeBSD__ #endif -#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ +#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__ #include #endif @@ -34,7 +34,7 @@ #if defined HAVE_STDINT_H #include #else - #if defined __LCC__ || defined __DMC__ || defined LINUX + #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__ #if defined HAVE_INTTYPES_H #include #else @@ -188,7 +188,7 @@ typedef int (AMXAPI *AMX_DEBUG)(struct tagAMX *amx); #endif #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack(1) /* structures must be packed (byte-aligned) */ #elif defined MACOS && defined __MWERKS__ #pragma options align=mac68k @@ -416,7 +416,7 @@ int AMXAPI amx_UTF8Put(char *string, char **endptr, int maxchars, cell value); amx_Register((amx), amx_NativeInfo((name),(func)), 1); #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack() /* reset default packing */ #elif defined MACOS && defined __MWERKS__ #pragma options align=reset diff --git a/compiler/amxxpc/amxdbg.h b/compiler/amxxpc/amxdbg.h index c8f047aa..7ffca1b5 100755 --- a/compiler/amxxpc/amxdbg.h +++ b/compiler/amxxpc/amxdbg.h @@ -49,7 +49,7 @@ extern "C" { #endif #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack(1) /* structures must be packed (byte-aligned) */ #elif defined MACOS && defined __MWERKS__ #pragma options align=mac68k @@ -156,7 +156,7 @@ int AMXAPI dbg_GetArrayDim(AMX_DBG *amxdbg, const AMX_DBG_SYMBOL *sym, const AMX #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack() /* reset default packing */ #elif defined MACOS && defined __MWERKS__ #pragma options align=reset diff --git a/compiler/amxxpc/amxxpc.cpp b/compiler/amxxpc/amxxpc.cpp index c8d83ea8..f24572ff 100755 --- a/compiler/amxxpc/amxxpc.cpp +++ b/compiler/amxxpc/amxxpc.cpp @@ -1,5 +1,5 @@ #include -#ifdef __linux__ +#if defined(__linux__) | defined (__APPLE__) #include #else #include @@ -29,25 +29,26 @@ void WriteBh(BinaryWriter *bw, BinPlugin *bh); int main(int argc, char **argv) { struct abl pl32; - struct abl pl64; #ifdef _DEBUG printf("debug clamp\n"); getchar(); #endif -#ifdef __linux__ +#if defined(__linux__) HINSTANCE lib = NULL; if (FileExists("./amxxpc32.so")) lib = dlmount("./amxxpc32.so"); else lib = dlmount("amxxpc32.so"); +#elif defined(__APPLE__) + HINSTANCE lib = dlmount("amxxpc32.dylib"); #else HINSTANCE lib = dlmount("amxxpc32.dll"); #endif if (!lib) { -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) printf("compiler failed to instantiate: %s\n", dlerror()); #else printf("compiler failed to instantiate: %d\n", GetLastError()); @@ -60,7 +61,7 @@ int main(int argc, char **argv) if (!sc32 || !pc_printf) { -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) printf("compiler failed to link: %p.\n",sc32); #else printf("compiler failed to link: %d.\n", GetLastError()); @@ -69,7 +70,7 @@ int main(int argc, char **argv) } pc_printf("Welcome to the AMX Mod X %s Compiler.\n", VERSION_STRING); - pc_printf("Copyright (c) 1997-2006 ITB CompuPhase, AMX Mod X Team\n\n"); + pc_printf("Copyright (c) 1997-2013 ITB CompuPhase, AMX Mod X Team\n\n"); if (argc < 2) { @@ -243,7 +244,7 @@ char *swiext(const char *file, const char *ext, int isO) int i = 0, pos = -1, j = 0; int fileLen = strlen(file); int extLen = strlen(ext); - int max = 0, odirFlag = -1; + int odirFlag = -1; for (i=fileLen-1; i>=0; i--) { @@ -339,7 +340,7 @@ void show_help() printf("\t-r[name] write cross reference report to console or to specified file\n"); } -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) bool FileExists(const char *file) { FILE *fp = fopen(file, "rb"); diff --git a/compiler/amxxpc/amxxpc.h b/compiler/amxxpc/amxxpc.h index accec6dd..eb28e697 100755 --- a/compiler/amxxpc/amxxpc.h +++ b/compiler/amxxpc/amxxpc.h @@ -5,7 +5,7 @@ #define MAGIC_HEADER2 0x414D5858 #define MAGIC_VERSION 0x0300 -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) # include #else # include @@ -13,7 +13,7 @@ #include -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) # define dlmount(x) dlopen(x, RTLD_NOW|RTLD_GLOBAL) typedef void* HINSTANCE; #else @@ -65,7 +65,7 @@ struct BinPlugin int32_t offs; //file offset }; -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) bool FileExists(const char *file); #endif diff --git a/compiler/amxxpc/osdefs.h b/compiler/amxxpc/osdefs.h index 60d61e68..6a85f600 100755 --- a/compiler/amxxpc/osdefs.h +++ b/compiler/amxxpc/osdefs.h @@ -39,6 +39,10 @@ #include #endif +#if defined __APPLE__ + #include +#endif + /* Linux NOW has these */ #if !defined BIG_ENDIAN #define BIG_ENDIAN 4321 diff --git a/compiler/amxxpc/sclinux.h b/compiler/amxxpc/sclinux.h index f22497a8..fb0b116b 100755 --- a/compiler/amxxpc/sclinux.h +++ b/compiler/amxxpc/sclinux.h @@ -32,6 +32,10 @@ */ #if !defined __BYTE_ORDER # include +# if defined __APPLE__ +# include +# define __BYTE_ORDER BYTE_ORDER +# endif #endif #if defined __OpenBSD__ || defined __FreeBSD__ diff --git a/compiler/libpc300/Makefile b/compiler/libpc300/Makefile index 7fa066cc..7c084f56 100755 --- a/compiler/libpc300/Makefile +++ b/compiler/libpc300/Makefile @@ -1,46 +1,108 @@ -#(C)2004-2005 AMX Mod X Development Team +# (C)2004-2013 AMX Mod X Development Team # Makefile written by David "BAILOPAN" Anderson +##################################### ### EDIT BELOW FOR OTHER PROJECTS ### +##################################### -OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing -fvisibility=hidden -DEBUG_FLAGS = -g -ggdb3 -CPP = gcc-4.1 -NAME = amxxpc32 +PROJECT = amxxpc32 +OBJECTS = sc1.c sc2.c sc3.c sc4.c sc5.c sc6.c sc7.c scvars.c scmemfil.c scstate.c sclist.c sci18n.c \ + scexpand.c pawncc.c libpawnc.c prefix.c memfile.c -OBJECTS = sc1.c sc2.c sc3.c sc4.c sc5.c sc6.c sc7.c scvars.c scmemfil.c \ - scstate.c sclist.c sci18n.c scexpand.c pawncc.c libpawnc.c prefix.c \ - memfile.c +############################################## +### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### +############################################## + +C_OPT_FLAGS = -DNDEBUG -O2 -funroll-loops -fomit-frame-pointer -pipe +C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3 +C_GCC4_FLAGS = -fvisibility=hidden +CPP_GCC4_FLAGS = -fvisibility-inlines-hidden +CPP = gcc +CPP_OSX = clang LINK = -lpthread -INCLUDE = -I. +INCLUDE = -I. -BINARY = $(NAME).so -BIN_DIR = Release -CFLAGS += -DPAWN_CELL_SIZE=32 +################################################ +### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### +################################################ -CFLAGS += -DLINUX -DNDEBUG -DHAVE_STDINT_H -DENABLE_BINRELOC -DNO_MAIN -DPAWNC_DLL -static-libgcc +OS := $(shell uname -s) -CFLAGS += $(OPT_FLAGS) -OBJ_LINUX := $(OBJECTS:%.c=$(BIN_DIR)/%.o) +ifeq "$(OS)" "Darwin" + CPP = $(CPP_OSX) + LIB_EXT = dylib + CFLAGS += -DOSX + LINK += -dynamiclib -mmacosx-version-min=10.5 +else + LIB_EXT = so + CFLAGS += -DLINUX + LINK += -shared +endif + +LINK += -m32 -lm -ldl + +CFLAGS += -DENABLE_BINRELOC -DNO_MAIN -DPAWNC_DLL -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall \ + -Werror +CPPFLAGS += -fexceptions -fno-rtti + +BINARY = $(PROJECT).$(LIB_EXT) + +ifeq "$(DEBUG)" "true" + BIN_DIR = Debug + CFLAGS += $(C_DEBUG_FLAGS) +else + BIN_DIR = Release + CFLAGS += $(C_OPT_FLAGS) +endif + +IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0") + +ifeq "$(IS_CLANG)" "1" + CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/") + CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/") +else + CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1) + CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3) +endif + +# Clang || GCC >= 4 +ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1" + CFLAGS += $(C_GCC4_FLAGS) + CPPFLAGS += $(CPP_GCC4_FLAGS) +endif + +# Clang >= 3 || GCC >= 4.7 +ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1" + CFLAGS += -Wno-delete-non-virtual-dtor +endif + +# OS is Linux and not using clang +ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1" + LINK += -static-libgcc +endif + +OBJ_BIN := $(OBJECTS:%.c=$(BIN_DIR)/%.o) + +# This will break if we include other Makefiles, but is fine for now. It allows +# us to make a copy of this file that uses altered paths (ie. Makefile.mine) +# or other changes without mucking up the original. +MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) $(BIN_DIR)/%.o: %.c - $(CPP) $(INCLUDE) $(CFLAGS) -m32 -o $@ -c $< + $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $< all: - mkdir -p Release - $(MAKE) pawn_make + mkdir -p $(BIN_DIR) + $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT) -pawn_make: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) -m32 $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) - -debug: - $(MAKE) all DEBUG=true +$(PROJECT): $(OBJ_BIN) + $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY) default: all clean: - rm -rf Release/*.o - rm -rf Release/$(BINARY) + rm -rf $(BIN_DIR)/*.o + rm -f $(BIN_DIR)/$(BINARY) diff --git a/compiler/libpc300/amx.h b/compiler/libpc300/amx.h index 9b770bd2..b7600958 100755 --- a/compiler/libpc300/amx.h +++ b/compiler/libpc300/amx.h @@ -33,7 +33,7 @@ #if defined FREEBSD && !defined __FreeBSD__ #define __FreeBSD__ #endif -#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ +#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__ #include #endif @@ -43,7 +43,7 @@ #if defined HAVE_STDINT_H #include #else - #if defined __LCC__ || defined __DMC__ || defined LINUX + #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__ #if defined HAVE_INTTYPES_H #include #else @@ -197,7 +197,7 @@ typedef int (AMXAPI *AMX_DEBUG)(struct tagAMX *amx); #endif #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack(1) /* structures must be packed (byte-aligned) */ #elif defined MACOS && defined __MWERKS__ #pragma options align=mac68k @@ -425,7 +425,7 @@ int AMXAPI amx_UTF8Put(char *string, char **endptr, int maxchars, cell value); amx_Register((amx), amx_NativeInfo((name),(func)), 1); #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack() /* reset default packing */ #elif defined MACOS && defined __MWERKS__ #pragma options align=reset diff --git a/compiler/libpc300/amxdbg.h b/compiler/libpc300/amxdbg.h index c8f047aa..7ffca1b5 100755 --- a/compiler/libpc300/amxdbg.h +++ b/compiler/libpc300/amxdbg.h @@ -49,7 +49,7 @@ extern "C" { #endif #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack(1) /* structures must be packed (byte-aligned) */ #elif defined MACOS && defined __MWERKS__ #pragma options align=mac68k @@ -156,7 +156,7 @@ int AMXAPI dbg_GetArrayDim(AMX_DBG *amxdbg, const AMX_DBG_SYMBOL *sym, const AMX #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack() /* reset default packing */ #elif defined MACOS && defined __MWERKS__ #pragma options align=reset diff --git a/compiler/libpc300/libpawnc.c b/compiler/libpc300/libpawnc.c index 27f10f0f..fe499e2e 100755 --- a/compiler/libpc300/libpawnc.c +++ b/compiler/libpc300/libpawnc.c @@ -30,7 +30,7 @@ #if defined PAWNC_DLL -#ifndef __linux__ +#if !defined(__linux__) && !defined(__APPLE__) #include "dllmain.c" #endif @@ -39,9 +39,6 @@ # define UNUSED_PARAM(p) ((void)(p)) # endif - static char *argv[MAX_ARGS]; - static int argc; - #if PAWN_CELL_SIZE==32 #define EXCOMPILER Compile32 #else diff --git a/compiler/libpc300/memfile.c b/compiler/libpc300/memfile.c index f667a541..a0955e9a 100644 --- a/compiler/libpc300/memfile.c +++ b/compiler/libpc300/memfile.c @@ -10,6 +10,7 @@ memfile_t *memfile_creat(const char *name, size_t init) mf.size = init; mf.base = (char *)malloc(init); mf.usedoffs = 0; + mf.name = NULL; if (!mf.base) { return NULL; diff --git a/compiler/libpc300/memfile.h b/compiler/libpc300/memfile.h index 8593e4b6..7f39a8a5 100644 --- a/compiler/libpc300/memfile.h +++ b/compiler/libpc300/memfile.h @@ -9,7 +9,7 @@ #endif #endif -#include +#include typedef struct memfile_s { diff --git a/compiler/libpc300/osdefs.h b/compiler/libpc300/osdefs.h index ef0e068d..80521c48 100755 --- a/compiler/libpc300/osdefs.h +++ b/compiler/libpc300/osdefs.h @@ -41,6 +41,10 @@ #include #endif +#if defined __APPLE__ + #include +#endif + /* Linux NOW has these */ #if !defined BIG_ENDIAN #define BIG_ENDIAN 4321 diff --git a/compiler/libpc300/sc.h b/compiler/libpc300/sc.h index 3cd126fe..02bb9053 100755 --- a/compiler/libpc300/sc.h +++ b/compiler/libpc300/sc.h @@ -63,7 +63,7 @@ #define PREPROC_TERM '\x7f'/* termination character for preprocessor expressions (the "DEL" code) */ #define sDEF_PREFIX "default.inc" /* default prefix filename */ -#if defined WIN32 +#if defined WIN32 || defined __clang__ #define INVISIBLE #else #define INVISIBLE __attribute__((visibility("protected"))) diff --git a/compiler/libpc300/sc1.c b/compiler/libpc300/sc1.c index 09a4ec06..54702e23 100755 --- a/compiler/libpc300/sc1.c +++ b/compiler/libpc300/sc1.c @@ -35,9 +35,10 @@ #include #endif -#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ +#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__ #include #include /* from BinReloc, see www.autopackage.org */ + #include #endif #if defined FORTIFY @@ -421,7 +422,7 @@ int pc_compile(int argc, char *argv[]) void *inpfmark; int lcl_packstr,lcl_needsemicolon,lcl_tabsize; #if !defined SC_LIGHT - int hdrsize; + int hdrsize=0; #endif /* set global variables to their initial value */ @@ -1248,9 +1249,9 @@ static void setconfig(char *root) /* add the default "include" directory */ #if defined __WIN32__ || defined _WIN32 GetModuleFileName(NULL,path,_MAX_PATH); - #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ + #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__ /* see www.autopackage.org for the BinReloc module */ - ptr = SELFPATH; + ptr = (char *)SELFPATH; if (!ptr) ptr = root; strncpy(path,ptr,sizeof path); @@ -1922,7 +1923,7 @@ static int declloc(int fstatic) int dim[sDIMEN_MAX]; int numdim; int fconst; - int staging_start; + int staging_start=0; fconst=matchtoken(tCONST); do { @@ -1948,7 +1949,7 @@ static int declloc(int fstatic) * level might indicate a bug. * NOTE - don't bother with the error if there's no valid function! */ - if ((sym=findloc(name))!=NULL && sym->compound!=nestlevel || findglb(name)!=NULL) + if (((sym=findloc(name))!=NULL && sym->compound!=nestlevel) || findglb(name)!=NULL) if (curfunc!=NULL && (curfunc->usage & uNATIVE)) error(219,name); /* variable shadows another symbol */ while (matchtoken('[')){ @@ -2863,7 +2864,7 @@ static int operatoradjust(int opertok,symbol *sym,char *opername,int resulttag) error(62); /* number or placement of the operands does not fit the operator */ } /* switch */ - if (tags[0]==0 && (opertok!='=' && tags[1]==0 || opertok=='=' && resulttag==0)) + if (tags[0]==0 && ((opertok!='=' && tags[1]==0) || (opertok=='=' && resulttag==0))) error(64); /* cannot change predefined operators */ /* change the operator name */ @@ -3045,7 +3046,7 @@ static void funcstub(int native) tok=lex(&val,&str); if (native) { - if (tok==tPUBLIC || tok==tSTOCK || tok==tSTATIC || tok==tSYMBOL && *str==PUBLIC_CHAR) + if (tok==tPUBLIC || tok==tSTOCK || tok==tSTATIC || (tok==tSYMBOL && *str==PUBLIC_CHAR)) error(42); /* invalid combination of class specifiers */ } else { if (tok==tPUBLIC || tok==tSTOCK || tok==tSTATIC) @@ -3166,7 +3167,7 @@ static int newfunc(char *firstname,int firsttag,int fpublic,int fstatic,int stoc tag= (firsttag>=0) ? firsttag : pc_addtag(NULL); tok=lex(&val,&str); assert(!fpublic); - if (tok==tNATIVE || tok==tPUBLIC && stock) + if (tok==tNATIVE || (tok==tPUBLIC && stock)) error(42); /* invalid combination of class specifiers */ if (tok==tOPERATOR) { opertok=operatorname(symbolname); @@ -3512,7 +3513,7 @@ static int declargs(symbol *sym) error(10); /* illegal function or declaration */ } /* switch */ } while (tok=='&' || tok==tLABEL || tok==tCONST - || tok!=tELLIPS && matchtoken(',')); /* more? */ + || (tok!=tELLIPS && matchtoken(','))); /* more? */ /* if the next token is not ",", it should be ")" */ needtoken(')'); } /* if */ @@ -3873,7 +3874,7 @@ static void make_report(symbol *root,FILE *log,char *sourcefile) continue; if ((sym->usage & uREAD)==0) continue; - fprintf(log,"\t\t\n",funcdisplayname(symname,sym->name),sym->addr); + fprintf(log,"\t\t\n",funcdisplayname(symname,sym->name),(long)sym->addr); if (sym->tag!=0) { tagsym=find_tag_byval(sym->tag); assert(tagsym!=NULL); @@ -3883,7 +3884,7 @@ static void make_report(symbol *root,FILE *log,char *sourcefile) if ((enumroot=sym->dim.enumlist)!=NULL) { enumroot=enumroot->next; /* skip root */ while (enumroot!=NULL) { - fprintf(log,"\t\t\t\n",funcdisplayname(symname,enumroot->name),enumroot->value); + fprintf(log,"\t\t\t\n",funcdisplayname(symname,enumroot->name),(long)enumroot->value); /* find the constant with this name and get the tag */ ref=findglb(enumroot->name); if (ref!=NULL) { @@ -3919,7 +3920,7 @@ static void make_report(symbol *root,FILE *log,char *sourcefile) continue; if ((sym->usage & uREAD)==0 || (sym->usage & (uENUMFIELD | uENUMROOT))!=0) continue; - fprintf(log,"\t\t\n",funcdisplayname(symname,sym->name),sym->addr); + fprintf(log,"\t\t\n",funcdisplayname(symname,sym->name),(long)sym->addr); if (sym->tag!=0) { tagsym=find_tag_byval(sym->tag); assert(tagsym!=NULL); @@ -4039,7 +4040,7 @@ static void make_report(symbol *root,FILE *log,char *sourcefile) for (arg=0; sym->dim.arglist[arg].ident!=0; arg++) { int dim,paraminfo; char *outer_start,*inner_start; - int outer_length,inner_length; + int outer_length=0,inner_length=0; if (sym->dim.arglist[arg].ident==iVARARGS) fprintf(log,"\t\t\t\n"); else @@ -5248,7 +5249,7 @@ static void doreturn(void) if ((rettype & uRETVALUE)!=0) { int retarray=(ident==iARRAY || ident==iREFARRAY); /* there was an earlier "return" statement in this function */ - if (sub==NULL && retarray || sub!=NULL && !retarray) + if ((sub==NULL && retarray) || (sub!=NULL && !retarray)) error(79); /* mixing "return array;" and "return value;" */ } /* if */ rettype|=uRETVALUE; /* function returns a value */ @@ -5257,7 +5258,7 @@ static void doreturn(void) if (!matchtag(curfunc->tag,tag,TRUE)) error(213); /* tagname mismatch */ if (ident==iARRAY || ident==iREFARRAY) { - int dim[sDIMEN_MAX],numdim; + int dim[sDIMEN_MAX],numdim=0; cell arraysize; assert(sym!=NULL); if (sub!=NULL) { diff --git a/compiler/libpc300/sc2.c b/compiler/libpc300/sc2.c index a7939c45..79451d19 100755 --- a/compiler/libpc300/sc2.c +++ b/compiler/libpc300/sc2.c @@ -27,7 +27,7 @@ #include #include #include "sc.h" -#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ +#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__ #include #endif @@ -198,7 +198,7 @@ SC_FUNC int plungefile(char *name,int try_currentpath,int try_includepaths) char path[_MAX_PATH]; strncpy(path,ptr,sizeof path); path[sizeof path - 1]='\0'; /* force '\0' termination */ - strncat(path,name,sizeof(path)-strlen(path)); + strncat(path,name,sizeof(path) - strlen(path) - 1); path[sizeof path - 1]='\0'; result=plungequalifiedfile(path); } /* while */ @@ -408,7 +408,7 @@ static void stripcom(unsigned char *line) #if !defined SC_LIGHT /* collect the comment characters in a string */ if (icomment==2) { - if (skipstar && (*line!='\0' && *line<=' ' || *line=='*')) { + if (skipstar && ((*line!='\0' && *line<=' ') || *line=='*')) { /* ignore leading whitespace and '*' characters */ } else if (commentidx=4) { - res*=10000.0; - value-=5; - } /* while */ - while (value>=2) { - res*=100.0; - value-=2; - } /* while */ - while (value>=1) { - res*=10.0; - value-=1; - } /* while */ - return res; + return pow(10, d); } #endif @@ -1210,7 +1197,7 @@ static int command(void) sym=findloc(str); if (sym==NULL) sym=findglb(str); - if (sym==NULL || sym->ident!=iFUNCTN && sym->ident!=iREFFUNC && (sym->usage & uDEFINE)==0) { + if (sym==NULL || (sym->ident!=iFUNCTN && sym->ident!=iREFFUNC && (sym->usage & uDEFINE)==0)) { error(17,str); /* undefined symbol */ } else { outval(sym->addr,FALSE); @@ -1644,7 +1631,7 @@ static void substallpatterns(unsigned char *line,int buffersize) if (strncmp((char*)start,"defined",7)==0 && !isalpha((char)*(start+7))) { start+=7; /* skip "defined" */ /* skip white space & parantheses */ - while (*start<=' ' && *start!='\0' || *start=='(') + while ((*start<=' ' && *start!='\0') || *start=='(') start++; /* skip the symbol behind it */ while (isalpha(*start) || isdigit(*start) || *start=='_') @@ -1946,7 +1933,7 @@ SC_FUNC int lex(cell *lexvalue,char **lexsym) error(220); } /* if */ } /* if */ - } else if (*lptr=='\"' || *lptr==sc_ctrlchar && *(lptr+1)=='\"') + } else if (*lptr=='\"' || (*lptr==sc_ctrlchar && *(lptr+1)=='\"')) { /* unpacked string literal */ _lextok=tSTRING; stringflags= (*lptr==sc_ctrlchar) ? RAWMODE : 0; @@ -1959,9 +1946,9 @@ SC_FUNC int lex(cell *lexvalue,char **lexsym) lptr+=1; /* skip final quote */ else error(37); /* invalid (non-terminated) string */ - } else if (*lptr=='!' && *(lptr+1)=='\"' - || *lptr=='!' && *(lptr+1)==sc_ctrlchar && *(lptr+2)=='\"' - || *lptr==sc_ctrlchar && *(lptr+1)=='!' && *(lptr+2)=='\"') + } else if ((*lptr=='!' && *(lptr+1)=='\"') + || (*lptr=='!' && *(lptr+1)==sc_ctrlchar && *(lptr+2)=='\"') + || (*lptr==sc_ctrlchar && *(lptr+1)=='!' && *(lptr+2)=='\"')) { /* packed string literal */ _lextok=tSTRING; stringflags= (*lptr==sc_ctrlchar || *(lptr+1)==sc_ctrlchar) ? RAWMODE : 0; @@ -2053,7 +2040,7 @@ SC_FUNC int matchtoken(int token) int tok; tok=lex(&val,&str); - if (tok==token || token==tTERM && (tok==';' || tok==tENDEXPR)) { + if (tok==token || (token==tTERM && (tok==';' || tok==tENDEXPR))) { return 1; } else if (!sc_needsemicolon && token==tTERM && (_lexnewline || !freading)) { /* Push "tok" back, because it is the token following the implicit statement @@ -2418,7 +2405,7 @@ SC_FUNC void delete_symbols(symbol *root,int level,int delete_labels,int delete_ { symbol *sym,*parent_sym; constvalue *stateptr; - int mustdelete; + int mustdelete=0; /* erase only the symbols with a deeper nesting level than the * specified nesting level */ diff --git a/compiler/libpc300/sc3.c b/compiler/libpc300/sc3.c index 04ef5626..6e5d075b 100755 --- a/compiler/libpc300/sc3.c +++ b/compiler/libpc300/sc3.c @@ -929,7 +929,7 @@ static int hier14(value *lval1) } /* if */ if (lval3.sym->dim.array.level!=level) return error(48); /* array dimensions must match */ - else if (ltlengthval || val==0) + else if (ltlengthval) || val==0) return error(47); /* array sizes must match */ else if (lval3.ident!=iARRAYCELL && !matchtag(lval3.sym->x.idxtag,idxtag,TRUE)) error(229,(lval2.sym!=NULL) ? lval2.sym->name : lval3.sym->name); /* index tag mismatch */ @@ -1124,7 +1124,7 @@ static int hier2(value *lval) int tag,paranthese; cell val; char *st; - symbol *sym; + symbol *sym=NULL; int saveresult; tok=lex(&val,&st); @@ -1247,7 +1247,7 @@ static int hier2(value *lval) lval->constval=1; /* preset */ if (sym->ident==iARRAY || sym->ident==iREFARRAY) { int level; - symbol *idxsym; + symbol *idxsym=NULL; for (level=0; matchtoken('['); level++) { idxsym=NULL; if (level==sym->dim.array.level && matchtoken(tSYMBOL)) { @@ -1293,7 +1293,7 @@ static int hier2(value *lval) } /* if */ if (sym->ident==iARRAY || sym->ident==iREFARRAY) { int level; - symbol *idxsym; + symbol *idxsym=NULL; for (level=0; matchtoken('['); level++) { idxsym=NULL; if (level==sym->dim.array.level && matchtoken(tSYMBOL)) { @@ -1462,7 +1462,7 @@ restart: } /* if */ if (close==']') { /* normal array index */ - if (lval2.constval<0 || sym->dim.array.length!=0 && sym->dim.array.length<=lval2.constval) + if (lval2.constval<0 || (sym->dim.array.length!=0 && sym->dim.array.length<=lval2.constval)) error(32,sym->name); /* array index out of bounds */ if (lval2.constval!=0) { /* don't add offsets for zero subscripts */ @@ -1479,8 +1479,8 @@ restart: } /* if */ } else { /* character index */ - if (lval2.constval<0 || sym->dim.array.length!=0 - && sym->dim.array.length*((8*sizeof(cell))/sCHARBITS)<=(ucell)lval2.constval) + if (lval2.constval<0 || (sym->dim.array.length!=0 + && sym->dim.array.length*((8*sizeof(cell))/sCHARBITS)<=(ucell)lval2.constval)) error(32,sym->name); /* array index out of bounds */ if (lval2.constval!=0) { /* don't add offsets for zero subscripts */ @@ -2035,8 +2035,8 @@ static int nesting=0; * function argument; a literal string may be smaller than * the function argument. */ - if (lval.constval>0 && arg[argidx].dim[0]!=lval.constval - || lval.constval<0 && arg[argidx].dim[0] < -lval.constval) + if ((lval.constval>0 && arg[argidx].dim[0]!=lval.constval) + || (lval.constval<0 && arg[argidx].dim[0] < -lval.constval)) error(47); /* array sizes must match */ } /* if */ } /* if */ diff --git a/compiler/libpc300/sc4.c b/compiler/libpc300/sc4.c index b76dd140..d5ef6902 100755 --- a/compiler/libpc300/sc4.c +++ b/compiler/libpc300/sc4.c @@ -235,7 +235,7 @@ SC_FUNC void begdseg(void) SC_FUNC void setline(int chkbounds) { - if ((sc_debug & sSYMBOLIC)!=0 || chkbounds && (sc_debug & sCHKBOUNDS)!=0) { + if ((sc_debug & sSYMBOLIC)!=0 || (chkbounds && (sc_debug & sCHKBOUNDS)!=0)) { /* generate a "break" (start statement) opcode rather than a "line" opcode * because earlier versions of Small/Pawn have an incompatible version of the * line opcode @@ -719,7 +719,7 @@ SC_FUNC void ffcall(symbol *sym,const char *label,int numargs) stgwrite(sym->name); } /* if */ if (sc_asmfile - && (label!=NULL || !isalpha(sym->name[0]) && sym->name[0]!='_' && sym->name[0]!=sc_ctrlchar)) + && (label!=NULL || (!isalpha(sym->name[0]) && sym->name[0]!='_' && sym->name[0]!=sc_ctrlchar))) { stgwrite("\t; "); stgwrite(symname); diff --git a/compiler/libpc300/sc5.c b/compiler/libpc300/sc5.c index 7ddc8f8b..7cad31c5 100755 --- a/compiler/libpc300/sc5.c +++ b/compiler/libpc300/sc5.c @@ -25,7 +25,7 @@ #if defined __WIN32__ || defined _WIN32 || defined __MSDOS__ #include #endif -#if defined LINUX || defined __GNUC__ +#if defined LINUX || defined __APPLE__ || defined __GNUC__ #include #endif #include @@ -132,7 +132,7 @@ static short lastfile; } /* if */ va_end(argptr); - if (number>=100 && number<200 || errnum>25){ + if ((number>=100 && number<200) || errnum>25){ if (strlen(errfname)==0) { va_start(argptr,number); pc_error(0,"\nCompilation aborted.",NULL,0,0,argptr); diff --git a/compiler/libpc300/sc6.c b/compiler/libpc300/sc6.c index 6601888b..0d94d989 100755 --- a/compiler/libpc300/sc6.c +++ b/compiler/libpc300/sc6.c @@ -30,7 +30,7 @@ #endif #include "sc.h" #include "amxdbg.h" -#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ +#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__ #include #endif @@ -895,7 +895,7 @@ SC_FUNC int assemble(FILE *fout,FILE *fin) instr=skipwhitespace(line); /* ignore empty lines and labels (labels have a special syntax, so these * must be parsed separately) */ - if (*instr=='\0' || tolower(*instr)=='l' && *(instr+1)=='.') + if (*instr=='\0' || (tolower(*instr)=='l' && *(instr+1)=='.')) continue; /* get to the end of the instruction (make use of the '\n' that fgets() * added at the end of the line; this way we will *always* drop on a diff --git a/compiler/libpc300/sc7.c b/compiler/libpc300/sc7.c index a5be57e9..d4f0aa19 100755 --- a/compiler/libpc300/sc7.c +++ b/compiler/libpc300/sc7.c @@ -457,18 +457,18 @@ static int matchsequence(char *start,char *end,char *pattern, case ' ': if (*start!='\t' && *start!=' ') return FALSE; - while (start=0xd800 && result<=0xdfff || result==0xfffe || result==0xffff) + if ((result>=0xd800 && result<=0xdfff) || result==0xfffe || result==0xffff) return -1; } /* if */ break; diff --git a/compiler/libpc300/sclinux.h b/compiler/libpc300/sclinux.h index f22497a8..fb0b116b 100755 --- a/compiler/libpc300/sclinux.h +++ b/compiler/libpc300/sclinux.h @@ -32,6 +32,10 @@ */ #if !defined __BYTE_ORDER # include +# if defined __APPLE__ +# include +# define __BYTE_ORDER BYTE_ORDER +# endif #endif #if defined __OpenBSD__ || defined __FreeBSD__ diff --git a/compiler/libpc300/sclist.c b/compiler/libpc300/sclist.c index 1d19cff6..cf1f7d09 100755 --- a/compiler/libpc300/sclist.c +++ b/compiler/libpc300/sclist.c @@ -238,7 +238,7 @@ SC_FUNC stringlist *insert_path(char *path) { char *extra_path = malloc(strlen(path) + 16); strcpy(extra_path, path); -#if defined __linux__ +#if defined __linux__ || defined __APPLE__ strcat(extra_path, "/amxmod_compat/"); #elif defined WIN32 || defined _WIN32 strcat(extra_path, "\\amxmod_compat\\"); @@ -444,10 +444,10 @@ SC_FUNC stringlist *insert_dbgsymbol(symbol *sym) /* address tag:name codestart codeend ident vclass [tag:dim ...] */ #if PAWN_CELL_SIZE==32 if (sym->ident==iFUNCTN) - sprintf(string,"S:%08lx %x:%s %08lx %08lx %x %x",sym->addr,sym->tag, + sprintf(string,"S:%08x %x:%s %08x %08x %x %x",sym->addr,sym->tag, symname,sym->addr,sym->codeaddr,sym->ident,sym->vclass); else - sprintf(string,"S:%08lx %x:%s %08lx %08lx %x %x",sym->addr,sym->tag, + sprintf(string,"S:%08x %x:%s %08x %08x %x %x",sym->addr,sym->tag, symname,sym->codeaddr,code_idx,sym->ident,sym->vclass); #elif PAWN_CELL_SIZE==64 if (sym->ident==iFUNCTN) diff --git a/compiler/libpc300/scstate.c b/compiler/libpc300/scstate.c index dcd2b15f..05806a89 100755 --- a/compiler/libpc300/scstate.c +++ b/compiler/libpc300/scstate.c @@ -51,7 +51,7 @@ #include #include #include "sc.h" -#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ +#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__ #include #endif diff --git a/configs/hamdata.ini b/configs/hamdata.ini index 848f7f7d..aff01dc7 100644 --- a/configs/hamdata.ini +++ b/configs/hamdata.ini @@ -261,6 +261,116 @@ cstrike_item_candrop 63 cstrike_item_getmaxspeed 78 @end + +@section cstrike mac + pev 4 + base 0x0 + + spawn 0 + precache 1 + keyvalue 3 + objectcaps 6 + activate 7 + setobjectcollisionbox 8 + classify 9 + deathnotice 10 + traceattack 11 + takedamage 12 + takehealth 13 + killed 14 + bloodcolor 15 + tracebleed 16 + istriggered 17 + mymonsterpointer 18 + mysquadmonsterpointer 19 + gettogglestate 20 + addpoints 21 + addpointstoteam 22 + addplayeritem 23 + removeplayeritem 24 + giveammo 25 + getdelay 26 + ismoving 27 + overridereset 28 + damagedecal 29 + settogglestate 30 + startsneaking 31 + stopsneaking 32 + oncontrols 33 + issneaking 34 + isalive 35 + isbspmodel 36 + reflectgauss 37 + hastarget 38 + isinworld 39 + isplayer 40 + isnetclient 41 + teamid 42 + getnexttarget 43 + think 44 + touch 45 + use 46 + blocked 47 + respawn 48 + updateowner 49 + fbecomeprone 50 + center 51 + eyeposition 52 + earposition 53 + bodytarget 54 + illumination 55 + fvisible 56 + fvecvisible 57 + + player_jump 76 + player_duck 77 + player_prethink 78 + player_postthink 79 + player_getgunposition 80 + player_shouldfadeondeath 66 + player_impulsecommands 83 + player_updateclientdata 82 + + item_addtoplayer 59 + item_addduplicate 60 + item_getiteminfo 61 + item_candeploy 62 + item_deploy 64 + item_canholster 66 + item_holster 67 + item_updateiteminfo 68 + item_preframe 69 + item_postframe 70 + item_drop 71 + item_kill 72 + item_attachtoplayer 73 + item_primaryammoindex 74 + item_secondaryammoindex 75 + item_updateclientdata 76 + item_getweaponptr 77 + item_itemslot 79 + + weapon_extractammo 80 + weapon_extractclipammo 81 + weapon_addweapon 82 + weapon_playemptysound 83 + weapon_resetemptysound 84 + weapon_sendweaponanim 85 + weapon_isusable 86 + weapon_primaryattack 87 + weapon_secondaryattack 88 + weapon_reload 89 + weapon_weaponidle 90 + weapon_retireweapon 91 + weapon_shouldweaponidle 92 + weapon_usedecrement 93 + + cstrike_restart 2 + cstrike_roundrespawn 84 + cstrike_item_candrop 63 + cstrike_item_getmaxspeed 78 +@end + @section dod linux pev 0 base 0x154 @@ -1747,8 +1857,112 @@ weapon_retireweapon 87 weapon_shouldweaponidle 88 weapon_usedecrement 89 - @end + +@section valve mac + pev 4 + base 0x0 + + spawn 0 + precache 1 + keyvalue 2 + objectcaps 5 + activate 6 + setobjectcollisionbox 7 + classify 8 + deathnotice 9 + traceattack 10 + takedamage 11 + takehealth 12 + killed 13 + bloodcolor 14 + tracebleed 15 + istriggered 16 + mymonsterpointer 17 + mysquadmonsterpointer 18 + gettogglestate 19 + addpoints 20 + addpointstoteam 21 + addplayeritem 22 + removeplayeritem 23 + giveammo 24 + getdelay 25 + ismoving 26 + overridereset 27 + damagedecal 28 + settogglestate 29 + startsneaking 30 + stopsneaking 31 + oncontrols 32 + issneaking 33 + isalive 34 + isbspmodel 35 + reflectgauss 36 + hastarget 37 + isinworld 38 + isplayer 39 + isnetclient 40 + teamid 41 + getnexttarget 42 + think 43 + touch 44 + use 45 + blocked 46 + respawn 47 + updateowner 48 + fbecomeprone 49 + center 50 + eyeposition 51 + earposition 52 + bodytarget 53 + illumination 54 + fvisible 55 + fvecvisible 56 + + player_jump 125 + player_duck 126 + player_prethink 127 + player_postthink 128 + player_getgunposition 119 + player_shouldfadeondeath 60 + player_impulsecommands 130 + player_updateclientdata 129 + + item_addtoplayer 58 + item_addduplicate 59 + item_getiteminfo 60 + item_candeploy 61 + item_deploy 62 + item_canholster 63 + item_holster 64 + item_updateiteminfo 65 + item_preframe 66 + item_postframe 67 + item_drop 68 + item_kill 69 + item_attachtoplayer 70 + item_primaryammoindex 71 + item_secondaryammoindex 72 + item_updateclientdata 73 + item_getweaponptr 74 + item_itemslot 75 + + weapon_extractammo 76 + weapon_extractclipammo 77 + weapon_addweapon 78 + weapon_playemptysound 79 + weapon_resetemptysound 80 + weapon_sendweaponanim 81 + weapon_isusable 82 + weapon_primaryattack 83 + weapon_secondaryattack 84 + weapon_reload 85 + weapon_weaponidle 86 + weapon_retireweapon 87 + weapon_shouldweaponidle 88 + weapon_usedecrement 89 +@end + ; Sven-Coop has no linux binaries. This makes disassembly much harder. ; These offsets were contributed by ts2do @section SvenCoop windows diff --git a/dlls/cstrike/cstrike/CstrikeHacks.cpp b/dlls/cstrike/cstrike/CstrikeHacks.cpp index 99883dce..a6593dc0 100644 --- a/dlls/cstrike/cstrike/CstrikeHacks.cpp +++ b/dlls/cstrike/cstrike/CstrikeHacks.cpp @@ -1,10 +1,14 @@ #include -#include +#include #include "cstrike.h" -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) #include #define PAGE_EXECUTE_READWRITE PROT_READ|PROT_WRITE|PROT_EXEC + +#if defined(__linux) +#include +#endif #endif /* Utils */ @@ -65,7 +69,7 @@ void CtrlDetour_ClientCommand(bool set) if (!g_UseBotArgs) { -#if defined __linux__ +#if defined(__linux__) || defined(__APPLE__) /* Find the DLL */ char dll[256]; if (!UTIL_GetLibraryOfAddress(target, dll, sizeof(dll))) @@ -102,7 +106,7 @@ void CtrlDetour_ClientCommand(bool set) *(unsigned long *)paddr = (unsigned long)Detour_ClientCommand - (unsigned long)(paddr + 4); /* Copy original bytes onto the end of the function */ - memcpy(&FullDetour[DetourBytes], target, CS_DETOURCOPYBYTES_CLIENTCOMMAND); + memcpy(&FullDetour[DetourBytes], target, CS_DETOURCOPYBYTES_CLIENTCOMMAND); /* Patch and copy the final jmp */ paddr = &FullDetour[DetourJmpPos]; @@ -142,8 +146,12 @@ unsigned char *UTIL_CodeAlloc(size_t size) { #if defined WIN32 return (unsigned char *)VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE); +#elif defined __GNUC__ +#if defined __APPLE__ + unsigned char *addr = (unsigned char *)valloc(size); #else unsigned char *addr = (unsigned char *)memalign(sysconf(_SC_PAGESIZE), size); +#endif mprotect(addr, size, PROT_READ|PROT_WRITE|PROT_EXEC); return addr; #endif @@ -160,7 +168,7 @@ void UTIL_CodeFree(unsigned char *addr) void UTIL_MemProtect(void *addr, int length, int prot) { -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) #define ALIGN(ar) ((long)ar & ~(sysconf(_SC_PAGESIZE)-1)) void *addr2 = (void *)ALIGN(addr); mprotect(addr2, sysconf(_SC_PAGESIZE), prot); @@ -172,7 +180,7 @@ void UTIL_MemProtect(void *addr, int length, int prot) bool UTIL_GetLibraryOfAddress(void *memInBase, char *buffer, size_t maxlength) { -#if defined __linux__ +#if defined(__linux__) || defined(__APPLE__) Dl_info info; if (!dladdr(memInBase, &info)) { diff --git a/dlls/cstrike/cstrike/Makefile b/dlls/cstrike/cstrike/Makefile index 74de4bb5..1f35def9 100755 --- a/dlls/cstrike/cstrike/Makefile +++ b/dlls/cstrike/cstrike/Makefile @@ -1,78 +1,123 @@ -#(C)2004-2005 AMX Mod X Development Team +# (C)2004-2013 AMX Mod X Development Team # Makefile written by David "BAILOPAN" Anderson -HLSDK = ../../../../hlsdk +########################################### +### EDIT THESE PATHS FOR YOUR OWN SETUP ### +########################################### + +HLSDK = ../../../../hlsdk/multiplayer MM_ROOT = ../../../../metamod/metamod +##################################### ### EDIT BELOW FOR OTHER PROJECTS ### +##################################### -OPT_FLAGS = -O2 -funroll-loops -s -pipe -fomit-frame-pointer -fno-strict-aliasing -DEBUG_FLAGS = -g -ggdb3 -CPP = gcc-4.1 -NAME = cstrike - -BIN_SUFFIX_32 = amxx_i386.so -BIN_SUFFIX_64 = amxx_amd64.so +PROJECT = cstrike OBJECTS = sdk/amxxmodule.cpp CstrikePlayer.cpp cstrike.cpp CstrikeHacks.cpp -LINK = +############################################## +### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### +############################################## -INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \ - -I$(MM_ROOT) -I$(HLSDK)/common -Isdk +C_OPT_FLAGS = -DNDEBUG -O2 -funroll-loops -fomit-frame-pointer -pipe +C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3 +C_GCC4_FLAGS = -fvisibility=hidden +CPP_GCC4_FLAGS = -fvisibility-inlines-hidden +CPP = gcc +CPP_OSX = clang -GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) +LINK = -ifeq "$(GCC_VERSION)" "4" - OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden +INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \ + -I$(MM_ROOT) -Isdk + +################################################ +### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### +################################################ + +OS := $(shell uname -s) + +ifeq "$(OS)" "Darwin" + CPP = $(CPP_OSX) + LIB_EXT = dylib + LIB_SUFFIX = _amxx + CFLAGS += -DOSX + LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5 +else + LIB_EXT = so + LIB_SUFFIX = _amxx_i386 + CFLAGS += -DLINUX + LINK += -shared endif +LINK += -m32 -lm -ldl + +CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror +CPPFLAGS += -fno-exceptions -fno-rtti + +BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT) + ifeq "$(DEBUG)" "true" BIN_DIR = Debug - CFLAGS = $(DEBUG_FLAGS) + CFLAGS += $(C_DEBUG_FLAGS) else BIN_DIR = Release - CFLAGS = $(OPT_FLAGS) + CFLAGS += $(C_OPT_FLAGS) + LINK += -s endif -CFLAGS += -DNDEBUG -Wall -Wno-non-virtual-dtor -Werror -fno-exceptions -DHAVE_STDINT_H -fno-rtti -static-libgcc -m32 +IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0") -ifeq "$(AMD64)" "true" - BINARY = $(NAME)_$(BIN_SUFFIX_64) - CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -m64 +ifeq "$(IS_CLANG)" "1" + CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/") + CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/") else - BINARY = $(NAME)_$(BIN_SUFFIX_32) - CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 - OPT_FLAGS += -march=i586 + CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1) + CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3) endif -OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) +# Clang || GCC >= 4 +ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1" + CFLAGS += $(C_GCC4_FLAGS) + CPPFLAGS += $(CPP_GCC4_FLAGS) +endif + +# Clang >= 3 || GCC >= 4.7 +ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1" + CFLAGS += -Wno-delete-non-virtual-dtor +endif + +# OS is Linux and not using clang +ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1" + LINK += -static-libgcc +endif + +OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) + +# This will break if we include other Makefiles, but is fine for now. It allows +# us to make a copy of this file that uses altered paths (ie. Makefile.mine) +# or other changes without mucking up the original. +MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) $(BIN_DIR)/%.o: %.cpp - $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $< + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< all: mkdir -p $(BIN_DIR) mkdir -p $(BIN_DIR)/sdk - $(MAKE) cstrike + $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT) -amd64: - $(MAKE) all AMD64=true +$(PROJECT): $(OBJ_BIN) + $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY) -cstrike: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) - -debug: - $(MAKE) all DEBUG=true +debug: + $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true default: all clean: - rm -rf Release/sdk/*.o - rm -rf Release/*.o - rm -rf Release/$(NAME)_$(BIN_SUFFIX_32) - rm -rf Release/$(NAME)_$(BIN_SUFFIX_64) - rm -rf Debug/sdk/*.o - rm -rf Debug/*.o - rm -rf Debug/$(NAME)_$(BIN_SUFFIX_32) - rm -rf Debug/$(NAME)_$(BIN_SUFFIX_64) + rm -rf $(BIN_DIR)/*.o + rm -rf $(BIN_DIR)/sdk/*.o + rm -f $(BIN_DIR)/$(BINARY) + diff --git a/dlls/cstrike/cstrike/cstrike.cpp b/dlls/cstrike/cstrike/cstrike.cpp index 5745d662..17a0db31 100755 --- a/dlls/cstrike/cstrike/cstrike.cpp +++ b/dlls/cstrike/cstrike/cstrike.cpp @@ -49,7 +49,7 @@ bool UTIL_IsPlayer(AMX* amx, edict_t* pPlayer) { return player; } -void UTIL_TextMsg_Generic(edict_t* pPlayer, char* message) +void UTIL_TextMsg_Generic(edict_t* pPlayer, const char* message) { MESSAGE_BEGIN(MSG_ONE, GET_USER_MSG_ID(PLID, "TextMsg", NULL), NULL, pPlayer); WRITE_BYTE(HUD_PRINTCENTER); // 1 = console, 2 = console, 3 = chat, 4 = center @@ -746,7 +746,7 @@ static cell AMX_NATIVE_CALL cs_set_user_defusekit(AMX *amx, cell *params) // cs_ pPlayer->v.body = 1; - char* icon; + const char* icon; if (params[6] != -1) { int len; diff --git a/dlls/cstrike/cstrike/cstrike.h b/dlls/cstrike/cstrike/cstrike.h index 55751a09..ea82308e 100755 --- a/dlls/cstrike/cstrike/cstrike.h +++ b/dlls/cstrike/cstrike/cstrike.h @@ -44,7 +44,7 @@ #define GETCLIENTKEYVALUE (*g_engfuncs.pfnInfoKeyValue) #define CREATENAMEDENTITY (*g_engfuncs.pfnCreateNamedEntity) -#if defined __linux__ +#if defined(__linux__) || defined (__APPLE__) #define EXTRAOFFSET 5 // offsets 5 higher in Linux builds #define EXTRAOFFSET_WEAPONS 4 // weapon offsets are obviously only 4 steps higher on Linux! #define ACTUAL_EXTRA_OFFSET 20 // actual, byte-addressable offset @@ -52,7 +52,7 @@ #define EXTRAOFFSET 0 // no change in Windows builds #define EXTRAOFFSET_WEAPONS 0 #define ACTUAL_EXTRA_OFFSET 0 -#endif // defined __linux__ +#endif // defined(__linux__) || defined(__APPLE__) /* Offset history: 041029: @@ -158,6 +158,8 @@ #if defined __linux__ #define CS_DETOURCOPYBYTES_CLIENTCOMMAND 6 +#elif defined __APPLE__ +#define CS_DETOURCOPYBYTES_CLIENTCOMMAND 5 #else #define CS_DETOURCOPYBYTES_CLIENTCOMMAND 6 #define CS_CLICMD_OFFS_USEBOTARGS 2 diff --git a/dlls/cstrike/cstrike/sdk/amxxmodule.cpp b/dlls/cstrike/cstrike/sdk/amxxmodule.cpp index a634e9ac..faf8f75c 100755 --- a/dlls/cstrike/cstrike/sdk/amxxmodule.cpp +++ b/dlls/cstrike/cstrike/sdk/amxxmodule.cpp @@ -2240,7 +2240,7 @@ static META_FUNCTIONS g_MetaFunctions_Table = GetEngineFunctions_Post }; -C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) +C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) { if ((int) CVAR_GET_FLOAT("developer") != 0) UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n", @@ -2334,7 +2334,7 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason) -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) // linux prototype C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) { @@ -3050,7 +3050,7 @@ char* UTIL_VarArgs( char *format, ... ) // UTIL_LogPrintf - Prints a logged message to console. // Preceded by LOG: ( timestamp ) < message > //========================================================= -void UTIL_LogPrintf( char *fmt, ... ) +void UTIL_LogPrintf( const char *fmt, ... ) { va_list argptr; static char string[1024]; diff --git a/dlls/cstrike/cstrike/sdk/amxxmodule.h b/dlls/cstrike/cstrike/sdk/amxxmodule.h index c53b72da..9e42b72f 100755 --- a/dlls/cstrike/cstrike/sdk/amxxmodule.h +++ b/dlls/cstrike/cstrike/sdk/amxxmodule.h @@ -20,11 +20,16 @@ // DLL Export #undef DLLEXPORT -#ifndef __linux__ +#if defined(_WIN32) #define DLLEXPORT __declspec(dllexport) #else #define DLLEXPORT __attribute__((visibility("default"))) +#endif + +#if defined(__linux__) && !defined(LINUX) #define LINUX +#elif defined(__APPLE__) && !defined(OSX) +#define OSX #endif #undef C_DLLEXPORT @@ -66,7 +71,7 @@ struct amxx_module_info_s #if defined HAVE_STDINT_H #include #else - #if defined __LCC__ || defined __DMC__ || defined LINUX + #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__ #if defined HAVE_INTTYPES_H #include #else @@ -308,7 +313,7 @@ typedef int (AMXAPI *AMX_DEBUG)(struct tagAMX *amx); #endif #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack(1) /* structures must be packed (byte-aligned) */ #elif defined MACOS && defined __MWERKS__ #pragma options align=mac68k @@ -395,7 +400,7 @@ enum { }; #if !defined AMX_NO_ALIGN - #if defined __linux__ + #if defined(__linux__) || defined(__APPLE__) #pragma pack() /* reset default packing */ #else #pragma pack(pop) /* reset previous packing */ @@ -406,7 +411,7 @@ enum { // ***** declare functions ***** #ifdef USE_METAMOD -void UTIL_LogPrintf( char *fmt, ... ); +void UTIL_LogPrintf( const char *fmt, ... ); void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage); short FixedSigned16( float value, float scale ); unsigned short FixedUnsigned16( float value, float scale ); @@ -833,11 +838,11 @@ int FN_AllowLagCompensation_Post(void); #ifdef FN_PrecacheModel -int FN_PrecacheModel(char *s); +int FN_PrecacheModel(const char *s); #endif // FN_PrecacheModel #ifdef FN_PrecacheSound -int FN_PrecacheSound(char *s); +int FN_PrecacheSound(const char *s); #endif // FN_PrecacheSound #ifdef FN_SetModel @@ -857,7 +862,7 @@ void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize #ifdef FN_ChangeLevel -void FN_ChangeLevel(char *s1, char *s2); +void FN_ChangeLevel(const char *s1, const char *s2); #endif // FN_ChangeLevel #ifdef FN_GetSpawnParms @@ -1261,19 +1266,19 @@ char *FN_GetInfoKeyBuffer(edict_t *e); #endif // FN_GetInfoKeyBuffer #ifdef FN_InfoKeyValue -char *FN_InfoKeyValue(char *infobuffer, char *key); +char *FN_InfoKeyValue(char *infobuffer, const char *key); #endif // FN_InfoKeyValue #ifdef FN_SetKeyValue -void FN_SetKeyValue(char *infobuffer, char *key, char *value); +void FN_SetKeyValue(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue #ifdef FN_SetClientKeyValue -void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue #ifdef FN_IsMapValid -int FN_IsMapValid(char *filename); +int FN_IsMapValid(const char *filename); #endif // FN_IsMapValid #ifdef FN_StaticDecal @@ -1281,7 +1286,7 @@ void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int mo #endif // FN_StaticDecal #ifdef FN_PrecacheGeneric -int FN_PrecacheGeneric(char *s); +int FN_PrecacheGeneric(const char *s); #endif // FN_PrecacheGeneric #ifdef FN_GetPlayerUserId @@ -1414,11 +1419,11 @@ const char *FN_GetPlayerAuthId(edict_t *e); #ifdef FN_PrecacheModel_Post -int FN_PrecacheModel_Post(char *s); +int FN_PrecacheModel_Post(const char *s); #endif // FN_PrecacheModel_Post #ifdef FN_PrecacheSound_Post -int FN_PrecacheSound_Post(char *s); +int FN_PrecacheSound_Post(const char *s); #endif // FN_PrecacheSound_Post #ifdef FN_SetModel_Post @@ -1438,7 +1443,7 @@ void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize_Post #ifdef FN_ChangeLevel_Post -void FN_ChangeLevel_Post(char *s1, char *s2); +void FN_ChangeLevel_Post(const char *s1, const char *s2); #endif // FN_ChangeLevel_Post #ifdef FN_GetSpawnParms_Post @@ -1842,19 +1847,19 @@ char *FN_GetInfoKeyBuffer_Post(edict_t *e); #endif // FN_GetInfoKeyBuffer_Post #ifdef FN_InfoKeyValue_Post -char *FN_InfoKeyValue_Post(char *infobuffer, char *key); +char *FN_InfoKeyValue_Post(char *infobuffer, const char *key); #endif // FN_InfoKeyValue_Post #ifdef FN_SetKeyValue_Post -void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value); +void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue_Post #ifdef FN_SetClientKeyValue_Post -void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue_Post #ifdef FN_IsMapValid_Post -int FN_IsMapValid_Post(char *filename); +int FN_IsMapValid_Post(const char *filename); #endif // FN_IsMapValid_Post #ifdef FN_StaticDecal_Post @@ -1862,7 +1867,7 @@ void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, i #endif // FN_StaticDecal_Post #ifdef FN_PrecacheGeneric_Post -int FN_PrecacheGeneric_Post(char *s); +int FN_PrecacheGeneric_Post(const char *s); #endif // FN_PrecacheGeneric_Post #ifdef FN_GetPlayerUserId_Post @@ -2116,7 +2121,7 @@ typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/); typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...); typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...); typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/); -typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...); +typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...); typedef const char * (*PFN_GET_MODNAME) (void); typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/); typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/); @@ -2175,8 +2180,8 @@ typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned i typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/); typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/); typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/); -typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); -typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */); typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/); typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/); diff --git a/dlls/cstrike/csx/Makefile b/dlls/cstrike/csx/Makefile index 73c32096..b038f3bd 100755 --- a/dlls/cstrike/csx/Makefile +++ b/dlls/cstrike/csx/Makefile @@ -1,78 +1,123 @@ -#(C)2004-2005 AMX Mod X Development Team +# (C)2004-2013 AMX Mod X Development Team # Makefile written by David "BAILOPAN" Anderson -HLSDK = ../../../../hlsdk +########################################### +### EDIT THESE PATHS FOR YOUR OWN SETUP ### +########################################### + +HLSDK = ../../../../hlsdk/multiplayer MM_ROOT = ../../../../metamod/metamod +##################################### ### EDIT BELOW FOR OTHER PROJECTS ### +##################################### -OPT_FLAGS = -O3 -funroll-loops -s -pipe -fomit-frame-pointer -fno-strict-aliasing -DEBUG_FLAGS = -g -ggdb3 -CPP = gcc-4.1 -NAME = csx - -BIN_SUFFIX_32 = amxx_i386.so -BIN_SUFFIX_64 = amxx_amd64.so +PROJECT = csx OBJECTS = sdk/amxxmodule.cpp CRank.cpp CMisc.cpp meta_api.cpp rank.cpp usermsg.cpp -LINK = +############################################## +### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### +############################################## -INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \ - -I$(MM_ROOT) -I$(HLSDK)/common -Isdk +C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -fomit-frame-pointer -pipe +C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3 +C_GCC4_FLAGS = -fvisibility=hidden +CPP_GCC4_FLAGS = -fvisibility-inlines-hidden +CPP = gcc +CPP_OSX = clang -GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) +LINK = -ifeq "$(GCC_VERSION)" "4" - OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden +INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \ + -I$(MM_ROOT) -Isdk + +################################################ +### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### +################################################ + +OS := $(shell uname -s) + +ifeq "$(OS)" "Darwin" + CPP = $(CPP_OSX) + LIB_EXT = dylib + LIB_SUFFIX = _amxx + CFLAGS += -DOSX + LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5 +else + LIB_EXT = so + LIB_SUFFIX = _amxx_i386 + CFLAGS += -DLINUX + LINK += -shared endif +LINK += -m32 -lm -ldl + +CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror +CPPFLAGS += -fno-exceptions -fno-rtti + +BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT) + ifeq "$(DEBUG)" "true" BIN_DIR = Debug - CFLAGS = $(DEBUG_FLAGS) + CFLAGS += $(C_DEBUG_FLAGS) else BIN_DIR = Release - CFLAGS = $(OPT_FLAGS) + CFLAGS += $(C_OPT_FLAGS) + LINK += -s endif -CFLAGS += -DNDEBUG -Wall -Wno-non-virtual-dtor -Werror -fno-exceptions -DHAVE_STDINT_H -static-libgcc -fno-rtti -m32 +IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0") -ifeq "$(AMD64)" "true" - BINARY = $(NAME)_$(BIN_SUFFIX_64) - CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -m64 +ifeq "$(IS_CLANG)" "1" + CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/") + CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/") else - BINARY = $(NAME)_$(BIN_SUFFIX_32) - CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 - OPT_FLAGS += -march=i586 + CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1) + CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3) endif -OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) +# Clang || GCC >= 4 +ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1" + CFLAGS += $(C_GCC4_FLAGS) + CPPFLAGS += $(CPP_GCC4_FLAGS) +endif + +# Clang >= 3 || GCC >= 4.7 +ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1" + CFLAGS += -Wno-delete-non-virtual-dtor +endif + +# OS is Linux and not using clang +ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1" + LINK += -static-libgcc +endif + +OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) + +# This will break if we include other Makefiles, but is fine for now. It allows +# us to make a copy of this file that uses altered paths (ie. Makefile.mine) +# or other changes without mucking up the original. +MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) $(BIN_DIR)/%.o: %.cpp - $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $< + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< all: mkdir -p $(BIN_DIR) mkdir -p $(BIN_DIR)/sdk - $(MAKE) csx + $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT) -amd64: - $(MAKE) all AMD64=true +$(PROJECT): $(OBJ_BIN) + $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY) -csx: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) - -debug: - $(MAKE) all DEBUG=true +debug: + $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true default: all clean: - rm -rf Release/sdk/*.o - rm -rf Release/*.o - rm -rf Release/$(NAME)_$(BIN_SUFFIX_32) - rm -rf Release/$(NAME)_$(BIN_SUFFIX_64) - rm -rf Debug/sdk/*.o - rm -rf Debug/*.o - rm -rf Debug/$(NAME)_$(BIN_SUFFIX_32) - rm -rf Debug/$(NAME)_$(BIN_SUFFIX_64) + rm -rf $(BIN_DIR)/*.o + rm -rf $(BIN_DIR)/sdk/*.o + rm -f $(BIN_DIR)/$(BINARY) + diff --git a/dlls/cstrike/csx/sdk/amxxmodule.cpp b/dlls/cstrike/csx/sdk/amxxmodule.cpp index a634e9ac..faf8f75c 100755 --- a/dlls/cstrike/csx/sdk/amxxmodule.cpp +++ b/dlls/cstrike/csx/sdk/amxxmodule.cpp @@ -2240,7 +2240,7 @@ static META_FUNCTIONS g_MetaFunctions_Table = GetEngineFunctions_Post }; -C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) +C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) { if ((int) CVAR_GET_FLOAT("developer") != 0) UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n", @@ -2334,7 +2334,7 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason) -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) // linux prototype C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) { @@ -3050,7 +3050,7 @@ char* UTIL_VarArgs( char *format, ... ) // UTIL_LogPrintf - Prints a logged message to console. // Preceded by LOG: ( timestamp ) < message > //========================================================= -void UTIL_LogPrintf( char *fmt, ... ) +void UTIL_LogPrintf( const char *fmt, ... ) { va_list argptr; static char string[1024]; diff --git a/dlls/cstrike/csx/sdk/amxxmodule.h b/dlls/cstrike/csx/sdk/amxxmodule.h index c53b72da..9e42b72f 100755 --- a/dlls/cstrike/csx/sdk/amxxmodule.h +++ b/dlls/cstrike/csx/sdk/amxxmodule.h @@ -20,11 +20,16 @@ // DLL Export #undef DLLEXPORT -#ifndef __linux__ +#if defined(_WIN32) #define DLLEXPORT __declspec(dllexport) #else #define DLLEXPORT __attribute__((visibility("default"))) +#endif + +#if defined(__linux__) && !defined(LINUX) #define LINUX +#elif defined(__APPLE__) && !defined(OSX) +#define OSX #endif #undef C_DLLEXPORT @@ -66,7 +71,7 @@ struct amxx_module_info_s #if defined HAVE_STDINT_H #include #else - #if defined __LCC__ || defined __DMC__ || defined LINUX + #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__ #if defined HAVE_INTTYPES_H #include #else @@ -308,7 +313,7 @@ typedef int (AMXAPI *AMX_DEBUG)(struct tagAMX *amx); #endif #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack(1) /* structures must be packed (byte-aligned) */ #elif defined MACOS && defined __MWERKS__ #pragma options align=mac68k @@ -395,7 +400,7 @@ enum { }; #if !defined AMX_NO_ALIGN - #if defined __linux__ + #if defined(__linux__) || defined(__APPLE__) #pragma pack() /* reset default packing */ #else #pragma pack(pop) /* reset previous packing */ @@ -406,7 +411,7 @@ enum { // ***** declare functions ***** #ifdef USE_METAMOD -void UTIL_LogPrintf( char *fmt, ... ); +void UTIL_LogPrintf( const char *fmt, ... ); void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage); short FixedSigned16( float value, float scale ); unsigned short FixedUnsigned16( float value, float scale ); @@ -833,11 +838,11 @@ int FN_AllowLagCompensation_Post(void); #ifdef FN_PrecacheModel -int FN_PrecacheModel(char *s); +int FN_PrecacheModel(const char *s); #endif // FN_PrecacheModel #ifdef FN_PrecacheSound -int FN_PrecacheSound(char *s); +int FN_PrecacheSound(const char *s); #endif // FN_PrecacheSound #ifdef FN_SetModel @@ -857,7 +862,7 @@ void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize #ifdef FN_ChangeLevel -void FN_ChangeLevel(char *s1, char *s2); +void FN_ChangeLevel(const char *s1, const char *s2); #endif // FN_ChangeLevel #ifdef FN_GetSpawnParms @@ -1261,19 +1266,19 @@ char *FN_GetInfoKeyBuffer(edict_t *e); #endif // FN_GetInfoKeyBuffer #ifdef FN_InfoKeyValue -char *FN_InfoKeyValue(char *infobuffer, char *key); +char *FN_InfoKeyValue(char *infobuffer, const char *key); #endif // FN_InfoKeyValue #ifdef FN_SetKeyValue -void FN_SetKeyValue(char *infobuffer, char *key, char *value); +void FN_SetKeyValue(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue #ifdef FN_SetClientKeyValue -void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue #ifdef FN_IsMapValid -int FN_IsMapValid(char *filename); +int FN_IsMapValid(const char *filename); #endif // FN_IsMapValid #ifdef FN_StaticDecal @@ -1281,7 +1286,7 @@ void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int mo #endif // FN_StaticDecal #ifdef FN_PrecacheGeneric -int FN_PrecacheGeneric(char *s); +int FN_PrecacheGeneric(const char *s); #endif // FN_PrecacheGeneric #ifdef FN_GetPlayerUserId @@ -1414,11 +1419,11 @@ const char *FN_GetPlayerAuthId(edict_t *e); #ifdef FN_PrecacheModel_Post -int FN_PrecacheModel_Post(char *s); +int FN_PrecacheModel_Post(const char *s); #endif // FN_PrecacheModel_Post #ifdef FN_PrecacheSound_Post -int FN_PrecacheSound_Post(char *s); +int FN_PrecacheSound_Post(const char *s); #endif // FN_PrecacheSound_Post #ifdef FN_SetModel_Post @@ -1438,7 +1443,7 @@ void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize_Post #ifdef FN_ChangeLevel_Post -void FN_ChangeLevel_Post(char *s1, char *s2); +void FN_ChangeLevel_Post(const char *s1, const char *s2); #endif // FN_ChangeLevel_Post #ifdef FN_GetSpawnParms_Post @@ -1842,19 +1847,19 @@ char *FN_GetInfoKeyBuffer_Post(edict_t *e); #endif // FN_GetInfoKeyBuffer_Post #ifdef FN_InfoKeyValue_Post -char *FN_InfoKeyValue_Post(char *infobuffer, char *key); +char *FN_InfoKeyValue_Post(char *infobuffer, const char *key); #endif // FN_InfoKeyValue_Post #ifdef FN_SetKeyValue_Post -void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value); +void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue_Post #ifdef FN_SetClientKeyValue_Post -void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue_Post #ifdef FN_IsMapValid_Post -int FN_IsMapValid_Post(char *filename); +int FN_IsMapValid_Post(const char *filename); #endif // FN_IsMapValid_Post #ifdef FN_StaticDecal_Post @@ -1862,7 +1867,7 @@ void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, i #endif // FN_StaticDecal_Post #ifdef FN_PrecacheGeneric_Post -int FN_PrecacheGeneric_Post(char *s); +int FN_PrecacheGeneric_Post(const char *s); #endif // FN_PrecacheGeneric_Post #ifdef FN_GetPlayerUserId_Post @@ -2116,7 +2121,7 @@ typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/); typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...); typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...); typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/); -typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...); +typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...); typedef const char * (*PFN_GET_MODNAME) (void); typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/); typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/); @@ -2175,8 +2180,8 @@ typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned i typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/); typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/); typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/); -typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); -typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */); typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/); typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/); diff --git a/dlls/dod/dodfun/CMisc.cpp b/dlls/dod/dodfun/CMisc.cpp index 1818b8d2..fc496311 100755 --- a/dlls/dod/dodfun/CMisc.cpp +++ b/dlls/dod/dodfun/CMisc.cpp @@ -67,7 +67,7 @@ void CPlayer::killPlayer(){ pEdict->v.weapons = 0; } -void CPlayer::setTeamName( char *szName ){ +void CPlayer::setTeamName( const char *szName ){ for (int i=0;i<16;i++){ *( (char*)pEdict->pvPrivateData + STEAM_PDOFFSET_TEAMNAME + i ) = szName[i]; diff --git a/dlls/dod/dodfun/CMisc.h b/dlls/dod/dodfun/CMisc.h index e1840b8e..93ff14ea 100755 --- a/dlls/dod/dodfun/CMisc.h +++ b/dlls/dod/dodfun/CMisc.h @@ -32,7 +32,7 @@ #ifndef CMISC_H #define CMISC_H -#ifndef __linux__ +#if defined(_WIN32) #define LINUXOFFSET 0 #else #define LINUXOFFSET 5 @@ -53,7 +53,7 @@ // DoD Control Point struct pd_dcp { int iunk_0; -#ifndef __linux__ +#if defined(_WIN32) int iunk_1; // windows only #endif int iunk_2; // pointer edict_t* @@ -82,7 +82,7 @@ struct pd_dcp { int iunk_36; // pointer entvars_t* int unknown_block2[52]; int iunk_89; // pointer entvars_t* -#ifdef __linux__ +#if defined (__linux__) || defined (__APPLE__) int iunk_extra1; int iunk_extra2; int iunk_extra3; @@ -129,7 +129,7 @@ struct pd_dca { int iunk_0; int iunk_1; int iunk_2; -#ifndef __linux__ +#if defined(_WIN32) int iunk_3; // if def windows #endif @@ -150,7 +150,7 @@ struct pd_dca { float angles_z; // 15 // 16-135 -#ifndef __linux__ +#if defined(_WIN32) int unknown_block_16[111]; #else int unknown_block_16[116]; // linux +5 more @@ -263,7 +263,7 @@ public: void PutInServer(); void Disconnect(); void killPlayer(); - void setTeamName( char *szName ); + void setTeamName( const char *szName ); void getTeamName( char *szName ); inline bool IsBot(){ diff --git a/dlls/dod/dodfun/Makefile b/dlls/dod/dodfun/Makefile index 024f8897..1b870014 100755 --- a/dlls/dod/dodfun/Makefile +++ b/dlls/dod/dodfun/Makefile @@ -1,67 +1,123 @@ -#(C)2004-2005 AMX Mod X Development Team +# (C)2004-2013 AMX Mod X Development Team # Makefile written by David "BAILOPAN" Anderson -HLSDK = ../../../../hlsdk +########################################### +### EDIT THESE PATHS FOR YOUR OWN SETUP ### +########################################### + +HLSDK = ../../../../hlsdk/multiplayer MM_ROOT = ../../../../metamod/metamod +##################################### ### EDIT BELOW FOR OTHER PROJECTS ### +##################################### -OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing -DEBUG_FLAGS = -g -ggdb3 -CPP = gcc-4.1 -NAME = dodfun - -BIN_SUFFIX = amxx_i386.so +PROJECT = dodfun OBJECTS = sdk/amxxmodule.cpp NBase.cpp CMisc.cpp NPD.cpp Utils.cpp usermsg.cpp moduleconfig.cpp -LINK = +############################################## +### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### +############################################## -INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \ - -I$(MM_ROOT) -I$(HLSDK)/common -Isdk +C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -fomit-frame-pointer -pipe +C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3 +C_GCC4_FLAGS = -fvisibility=hidden +CPP_GCC4_FLAGS = -fvisibility-inlines-hidden +CPP = gcc +CPP_OSX = clang -GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) +LINK = -ifeq "$(GCC_VERSION)" "4" - OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden +INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \ + -I$(MM_ROOT) -Isdk + +################################################ +### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### +################################################ + +OS := $(shell uname -s) + +ifeq "$(OS)" "Darwin" + CPP = $(CPP_OSX) + LIB_EXT = dylib + LIB_SUFFIX = _amxx + CFLAGS += -DOSX + LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5 +else + LIB_EXT = so + LIB_SUFFIX = _amxx_i386 + CFLAGS += -DLINUX + LINK += -shared endif +LINK += -m32 -lm -ldl + +CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror +CPPFLAGS += -fno-exceptions -fno-rtti + +BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT) + ifeq "$(DEBUG)" "true" BIN_DIR = Debug - CFLAGS = $(DEBUG_FLAGS) + CFLAGS += $(C_DEBUG_FLAGS) else BIN_DIR = Release - CFLAGS = $(OPT_FLAGS) + CFLAGS += $(C_OPT_FLAGS) + LINK += -s endif -CFLAGS += -DNDEBUG -Wall -Wno-non-virtual-dtor -Werror -fno-exceptions -DHAVE_STDINT_H -static-libgcc -fno-rtti -m32 +IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0") -BINARY = $(NAME)_$(BIN_SUFFIX) -CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -OPT_FLAGS += -march=i586 +ifeq "$(IS_CLANG)" "1" + CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/") + CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/") +else + CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1) + CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3) +endif -OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) +# Clang || GCC >= 4 +ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1" + CFLAGS += $(C_GCC4_FLAGS) + CPPFLAGS += $(CPP_GCC4_FLAGS) +endif + +# Clang >= 3 || GCC >= 4.7 +ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1" + CFLAGS += -Wno-delete-non-virtual-dtor +endif + +# OS is Linux and not using clang +ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1" + LINK += -static-libgcc +endif + +OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) + +# This will break if we include other Makefiles, but is fine for now. It allows +# us to make a copy of this file that uses altered paths (ie. Makefile.mine) +# or other changes without mucking up the original. +MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) $(BIN_DIR)/%.o: %.cpp - $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $< + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< all: mkdir -p $(BIN_DIR) mkdir -p $(BIN_DIR)/sdk - $(MAKE) dodfun + $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT) -dodfun: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) +$(PROJECT): $(OBJ_BIN) + $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY) -debug: - $(MAKE) all DEBUG=true +debug: + $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true default: all clean: - rm -rf Release/sdk/*.o - rm -rf Release/*.o - rm -rf Release/$(NAME)_$(BIN_SUFFIX) - rm -rf Debug/sdk/*.o - rm -rf Debug/*.o - rm -rf Debug/$(NAME)_$(BIN_SUFFIX) + rm -rf $(BIN_DIR)/*.o + rm -rf $(BIN_DIR)/sdk/*.o + rm -f $(BIN_DIR)/$(BINARY) + diff --git a/dlls/dod/dodfun/sdk/amxxmodule.cpp b/dlls/dod/dodfun/sdk/amxxmodule.cpp index a634e9ac..faf8f75c 100755 --- a/dlls/dod/dodfun/sdk/amxxmodule.cpp +++ b/dlls/dod/dodfun/sdk/amxxmodule.cpp @@ -2240,7 +2240,7 @@ static META_FUNCTIONS g_MetaFunctions_Table = GetEngineFunctions_Post }; -C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) +C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) { if ((int) CVAR_GET_FLOAT("developer") != 0) UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n", @@ -2334,7 +2334,7 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason) -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) // linux prototype C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) { @@ -3050,7 +3050,7 @@ char* UTIL_VarArgs( char *format, ... ) // UTIL_LogPrintf - Prints a logged message to console. // Preceded by LOG: ( timestamp ) < message > //========================================================= -void UTIL_LogPrintf( char *fmt, ... ) +void UTIL_LogPrintf( const char *fmt, ... ) { va_list argptr; static char string[1024]; diff --git a/dlls/dod/dodfun/sdk/amxxmodule.h b/dlls/dod/dodfun/sdk/amxxmodule.h index c53b72da..9e42b72f 100755 --- a/dlls/dod/dodfun/sdk/amxxmodule.h +++ b/dlls/dod/dodfun/sdk/amxxmodule.h @@ -20,11 +20,16 @@ // DLL Export #undef DLLEXPORT -#ifndef __linux__ +#if defined(_WIN32) #define DLLEXPORT __declspec(dllexport) #else #define DLLEXPORT __attribute__((visibility("default"))) +#endif + +#if defined(__linux__) && !defined(LINUX) #define LINUX +#elif defined(__APPLE__) && !defined(OSX) +#define OSX #endif #undef C_DLLEXPORT @@ -66,7 +71,7 @@ struct amxx_module_info_s #if defined HAVE_STDINT_H #include #else - #if defined __LCC__ || defined __DMC__ || defined LINUX + #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__ #if defined HAVE_INTTYPES_H #include #else @@ -308,7 +313,7 @@ typedef int (AMXAPI *AMX_DEBUG)(struct tagAMX *amx); #endif #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack(1) /* structures must be packed (byte-aligned) */ #elif defined MACOS && defined __MWERKS__ #pragma options align=mac68k @@ -395,7 +400,7 @@ enum { }; #if !defined AMX_NO_ALIGN - #if defined __linux__ + #if defined(__linux__) || defined(__APPLE__) #pragma pack() /* reset default packing */ #else #pragma pack(pop) /* reset previous packing */ @@ -406,7 +411,7 @@ enum { // ***** declare functions ***** #ifdef USE_METAMOD -void UTIL_LogPrintf( char *fmt, ... ); +void UTIL_LogPrintf( const char *fmt, ... ); void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage); short FixedSigned16( float value, float scale ); unsigned short FixedUnsigned16( float value, float scale ); @@ -833,11 +838,11 @@ int FN_AllowLagCompensation_Post(void); #ifdef FN_PrecacheModel -int FN_PrecacheModel(char *s); +int FN_PrecacheModel(const char *s); #endif // FN_PrecacheModel #ifdef FN_PrecacheSound -int FN_PrecacheSound(char *s); +int FN_PrecacheSound(const char *s); #endif // FN_PrecacheSound #ifdef FN_SetModel @@ -857,7 +862,7 @@ void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize #ifdef FN_ChangeLevel -void FN_ChangeLevel(char *s1, char *s2); +void FN_ChangeLevel(const char *s1, const char *s2); #endif // FN_ChangeLevel #ifdef FN_GetSpawnParms @@ -1261,19 +1266,19 @@ char *FN_GetInfoKeyBuffer(edict_t *e); #endif // FN_GetInfoKeyBuffer #ifdef FN_InfoKeyValue -char *FN_InfoKeyValue(char *infobuffer, char *key); +char *FN_InfoKeyValue(char *infobuffer, const char *key); #endif // FN_InfoKeyValue #ifdef FN_SetKeyValue -void FN_SetKeyValue(char *infobuffer, char *key, char *value); +void FN_SetKeyValue(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue #ifdef FN_SetClientKeyValue -void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue #ifdef FN_IsMapValid -int FN_IsMapValid(char *filename); +int FN_IsMapValid(const char *filename); #endif // FN_IsMapValid #ifdef FN_StaticDecal @@ -1281,7 +1286,7 @@ void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int mo #endif // FN_StaticDecal #ifdef FN_PrecacheGeneric -int FN_PrecacheGeneric(char *s); +int FN_PrecacheGeneric(const char *s); #endif // FN_PrecacheGeneric #ifdef FN_GetPlayerUserId @@ -1414,11 +1419,11 @@ const char *FN_GetPlayerAuthId(edict_t *e); #ifdef FN_PrecacheModel_Post -int FN_PrecacheModel_Post(char *s); +int FN_PrecacheModel_Post(const char *s); #endif // FN_PrecacheModel_Post #ifdef FN_PrecacheSound_Post -int FN_PrecacheSound_Post(char *s); +int FN_PrecacheSound_Post(const char *s); #endif // FN_PrecacheSound_Post #ifdef FN_SetModel_Post @@ -1438,7 +1443,7 @@ void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize_Post #ifdef FN_ChangeLevel_Post -void FN_ChangeLevel_Post(char *s1, char *s2); +void FN_ChangeLevel_Post(const char *s1, const char *s2); #endif // FN_ChangeLevel_Post #ifdef FN_GetSpawnParms_Post @@ -1842,19 +1847,19 @@ char *FN_GetInfoKeyBuffer_Post(edict_t *e); #endif // FN_GetInfoKeyBuffer_Post #ifdef FN_InfoKeyValue_Post -char *FN_InfoKeyValue_Post(char *infobuffer, char *key); +char *FN_InfoKeyValue_Post(char *infobuffer, const char *key); #endif // FN_InfoKeyValue_Post #ifdef FN_SetKeyValue_Post -void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value); +void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue_Post #ifdef FN_SetClientKeyValue_Post -void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue_Post #ifdef FN_IsMapValid_Post -int FN_IsMapValid_Post(char *filename); +int FN_IsMapValid_Post(const char *filename); #endif // FN_IsMapValid_Post #ifdef FN_StaticDecal_Post @@ -1862,7 +1867,7 @@ void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, i #endif // FN_StaticDecal_Post #ifdef FN_PrecacheGeneric_Post -int FN_PrecacheGeneric_Post(char *s); +int FN_PrecacheGeneric_Post(const char *s); #endif // FN_PrecacheGeneric_Post #ifdef FN_GetPlayerUserId_Post @@ -2116,7 +2121,7 @@ typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/); typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...); typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...); typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/); -typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...); +typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...); typedef const char * (*PFN_GET_MODNAME) (void); typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/); typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/); @@ -2175,8 +2180,8 @@ typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned i typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/); typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/); typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/); -typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); -typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */); typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/); typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/); diff --git a/dlls/dod/dodx/CMisc.h b/dlls/dod/dodx/CMisc.h index b755d087..17241d15 100755 --- a/dlls/dod/dodx/CMisc.h +++ b/dlls/dod/dodx/CMisc.h @@ -37,7 +37,7 @@ #define DODMAX_CUSTOMWPNS 5 // custom weapons #define DODMAX_WEAPONS 42 + DODMAX_CUSTOMWPNS -#ifndef __linux__ +#if defined(_WIN32) #define LINUXOFFSET 0 #else #define LINUXOFFSET 5 diff --git a/dlls/dod/dodx/Makefile b/dlls/dod/dodx/Makefile index 38f44dbb..9ef72bab 100755 --- a/dlls/dod/dodx/Makefile +++ b/dlls/dod/dodx/Makefile @@ -1,67 +1,123 @@ -#(C)2004-2005 AMX Mod X Development Team +# (C)2004-2013 AMX Mod X Development Team # Makefile written by David "BAILOPAN" Anderson -HLSDK = ../../../../hlsdk +########################################### +### EDIT THESE PATHS FOR YOUR OWN SETUP ### +########################################### + +HLSDK = ../../../../hlsdk/multiplayer MM_ROOT = ../../../../metamod/metamod +##################################### ### EDIT BELOW FOR OTHER PROJECTS ### +##################################### -OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing -DEBUG_FLAGS = -g -ggdb3 -CPP = gcc-4.1 -NAME = dodx - -BIN_SUFFIX = amxx_i386.so +PROJECT = dodx OBJECTS = sdk/amxxmodule.cpp CRank.cpp CMisc.cpp NBase.cpp NRank.cpp usermsg.cpp Utils.cpp moduleconfig.cpp -LINK = +############################################## +### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### +############################################## -INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \ - -I$(MM_ROOT) -I$(HLSDK)/common -Isdk +C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -fomit-frame-pointer -pipe +C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3 +C_GCC4_FLAGS = -fvisibility=hidden +CPP_GCC4_FLAGS = -fvisibility-inlines-hidden +CPP = gcc +CPP_OSX = clang -GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) +LINK = -ifeq "$(GCC_VERSION)" "4" - OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden +INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \ + -I$(MM_ROOT) -Isdk + +################################################ +### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### +################################################ + +OS := $(shell uname -s) + +ifeq "$(OS)" "Darwin" + CPP = $(CPP_OSX) + LIB_EXT = dylib + LIB_SUFFIX = _amxx + CFLAGS += -DOSX + LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5 +else + LIB_EXT = so + LIB_SUFFIX = _amxx_i386 + CFLAGS += -DLINUX + LINK += -shared endif +LINK += -m32 -lm -ldl + +CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror +CPPFLAGS += -fno-exceptions -fno-rtti + +BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT) + ifeq "$(DEBUG)" "true" BIN_DIR = Debug - CFLAGS = $(DEBUG_FLAGS) + CFLAGS += $(C_DEBUG_FLAGS) else BIN_DIR = Release - CFLAGS = $(OPT_FLAGS) + CFLAGS += $(C_OPT_FLAGS) + LINK += -s endif -CFLAGS += -DNDEBUG -Wall -Wno-non-virtual-dtor -Werror -fno-exceptions -DHAVE_STDINT_H -static-libgcc -fno-rtti -m32 +IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0") -BINARY = $(NAME)_$(BIN_SUFFIX) -CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -OPT_FLAGS += -march=i586 +ifeq "$(IS_CLANG)" "1" + CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/") + CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/") +else + CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1) + CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3) +endif -OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) +# Clang || GCC >= 4 +ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1" + CFLAGS += $(C_GCC4_FLAGS) + CPPFLAGS += $(CPP_GCC4_FLAGS) +endif + +# Clang >= 3 || GCC >= 4.7 +ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1" + CFLAGS += -Wno-delete-non-virtual-dtor +endif + +# OS is Linux and not using clang +ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1" + LINK += -static-libgcc +endif + +OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) + +# This will break if we include other Makefiles, but is fine for now. It allows +# us to make a copy of this file that uses altered paths (ie. Makefile.mine) +# or other changes without mucking up the original. +MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) $(BIN_DIR)/%.o: %.cpp - $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $< + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< all: mkdir -p $(BIN_DIR) mkdir -p $(BIN_DIR)/sdk - $(MAKE) dodx + $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT) -dodx: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) +$(PROJECT): $(OBJ_BIN) + $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY) -debug: - $(MAKE) all DEBUG=true +debug: + $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true default: all clean: - rm -rf Release/sdk/*.o - rm -rf Release/*.o - rm -rf Release/$(NAME)_$(BIN_SUFFIX) - rm -rf Debug/sdk/*.o - rm -rf Debug/*.o - rm -rf Debug/$(NAME)_$(BIN_SUFFIX) + rm -rf $(BIN_DIR)/*.o + rm -rf $(BIN_DIR)/sdk/*.o + rm -f $(BIN_DIR)/$(BINARY) + diff --git a/dlls/dod/dodx/NBase.cpp b/dlls/dod/dodx/NBase.cpp index 49613a26..74028d9e 100755 --- a/dlls/dod/dodx/NBase.cpp +++ b/dlls/dod/dodx/NBase.cpp @@ -490,7 +490,7 @@ static cell AMX_NATIVE_CALL get_user_team(AMX *amx, cell *params) if ( params[3] ) { - char *szTeam = ""; + const char *szTeam = ""; switch(iTeam) { case 1: diff --git a/dlls/dod/dodx/moduleconfig.cpp b/dlls/dod/dodx/moduleconfig.cpp index a9b95a6e..82d5fae3 100755 --- a/dlls/dod/dodx/moduleconfig.cpp +++ b/dlls/dod/dodx/moduleconfig.cpp @@ -430,7 +430,7 @@ void DispatchKeyValue_Post( edict_t *pentKeyvalue, KeyValueData *pkvd ) RETURN_META(MRES_IGNORED); } -void SetClientKeyValue(int id, char *protocol, char *type, char *var) +void SetClientKeyValue(int id, char *protocol, const char *type, const char *var) { // ID: Number // protocol: \name\Sgt.MEOW\topcolor\1\bottomcolor\1\cl_lw\1\team\axis\model\axis-inf diff --git a/dlls/dod/dodx/sdk/amxxmodule.cpp b/dlls/dod/dodx/sdk/amxxmodule.cpp index a634e9ac..faf8f75c 100755 --- a/dlls/dod/dodx/sdk/amxxmodule.cpp +++ b/dlls/dod/dodx/sdk/amxxmodule.cpp @@ -2240,7 +2240,7 @@ static META_FUNCTIONS g_MetaFunctions_Table = GetEngineFunctions_Post }; -C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) +C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) { if ((int) CVAR_GET_FLOAT("developer") != 0) UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n", @@ -2334,7 +2334,7 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason) -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) // linux prototype C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) { @@ -3050,7 +3050,7 @@ char* UTIL_VarArgs( char *format, ... ) // UTIL_LogPrintf - Prints a logged message to console. // Preceded by LOG: ( timestamp ) < message > //========================================================= -void UTIL_LogPrintf( char *fmt, ... ) +void UTIL_LogPrintf( const char *fmt, ... ) { va_list argptr; static char string[1024]; diff --git a/dlls/dod/dodx/sdk/amxxmodule.h b/dlls/dod/dodx/sdk/amxxmodule.h index c53b72da..9e42b72f 100755 --- a/dlls/dod/dodx/sdk/amxxmodule.h +++ b/dlls/dod/dodx/sdk/amxxmodule.h @@ -20,11 +20,16 @@ // DLL Export #undef DLLEXPORT -#ifndef __linux__ +#if defined(_WIN32) #define DLLEXPORT __declspec(dllexport) #else #define DLLEXPORT __attribute__((visibility("default"))) +#endif + +#if defined(__linux__) && !defined(LINUX) #define LINUX +#elif defined(__APPLE__) && !defined(OSX) +#define OSX #endif #undef C_DLLEXPORT @@ -66,7 +71,7 @@ struct amxx_module_info_s #if defined HAVE_STDINT_H #include #else - #if defined __LCC__ || defined __DMC__ || defined LINUX + #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__ #if defined HAVE_INTTYPES_H #include #else @@ -308,7 +313,7 @@ typedef int (AMXAPI *AMX_DEBUG)(struct tagAMX *amx); #endif #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack(1) /* structures must be packed (byte-aligned) */ #elif defined MACOS && defined __MWERKS__ #pragma options align=mac68k @@ -395,7 +400,7 @@ enum { }; #if !defined AMX_NO_ALIGN - #if defined __linux__ + #if defined(__linux__) || defined(__APPLE__) #pragma pack() /* reset default packing */ #else #pragma pack(pop) /* reset previous packing */ @@ -406,7 +411,7 @@ enum { // ***** declare functions ***** #ifdef USE_METAMOD -void UTIL_LogPrintf( char *fmt, ... ); +void UTIL_LogPrintf( const char *fmt, ... ); void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage); short FixedSigned16( float value, float scale ); unsigned short FixedUnsigned16( float value, float scale ); @@ -833,11 +838,11 @@ int FN_AllowLagCompensation_Post(void); #ifdef FN_PrecacheModel -int FN_PrecacheModel(char *s); +int FN_PrecacheModel(const char *s); #endif // FN_PrecacheModel #ifdef FN_PrecacheSound -int FN_PrecacheSound(char *s); +int FN_PrecacheSound(const char *s); #endif // FN_PrecacheSound #ifdef FN_SetModel @@ -857,7 +862,7 @@ void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize #ifdef FN_ChangeLevel -void FN_ChangeLevel(char *s1, char *s2); +void FN_ChangeLevel(const char *s1, const char *s2); #endif // FN_ChangeLevel #ifdef FN_GetSpawnParms @@ -1261,19 +1266,19 @@ char *FN_GetInfoKeyBuffer(edict_t *e); #endif // FN_GetInfoKeyBuffer #ifdef FN_InfoKeyValue -char *FN_InfoKeyValue(char *infobuffer, char *key); +char *FN_InfoKeyValue(char *infobuffer, const char *key); #endif // FN_InfoKeyValue #ifdef FN_SetKeyValue -void FN_SetKeyValue(char *infobuffer, char *key, char *value); +void FN_SetKeyValue(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue #ifdef FN_SetClientKeyValue -void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue #ifdef FN_IsMapValid -int FN_IsMapValid(char *filename); +int FN_IsMapValid(const char *filename); #endif // FN_IsMapValid #ifdef FN_StaticDecal @@ -1281,7 +1286,7 @@ void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int mo #endif // FN_StaticDecal #ifdef FN_PrecacheGeneric -int FN_PrecacheGeneric(char *s); +int FN_PrecacheGeneric(const char *s); #endif // FN_PrecacheGeneric #ifdef FN_GetPlayerUserId @@ -1414,11 +1419,11 @@ const char *FN_GetPlayerAuthId(edict_t *e); #ifdef FN_PrecacheModel_Post -int FN_PrecacheModel_Post(char *s); +int FN_PrecacheModel_Post(const char *s); #endif // FN_PrecacheModel_Post #ifdef FN_PrecacheSound_Post -int FN_PrecacheSound_Post(char *s); +int FN_PrecacheSound_Post(const char *s); #endif // FN_PrecacheSound_Post #ifdef FN_SetModel_Post @@ -1438,7 +1443,7 @@ void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize_Post #ifdef FN_ChangeLevel_Post -void FN_ChangeLevel_Post(char *s1, char *s2); +void FN_ChangeLevel_Post(const char *s1, const char *s2); #endif // FN_ChangeLevel_Post #ifdef FN_GetSpawnParms_Post @@ -1842,19 +1847,19 @@ char *FN_GetInfoKeyBuffer_Post(edict_t *e); #endif // FN_GetInfoKeyBuffer_Post #ifdef FN_InfoKeyValue_Post -char *FN_InfoKeyValue_Post(char *infobuffer, char *key); +char *FN_InfoKeyValue_Post(char *infobuffer, const char *key); #endif // FN_InfoKeyValue_Post #ifdef FN_SetKeyValue_Post -void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value); +void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue_Post #ifdef FN_SetClientKeyValue_Post -void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue_Post #ifdef FN_IsMapValid_Post -int FN_IsMapValid_Post(char *filename); +int FN_IsMapValid_Post(const char *filename); #endif // FN_IsMapValid_Post #ifdef FN_StaticDecal_Post @@ -1862,7 +1867,7 @@ void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, i #endif // FN_StaticDecal_Post #ifdef FN_PrecacheGeneric_Post -int FN_PrecacheGeneric_Post(char *s); +int FN_PrecacheGeneric_Post(const char *s); #endif // FN_PrecacheGeneric_Post #ifdef FN_GetPlayerUserId_Post @@ -2116,7 +2121,7 @@ typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/); typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...); typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...); typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/); -typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...); +typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...); typedef const char * (*PFN_GET_MODNAME) (void); typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/); typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/); @@ -2175,8 +2180,8 @@ typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned i typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/); typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/); typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/); -typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); -typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */); typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/); typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/); diff --git a/dlls/engine/Makefile b/dlls/engine/Makefile index 8a09387a..a1dcad04 100755 --- a/dlls/engine/Makefile +++ b/dlls/engine/Makefile @@ -1,79 +1,124 @@ -#(C)2004-2005 AMX Mod X Development Team +# (C)2004-2013 AMX Mod X Development Team # Makefile written by David "BAILOPAN" Anderson -HLSDK = ../../../hlsdk +########################################### +### EDIT THESE PATHS FOR YOUR OWN SETUP ### +########################################### + +HLSDK = ../../../hlsdk/multiplayer MM_ROOT = ../../../metamod/metamod +##################################### ### EDIT BELOW FOR OTHER PROJECTS ### +##################################### -OPT_FLAGS = -O2 -funroll-loops -s -pipe -fomit-frame-pointer -fno-strict-aliasing -DEBUG_FLAGS = -g -ggdb3 -CPP = gcc-4.1 -NAME = engine - -BIN_SUFFIX_32 = amxx_i386.so -BIN_SUFFIX_64 = amxx_amd64.so +PROJECT = engine OBJECTS = sdk/amxxmodule.cpp amxxapi.cpp engine.cpp entity.cpp globals.cpp forwards.cpp \ - amxmod_compat.cpp + amxmod_compat.cpp -LINK = +############################################## +### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### +############################################## -INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \ - -I$(MM_ROOT) -I$(HLSDK)/common -Isdk +C_OPT_FLAGS = -DNDEBUG -O2 -funroll-loops -fomit-frame-pointer -pipe +C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3 +C_GCC4_FLAGS = -fvisibility=hidden +CPP_GCC4_FLAGS = -fvisibility-inlines-hidden +CPP = gcc +CPP_OSX = clang -GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) +LINK = -ifeq "$(GCC_VERSION)" "4" - OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden +INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \ + -I$(MM_ROOT) -Isdk + +################################################ +### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### +################################################ + +OS := $(shell uname -s) + +ifeq "$(OS)" "Darwin" + CPP = $(CPP_OSX) + LIB_EXT = dylib + LIB_SUFFIX = _amxx + CFLAGS += -DOSX + LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5 +else + LIB_EXT = so + LIB_SUFFIX = _amxx_i386 + CFLAGS += -DLINUX + LINK += -shared endif +LINK += -m32 -lm -ldl + +CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror +CPPFLAGS += -fno-exceptions -fno-rtti + +BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT) + ifeq "$(DEBUG)" "true" BIN_DIR = Debug - CFLAGS = $(DEBUG_FLAGS) + CFLAGS += $(C_DEBUG_FLAGS) else BIN_DIR = Release - CFLAGS = $(OPT_FLAGS) + CFLAGS += $(C_OPT_FLAGS) + LINK += -s endif -CFLAGS += -DNDEBUG -Wall -Wno-non-virtual-dtor -Werror -fno-exceptions -DHAVE_STDINT_H -fno-rtti -static-libgcc -m32 +IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0") -ifeq "$(AMD64)" "true" - BINARY = $(NAME)_$(BIN_SUFFIX_64) - CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -m64 +ifeq "$(IS_CLANG)" "1" + CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/") + CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/") else - BINARY = $(NAME)_$(BIN_SUFFIX_32) - CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 - OPT_FLAGS += -march=i586 + CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1) + CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3) endif -OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) +# Clang || GCC >= 4 +ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1" + CFLAGS += $(C_GCC4_FLAGS) + CPPFLAGS += $(CPP_GCC4_FLAGS) +endif + +# Clang >= 3 || GCC >= 4.7 +ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1" + CFLAGS += -Wno-delete-non-virtual-dtor +endif + +# OS is Linux and not using clang +ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1" + LINK += -static-libgcc +endif + +OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) + +# This will break if we include other Makefiles, but is fine for now. It allows +# us to make a copy of this file that uses altered paths (ie. Makefile.mine) +# or other changes without mucking up the original. +MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) $(BIN_DIR)/%.o: %.cpp - $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $< + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< all: mkdir -p $(BIN_DIR) mkdir -p $(BIN_DIR)/sdk - $(MAKE) engine + $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT) -amd64: - $(MAKE) all AMD64=true +$(PROJECT): $(OBJ_BIN) + $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY) -engine: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) - -debug: - $(MAKE) all DEBUG=true +debug: + $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true default: all clean: - rm -rf Release/sdk/*.o - rm -rf Release/*.o - rm -rf Release/$(NAME)_$(BIN_SUFFIX_32) - rm -rf Release/$(NAME)_$(BIN_SUFFIX_64) - rm -rf Debug/sdk/*.o - rm -rf Debug/*.o - rm -rf Debug/$(NAME)_$(BIN_SUFFIX_32) - rm -rf Debug/$(NAME)_$(BIN_SUFFIX_64) + rm -rf $(BIN_DIR)/*.o + rm -rf $(BIN_DIR)/sdk/*.o + rm -f $(BIN_DIR)/$(BINARY) + diff --git a/dlls/engine/amxmod_compat.cpp b/dlls/engine/amxmod_compat.cpp index d3ca40dc..e1d341a6 100644 --- a/dlls/engine/amxmod_compat.cpp +++ b/dlls/engine/amxmod_compat.cpp @@ -16,8 +16,8 @@ static int gmsgScoreInfo = 0; BOOL is_breakable(edict_t* pBreak) { if (FStrEq("func_breakable", STRING(pBreak->v.classname)) - || FStrEq("func_pushable", STRING(pBreak->v.classname)) - && pBreak->v.spawnflags & SF_PUSH_BREAKABLE) + || (FStrEq("func_pushable", STRING(pBreak->v.classname)) + && pBreak->v.spawnflags & SF_PUSH_BREAKABLE)) { return true; } diff --git a/dlls/engine/entity.cpp b/dlls/engine/entity.cpp index d5f480c4..c249653a 100755 --- a/dlls/engine/entity.cpp +++ b/dlls/engine/entity.cpp @@ -1470,7 +1470,7 @@ static cell AMX_NATIVE_CALL find_ent_by_owner(AMX *amx, cell *params) // native edict_t *entOwner = INDEXENT2(oEnt); //optional fourth parameter is for jghg2 compatibility - char* sCategory = NULL; + const char* sCategory = NULL; switch(params[4]){ case 1: sCategory = "target"; break; case 2: sCategory = "targetname"; break; diff --git a/dlls/engine/sdk/CString.h b/dlls/engine/sdk/CString.h index 14b86509..1c2c5789 100755 --- a/dlls/engine/sdk/CString.h +++ b/dlls/engine/sdk/CString.h @@ -220,7 +220,7 @@ public: if (is_space(v[len-1])) { - for (i=len-1; i>=0; i--) + for (i=len-1; i //========================================================= -void UTIL_LogPrintf( char *fmt, ... ) +void UTIL_LogPrintf( const char *fmt, ... ) { va_list argptr; static char string[1024]; diff --git a/dlls/engine/sdk/amxxmodule.h b/dlls/engine/sdk/amxxmodule.h index c53b72da..9e42b72f 100755 --- a/dlls/engine/sdk/amxxmodule.h +++ b/dlls/engine/sdk/amxxmodule.h @@ -20,11 +20,16 @@ // DLL Export #undef DLLEXPORT -#ifndef __linux__ +#if defined(_WIN32) #define DLLEXPORT __declspec(dllexport) #else #define DLLEXPORT __attribute__((visibility("default"))) +#endif + +#if defined(__linux__) && !defined(LINUX) #define LINUX +#elif defined(__APPLE__) && !defined(OSX) +#define OSX #endif #undef C_DLLEXPORT @@ -66,7 +71,7 @@ struct amxx_module_info_s #if defined HAVE_STDINT_H #include #else - #if defined __LCC__ || defined __DMC__ || defined LINUX + #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__ #if defined HAVE_INTTYPES_H #include #else @@ -308,7 +313,7 @@ typedef int (AMXAPI *AMX_DEBUG)(struct tagAMX *amx); #endif #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack(1) /* structures must be packed (byte-aligned) */ #elif defined MACOS && defined __MWERKS__ #pragma options align=mac68k @@ -395,7 +400,7 @@ enum { }; #if !defined AMX_NO_ALIGN - #if defined __linux__ + #if defined(__linux__) || defined(__APPLE__) #pragma pack() /* reset default packing */ #else #pragma pack(pop) /* reset previous packing */ @@ -406,7 +411,7 @@ enum { // ***** declare functions ***** #ifdef USE_METAMOD -void UTIL_LogPrintf( char *fmt, ... ); +void UTIL_LogPrintf( const char *fmt, ... ); void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage); short FixedSigned16( float value, float scale ); unsigned short FixedUnsigned16( float value, float scale ); @@ -833,11 +838,11 @@ int FN_AllowLagCompensation_Post(void); #ifdef FN_PrecacheModel -int FN_PrecacheModel(char *s); +int FN_PrecacheModel(const char *s); #endif // FN_PrecacheModel #ifdef FN_PrecacheSound -int FN_PrecacheSound(char *s); +int FN_PrecacheSound(const char *s); #endif // FN_PrecacheSound #ifdef FN_SetModel @@ -857,7 +862,7 @@ void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize #ifdef FN_ChangeLevel -void FN_ChangeLevel(char *s1, char *s2); +void FN_ChangeLevel(const char *s1, const char *s2); #endif // FN_ChangeLevel #ifdef FN_GetSpawnParms @@ -1261,19 +1266,19 @@ char *FN_GetInfoKeyBuffer(edict_t *e); #endif // FN_GetInfoKeyBuffer #ifdef FN_InfoKeyValue -char *FN_InfoKeyValue(char *infobuffer, char *key); +char *FN_InfoKeyValue(char *infobuffer, const char *key); #endif // FN_InfoKeyValue #ifdef FN_SetKeyValue -void FN_SetKeyValue(char *infobuffer, char *key, char *value); +void FN_SetKeyValue(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue #ifdef FN_SetClientKeyValue -void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue #ifdef FN_IsMapValid -int FN_IsMapValid(char *filename); +int FN_IsMapValid(const char *filename); #endif // FN_IsMapValid #ifdef FN_StaticDecal @@ -1281,7 +1286,7 @@ void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int mo #endif // FN_StaticDecal #ifdef FN_PrecacheGeneric -int FN_PrecacheGeneric(char *s); +int FN_PrecacheGeneric(const char *s); #endif // FN_PrecacheGeneric #ifdef FN_GetPlayerUserId @@ -1414,11 +1419,11 @@ const char *FN_GetPlayerAuthId(edict_t *e); #ifdef FN_PrecacheModel_Post -int FN_PrecacheModel_Post(char *s); +int FN_PrecacheModel_Post(const char *s); #endif // FN_PrecacheModel_Post #ifdef FN_PrecacheSound_Post -int FN_PrecacheSound_Post(char *s); +int FN_PrecacheSound_Post(const char *s); #endif // FN_PrecacheSound_Post #ifdef FN_SetModel_Post @@ -1438,7 +1443,7 @@ void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize_Post #ifdef FN_ChangeLevel_Post -void FN_ChangeLevel_Post(char *s1, char *s2); +void FN_ChangeLevel_Post(const char *s1, const char *s2); #endif // FN_ChangeLevel_Post #ifdef FN_GetSpawnParms_Post @@ -1842,19 +1847,19 @@ char *FN_GetInfoKeyBuffer_Post(edict_t *e); #endif // FN_GetInfoKeyBuffer_Post #ifdef FN_InfoKeyValue_Post -char *FN_InfoKeyValue_Post(char *infobuffer, char *key); +char *FN_InfoKeyValue_Post(char *infobuffer, const char *key); #endif // FN_InfoKeyValue_Post #ifdef FN_SetKeyValue_Post -void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value); +void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue_Post #ifdef FN_SetClientKeyValue_Post -void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue_Post #ifdef FN_IsMapValid_Post -int FN_IsMapValid_Post(char *filename); +int FN_IsMapValid_Post(const char *filename); #endif // FN_IsMapValid_Post #ifdef FN_StaticDecal_Post @@ -1862,7 +1867,7 @@ void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, i #endif // FN_StaticDecal_Post #ifdef FN_PrecacheGeneric_Post -int FN_PrecacheGeneric_Post(char *s); +int FN_PrecacheGeneric_Post(const char *s); #endif // FN_PrecacheGeneric_Post #ifdef FN_GetPlayerUserId_Post @@ -2116,7 +2121,7 @@ typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/); typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...); typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...); typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/); -typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...); +typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...); typedef const char * (*PFN_GET_MODNAME) (void); typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/); typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/); @@ -2175,8 +2180,8 @@ typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned i typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/); typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/); typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/); -typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); -typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */); typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/); typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/); diff --git a/dlls/fakemeta/Makefile b/dlls/fakemeta/Makefile index ba6518c0..f8a3585a 100755 --- a/dlls/fakemeta/Makefile +++ b/dlls/fakemeta/Makefile @@ -1,81 +1,125 @@ -#(C)2004-2005 AMX Mod X Development Team +# (C)2004-2013 AMX Mod X Development Team # Makefile written by David "BAILOPAN" Anderson -HLSDK = ../../../hlsdk +########################################### +### EDIT THESE PATHS FOR YOUR OWN SETUP ### +########################################### + +HLSDK = ../../../hlsdk/multiplayer MM_ROOT = ../../../metamod/metamod +##################################### ### EDIT BELOW FOR OTHER PROJECTS ### +##################################### -OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing -fomit-frame-pointer -DEBUG_FLAGS = -g -ggdb3 -CPP = gcc-4.1 -NAME = fakemeta - -BIN_SUFFIX_32 = amxx_i386.so -BIN_SUFFIX_64 = amxx_amd64.so +PROJECT = fakemeta OBJECTS = sdk/amxxmodule.cpp dllfunc.cpp engfunc.cpp fakemeta_amxx.cpp pdata.cpp forward.cpp \ - fm_tr.cpp pev.cpp glb.cpp fm_tr2.cpp misc.cpp + fm_tr.cpp pev.cpp glb.cpp fm_tr2.cpp misc.cpp + +############################################## +### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### +############################################## + +C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -fomit-frame-pointer -pipe +C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3 +C_GCC4_FLAGS = -fvisibility=hidden +CPP_GCC4_FLAGS = -fvisibility-inlines-hidden +CPP = gcc +CPP_OSX = clang LINK = -INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \ - -I$(MM_ROOT) -I$(HLSDK)/common -I$(HLSDK)/pm_shared -Isdk +INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \ + -I$(HLSDK)/pm_shared -I$(MM_ROOT) -Isdk -GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) +################################################ +### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### +################################################ -ifeq "$(GCC_VERSION)" "4" - OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden +OS := $(shell uname -s) + +ifeq "$(OS)" "Darwin" + CPP = $(CPP_OSX) + LIB_EXT = dylib + LIB_SUFFIX = _amxx + CFLAGS += -DOSX + LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5 +else + LIB_EXT = so + LIB_SUFFIX = _amxx_i386 + CFLAGS += -DLINUX + LINK += -shared endif +LINK += -m32 -lm -ldl + +CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror \ + -Wno-invalid-offsetof +CPPFLAGS += -fno-exceptions -fno-rtti + +BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT) ifeq "$(DEBUG)" "true" BIN_DIR = Debug - CFLAGS = $(DEBUG_FLAGS) + CFLAGS += $(C_DEBUG_FLAGS) else BIN_DIR = Release - CFLAGS = $(OPT_FLAGS) + CFLAGS += $(C_OPT_FLAGS) + LINK += -s endif -CFLAGS += -DNDEBUG -Wall -Wno-non-virtual-dtor -Werror -fno-exceptions -DHAVE_STDINT_H -static-libgcc -fno-rtti -Wno-invalid-offsetof -m32 +IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0") -ifeq "$(AMD64)" "true" - BINARY = $(NAME)_$(BIN_SUFFIX_64) - CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -m64 +ifeq "$(IS_CLANG)" "1" + CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/") + CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/") else - BINARY = $(NAME)_$(BIN_SUFFIX_32) - CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 - OPT_FLAGS += -march=i586 + CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1) + CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3) endif -OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) +# Clang || GCC >= 4 +ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1" + CFLAGS += $(C_GCC4_FLAGS) + CPPFLAGS += $(CPP_GCC4_FLAGS) +endif + +# Clang >= 3 || GCC >= 4.7 +ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1" + CFLAGS += -Wno-delete-non-virtual-dtor +endif + +# OS is Linux and not using clang +ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1" + LINK += -static-libgcc +endif + +OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) + +# This will break if we include other Makefiles, but is fine for now. It allows +# us to make a copy of this file that uses altered paths (ie. Makefile.mine) +# or other changes without mucking up the original. +MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) $(BIN_DIR)/%.o: %.cpp - $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $< + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< all: mkdir -p $(BIN_DIR) mkdir -p $(BIN_DIR)/sdk - $(MAKE) fakemeta + $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT) -amd64: - $(MAKE) all AMD64=true - -fakemeta: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) +$(PROJECT): $(OBJ_BIN) + $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY) debug: - $(MAKE) all DEBUG=true + $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true default: all clean: - rm -rf Release/sdk/*.o - rm -rf Release/*.o - rm -rf Release/$(NAME)_$(BIN_SUFFIX_32) - rm -rf Release/$(NAME)_$(BIN_SUFFIX_64) - rm -rf Debug/sdk/*.o - rm -rf Debug/*.o - rm -rf Debug/$(NAME)_$(BIN_SUFFIX_32) - rm -rf Debug/$(NAME)_$(BIN_SUFFIX_64) - + rm -rf $(BIN_DIR)/*.o + rm -rf $(BIN_DIR)/sdk/*.o + rm -f $(BIN_DIR)/$(BINARY) + diff --git a/dlls/fakemeta/dllfunc.cpp b/dlls/fakemeta/dllfunc.cpp index 1cd8da54..42930843 100755 --- a/dlls/fakemeta/dllfunc.cpp +++ b/dlls/fakemeta/dllfunc.cpp @@ -7,9 +7,9 @@ static cell AMX_NATIVE_CALL dllfunc(AMX *amx,cell *params) int index; int indexb; unsigned char *pset; - char *temp = ""; - char *temp2 = ""; - char *temp3 = ""; + const char *temp = ""; + const char *temp2 = ""; + const char *temp3 = ""; vec3_t Vec1; vec3_t Vec2; int iparam1; @@ -105,7 +105,7 @@ static cell AMX_NATIVE_CALL dllfunc(AMX *amx,cell *params) temp = MF_GetAmxString(amx,params[3],0,&len); temp2 = MF_GetAmxString(amx,params[4],1,&len); //temp3 = GET_AMXSTRING(amx,params[5],2,len); - iparam1 = MDLL_ClientConnect(INDEXENT2(index),STRING(ALLOC_STRING(temp)),STRING(ALLOC_STRING(temp2)),temp3); + iparam1 = MDLL_ClientConnect(INDEXENT2(index),STRING(ALLOC_STRING(temp)),STRING(ALLOC_STRING(temp2)),(char *)temp3); cRet = MF_GetAmxAddr(amx,params[6]); MF_SetAmxString(amx,params[5],temp3,cRet[0]); return iparam1; diff --git a/dlls/fakemeta/engfunc.cpp b/dlls/fakemeta/engfunc.cpp index 9dbd108f..c4d278f8 100755 --- a/dlls/fakemeta/engfunc.cpp +++ b/dlls/fakemeta/engfunc.cpp @@ -34,15 +34,15 @@ static cell AMX_NATIVE_CALL engfunc(AMX *amx, cell *params) switch (type) { // pfnPrecacheModel - case EngFunc_PrecacheModel: // int ) (char* s); + case EngFunc_PrecacheModel: // int ) (const char* s); temp = MF_GetAmxString(amx,params[2],0,&len); if (temp[0]==0) return 0; - return (*g_engfuncs.pfnPrecacheModel)((char*)STRING(ALLOC_STRING(temp))); + return (*g_engfuncs.pfnPrecacheModel)((char *)STRING(ALLOC_STRING(temp))); // pfnPrecacheSound - case EngFunc_PrecacheSound: // int ) (char* s); + case EngFunc_PrecacheSound: // int ) (const char* s); temp = MF_GetAmxString(amx,params[2],0,&len); if (temp[0]==0) return 0; diff --git a/dlls/fakemeta/forward.cpp b/dlls/fakemeta/forward.cpp index feb76388..71a2f86e 100755 --- a/dlls/fakemeta/forward.cpp +++ b/dlls/fakemeta/forward.cpp @@ -83,10 +83,10 @@ static cell AMX_NATIVE_CALL fm_return(AMX *amx, cell *params) */ // pfnPrecacheModel -SIMPLE_INT_HOOK_STRING(PrecacheModel); +SIMPLE_INT_HOOK_CONSTSTRING(PrecacheModel); // pfnPrecacheSound -SIMPLE_INT_HOOK_STRING(PrecacheSound); +SIMPLE_INT_HOOK_CONSTSTRING(PrecacheSound); void ClientUserInfoChanged(edict_t *e, char *infobuffer) { @@ -261,7 +261,7 @@ void KeyValue_post(edict_t* entity, KeyValueData* data) RETURN_META(MRES_IGNORED); } -void AlertMessage(ALERT_TYPE atype, char *szFmt, ...) +void AlertMessage(ALERT_TYPE atype, const char *szFmt, ...) { static char buf[2048]; va_list ap; @@ -272,7 +272,7 @@ void AlertMessage(ALERT_TYPE atype, char *szFmt, ...) RETURN_META(mswi(lastFmRes)); } -void AlertMessage_post(ALERT_TYPE atype, char *szFmt, ...) +void AlertMessage_post(ALERT_TYPE atype, const char *szFmt, ...) { static char buf[2048]; va_list ap; @@ -293,7 +293,7 @@ SIMPLE_INT_HOOK_INT(ModelFrames); SIMPLE_VOID_HOOK_EDICT_CONSTVECT_CONSTVECT(SetSize); // pfnChangeLevel -SIMPLE_VOID_HOOK_STRING_STRING(ChangeLevel); +SIMPLE_VOID_HOOK_CONSTSTRING_CONSTSTRING(ChangeLevel); // pfnVecToYaw SIMPLE_FLOAT_HOOK_CONSTVECT(VecToYaw); @@ -507,7 +507,7 @@ SIMPLE_VOID_HOOK_CONSTEDICT_INT_INT_INT_INT(FadeClientVolume); SIMPLE_VOID_HOOK_CONSTEDICT_FLOAT(SetClientMaxspeed); // pfnPrecacheGeneric -SIMPLE_INT_HOOK_STRING(PrecacheGeneric); +SIMPLE_INT_HOOK_CONSTSTRING(PrecacheGeneric); // pfnPrecacheEvent SIMPLE_USHORT_HOOK_INT_CONSTSTRING(PrecacheEvent); @@ -600,17 +600,17 @@ SIMPLE_BOOL_HOOK_INT_INT(Voice_GetClientListening); // pfnVoice_SetClientListening SIMPLE_BOOL_HOOK_INT_INT_BOOL(Voice_SetClientListening); -SIMPLE_STRING_HOOK_STRING_STRING(InfoKeyValue); +SIMPLE_STRING_HOOK_STRING_CONSTSTRING(InfoKeyValue); -SIMPLE_VOID_HOOK_STRING_STRING_STRING(SetKeyValue); +SIMPLE_VOID_HOOK_STRING_CONSTSTRING_CONSTSTRING(SetKeyValue); -SIMPLE_VOID_HOOK_INT_STRING_STRING_STRING(SetClientKeyValue); +SIMPLE_VOID_HOOK_INT_STRING_CONSTSTRING_CONSTSTRING(SetClientKeyValue); SIMPLE_CONSTSTRING_HOOK_EDICT(GetPlayerAuthId); SIMPLE_UINT_HOOK_EDICT(GetPlayerWONId); -SIMPLE_INT_HOOK_STRING(IsMapValid); +SIMPLE_INT_HOOK_CONSTSTRING(IsMapValid); int CreateInstancedBaseline(int classname, struct entity_state_s *baseline) { @@ -725,7 +725,7 @@ SIMPLE_VOID_HOOK_EDICT(SpectatorThink); SIMPLE_VOID_HOOK_CONSTSTRING(Sys_Error); // pfnPM_FindTextureType -SIMPLE_CHAR_HOOK_STRING(PM_FindTextureType); +SIMPLE_CHAR_HOOK_CONSTSTRING(PM_FindTextureType); // pfnRegisterEncoders SIMPLE_VOID_HOOK_VOID(RegisterEncoders); diff --git a/dlls/fakemeta/forwardmacros.h b/dlls/fakemeta/forwardmacros.h index 3f263648..a542e301 100755 --- a/dlls/fakemeta/forwardmacros.h +++ b/dlls/fakemeta/forwardmacros.h @@ -75,6 +75,19 @@ RETURN_META(MRES_IGNORED); \ } +#define SIMPLE_VOID_HOOK_INT_STRING_CONSTSTRING_CONSTSTRING(call) \ + void call (int v,char *c, const char *cb, const char *cc) \ + { \ + FM_ENG_HANDLE(FM_##call, (Engine[FM_##call].at(i),(cell)v,c,cb,cc)); \ + RETURN_META(mswi(lastFmRes)); \ + } \ + void call##_post (int v, char *c, const char *cb, const char *cc) \ + { \ + FM_ENG_HANDLE_POST(FM_##call, (EnginePost[FM_##call].at(i),(cell)v,c,cb,cc)); \ + RETURN_META(MRES_IGNORED); \ + } + + #define SIMPLE_VOID_HOOK_STRING_STRING_STRING(call) \ void call (char *c, char *cb, char *cc) \ { \ @@ -87,6 +100,18 @@ RETURN_META(MRES_IGNORED); \ } +#define SIMPLE_VOID_HOOK_STRING_CONSTSTRING_CONSTSTRING(call) \ + void call (char *c, const char *cb, const char *cc) \ + { \ + FM_ENG_HANDLE(FM_##call, (Engine[FM_##call].at(i),c,cb,cc)); \ + RETURN_META(mswi(lastFmRes)); \ + } \ + void call##_post (char *c, const char *cb, const char *cc) \ + { \ + FM_ENG_HANDLE_POST(FM_##call, (EnginePost[FM_##call].at(i),c,cb,cc)); \ + RETURN_META(MRES_IGNORED); \ + } + #define SIMPLE_STRING_HOOK_STRING_STRING(call) \ char* call (char *c, char *cb) \ { \ @@ -99,6 +124,18 @@ FM_ENG_HANDLE_POST(FM_##call, (EnginePost[FM_##call].at(i),c,cb)); \ RETURN_META_VALUE(MRES_IGNORED, (char*)mlStringResult); \ } +#define SIMPLE_STRING_HOOK_STRING_CONSTSTRING(call) \ + char* call (char *c, const char *cb) \ + { \ + FM_ENG_HANDLE(FM_##call, (Engine[FM_##call].at(i),c,cb)); \ + RETURN_META_VALUE(mswi(lastFmRes), (char*)mlStringResult); \ + } \ + char* call##_post (char *c, const char *cb) \ + { \ + origStringRet = META_RESULT_ORIG_RET(char *); \ + FM_ENG_HANDLE_POST(FM_##call, (EnginePost[FM_##call].at(i),c,cb)); \ + RETURN_META_VALUE(MRES_IGNORED, (char*)mlStringResult); \ + } #define SIMPLE_CONSTSTRING_HOOK_EDICT(call) \ const char* call (edict_t *e) \ { \ @@ -175,6 +212,19 @@ FM_ENG_HANDLE_POST(FM_##call, (EnginePost[FM_##call].at(i), s)); \ RETURN_META_VALUE(MRES_IGNORED, (char)mlCellResult); \ } +#define SIMPLE_CHAR_HOOK_CONSTSTRING(call) \ + char call (const char *s) \ + { \ + FM_ENG_HANDLE(FM_##call, (Engine[FM_##call].at(i), s)); \ + RETURN_META_VALUE(mswi(lastFmRes), (char)mlCellResult); \ + } \ + char call##_post (const char *s) \ + { \ + origCellRet = META_RESULT_ORIG_RET(char); \ + FM_ENG_HANDLE_POST(FM_##call, (EnginePost[FM_##call].at(i), s)); \ + RETURN_META_VALUE(MRES_IGNORED, (char)mlCellResult); \ + } + #define SIMPLE_VOID_HOOK_CONSTSTRING(call) \ void call (const char *s) \ { \ diff --git a/dlls/fakemeta/pdata.cpp b/dlls/fakemeta/pdata.cpp index c30aba64..30766a95 100755 --- a/dlls/fakemeta/pdata.cpp +++ b/dlls/fakemeta/pdata.cpp @@ -1,5 +1,17 @@ #include "fakemeta_amxx.h" +#if defined PAWN_CELL_SIZE +# if PAWN_CELL_SIZE == 16 +# define CELL_MIN SHRT_MIN +# elif PAWN_CELL_SIZE == 32 +# define CELL_MIN INT_MIN +# elif PAWN_CELL_SIZE == 64 +# define CELL_MIN _I64_MIN +# endif +#else +# define CELL_MIN _I32_MIN +#endif + #if defined WIN32 #define WINDOWS_LEAN_AND_MEAN #include @@ -24,6 +36,12 @@ static cell AMX_NATIVE_CALL set_pdata_int(AMX *amx, cell *params) return 1; #ifdef __linux__ iOffset += params[4]; +#elif defined __APPLE__ + // Use Linux offset in older plugins + if (params[0] / sizeof(cell) == 4) + iOffset += params[4]; + else + iOffset += params[5]; #endif int iValue=params[3]; *((int *)INDEXENT2(index)->pvPrivateData + iOffset) = iValue; @@ -38,7 +56,14 @@ static cell AMX_NATIVE_CALL get_pdata_int(AMX *amx, cell *params) return 0; #ifdef __linux__ iOffset += params[3]; +#elif defined __APPLE__ + // Use Linux offset in older plugins + if (params[0] / sizeof(cell) == 3) + iOffset += params[3]; + else + iOffset += params[4]; #endif + return *((int *)INDEXENT2(index)->pvPrivateData + iOffset); } // Float @@ -51,7 +76,14 @@ static cell AMX_NATIVE_CALL set_pdata_float(AMX *amx, cell *params) return 1; #ifdef __linux__ iOffset += params[4]; +#elif defined __APPLE__ + // Use Linux offset in older plugins + if (params[0] / sizeof(cell) == 4) + iOffset += params[4]; + else + iOffset += params[5]; #endif + float fValue=amx_ctof(params[3]); *((float *)INDEXENT2(index)->pvPrivateData + iOffset) = fValue; return 1; @@ -65,7 +97,14 @@ static cell AMX_NATIVE_CALL get_pdata_float(AMX *amx, cell *params) return 1; #ifdef __linux__ iOffset += params[3]; +#elif defined __APPLE__ + // Use Linux offset in older plugins + if (params[0] / sizeof(cell) == 3) + iOffset += params[3]; + else + iOffset += params[4]; #endif + return amx_ftoc(*((float *)INDEXENT2(index)->pvPrivateData + iOffset)); } @@ -79,6 +118,12 @@ static cell AMX_NATIVE_CALL get_pdata_string(AMX *amx, cell *params) return 1; #ifdef __linux__ iOffset += params[6]; +#elif defined __APPLE__ + // Use Linux offset in older plugins + if (params[0] / sizeof(cell) == 6 || params[7] == CELL_MIN) + iOffset += params[6]; + else + iOffset += params[7]; #endif edict_t *pEdict = INDEXENT2(index); @@ -111,6 +156,12 @@ static cell AMX_NATIVE_CALL set_pdata_string(AMX *amx, cell *params) return 1; #ifdef __linux__ iOffset += params[5]; +#elif defined __APPLE__ + // Use Linux offset in older plugins + if (params[0] / sizeof(cell) == 5 || params[6] == CELL_MIN) + iOffset += params[5]; + else + iOffset += params[6]; #endif edict_t *pEdict = INDEXENT2(index); @@ -152,6 +203,12 @@ static cell AMX_NATIVE_CALL get_pdata_ent(AMX *amx, cell *params) #ifdef __linux__ iOffset += params[3]; +#elif defined __APPLE__ + // Use Linux offset in older plugins + if (params[0] / sizeof(cell) == 3) + iOffset += params[3]; + else + iOffset += params[4]; #endif edict_t *pEdict = *(edict_t **)((char *)(INDEXENT2(index)->pvPrivateData) + iOffset); diff --git a/dlls/fakemeta/sdk/CString.h b/dlls/fakemeta/sdk/CString.h index 3f9d6531..18f68737 100755 --- a/dlls/fakemeta/sdk/CString.h +++ b/dlls/fakemeta/sdk/CString.h @@ -244,7 +244,7 @@ public: if (is_space(v[len-1])) { - for (i=len-1; i>=0; i--) + for (i=len-1; i //========================================================= -void UTIL_LogPrintf( char *fmt, ... ) +void UTIL_LogPrintf( const char *fmt, ... ) { va_list argptr; static char string[1024]; diff --git a/dlls/fakemeta/sdk/amxxmodule.h b/dlls/fakemeta/sdk/amxxmodule.h index c53b72da..9e42b72f 100755 --- a/dlls/fakemeta/sdk/amxxmodule.h +++ b/dlls/fakemeta/sdk/amxxmodule.h @@ -20,11 +20,16 @@ // DLL Export #undef DLLEXPORT -#ifndef __linux__ +#if defined(_WIN32) #define DLLEXPORT __declspec(dllexport) #else #define DLLEXPORT __attribute__((visibility("default"))) +#endif + +#if defined(__linux__) && !defined(LINUX) #define LINUX +#elif defined(__APPLE__) && !defined(OSX) +#define OSX #endif #undef C_DLLEXPORT @@ -66,7 +71,7 @@ struct amxx_module_info_s #if defined HAVE_STDINT_H #include #else - #if defined __LCC__ || defined __DMC__ || defined LINUX + #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__ #if defined HAVE_INTTYPES_H #include #else @@ -308,7 +313,7 @@ typedef int (AMXAPI *AMX_DEBUG)(struct tagAMX *amx); #endif #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack(1) /* structures must be packed (byte-aligned) */ #elif defined MACOS && defined __MWERKS__ #pragma options align=mac68k @@ -395,7 +400,7 @@ enum { }; #if !defined AMX_NO_ALIGN - #if defined __linux__ + #if defined(__linux__) || defined(__APPLE__) #pragma pack() /* reset default packing */ #else #pragma pack(pop) /* reset previous packing */ @@ -406,7 +411,7 @@ enum { // ***** declare functions ***** #ifdef USE_METAMOD -void UTIL_LogPrintf( char *fmt, ... ); +void UTIL_LogPrintf( const char *fmt, ... ); void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage); short FixedSigned16( float value, float scale ); unsigned short FixedUnsigned16( float value, float scale ); @@ -833,11 +838,11 @@ int FN_AllowLagCompensation_Post(void); #ifdef FN_PrecacheModel -int FN_PrecacheModel(char *s); +int FN_PrecacheModel(const char *s); #endif // FN_PrecacheModel #ifdef FN_PrecacheSound -int FN_PrecacheSound(char *s); +int FN_PrecacheSound(const char *s); #endif // FN_PrecacheSound #ifdef FN_SetModel @@ -857,7 +862,7 @@ void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize #ifdef FN_ChangeLevel -void FN_ChangeLevel(char *s1, char *s2); +void FN_ChangeLevel(const char *s1, const char *s2); #endif // FN_ChangeLevel #ifdef FN_GetSpawnParms @@ -1261,19 +1266,19 @@ char *FN_GetInfoKeyBuffer(edict_t *e); #endif // FN_GetInfoKeyBuffer #ifdef FN_InfoKeyValue -char *FN_InfoKeyValue(char *infobuffer, char *key); +char *FN_InfoKeyValue(char *infobuffer, const char *key); #endif // FN_InfoKeyValue #ifdef FN_SetKeyValue -void FN_SetKeyValue(char *infobuffer, char *key, char *value); +void FN_SetKeyValue(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue #ifdef FN_SetClientKeyValue -void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue #ifdef FN_IsMapValid -int FN_IsMapValid(char *filename); +int FN_IsMapValid(const char *filename); #endif // FN_IsMapValid #ifdef FN_StaticDecal @@ -1281,7 +1286,7 @@ void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int mo #endif // FN_StaticDecal #ifdef FN_PrecacheGeneric -int FN_PrecacheGeneric(char *s); +int FN_PrecacheGeneric(const char *s); #endif // FN_PrecacheGeneric #ifdef FN_GetPlayerUserId @@ -1414,11 +1419,11 @@ const char *FN_GetPlayerAuthId(edict_t *e); #ifdef FN_PrecacheModel_Post -int FN_PrecacheModel_Post(char *s); +int FN_PrecacheModel_Post(const char *s); #endif // FN_PrecacheModel_Post #ifdef FN_PrecacheSound_Post -int FN_PrecacheSound_Post(char *s); +int FN_PrecacheSound_Post(const char *s); #endif // FN_PrecacheSound_Post #ifdef FN_SetModel_Post @@ -1438,7 +1443,7 @@ void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize_Post #ifdef FN_ChangeLevel_Post -void FN_ChangeLevel_Post(char *s1, char *s2); +void FN_ChangeLevel_Post(const char *s1, const char *s2); #endif // FN_ChangeLevel_Post #ifdef FN_GetSpawnParms_Post @@ -1842,19 +1847,19 @@ char *FN_GetInfoKeyBuffer_Post(edict_t *e); #endif // FN_GetInfoKeyBuffer_Post #ifdef FN_InfoKeyValue_Post -char *FN_InfoKeyValue_Post(char *infobuffer, char *key); +char *FN_InfoKeyValue_Post(char *infobuffer, const char *key); #endif // FN_InfoKeyValue_Post #ifdef FN_SetKeyValue_Post -void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value); +void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue_Post #ifdef FN_SetClientKeyValue_Post -void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue_Post #ifdef FN_IsMapValid_Post -int FN_IsMapValid_Post(char *filename); +int FN_IsMapValid_Post(const char *filename); #endif // FN_IsMapValid_Post #ifdef FN_StaticDecal_Post @@ -1862,7 +1867,7 @@ void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, i #endif // FN_StaticDecal_Post #ifdef FN_PrecacheGeneric_Post -int FN_PrecacheGeneric_Post(char *s); +int FN_PrecacheGeneric_Post(const char *s); #endif // FN_PrecacheGeneric_Post #ifdef FN_GetPlayerUserId_Post @@ -2116,7 +2121,7 @@ typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/); typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...); typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...); typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/); -typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...); +typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...); typedef const char * (*PFN_GET_MODNAME) (void); typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/); typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/); @@ -2175,8 +2180,8 @@ typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned i typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/); typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/); typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/); -typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); -typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */); typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/); typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/); diff --git a/dlls/fun/Makefile b/dlls/fun/Makefile index 9fd7fa5f..670a7171 100755 --- a/dlls/fun/Makefile +++ b/dlls/fun/Makefile @@ -1,78 +1,123 @@ -#(C)2004-2005 AMX Mod X Development Team +# (C)2004-2013 AMX Mod X Development Team # Makefile written by David "BAILOPAN" Anderson -HLSDK = ../../../hlsdk +########################################### +### EDIT THESE PATHS FOR YOUR OWN SETUP ### +########################################### + +HLSDK = ../../../hlsdk/multiplayer MM_ROOT = ../../../metamod/metamod +##################################### ### EDIT BELOW FOR OTHER PROJECTS ### +##################################### -OPT_FLAGS = -O2 -funroll-loops -s -pipe -fomit-frame-pointer -fno-strict-aliasing -DEBUG_FLAGS = -g -ggdb3 -CPP = gcc-4.1 -NAME = fun - -BIN_SUFFIX_32 = amxx_i386.so -BIN_SUFFIX_64 = amxx_amd64.so +PROJECT = fun OBJECTS = sdk/amxxmodule.cpp fun.cpp -LINK = +############################################## +### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### +############################################## -INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \ - -I$(MM_ROOT) -I$(HLSDK)/common -Isdk +C_OPT_FLAGS = -DNDEBUG -O2 -funroll-loops -fomit-frame-pointer -pipe +C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3 +C_GCC4_FLAGS = -fvisibility=hidden +CPP_GCC4_FLAGS = -fvisibility-inlines-hidden +CPP = gcc +CPP_OSX = clang -GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) +LINK = -ifeq "$(GCC_VERSION)" "4" - OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden +INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \ + -I$(MM_ROOT) -Isdk + +################################################ +### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### +################################################ + +OS := $(shell uname -s) + +ifeq "$(OS)" "Darwin" + CPP = $(CPP_OSX) + LIB_EXT = dylib + LIB_SUFFIX = _amxx + CFLAGS += -DOSX + LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5 +else + LIB_EXT = so + LIB_SUFFIX = _amxx_i386 + CFLAGS += -DLINUX + LINK += -shared endif +LINK += -m32 -lm -ldl + +CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror +CPPFLAGS += -fno-exceptions -fno-rtti + +BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT) + ifeq "$(DEBUG)" "true" BIN_DIR = Debug - CFLAGS = $(DEBUG_FLAGS) + CFLAGS += $(C_DEBUG_FLAGS) else BIN_DIR = Release - CFLAGS = $(OPT_FLAGS) + CFLAGS += $(C_OPT_FLAGS) + LINK += -s endif -CFLAGS += -DNDEBUG -Wall -Wno-non-virtual-dtor -Werror -fno-exceptions -DHAVE_STDINT_H -fno-rtti -static-libgcc -m32 +IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0") -ifeq "$(AMD64)" "true" - BINARY = $(NAME)_$(BIN_SUFFIX_64) - CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -m64 +ifeq "$(IS_CLANG)" "1" + CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/") + CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/") else - BINARY = $(NAME)_$(BIN_SUFFIX_32) - CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 - OPT_FLAGS += -march=i586 + CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1) + CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3) endif -OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) +# Clang || GCC >= 4 +ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1" + CFLAGS += $(C_GCC4_FLAGS) + CPPFLAGS += $(CPP_GCC4_FLAGS) +endif + +# Clang >= 3 || GCC >= 4.7 +ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1" + CFLAGS += -Wno-delete-non-virtual-dtor +endif + +# OS is Linux and not using clang +ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1" + LINK += -static-libgcc +endif + +OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) + +# This will break if we include other Makefiles, but is fine for now. It allows +# us to make a copy of this file that uses altered paths (ie. Makefile.mine) +# or other changes without mucking up the original. +MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) $(BIN_DIR)/%.o: %.cpp - $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $< + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< all: mkdir -p $(BIN_DIR) mkdir -p $(BIN_DIR)/sdk - $(MAKE) fun + $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT) -amd64: - $(MAKE) all AMD64=true +$(PROJECT): $(OBJ_BIN) + $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY) -fun: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) - -debug: - $(MAKE) all DEBUG=true +debug: + $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true default: all clean: - rm -rf Release/sdk/*.o - rm -rf Release/*.o - rm -rf Release/$(NAME)_$(BIN_SUFFIX_32) - rm -rf Release/$(NAME)_$(BIN_SUFFIX_64) - rm -rf Debug/sdk/*.o - rm -rf Debug/*.o - rm -rf Debug/$(NAME)_$(BIN_SUFFIX_32) - rm -rf Debug/$(NAME)_$(BIN_SUFFIX_64) + rm -rf $(BIN_DIR)/*.o + rm -rf $(BIN_DIR)/sdk/*.o + rm -f $(BIN_DIR)/$(BINARY) + diff --git a/dlls/fun/sdk/amxxmodule.cpp b/dlls/fun/sdk/amxxmodule.cpp index a634e9ac..faf8f75c 100755 --- a/dlls/fun/sdk/amxxmodule.cpp +++ b/dlls/fun/sdk/amxxmodule.cpp @@ -2240,7 +2240,7 @@ static META_FUNCTIONS g_MetaFunctions_Table = GetEngineFunctions_Post }; -C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) +C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) { if ((int) CVAR_GET_FLOAT("developer") != 0) UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n", @@ -2334,7 +2334,7 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason) -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) // linux prototype C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) { @@ -3050,7 +3050,7 @@ char* UTIL_VarArgs( char *format, ... ) // UTIL_LogPrintf - Prints a logged message to console. // Preceded by LOG: ( timestamp ) < message > //========================================================= -void UTIL_LogPrintf( char *fmt, ... ) +void UTIL_LogPrintf( const char *fmt, ... ) { va_list argptr; static char string[1024]; diff --git a/dlls/fun/sdk/amxxmodule.h b/dlls/fun/sdk/amxxmodule.h index c53b72da..9e42b72f 100755 --- a/dlls/fun/sdk/amxxmodule.h +++ b/dlls/fun/sdk/amxxmodule.h @@ -20,11 +20,16 @@ // DLL Export #undef DLLEXPORT -#ifndef __linux__ +#if defined(_WIN32) #define DLLEXPORT __declspec(dllexport) #else #define DLLEXPORT __attribute__((visibility("default"))) +#endif + +#if defined(__linux__) && !defined(LINUX) #define LINUX +#elif defined(__APPLE__) && !defined(OSX) +#define OSX #endif #undef C_DLLEXPORT @@ -66,7 +71,7 @@ struct amxx_module_info_s #if defined HAVE_STDINT_H #include #else - #if defined __LCC__ || defined __DMC__ || defined LINUX + #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__ #if defined HAVE_INTTYPES_H #include #else @@ -308,7 +313,7 @@ typedef int (AMXAPI *AMX_DEBUG)(struct tagAMX *amx); #endif #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack(1) /* structures must be packed (byte-aligned) */ #elif defined MACOS && defined __MWERKS__ #pragma options align=mac68k @@ -395,7 +400,7 @@ enum { }; #if !defined AMX_NO_ALIGN - #if defined __linux__ + #if defined(__linux__) || defined(__APPLE__) #pragma pack() /* reset default packing */ #else #pragma pack(pop) /* reset previous packing */ @@ -406,7 +411,7 @@ enum { // ***** declare functions ***** #ifdef USE_METAMOD -void UTIL_LogPrintf( char *fmt, ... ); +void UTIL_LogPrintf( const char *fmt, ... ); void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage); short FixedSigned16( float value, float scale ); unsigned short FixedUnsigned16( float value, float scale ); @@ -833,11 +838,11 @@ int FN_AllowLagCompensation_Post(void); #ifdef FN_PrecacheModel -int FN_PrecacheModel(char *s); +int FN_PrecacheModel(const char *s); #endif // FN_PrecacheModel #ifdef FN_PrecacheSound -int FN_PrecacheSound(char *s); +int FN_PrecacheSound(const char *s); #endif // FN_PrecacheSound #ifdef FN_SetModel @@ -857,7 +862,7 @@ void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize #ifdef FN_ChangeLevel -void FN_ChangeLevel(char *s1, char *s2); +void FN_ChangeLevel(const char *s1, const char *s2); #endif // FN_ChangeLevel #ifdef FN_GetSpawnParms @@ -1261,19 +1266,19 @@ char *FN_GetInfoKeyBuffer(edict_t *e); #endif // FN_GetInfoKeyBuffer #ifdef FN_InfoKeyValue -char *FN_InfoKeyValue(char *infobuffer, char *key); +char *FN_InfoKeyValue(char *infobuffer, const char *key); #endif // FN_InfoKeyValue #ifdef FN_SetKeyValue -void FN_SetKeyValue(char *infobuffer, char *key, char *value); +void FN_SetKeyValue(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue #ifdef FN_SetClientKeyValue -void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue #ifdef FN_IsMapValid -int FN_IsMapValid(char *filename); +int FN_IsMapValid(const char *filename); #endif // FN_IsMapValid #ifdef FN_StaticDecal @@ -1281,7 +1286,7 @@ void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int mo #endif // FN_StaticDecal #ifdef FN_PrecacheGeneric -int FN_PrecacheGeneric(char *s); +int FN_PrecacheGeneric(const char *s); #endif // FN_PrecacheGeneric #ifdef FN_GetPlayerUserId @@ -1414,11 +1419,11 @@ const char *FN_GetPlayerAuthId(edict_t *e); #ifdef FN_PrecacheModel_Post -int FN_PrecacheModel_Post(char *s); +int FN_PrecacheModel_Post(const char *s); #endif // FN_PrecacheModel_Post #ifdef FN_PrecacheSound_Post -int FN_PrecacheSound_Post(char *s); +int FN_PrecacheSound_Post(const char *s); #endif // FN_PrecacheSound_Post #ifdef FN_SetModel_Post @@ -1438,7 +1443,7 @@ void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize_Post #ifdef FN_ChangeLevel_Post -void FN_ChangeLevel_Post(char *s1, char *s2); +void FN_ChangeLevel_Post(const char *s1, const char *s2); #endif // FN_ChangeLevel_Post #ifdef FN_GetSpawnParms_Post @@ -1842,19 +1847,19 @@ char *FN_GetInfoKeyBuffer_Post(edict_t *e); #endif // FN_GetInfoKeyBuffer_Post #ifdef FN_InfoKeyValue_Post -char *FN_InfoKeyValue_Post(char *infobuffer, char *key); +char *FN_InfoKeyValue_Post(char *infobuffer, const char *key); #endif // FN_InfoKeyValue_Post #ifdef FN_SetKeyValue_Post -void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value); +void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue_Post #ifdef FN_SetClientKeyValue_Post -void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue_Post #ifdef FN_IsMapValid_Post -int FN_IsMapValid_Post(char *filename); +int FN_IsMapValid_Post(const char *filename); #endif // FN_IsMapValid_Post #ifdef FN_StaticDecal_Post @@ -1862,7 +1867,7 @@ void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, i #endif // FN_StaticDecal_Post #ifdef FN_PrecacheGeneric_Post -int FN_PrecacheGeneric_Post(char *s); +int FN_PrecacheGeneric_Post(const char *s); #endif // FN_PrecacheGeneric_Post #ifdef FN_GetPlayerUserId_Post @@ -2116,7 +2121,7 @@ typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/); typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...); typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...); typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/); -typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...); +typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...); typedef const char * (*PFN_GET_MODNAME) (void); typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/); typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/); @@ -2175,8 +2180,8 @@ typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned i typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/); typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/); typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/); -typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); -typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */); typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/); typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/); diff --git a/dlls/geoip/Makefile b/dlls/geoip/Makefile index 3b8f9d65..fb2cb96e 100755 --- a/dlls/geoip/Makefile +++ b/dlls/geoip/Makefile @@ -1,86 +1,127 @@ -#(C)2004-2005 AMX Mod X Development Team +# (C)2004-2013 AMX Mod X Development Team # Makefile written by David "BAILOPAN" Anderson -HLSDK = ../../../hlsdk +########################################### +### EDIT THESE PATHS FOR YOUR OWN SETUP ### +########################################### + +HLSDK = ../../../hlsdk/multiplayer MM_ROOT = ../../../metamod/metamod +##################################### ### EDIT BELOW FOR OTHER PROJECTS ### +##################################### -OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing -fomit-frame-pointer -DEBUG_FLAGS = -g -ggdb3 -CPP = gcc-4.1 -NAME = geoip - -BIN_SUFFIX_32 = amxx_i386.so -BIN_SUFFIX_64 = amxx_amd64.so +PROJECT = geoip OBJECTS = sdk/amxxmodule.cpp GeoIP.c geoip_amxx.cpp -LINK = +############################################## +### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### +############################################## -INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \ - -I$(MM_ROOT) -I$(HLSDK)/common -Isdk +C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -fomit-frame-pointer -pipe +C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3 +C_GCC4_FLAGS = -fvisibility=hidden +CPP_GCC4_FLAGS = -fvisibility-inlines-hidden +CPP = gcc +CPP_OSX = clang -GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) +LINK = -ifeq "$(GCC_VERSION)" "4" - OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden +INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \ + -I$(MM_ROOT) -Isdk + +################################################ +### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### +################################################ + +OS := $(shell uname -s) + +ifeq "$(OS)" "Darwin" + CPP = $(CPP_OSX) + LIB_EXT = dylib + LIB_SUFFIX = _amxx + CFLAGS += -DOSX + LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5 +else + LIB_EXT = so + LIB_SUFFIX = _amxx_i386 + CFLAGS += -DLINUX + LINK += -shared endif +LINK += -m32 -lm -ldl + +CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror +CPPFLAGS += -fno-exceptions -fno-rtti + +BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT) + ifeq "$(DEBUG)" "true" BIN_DIR = Debug - CFLAGS = $(DEBUG_FLAGS) + CFLAGS += $(C_DEBUG_FLAGS) else BIN_DIR = Release - CFLAGS = $(OPT_FLAGS) + CFLAGS += $(C_OPT_FLAGS) + LINK += -s endif -CFLAGS += -DNDEBUG -Wall -Werror -fno-exceptions -DHAVE_STDINT_H -static-libgcc -fno-rtti -m32 +IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0") -# Strip C++ options for compiling *.c files -C_CFLAGS := $(shell echo $(CFLAGS) | sed -e 's/-fvisibility-inlines-hidden//' | sed -e 's/-fno-rtti//') - -ifeq "$(AMD64)" "true" - BINARY = $(NAME)_$(BIN_SUFFIX_64) - CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -m64 +ifeq "$(IS_CLANG)" "1" + CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/") + CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/") else - BINARY = $(NAME)_$(BIN_SUFFIX_32) - CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 - OPT_FLAGS += -march=i586 + CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1) + CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3) endif -OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) -OBJ_LINUX := $(OBJ_LINUX:%.c=$(BIN_DIR)/%.o) +# Clang || GCC >= 4 +ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1" + CFLAGS += $(C_GCC4_FLAGS) + CPPFLAGS += $(CPP_GCC4_FLAGS) +endif + +# Clang >= 3 || GCC >= 4.7 +ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1" + CFLAGS += -Wno-delete-non-virtual-dtor +endif + +# OS is Linux and not using clang +ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1" + LINK += -static-libgcc +endif + +OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) +OBJ_BIN := $(OBJ_BIN:%.c=$(BIN_DIR)/%.o) + +# This will break if we include other Makefiles, but is fine for now. It allows +# us to make a copy of this file that uses altered paths (ie. Makefile.mine) +# or other changes without mucking up the original. +MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) $(BIN_DIR)/%.o: %.cpp - $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $< + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< $(BIN_DIR)/%.o: %.c - $(CPP) $(INCLUDE) $(C_CFLAGS) -o $@ -c $< + $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $< all: mkdir -p $(BIN_DIR) mkdir -p $(BIN_DIR)/sdk - $(MAKE) geoip + $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT) -amd64: - $(MAKE) all AMD64=true +$(PROJECT): $(OBJ_BIN) + $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY) -geoip: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) - -debug: - $(MAKE) all DEBUG=true +debug: + $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true default: all clean: - rm -rf Release/sdk/*.o - rm -rf Release/*.o - rm -rf Release/$(NAME)_$(BIN_SUFFIX_32) - rm -rf Release/$(NAME)_$(BIN_SUFFIX_64) - rm -rf Debug/sdk/*.o - rm -rf Debug/*.o - rm -rf Debug/$(NAME)_$(BIN_SUFFIX_32) - rm -rf Debug/$(NAME)_$(BIN_SUFFIX_64) + rm -rf $(BIN_DIR)/*.o + rm -rf $(BIN_DIR)/sdk/*.o + rm -f $(BIN_DIR)/$(BINARY) diff --git a/dlls/geoip/sdk/amxxmodule.cpp b/dlls/geoip/sdk/amxxmodule.cpp index a634e9ac..faf8f75c 100755 --- a/dlls/geoip/sdk/amxxmodule.cpp +++ b/dlls/geoip/sdk/amxxmodule.cpp @@ -2240,7 +2240,7 @@ static META_FUNCTIONS g_MetaFunctions_Table = GetEngineFunctions_Post }; -C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) +C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) { if ((int) CVAR_GET_FLOAT("developer") != 0) UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n", @@ -2334,7 +2334,7 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason) -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) // linux prototype C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) { @@ -3050,7 +3050,7 @@ char* UTIL_VarArgs( char *format, ... ) // UTIL_LogPrintf - Prints a logged message to console. // Preceded by LOG: ( timestamp ) < message > //========================================================= -void UTIL_LogPrintf( char *fmt, ... ) +void UTIL_LogPrintf( const char *fmt, ... ) { va_list argptr; static char string[1024]; diff --git a/dlls/geoip/sdk/amxxmodule.h b/dlls/geoip/sdk/amxxmodule.h index c53b72da..9e42b72f 100755 --- a/dlls/geoip/sdk/amxxmodule.h +++ b/dlls/geoip/sdk/amxxmodule.h @@ -20,11 +20,16 @@ // DLL Export #undef DLLEXPORT -#ifndef __linux__ +#if defined(_WIN32) #define DLLEXPORT __declspec(dllexport) #else #define DLLEXPORT __attribute__((visibility("default"))) +#endif + +#if defined(__linux__) && !defined(LINUX) #define LINUX +#elif defined(__APPLE__) && !defined(OSX) +#define OSX #endif #undef C_DLLEXPORT @@ -66,7 +71,7 @@ struct amxx_module_info_s #if defined HAVE_STDINT_H #include #else - #if defined __LCC__ || defined __DMC__ || defined LINUX + #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__ #if defined HAVE_INTTYPES_H #include #else @@ -308,7 +313,7 @@ typedef int (AMXAPI *AMX_DEBUG)(struct tagAMX *amx); #endif #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack(1) /* structures must be packed (byte-aligned) */ #elif defined MACOS && defined __MWERKS__ #pragma options align=mac68k @@ -395,7 +400,7 @@ enum { }; #if !defined AMX_NO_ALIGN - #if defined __linux__ + #if defined(__linux__) || defined(__APPLE__) #pragma pack() /* reset default packing */ #else #pragma pack(pop) /* reset previous packing */ @@ -406,7 +411,7 @@ enum { // ***** declare functions ***** #ifdef USE_METAMOD -void UTIL_LogPrintf( char *fmt, ... ); +void UTIL_LogPrintf( const char *fmt, ... ); void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage); short FixedSigned16( float value, float scale ); unsigned short FixedUnsigned16( float value, float scale ); @@ -833,11 +838,11 @@ int FN_AllowLagCompensation_Post(void); #ifdef FN_PrecacheModel -int FN_PrecacheModel(char *s); +int FN_PrecacheModel(const char *s); #endif // FN_PrecacheModel #ifdef FN_PrecacheSound -int FN_PrecacheSound(char *s); +int FN_PrecacheSound(const char *s); #endif // FN_PrecacheSound #ifdef FN_SetModel @@ -857,7 +862,7 @@ void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize #ifdef FN_ChangeLevel -void FN_ChangeLevel(char *s1, char *s2); +void FN_ChangeLevel(const char *s1, const char *s2); #endif // FN_ChangeLevel #ifdef FN_GetSpawnParms @@ -1261,19 +1266,19 @@ char *FN_GetInfoKeyBuffer(edict_t *e); #endif // FN_GetInfoKeyBuffer #ifdef FN_InfoKeyValue -char *FN_InfoKeyValue(char *infobuffer, char *key); +char *FN_InfoKeyValue(char *infobuffer, const char *key); #endif // FN_InfoKeyValue #ifdef FN_SetKeyValue -void FN_SetKeyValue(char *infobuffer, char *key, char *value); +void FN_SetKeyValue(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue #ifdef FN_SetClientKeyValue -void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue #ifdef FN_IsMapValid -int FN_IsMapValid(char *filename); +int FN_IsMapValid(const char *filename); #endif // FN_IsMapValid #ifdef FN_StaticDecal @@ -1281,7 +1286,7 @@ void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int mo #endif // FN_StaticDecal #ifdef FN_PrecacheGeneric -int FN_PrecacheGeneric(char *s); +int FN_PrecacheGeneric(const char *s); #endif // FN_PrecacheGeneric #ifdef FN_GetPlayerUserId @@ -1414,11 +1419,11 @@ const char *FN_GetPlayerAuthId(edict_t *e); #ifdef FN_PrecacheModel_Post -int FN_PrecacheModel_Post(char *s); +int FN_PrecacheModel_Post(const char *s); #endif // FN_PrecacheModel_Post #ifdef FN_PrecacheSound_Post -int FN_PrecacheSound_Post(char *s); +int FN_PrecacheSound_Post(const char *s); #endif // FN_PrecacheSound_Post #ifdef FN_SetModel_Post @@ -1438,7 +1443,7 @@ void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize_Post #ifdef FN_ChangeLevel_Post -void FN_ChangeLevel_Post(char *s1, char *s2); +void FN_ChangeLevel_Post(const char *s1, const char *s2); #endif // FN_ChangeLevel_Post #ifdef FN_GetSpawnParms_Post @@ -1842,19 +1847,19 @@ char *FN_GetInfoKeyBuffer_Post(edict_t *e); #endif // FN_GetInfoKeyBuffer_Post #ifdef FN_InfoKeyValue_Post -char *FN_InfoKeyValue_Post(char *infobuffer, char *key); +char *FN_InfoKeyValue_Post(char *infobuffer, const char *key); #endif // FN_InfoKeyValue_Post #ifdef FN_SetKeyValue_Post -void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value); +void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue_Post #ifdef FN_SetClientKeyValue_Post -void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue_Post #ifdef FN_IsMapValid_Post -int FN_IsMapValid_Post(char *filename); +int FN_IsMapValid_Post(const char *filename); #endif // FN_IsMapValid_Post #ifdef FN_StaticDecal_Post @@ -1862,7 +1867,7 @@ void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, i #endif // FN_StaticDecal_Post #ifdef FN_PrecacheGeneric_Post -int FN_PrecacheGeneric_Post(char *s); +int FN_PrecacheGeneric_Post(const char *s); #endif // FN_PrecacheGeneric_Post #ifdef FN_GetPlayerUserId_Post @@ -2116,7 +2121,7 @@ typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/); typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...); typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...); typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/); -typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...); +typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...); typedef const char * (*PFN_GET_MODNAME) (void); typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/); typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/); @@ -2175,8 +2180,8 @@ typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned i typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/); typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/); typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/); -typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); -typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */); typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/); typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/); diff --git a/dlls/hamsandwich/Makefile b/dlls/hamsandwich/Makefile index c41821c3..12b186d1 100644 --- a/dlls/hamsandwich/Makefile +++ b/dlls/hamsandwich/Makefile @@ -1,74 +1,124 @@ -#(C)2004-2005 AMX Mod X Development Team +# (C)2004-2013 AMX Mod X Development Team # Makefile written by David "BAILOPAN" Anderson -HLSDK = ../../../hlsdk +########################################### +### EDIT THESE PATHS FOR YOUR OWN SETUP ### +########################################### + +HLSDK = ../../../hlsdk/multiplayer MM_ROOT = ../../../metamod/metamod +##################################### ### EDIT BELOW FOR OTHER PROJECTS ### +##################################### +PROJECT = hamsandwich -OPT_FLAGS = -O3 -funroll-loops -s -pipe -fomit-frame-pointer -fno-strict-aliasing -DNDEBUG +OBJECTS = sdk/amxxmodule.cpp amxx_api.cpp config_parser.cpp hook_callbacks.cpp hook_native.cpp \ + srvcmd.cpp call_funcs.cpp hook_create.cpp DataHandler.cpp pdata.cpp -DEBUG_FLAGS = -g -ggdb3 -CPP = gcc-4.1 -#CPP = gcc-2.95 -NAME = hamsandwich +############################################## +### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### +############################################## -BIN_SUFFIX = amxx_i386.so +C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -fomit-frame-pointer -pipe +C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3 +C_GCC4_FLAGS = -fvisibility=hidden +CPP_GCC4_FLAGS = -fvisibility-inlines-hidden +CPP = gcc +CPP_OSX = clang -OBJECTS = sdk/amxxmodule.cpp amxx_api.cpp config_parser.cpp \ -hook_callbacks.cpp hook_native.cpp srvcmd.cpp \ -call_funcs.cpp hook_create.cpp DataHandler.cpp pdata.cpp +LINK = +INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \ + -I$(HLSDK)/pm_shared -I$(MM_ROOT) -Isdk -LINK = +################################################ +### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### +################################################ -INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \ - -I$(MM_ROOT) -I$(HLSDK)/common -I$(HLSDK)/pm_shared -I./tableentries -Isdk +OS := $(shell uname -s) -GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) +ifeq "$(OS)" "Darwin" + CPP = $(CPP_OSX) + LIB_EXT = dylib + LIB_SUFFIX = _amxx + CFLAGS += -DOSX + LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5 +else + LIB_EXT = so + LIB_SUFFIX = _amxx_i386 + CFLAGS += -DLINUX + LINK += -shared +endif + +LINK += -m32 -lm -ldl + +CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror +CPPFLAGS += -fno-exceptions -fno-rtti + +BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT) ifeq "$(DEBUG)" "true" BIN_DIR = Debug - CFLAGS = $(DEBUG_FLAGS) + CFLAGS += $(C_DEBUG_FLAGS) else BIN_DIR = Release - - ifeq "$(GCC_VERSION)" "4" - OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden - endif - CFLAGS = $(OPT_FLAGS) + CFLAGS += $(C_OPT_FLAGS) + LINK += -s endif -CFLAGS += -Wall -Wno-non-virtual-dtor -fno-exceptions -DHAVE_STDINT_H -fno-rtti -Werror -m32 +IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0") -BINARY = $(NAME)_$(BIN_SUFFIX) -CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -OPT_FLAGS += -march=i586 +ifeq "$(IS_CLANG)" "1" + CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/") + CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/") +else + CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1) + CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3) +endif -OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) +# Clang || GCC >= 4 +ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1" + CFLAGS += $(C_GCC4_FLAGS) + CPPFLAGS += $(CPP_GCC4_FLAGS) +endif + +# Clang >= 3 || GCC >= 4.7 +ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1" + CFLAGS += -Wno-delete-non-virtual-dtor +endif + +# OS is Linux and not using clang +ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1" + LINK += -static-libgcc +endif + +OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) + +# This will break if we include other Makefiles, but is fine for now. It allows +# us to make a copy of this file that uses altered paths (ie. Makefile.mine) +# or other changes without mucking up the original. +MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) $(BIN_DIR)/%.o: %.cpp - $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $< + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< all: mkdir -p $(BIN_DIR) mkdir -p $(BIN_DIR)/sdk - $(MAKE) hamsandwich + $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT) -hamsandwich: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) +$(PROJECT): $(OBJ_BIN) + $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY) -debug: - $(MAKE) all DEBUG=true +debug: + $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true default: all clean: - rm -rf Release/*.o - rm -rf Release/sdk/*.o - rm -rf Release/$(NAME)_$(BIN_SUFFIX) - rm -rf Debug/*.o - rm -rf Debug/sdk/*.o - rm -rf Debug/$(NAME)_$(BIN_SUFFIX) - + rm -rf $(BIN_DIR)/*.o + rm -rf $(BIN_DIR)/sdk/*.o + rm -f $(BIN_DIR)/$(BINARY) + diff --git a/dlls/hamsandwich/Trampolines.h b/dlls/hamsandwich/Trampolines.h index 240b41d9..d074037e 100644 --- a/dlls/hamsandwich/Trampolines.h +++ b/dlls/hamsandwich/Trampolines.h @@ -46,10 +46,12 @@ #endif // offsetof #endif // _MSC_VER >= 1400 #include -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) #include +#if defined (__linux__) #include #endif +#endif #include // size_t #include // memcpy #include // memalign @@ -113,14 +115,14 @@ namespace Trampolines * pushes it onto the target's stack. */ const unsigned char codePushThis[] = { - #if defined _WIN32 + #if defined(_WIN32) 0x51 // push ecx - #elif defined __linux__ + #elif defined(__linux__) || defined(__APPLE__) 0xFF, 0x75, 0x04 // pushl [ebp+0x08h] #endif }; -#if defined __linux__ +#if defined(__linux__) || defined(__APPLE__) const int codePushThisReplace = 2; #endif @@ -410,7 +412,7 @@ namespace Trampolines memcpy(&code[0],&::Trampolines::Bytecode::codePushThis[0],sizeof(::Trampolines::Bytecode::codePushThis)); -#if defined __linux__ +#if defined(__linux__) || defined(__APPLE__) unsigned char *c=&code[0]; union @@ -427,7 +429,7 @@ namespace Trampolines Append(&code[0],sizeof(::Trampolines::Bytecode::codePushThis)); -#if defined __linux__ +#if defined(__linux__) || defined(__APPLE__) m_mystack+=4; #endif m_calledstack+=4; @@ -531,7 +533,7 @@ namespace Trampolines */ void PushParam(int which) { -#if defined __linux__ +#if defined(__linux__) || defined(__APPLE__) if (m_thiscall) { which++; @@ -608,10 +610,14 @@ namespace Trampolines } // Reallocate with proper flags -#if defined _WIN32 +#if defined(_WIN32) void *ret=VirtualAlloc(NULL, m_size, MEM_COMMIT, PAGE_EXECUTE_READWRITE); -#elif defined __linux__ +#elif defined(__GNUC__) +# if defined(__APPLE__) + void *ret = valloc(m_size); +# else void *ret=memalign(sysconf(_SC_PAGESIZE), m_size); +# endif mprotect(ret,m_size,PROT_READ|PROT_WRITE|PROT_EXEC); #endif memcpy(ret, m_buffer, m_size); @@ -675,17 +681,17 @@ inline void *CreateGenericTrampoline(bool thiscall, bool voidcall, int paramcoun tramp.FreeTargetStack(); if (voidcall) { -#if defined _WIN32 +#if defined(_WIN32) tramp.VoidEpilogueAndFree(); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) tramp.VoidEpilogue(); #endif } else { -#if defined _WIN32 +#if defined(_WIN32) tramp.ReturnEpilogueAndFree(); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) tramp.ReturnEpilogue(); #endif } diff --git a/dlls/hamsandwich/amxx_api.cpp b/dlls/hamsandwich/amxx_api.cpp index 6b95f465..a34d0b5f 100644 --- a/dlls/hamsandwich/amxx_api.cpp +++ b/dlls/hamsandwich/amxx_api.cpp @@ -79,8 +79,10 @@ void OnAmxxAttach(void) { #ifdef _WIN32 MF_Log("Error: pev and base not set for section \"%s windows\", cannot register natives.", MF_GetModname()); -#elif defined __linux__ +#elif defined(__linux__) MF_Log("Error: pev and base not set for section \"%s linux\", cannot register natives.", MF_GetModname()); +#elif defined(__APPLE__) + MF_Log("Error: pev and base not set for section \"%s mac\", cannot register natives.", MF_GetModname()); #endif } } diff --git a/dlls/hamsandwich/call_funcs.cpp b/dlls/hamsandwich/call_funcs.cpp index 2f2a9d2b..73b4b49e 100644 --- a/dlls/hamsandwich/call_funcs.cpp +++ b/dlls/hamsandwich/call_funcs.cpp @@ -114,9 +114,9 @@ cell Call_Void_Void(AMX *amx, cell *params) { SETUP(0); -#ifdef _WIN32 +#if defined(_WIN32) reinterpret_cast(__func)(pv, 0); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) reinterpret_cast(__func)(pv); #endif return 1; @@ -126,9 +126,9 @@ cell Call_Int_Void(AMX *amx, cell *params) { SETUP(0); -#ifdef _WIN32 +#if defined(_WIN32) return reinterpret_cast(__func)(pv, 0); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) return reinterpret_cast(__func)(pv); #endif } @@ -143,9 +143,9 @@ cell Call_Void_Entvar(AMX *amx, cell *params) entvars_t *ev1=&(INDEXENT_NEW(id3)->v); -#ifdef _WIN32 +#if defined(_WIN32) reinterpret_cast(__func)(pv, 0, ev1); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) reinterpret_cast(__func)(pv, ev1); #endif return 1; @@ -162,9 +162,9 @@ cell Call_Void_Cbase(AMX *amx, cell *params) void *pv1=(INDEXENT_NEW(id3)->pvPrivateData); -#ifdef _WIN32 +#if defined(_WIN32) reinterpret_cast(__func)(pv, 0, pv1); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) reinterpret_cast(__func)(pv, pv1); #endif return 1; @@ -177,9 +177,9 @@ cell Call_Int_Float_Int(AMX *amx, cell *params) float f3=amx_ftoc2(*MF_GetAmxAddr(amx, params[3])); int i4=*MF_GetAmxAddr(amx, params[4]); -#ifdef _WIN32 +#if defined(_WIN32) return reinterpret_cast(__func)(pv, 0, f3, i4); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) return reinterpret_cast(__func)(pv, f3, i4); #endif } @@ -196,9 +196,9 @@ cell Call_Void_Entvar_Int(AMX *amx, cell *params) entvars_t *ev3=&(INDEXENT_NEW(id3)->v); -#ifdef _WIN32 +#if defined(_WIN32) reinterpret_cast(__func)(pv, 0, ev3, i4); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) reinterpret_cast(__func)(pv, ev3, i4); #endif return 1; @@ -215,9 +215,9 @@ cell Call_Int_Cbase(AMX *amx, cell *params) void *pv1=(INDEXENT_NEW(id3)->pvPrivateData); -#ifdef _WIN32 +#if defined(_WIN32) return reinterpret_cast(__func)(pv, 0, pv1); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) return reinterpret_cast(__func)(pv, pv1); #endif } @@ -229,9 +229,9 @@ cell Call_Void_Int_Int(AMX *amx, cell *params) int i3=*MF_GetAmxAddr(amx, params[3]); int i4=*MF_GetAmxAddr(amx, params[4]); -#ifdef _WIN32 +#if defined(_WIN32) reinterpret_cast(__func)(pv, 0, i3, i4); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) reinterpret_cast(__func)(pv, i3, i4); #endif return 1; @@ -246,9 +246,9 @@ cell Call_Int_Int_Str_Int(AMX *amx, cell *params) char *sz4=MF_GetAmxString(amx, params[4], 0, NULL); int i5=*MF_GetAmxAddr(amx, params[5]); -#ifdef _WIN32 +#if defined(_WIN32) return reinterpret_cast(__func)(pv, 0, i3, sz4, i5); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) return reinterpret_cast(__func)(pv, i3, sz4, i5); #endif } @@ -259,9 +259,9 @@ cell Call_Int_Int(AMX *amx, cell *params) int i3=*MF_GetAmxAddr(amx, params[3]); -#ifdef _WIN32 +#if defined(_WIN32) return reinterpret_cast(__func)(pv, 0, i3); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) return reinterpret_cast(__func)(pv, i3); #endif } @@ -276,9 +276,9 @@ cell Call_Int_Entvar(AMX *amx, cell *params) entvars_t *ev3=&(INDEXENT_NEW(id3)->v); -#ifdef _WIN32 +#if defined(_WIN32) return reinterpret_cast(__func)(pv, 0, ev3); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) return reinterpret_cast(__func)(pv, ev3); #endif } @@ -298,9 +298,9 @@ cell Call_Int_Entvar_Entvar_Float_Int(AMX *amx, cell *params) entvars_t *ev3=&(INDEXENT_NEW(id3)->v); entvars_t *ev4=&(INDEXENT_NEW(id4)->v); -#ifdef _WIN32 +#if defined(_WIN32) return reinterpret_cast(__func)(pv, 0, ev3, ev4, f5, i6); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) return reinterpret_cast(__func)(pv, ev3, ev4, f5, i6); #endif } @@ -321,9 +321,9 @@ cell Call_Int_Entvar_Entvar_Float_Float_Int(AMX *amx, cell *params) entvars_t *ev3=&(INDEXENT_NEW(id3)->v); entvars_t *ev4=&(INDEXENT_NEW(id4)->v); -#ifdef _WIN32 +#if defined(_WIN32) return reinterpret_cast(__func)(pv, 0, ev3, ev4, f5, f6, i7); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) return reinterpret_cast(__func)(pv, ev3, ev4, f5, f6, i7); #endif } @@ -334,9 +334,9 @@ cell Call_Void_Int(AMX *amx, cell *params) int i3=*MF_GetAmxAddr(amx, params[3]); -#ifdef _WIN32 +#if defined(_WIN32) reinterpret_cast(__func)(pv, 0, i3); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) reinterpret_cast(__func)(pv, i3); #endif @@ -358,9 +358,9 @@ cell Call_Void_Cbase_Cbase_Int_Float(AMX *amx, cell *params) void *p3=IndexToPrivate(id3); void *p4=IndexToPrivate(id4); -#ifdef _WIN32 +#if defined(_WIN32) reinterpret_cast(__func)(pv, 0, p3, p4, i5, f6); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) reinterpret_cast(__func)(pv, p3, p4, i5, f6); #endif @@ -392,9 +392,9 @@ cell Call_Void_Entvar_Float_Vector_Trace_Int(AMX *amx, cell *params) CHECK_ENTITY(id3); entvars_t *ev3=&(INDEXENT_NEW(id3)->v); -#ifdef _WIN32 +#if defined(_WIN32) reinterpret_cast(__func)(pv, 0, ev3, f4, v5, tr6, i7); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) reinterpret_cast(__func)(pv, ev3, f4, v5, tr6, i7); #endif @@ -422,9 +422,9 @@ cell Call_Void_Float_Vector_Trace_Int(AMX *amx, cell *params) return 0; } -#ifdef _WIN32 +#if defined(_WIN32) reinterpret_cast(__func)(pv, 0, f3, v4, tr5, i6); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) reinterpret_cast(__func)(pv, f3, v4, tr5, i6); #endif @@ -435,9 +435,9 @@ cell Call_Str_Void(AMX *amx, cell *params) { SETUP(2); -#ifdef _WIN32 +#if defined(_WIN32) char *v=reinterpret_cast(__func)(pv, 0); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) char *v=reinterpret_cast(__func)(pv); #endif return MF_SetAmxString(amx, params[3], v == NULL ? "" : v, *MF_GetAmxAddr(amx, params[4])); @@ -447,9 +447,9 @@ cell Call_Str_Void(AMX *amx, cell *params) cell Call_Cbase_Void(AMX *amx, cell *params) { SETUP(0); -#ifdef _WIN32 +#if defined(_WIN32) void *ret=reinterpret_cast(__func)(pv, 0); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) void *ret=reinterpret_cast(__func)(pv); #endif return PrivateToIndex(ret); @@ -458,9 +458,9 @@ cell Call_Cbase_Void(AMX *amx, cell *params) cell Call_Vector_Void(AMX *amx, cell *params) { SETUP(1); -#ifdef _WIN32 +#if defined(_WIN32) Vector ret=reinterpret_cast(__func)(pv, 0); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) Vector ret=reinterpret_cast(__func)(pv); #endif float *out=(float *)MF_GetAmxAddr(amx, params[3]); @@ -481,9 +481,9 @@ cell Call_Vector_pVector(AMX *amx, cell *params) v3.y=fl3[1]; v3.z=fl3[2]; -#ifdef _WIN32 +#if defined(_WIN32) Vector ret=reinterpret_cast(__func)(pv, 0, &v3); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) Vector ret=reinterpret_cast(__func)(pv, &v3); #endif float *out=(float *)MF_GetAmxAddr(amx, params[4]); @@ -508,9 +508,9 @@ cell Call_Int_pVector(AMX *amx, cell *params) v3.y=fl3[1]; v3.z=fl3[2]; -#ifdef _WIN32 +#if defined(_WIN32) int ret=reinterpret_cast(__func)(pv, 0, &v3); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) int ret=reinterpret_cast(__func)(pv, &v3); #endif @@ -533,9 +533,9 @@ cell Call_Void_Entvar_Float_Float(AMX *amx, cell *params) entvars_t *ev3=&(INDEXENT_NEW(id3)->v); -#ifdef _WIN32 +#if defined(_WIN32) reinterpret_cast(__func)(pv, 0, ev3, f4, f5); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) reinterpret_cast(__func)(pv, ev3, f4, f5); #endif @@ -549,9 +549,9 @@ cell Call_Int_pFloat_pFloat(AMX *amx, cell *params) float f3=amx_ctof2(*MF_GetAmxAddr(amx, params[3])); float f4=amx_ctof2(*MF_GetAmxAddr(amx, params[4])); -#ifdef _WIN32 +#if defined(_WIN32) return reinterpret_cast(__func)(pv, 0, &f3, &f4); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) return reinterpret_cast(__func)(pv, &f3, &f4); #endif @@ -568,9 +568,9 @@ cell Call_Void_Entvar_Float(AMX *amx, cell *params) entvars_t *ev3=&(INDEXENT_NEW(id3)->v); -#ifdef _WIN32 +#if defined(_WIN32) return reinterpret_cast(__func)(pv, 0, ev3, f4); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) return reinterpret_cast(__func)(pv, ev3, f4); #endif } @@ -583,9 +583,9 @@ cell Call_Void_Int_Int_Int(AMX *amx, cell *params) int i4=*MF_GetAmxAddr(amx, params[4]); int i5=*MF_GetAmxAddr(amx, params[5]); -#ifdef _WIN32 +#if defined(_WIN32) reinterpret_cast(__func)(pv, 0, i3, i4, i5); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) reinterpret_cast(__func)(pv, i3, i4, i5); #endif return 1; @@ -602,9 +602,9 @@ cell Call_Void_ItemInfo(AMX *amx, cell *params) MF_LogError(amx, AMX_ERR_NATIVE, "Null ItemInfo handle!"); return 0; } -#ifdef _WIN32 +#if defined(_WIN32) reinterpret_cast(__func)(pv, 0, ptr); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) reinterpret_cast(__func)(pv, ptr); #endif return 1; @@ -614,9 +614,9 @@ cell Call_Float_Void(AMX *amx, cell *params) { SETUP(1); -#ifdef _WIN32 +#if defined(_WIN32) float ret=reinterpret_cast(__func)(pv, 0); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) float ret=reinterpret_cast(__func)(pv); #endif *MF_GetAmxAddr(amx, params[3])=amx_ftoc2(ret); @@ -628,9 +628,9 @@ cell Call_Void_Float_Int(AMX* amx, cell* params) { SETUP(2); -#ifdef _WIN32 +#if defined(_WIN32) reinterpret_cast(__func)(pv, 0, amx_ctof2(params[3]), static_cast(params[4])); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) reinterpret_cast(__func)(pv, amx_ctof2(params[3]), static_cast(params[4])); #endif return 1; diff --git a/dlls/hamsandwich/config/hamdata.ini b/dlls/hamsandwich/config/hamdata.ini index 587f3dd8..aff01dc7 100644 --- a/dlls/hamsandwich/config/hamdata.ini +++ b/dlls/hamsandwich/config/hamdata.ini @@ -37,7 +37,7 @@ ; use the same binary so all of its vtable offsets are guaranteed to ; be identical. Mirrors should always come first in the file! ; -; Version: $Id$ +; Version: $Id: hamdata.ini 3687 2008-03-04 18:51:35Z sawce $ @mirror cstrike czero @@ -261,6 +261,116 @@ cstrike_item_candrop 63 cstrike_item_getmaxspeed 78 @end + +@section cstrike mac + pev 4 + base 0x0 + + spawn 0 + precache 1 + keyvalue 3 + objectcaps 6 + activate 7 + setobjectcollisionbox 8 + classify 9 + deathnotice 10 + traceattack 11 + takedamage 12 + takehealth 13 + killed 14 + bloodcolor 15 + tracebleed 16 + istriggered 17 + mymonsterpointer 18 + mysquadmonsterpointer 19 + gettogglestate 20 + addpoints 21 + addpointstoteam 22 + addplayeritem 23 + removeplayeritem 24 + giveammo 25 + getdelay 26 + ismoving 27 + overridereset 28 + damagedecal 29 + settogglestate 30 + startsneaking 31 + stopsneaking 32 + oncontrols 33 + issneaking 34 + isalive 35 + isbspmodel 36 + reflectgauss 37 + hastarget 38 + isinworld 39 + isplayer 40 + isnetclient 41 + teamid 42 + getnexttarget 43 + think 44 + touch 45 + use 46 + blocked 47 + respawn 48 + updateowner 49 + fbecomeprone 50 + center 51 + eyeposition 52 + earposition 53 + bodytarget 54 + illumination 55 + fvisible 56 + fvecvisible 57 + + player_jump 76 + player_duck 77 + player_prethink 78 + player_postthink 79 + player_getgunposition 80 + player_shouldfadeondeath 66 + player_impulsecommands 83 + player_updateclientdata 82 + + item_addtoplayer 59 + item_addduplicate 60 + item_getiteminfo 61 + item_candeploy 62 + item_deploy 64 + item_canholster 66 + item_holster 67 + item_updateiteminfo 68 + item_preframe 69 + item_postframe 70 + item_drop 71 + item_kill 72 + item_attachtoplayer 73 + item_primaryammoindex 74 + item_secondaryammoindex 75 + item_updateclientdata 76 + item_getweaponptr 77 + item_itemslot 79 + + weapon_extractammo 80 + weapon_extractclipammo 81 + weapon_addweapon 82 + weapon_playemptysound 83 + weapon_resetemptysound 84 + weapon_sendweaponanim 85 + weapon_isusable 86 + weapon_primaryattack 87 + weapon_secondaryattack 88 + weapon_reload 89 + weapon_weaponidle 90 + weapon_retireweapon 91 + weapon_shouldweaponidle 92 + weapon_usedecrement 93 + + cstrike_restart 2 + cstrike_roundrespawn 84 + cstrike_item_candrop 63 + cstrike_item_getmaxspeed 78 +@end + @section dod linux pev 0 base 0x154 @@ -1747,8 +1857,112 @@ weapon_retireweapon 87 weapon_shouldweaponidle 88 weapon_usedecrement 89 - @end + +@section valve mac + pev 4 + base 0x0 + + spawn 0 + precache 1 + keyvalue 2 + objectcaps 5 + activate 6 + setobjectcollisionbox 7 + classify 8 + deathnotice 9 + traceattack 10 + takedamage 11 + takehealth 12 + killed 13 + bloodcolor 14 + tracebleed 15 + istriggered 16 + mymonsterpointer 17 + mysquadmonsterpointer 18 + gettogglestate 19 + addpoints 20 + addpointstoteam 21 + addplayeritem 22 + removeplayeritem 23 + giveammo 24 + getdelay 25 + ismoving 26 + overridereset 27 + damagedecal 28 + settogglestate 29 + startsneaking 30 + stopsneaking 31 + oncontrols 32 + issneaking 33 + isalive 34 + isbspmodel 35 + reflectgauss 36 + hastarget 37 + isinworld 38 + isplayer 39 + isnetclient 40 + teamid 41 + getnexttarget 42 + think 43 + touch 44 + use 45 + blocked 46 + respawn 47 + updateowner 48 + fbecomeprone 49 + center 50 + eyeposition 51 + earposition 52 + bodytarget 53 + illumination 54 + fvisible 55 + fvecvisible 56 + + player_jump 125 + player_duck 126 + player_prethink 127 + player_postthink 128 + player_getgunposition 119 + player_shouldfadeondeath 60 + player_impulsecommands 130 + player_updateclientdata 129 + + item_addtoplayer 58 + item_addduplicate 59 + item_getiteminfo 60 + item_candeploy 61 + item_deploy 62 + item_canholster 63 + item_holster 64 + item_updateiteminfo 65 + item_preframe 66 + item_postframe 67 + item_drop 68 + item_kill 69 + item_attachtoplayer 70 + item_primaryammoindex 71 + item_secondaryammoindex 72 + item_updateclientdata 73 + item_getweaponptr 74 + item_itemslot 75 + + weapon_extractammo 76 + weapon_extractclipammo 77 + weapon_addweapon 78 + weapon_playemptysound 79 + weapon_resetemptysound 80 + weapon_sendweaponanim 81 + weapon_isusable 82 + weapon_primaryattack 83 + weapon_secondaryattack 84 + weapon_reload 85 + weapon_weaponidle 86 + weapon_retireweapon 87 + weapon_shouldweaponidle 88 + weapon_usedecrement 89 +@end + ; Sven-Coop has no linux binaries. This makes disassembly much harder. ; These offsets were contributed by ts2do @section SvenCoop windows diff --git a/dlls/hamsandwich/config_parser.cpp b/dlls/hamsandwich/config_parser.cpp index 0520c1dd..b26b88b5 100644 --- a/dlls/hamsandwich/config_parser.cpp +++ b/dlls/hamsandwich/config_parser.cpp @@ -240,8 +240,10 @@ int read_start_section(char *data) #ifdef _WIN32 if (strcmp(data, "windows")==0) -#elif defined __linux__ +#elif defined(__linux__) if (strcmp(data, "linux")==0) +#elif defined(__APPLE__) + if (strcmp(data, "mac")==0) #endif { return 1; diff --git a/dlls/hamsandwich/hook.h b/dlls/hamsandwich/hook.h index 46b75b7e..385e2c8e 100644 --- a/dlls/hamsandwich/hook.h +++ b/dlls/hamsandwich/hook.h @@ -64,10 +64,10 @@ public: tramp=CreateGenericTrampoline(true, voidcall, paramcount, (void*)this, target); // Insert into vtable -#if defined _WIN32 +#if defined(_WIN32) DWORD OldFlags; VirtualProtect(&ivtable[entry],sizeof(int*),PAGE_READWRITE,&OldFlags); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) void *addr = (void *)ALIGN(&ivtable[entry]); mprotect(addr,sysconf(_SC_PAGESIZE),PROT_READ|PROT_WRITE); #endif @@ -84,18 +84,18 @@ public: // Insert the original function back into the vtable int **ivtable=(int **)vtable; -#if defined _WIN32 +#if defined(_WIN32) DWORD OldFlags; VirtualProtect(&ivtable[entry],sizeof(int*),PAGE_READWRITE,&OldFlags); -#elif defined __linux_ +#elif defined(__linux_) || defined(__APPLE__) void *addr = (void *)ALIGN(&ivtable[entry]); mprotect(addr,sysconf(_SC_PAGESIZE),PROT_READ|PROT_WRITE); #endif ivtable[entry]=(int *)func; -#if defined _WIN32 +#if defined(_WIN32) VirtualFree(tramp, 0, MEM_RELEASE); -#elif __linux__ +#elif defined(__linux__) || defined(__APPLE__) free(tramp); #endif diff --git a/dlls/hamsandwich/hook_callbacks.cpp b/dlls/hamsandwich/hook_callbacks.cpp index 6ad484a9..4eb9b246 100644 --- a/dlls/hamsandwich/hook_callbacks.cpp +++ b/dlls/hamsandwich/hook_callbacks.cpp @@ -166,9 +166,9 @@ void Hook_Void_Void(Hook *hook, void *pthis) PRE_START() PRE_END() -#if defined _WIN32 +#if defined(_WIN32) reinterpret_cast(hook->func)(pthis,0); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) reinterpret_cast(hook->func)(pthis); #endif @@ -192,9 +192,9 @@ int Hook_Int_Void(Hook *hook, void *pthis) PRE_END() -#if defined _WIN32 +#if defined(_WIN32) origret=reinterpret_cast(hook->func)(pthis,0); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) origret=reinterpret_cast(hook->func)(pthis); #endif @@ -222,9 +222,9 @@ void Hook_Void_Entvar(Hook *hook, void *pthis, entvars_t *entvar) , iOther PRE_END() -#if defined _WIN32 +#if defined(_WIN32) reinterpret_cast(hook->func)(pthis, 0, entvar); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) reinterpret_cast(hook->func)(pthis, entvar); #endif @@ -250,9 +250,9 @@ void Hook_Void_Cbase(Hook *hook, void *pthis, void *other) , iOther PRE_END() -#if defined _WIN32 +#if defined(_WIN32) reinterpret_cast(hook->func)(pthis, 0, other); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) reinterpret_cast(hook->func)(pthis, other); #endif @@ -279,9 +279,9 @@ int Hook_Int_Float_Int(Hook *hook, void *pthis, float f1, int i1) , f1, i1 PRE_END() -#if defined _WIN32 +#if defined(_WIN32) origret=reinterpret_cast(hook->func)(pthis, 0, f1, i1); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) origret=reinterpret_cast(hook->func)(pthis, f1, i1); #endif @@ -309,9 +309,9 @@ void Hook_Void_Entvar_Int(Hook *hook, void *pthis, entvars_t *ev1, int i1) , iOther, i1 PRE_END() -#if defined _WIN32 +#if defined(_WIN32) reinterpret_cast(hook->func)(pthis, 0, ev1, i1); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) reinterpret_cast(hook->func)(pthis, ev1, i1); #endif @@ -339,9 +339,9 @@ int Hook_Int_Cbase(Hook *hook, void *pthis, void *cb1) PRE_START() , iOther PRE_END() -#if defined _WIN32 +#if defined(_WIN32) origret=reinterpret_cast(hook->func)(pthis, 0, cb1); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) origret=reinterpret_cast(hook->func)(pthis, cb1); #endif @@ -367,9 +367,9 @@ void Hook_Void_Int_Int(Hook *hook, void *pthis, int i1, int i2) PRE_START() ,i1, i2 PRE_END() -#if defined _WIN32 +#if defined(_WIN32) reinterpret_cast(hook->func)(pthis, 0, i1, i2); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) reinterpret_cast(hook->func)(pthis, i1, i2); #endif @@ -398,9 +398,9 @@ int Hook_Int_Int_Str_Int(Hook *hook, void *pthis, int i1, const char *sz1, int i PRE_START() ,i1, a.c_str(), i2 PRE_END() -#if defined _WIN32 +#if defined(_WIN32) origret=reinterpret_cast(hook->func)(pthis, 0, i1, a.c_str(), i2); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) origret=reinterpret_cast(hook->func)(pthis, i1, a.c_str(), i2); #endif @@ -429,9 +429,9 @@ int Hook_Int_Int(Hook *hook, void *pthis, int i1) ,i1 PRE_END() -#if defined _WIN32 +#if defined(_WIN32) origret=reinterpret_cast(hook->func)(pthis, 0, i1); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) origret=reinterpret_cast(hook->func)(pthis, i1); #endif @@ -460,9 +460,9 @@ int Hook_Int_Entvar(Hook *hook, void *pthis, entvars_t *ev1) ,iOther PRE_END() -#if defined _WIN32 +#if defined(_WIN32) origret=reinterpret_cast(hook->func)(pthis, 0, ev1); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) origret=reinterpret_cast(hook->func)(pthis, ev1); #endif @@ -497,9 +497,9 @@ int Hook_Int_Entvar_Entvar_Float_Int(Hook *hook, void *pthis, entvars_t *inflict PRE_END() -#if defined _WIN32 +#if defined(_WIN32) origret=reinterpret_cast(hook->func)(pthis, 0, inflictor, attacker, damage, damagebits); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) origret=reinterpret_cast(hook->func)(pthis, inflictor, attacker, damage, damagebits); #endif @@ -532,9 +532,9 @@ int Hook_Int_Entvar_Entvar_Float_Float_Int(Hook *hook, void *pthis, entvars_t *i PRE_END() -#if defined _WIN32 +#if defined(_WIN32) origret=reinterpret_cast(hook->func)(pthis, 0, inflictor, attacker, damage, unknown, damagebits); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) origret=reinterpret_cast(hook->func)(pthis, inflictor, attacker, damage, unknown, damagebits); #endif @@ -559,9 +559,9 @@ void Hook_Void_Int(Hook *hook, void *pthis, int i1) , i1 PRE_END() -#if defined _WIN32 +#if defined(_WIN32) reinterpret_cast(hook->func)(pthis, 0, i1); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) reinterpret_cast(hook->func)(pthis, i1); #endif @@ -590,9 +590,9 @@ void Hook_Void_Cbase_Cbase_Int_Float(Hook *hook, void *pthis, void *cb1, void *c PRE_END() -#if defined _WIN32 +#if defined(_WIN32) reinterpret_cast(hook->func)(pthis, 0, cb1, cb2, i1, f1); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) reinterpret_cast(hook->func)(pthis, cb1, cb2, i1, f1); #endif @@ -620,9 +620,9 @@ void Hook_Void_Entvar_Float_Vector_Trace_Int(Hook *hook, void *pthis, entvars_t ,iev1, f1, MF_PrepareCellArrayA(reinterpret_cast(&v1), 3, false), tr1, i1 PRE_END() -#if defined _WIN32 +#if defined(_WIN32) reinterpret_cast(hook->func)(pthis, 0, ev1, f1, v1, tr1, i1); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) reinterpret_cast(hook->func)(pthis, ev1, f1, v1, tr1, i1); #endif @@ -648,9 +648,9 @@ void Hook_Void_Float_Vector_Trace_Int(Hook *hook, void *pthis, float f1, Vector , f1, MF_PrepareCellArrayA(reinterpret_cast(&v1), 3, false), tr1, i1 PRE_END() -#if defined _WIN32 +#if defined(_WIN32) reinterpret_cast(hook->func)(pthis, 0, f1, v1, tr1, i1); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) reinterpret_cast(hook->func)(pthis, f1, v1, tr1, i1); #endif @@ -672,9 +672,9 @@ const char *Hook_Str_Void(Hook *hook, void *pthis) PRE_START() PRE_END() -#if defined _WIN32 +#if defined(_WIN32) origret.assign(reinterpret_cast(hook->func)(pthis, 0)); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) origret.assign(reinterpret_cast(hook->func)(pthis)); #endif @@ -699,9 +699,9 @@ void *Hook_Cbase_Void(Hook *hook, void *pthis) PRE_START() PRE_END() -#if defined _WIN32 +#if defined(_WIN32) origret=reinterpret_cast(hook->func)(pthis, 0); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) origret=reinterpret_cast(hook->func)(pthis); #endif @@ -717,7 +717,7 @@ void *Hook_Cbase_Void(Hook *hook, void *pthis) #ifdef _WIN32 void Hook_Vector_Void(Hook *hook, void *pthis, Vector *out) -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) void Hook_Vector_Void(Hook *hook, Vector *out, void *pthis) #endif { @@ -734,9 +734,9 @@ void Hook_Vector_Void(Hook *hook, Vector *out, void *pthis) PRE_START() PRE_END() -#if defined _WIN32 +#if defined(_WIN32) reinterpret_cast(hook->func)(pthis, 0, &origret); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) origret=reinterpret_cast(hook->func)(pthis); #endif @@ -751,7 +751,7 @@ void Hook_Vector_Void(Hook *hook, Vector *out, void *pthis) } #ifdef _WIN32 void Hook_Vector_pVector(Hook *hook, void *pthis, Vector *out, Vector *v1) -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) void Hook_Vector_pVector(Hook *hook, Vector *out, void *pthis, Vector *v1) #endif { @@ -770,9 +770,9 @@ void Hook_Vector_pVector(Hook *hook, Vector *out, void *pthis, Vector *v1) , MF_PrepareCellArrayA(reinterpret_cast(v1), 3, false) PRE_END() -#if defined _WIN32 +#if defined(_WIN32) reinterpret_cast(hook->func)(pthis, 0, &origret, v1); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) origret=reinterpret_cast(hook->func)(pthis, v1); #endif @@ -800,9 +800,9 @@ int Hook_Int_pVector(Hook *hook, void *pthis, Vector *v1) , MF_PrepareCellArrayA(reinterpret_cast(v1), 3, false) PRE_END() -#if defined _WIN32 +#if defined(_WIN32) origret=reinterpret_cast(hook->func)(pthis, 0, v1); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) origret=reinterpret_cast(hook->func)(pthis, v1); #endif @@ -831,9 +831,9 @@ void Hook_Void_Entvar_Float_Float(Hook *hook, void *pthis, entvars_t *ev1, float , cev1, f1, f2 PRE_END() -#if defined _WIN32 +#if defined(_WIN32) reinterpret_cast(hook->func)(pthis, 0, ev1, f1, f2); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) reinterpret_cast(hook->func)(pthis, ev1, f1, f2); #endif @@ -860,9 +860,9 @@ int Hook_Int_pFloat_pFloat(Hook *hook, void *pthis, float *f1, float *f2) , f1 != NULL ? *f1 : 0, f2 != NULL ? *f2 : 0 PRE_END() -#if defined _WIN32 +#if defined(_WIN32) origret=reinterpret_cast(hook->func)(pthis, 0, f1, f2); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) origret=reinterpret_cast(hook->func)(pthis, f1, f2); #endif @@ -889,9 +889,9 @@ void Hook_Void_Entvar_Float(Hook *hook, void *pthis, entvars_t *ev1, float f1) , cev1, f1 PRE_END() -#if defined _WIN32 +#if defined(_WIN32) reinterpret_cast(hook->func)(pthis, 0, ev1, f1); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) reinterpret_cast(hook->func)(pthis, ev1, f1); #endif @@ -916,9 +916,9 @@ void Hook_Void_Int_Int_Int(Hook *hook, void *pthis, int i1, int i2, int i3) PRE_START() ,i1, i2, i3 PRE_END() -#if defined _WIN32 +#if defined(_WIN32) reinterpret_cast(hook->func)(pthis, 0, i1, i2, i3); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) reinterpret_cast(hook->func)(pthis, i1, i2, i3); #endif @@ -940,9 +940,9 @@ void Hook_Void_ItemInfo(Hook *hook, void *pthis, void *iteminfo) PRE_START() ,iteminfo PRE_END() -#if defined _WIN32 +#if defined(_WIN32) reinterpret_cast(hook->func)(pthis, 0, iteminfo); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) reinterpret_cast(hook->func)(pthis, iteminfo); #endif @@ -964,9 +964,9 @@ float Hook_Float_Void(Hook *hook, void *pthis) PRE_START() PRE_END() -#if defined _WIN32 +#if defined(_WIN32) origret=reinterpret_cast(hook->func)(pthis, 0); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) origret=reinterpret_cast(hook->func)(pthis); #endif @@ -990,9 +990,9 @@ void Hook_Void_Float_Int(Hook* hook, void* pthis, float f1, int i1) PRE_START() , f1, i1 PRE_END() -#if defined _WIN32 +#if defined(_WIN32) reinterpret_cast(hook->func)(pthis, 0, f1, i1); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) reinterpret_cast(hook->func)(pthis, f1, i1); #endif diff --git a/dlls/hamsandwich/hook_callbacks.h b/dlls/hamsandwich/hook_callbacks.h index e2e9adc1..452edfaa 100644 --- a/dlls/hamsandwich/hook_callbacks.h +++ b/dlls/hamsandwich/hook_callbacks.h @@ -130,7 +130,7 @@ const bool RT_Vector_Void = true; const int PC_Vector_Void = 1; #ifdef _WIN32 void Hook_Vector_Void(Hook *hook, void *pthis, Vector *out); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) void Hook_Vector_Void(Hook *hook, Vector *out, void *pthis); #endif @@ -138,7 +138,7 @@ const bool RT_Vector_pVector = true; const int PC_Vector_pVector = 2; #ifdef _WIN32 void Hook_Vector_pVector(Hook *hook, void *pthis, Vector *out, Vector *v1); -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) void Hook_Vector_pVector(Hook *hook, Vector *out, void *pthis, Vector *v1); #endif diff --git a/dlls/hamsandwich/pdata.cpp b/dlls/hamsandwich/pdata.cpp index 199f86d7..89c56537 100644 --- a/dlls/hamsandwich/pdata.cpp +++ b/dlls/hamsandwich/pdata.cpp @@ -57,6 +57,12 @@ static cell AMX_NATIVE_CALL get_pdata_cbase_safe(AMX *amx, cell *params) int iOffset=params[2]; #ifdef __linux__ iOffset += params[3]; +#elif defined __APPLE__ + // Use Linux offset in older plugins + if (params[0] / sizeof(cell) == 3) + iOffset += params[3]; + else + iOffset += params[4]; #endif if (iOffset <0) { @@ -87,7 +93,14 @@ static cell AMX_NATIVE_CALL get_pdata_cbase(AMX *amx, cell *params) int iOffset=params[2]; #ifdef __linux__ iOffset += params[3]; +#elif defined __APPLE__ + // Use Linux offset in older plugins + if (params[0] / sizeof(cell) == 3) + iOffset += params[3]; + else + iOffset += params[4]; #endif + if (iOffset <0) { MF_LogError(amx, AMX_ERR_NATIVE, "Invalid offset provided. (got: %d)", iOffset); @@ -110,6 +123,12 @@ static cell AMX_NATIVE_CALL set_pdata_cbase(AMX *amx, cell *params) int iOffset=params[2]; #ifdef __linux__ iOffset += params[4]; +#elif defined __APPLE__ + // Use Linux offset in older plugins + if (params[0] / sizeof(cell) == 4) + iOffset += params[4]; + else + iOffset += params[5]; #endif if (iOffset <0) { diff --git a/dlls/hamsandwich/sdk/CString.h b/dlls/hamsandwich/sdk/CString.h index 3bdc3605..bfd7061d 100644 --- a/dlls/hamsandwich/sdk/CString.h +++ b/dlls/hamsandwich/sdk/CString.h @@ -244,7 +244,7 @@ public: if (is_space(v[len-1])) { - for (i=len-1; i>=0; i--) + for (i=len-1; i //========================================================= -void UTIL_LogPrintf( char *fmt, ... ) +void UTIL_LogPrintf( const char *fmt, ... ) { va_list argptr; static char string[1024]; diff --git a/dlls/hamsandwich/sdk/amxxmodule.h b/dlls/hamsandwich/sdk/amxxmodule.h index c53b72da..9e42b72f 100644 --- a/dlls/hamsandwich/sdk/amxxmodule.h +++ b/dlls/hamsandwich/sdk/amxxmodule.h @@ -20,11 +20,16 @@ // DLL Export #undef DLLEXPORT -#ifndef __linux__ +#if defined(_WIN32) #define DLLEXPORT __declspec(dllexport) #else #define DLLEXPORT __attribute__((visibility("default"))) +#endif + +#if defined(__linux__) && !defined(LINUX) #define LINUX +#elif defined(__APPLE__) && !defined(OSX) +#define OSX #endif #undef C_DLLEXPORT @@ -66,7 +71,7 @@ struct amxx_module_info_s #if defined HAVE_STDINT_H #include #else - #if defined __LCC__ || defined __DMC__ || defined LINUX + #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__ #if defined HAVE_INTTYPES_H #include #else @@ -308,7 +313,7 @@ typedef int (AMXAPI *AMX_DEBUG)(struct tagAMX *amx); #endif #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack(1) /* structures must be packed (byte-aligned) */ #elif defined MACOS && defined __MWERKS__ #pragma options align=mac68k @@ -395,7 +400,7 @@ enum { }; #if !defined AMX_NO_ALIGN - #if defined __linux__ + #if defined(__linux__) || defined(__APPLE__) #pragma pack() /* reset default packing */ #else #pragma pack(pop) /* reset previous packing */ @@ -406,7 +411,7 @@ enum { // ***** declare functions ***** #ifdef USE_METAMOD -void UTIL_LogPrintf( char *fmt, ... ); +void UTIL_LogPrintf( const char *fmt, ... ); void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage); short FixedSigned16( float value, float scale ); unsigned short FixedUnsigned16( float value, float scale ); @@ -833,11 +838,11 @@ int FN_AllowLagCompensation_Post(void); #ifdef FN_PrecacheModel -int FN_PrecacheModel(char *s); +int FN_PrecacheModel(const char *s); #endif // FN_PrecacheModel #ifdef FN_PrecacheSound -int FN_PrecacheSound(char *s); +int FN_PrecacheSound(const char *s); #endif // FN_PrecacheSound #ifdef FN_SetModel @@ -857,7 +862,7 @@ void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize #ifdef FN_ChangeLevel -void FN_ChangeLevel(char *s1, char *s2); +void FN_ChangeLevel(const char *s1, const char *s2); #endif // FN_ChangeLevel #ifdef FN_GetSpawnParms @@ -1261,19 +1266,19 @@ char *FN_GetInfoKeyBuffer(edict_t *e); #endif // FN_GetInfoKeyBuffer #ifdef FN_InfoKeyValue -char *FN_InfoKeyValue(char *infobuffer, char *key); +char *FN_InfoKeyValue(char *infobuffer, const char *key); #endif // FN_InfoKeyValue #ifdef FN_SetKeyValue -void FN_SetKeyValue(char *infobuffer, char *key, char *value); +void FN_SetKeyValue(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue #ifdef FN_SetClientKeyValue -void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue #ifdef FN_IsMapValid -int FN_IsMapValid(char *filename); +int FN_IsMapValid(const char *filename); #endif // FN_IsMapValid #ifdef FN_StaticDecal @@ -1281,7 +1286,7 @@ void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int mo #endif // FN_StaticDecal #ifdef FN_PrecacheGeneric -int FN_PrecacheGeneric(char *s); +int FN_PrecacheGeneric(const char *s); #endif // FN_PrecacheGeneric #ifdef FN_GetPlayerUserId @@ -1414,11 +1419,11 @@ const char *FN_GetPlayerAuthId(edict_t *e); #ifdef FN_PrecacheModel_Post -int FN_PrecacheModel_Post(char *s); +int FN_PrecacheModel_Post(const char *s); #endif // FN_PrecacheModel_Post #ifdef FN_PrecacheSound_Post -int FN_PrecacheSound_Post(char *s); +int FN_PrecacheSound_Post(const char *s); #endif // FN_PrecacheSound_Post #ifdef FN_SetModel_Post @@ -1438,7 +1443,7 @@ void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize_Post #ifdef FN_ChangeLevel_Post -void FN_ChangeLevel_Post(char *s1, char *s2); +void FN_ChangeLevel_Post(const char *s1, const char *s2); #endif // FN_ChangeLevel_Post #ifdef FN_GetSpawnParms_Post @@ -1842,19 +1847,19 @@ char *FN_GetInfoKeyBuffer_Post(edict_t *e); #endif // FN_GetInfoKeyBuffer_Post #ifdef FN_InfoKeyValue_Post -char *FN_InfoKeyValue_Post(char *infobuffer, char *key); +char *FN_InfoKeyValue_Post(char *infobuffer, const char *key); #endif // FN_InfoKeyValue_Post #ifdef FN_SetKeyValue_Post -void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value); +void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue_Post #ifdef FN_SetClientKeyValue_Post -void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue_Post #ifdef FN_IsMapValid_Post -int FN_IsMapValid_Post(char *filename); +int FN_IsMapValid_Post(const char *filename); #endif // FN_IsMapValid_Post #ifdef FN_StaticDecal_Post @@ -1862,7 +1867,7 @@ void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, i #endif // FN_StaticDecal_Post #ifdef FN_PrecacheGeneric_Post -int FN_PrecacheGeneric_Post(char *s); +int FN_PrecacheGeneric_Post(const char *s); #endif // FN_PrecacheGeneric_Post #ifdef FN_GetPlayerUserId_Post @@ -2116,7 +2121,7 @@ typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/); typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...); typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...); typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/); -typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...); +typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...); typedef const char * (*PFN_GET_MODNAME) (void); typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/); typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/); @@ -2175,8 +2180,8 @@ typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned i typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/); typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/); typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/); -typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); -typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */); typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/); typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/); diff --git a/dlls/hamsandwich/srvcmd.cpp b/dlls/hamsandwich/srvcmd.cpp index 9e4fc3f7..d87c004f 100644 --- a/dlls/hamsandwich/srvcmd.cpp +++ b/dlls/hamsandwich/srvcmd.cpp @@ -43,7 +43,7 @@ extern hook_t hooklist[]; extern CVector hooks[HAM_LAST_ENTRY_DONT_USE_ME_LOL]; -void print_srvconsole(char *fmt, ...) +void print_srvconsole(const char *fmt, ...) { va_list argptr; static char string[384]; diff --git a/dlls/mysqlx/Makefile b/dlls/mysqlx/Makefile index 22d8dd9e..f23e1b6b 100755 --- a/dlls/mysqlx/Makefile +++ b/dlls/mysqlx/Makefile @@ -1,92 +1,131 @@ -#(C)2004-2005 AMX Mod X Development Team +# (C)2004-2013 AMX Mod X Development Team # Makefile written by David "BAILOPAN" Anderson -HLSDK = ../../../hlsdk +########################################### +### EDIT THESE PATHS FOR YOUR OWN SETUP ### +########################################### + +HLSDK = ../../../hlsdk/multiplayer MM_ROOT = ../../../metamod/metamod - -### EDIT BELOW FOR OTHER PROJECTS ### - -OPT_FLAGS = -O2 -funroll-loops -s -pipe -fomit-frame-pointer -fno-strict-aliasing -DEBUG_FLAGS = -g -ggdb3 -CPP = gcc-4.1 -NAME = mysql -#MYSQL_DIR = ../../../mysql-5.0.22 MYSQL_DIR = ../../../mysql-5.0 -BIN_SUFFIX_32 = amxx_i386.so -BIN_SUFFIX_64 = amxx_amd64.so +##################################### +### EDIT BELOW FOR OTHER PROJECTS ### +##################################### -OBJECTS = basic_sql.cpp handles.cpp module.cpp threading.cpp sdk/amxxmodule.cpp oldcompat_sql.cpp -OBJECTS += thread/BaseWorker.cpp thread/ThreadWorker.cpp thread/PosixThreads.cpp -OBJECTS += mysql/MysqlQuery.cpp mysql/MysqlResultSet.cpp mysql/MysqlDatabase.cpp mysql/MysqlDriver.cpp +PROJECT = mysql -LINK = -lgcc -static-libgcc $(MYSQL_DIR)/lib/libmysqlclient_r.a -lz -lpthread +OBJECTS = basic_sql.cpp handles.cpp module.cpp threading.cpp sdk/amxxmodule.cpp oldcompat_sql.cpp \ + thread/BaseWorker.cpp thread/ThreadWorker.cpp thread/PosixThreads.cpp \ + mysql/MysqlQuery.cpp mysql/MysqlResultSet.cpp mysql/MysqlDatabase.cpp mysql/MysqlDriver.cpp -INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \ - -I$(MM_ROOT) -I$(HLSDK)/common -I$(MYSQL_DIR)/include -L$(MYSQL_DIR)/lib -Ithread \ - -Imysql -Isdk +############################################## +### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### +############################################## -GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) +C_OPT_FLAGS = -DNDEBUG -O2 -funroll-loops -fomit-frame-pointer -pipe +C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3 +C_GCC4_FLAGS = -fvisibility=hidden +CPP_GCC4_FLAGS = -fvisibility-inlines-hidden +CPP = gcc +CPP_OSX = clang -ifeq "$(GCC_VERSION)" "4" - OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden +LINK = $(MYSQL_DIR)/lib/libmysqlclient_r.a -lz -lpthread -L$(MYSQL_DIR)/lib + +INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \ + -I$(MM_ROOT) -I$(MYSQL_DIR)/include -Ithread -Imysql -Isdk + +################################################ +### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### +################################################ + +OS := $(shell uname -s) + +ifeq "$(OS)" "Darwin" + CPP = $(CPP_OSX) + LIB_EXT = dylib + LIB_SUFFIX = _amxx + CFLAGS += -DOSX + LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5 +else + LIB_EXT = so + LIB_SUFFIX = _amxx_i386 + CFLAGS += -DLINUX + LINK += -shared endif +LINK += -m32 -lm -ldl + +CFLAGS += -DSM_DEFAULT_THREADER -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H \ + -Dstricmp=strcasecmp -fno-strict-aliasing -m32 -Wall -Werror +CPPFLAGS += -fno-exceptions -fno-rtti + +BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT) + ifeq "$(DEBUG)" "true" BIN_DIR = Debug - CFLAGS = $(DEBUG_FLAGS) + CFLAGS += $(C_DEBUG_FLAGS) else BIN_DIR = Release - CFLAGS = $(OPT_FLAGS) + CFLAGS += $(C_OPT_FLAGS) + LINK += -s endif -CFLAGS += -DNDEBUG -Wall -Wno-non-virtual-dtor -Werror -fno-exceptions -DHAVE_STDINT_H -Dstricmp=strcasecmp -fno-rtti -static-libgcc -CFLAGS += -DSM_DEFAULT_THREADER -m32 +IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0") -ifeq "$(AMD64)" "true" - BINARY = $(NAME)_$(BIN_SUFFIX_64) - CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -m64 - INCLUDE += -Lextra/lib_linux64 +ifeq "$(IS_CLANG)" "1" + CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/") + CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/") else - BINARY = $(NAME)_$(BIN_SUFFIX_32) - CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 - OPT_FLAGS += -march=i686 - INCLUDE += -Lextra/lib_linux + CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1) + CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3) endif -OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) +# Clang || GCC >= 4 +ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1" + CFLAGS += $(C_GCC4_FLAGS) + CPPFLAGS += $(CPP_GCC4_FLAGS) +endif + +# Clang >= 3 || GCC >= 4.7 +ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1" + CFLAGS += -Wno-delete-non-virtual-dtor +endif + +# OS is Linux and not using clang +ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1" + LINK += -static-libgcc +endif + +OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) + +# This will break if we include other Makefiles, but is fine for now. It allows +# us to make a copy of this file that uses altered paths (ie. Makefile.mine) +# or other changes without mucking up the original. +MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) $(BIN_DIR)/%.o: %.cpp - $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $< + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< all: - mkdir -p $(BIN_DIR)/thread - mkdir -p $(BIN_DIR)/mysql - mkdir -p $(BIN_DIR)/sdk mkdir -p $(BIN_DIR) - $(MAKE) mysql + mkdir -p $(BIN_DIR)/mysql + mkdir -p $(BIN_DIR)/thread + mkdir -p $(BIN_DIR)/sdk + $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT) -amd64: - $(MAKE) all AMD64=true +$(PROJECT): $(OBJ_BIN) + $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY) -mysql: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) - -debug: - $(MAKE) all DEBUG=true +debug: + $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true default: all clean: - rm -rf Release/thread/*.o - rm -rf Release/mysql/*.o - rm -rf Release/sdk/*.o - rm -rf Release/*.o - rm -rf Release/$(NAME)_$(BIN_SUFFIX_32) - rm -rf Release/$(NAME)_$(BIN_SUFFIX_64) - rm -rf Debug/thread/*.o - rm -rf Debug/mysql/*.o - rm -rf Debug/sdk/*.o - rm -rf Debug/*.o - rm -rf Debug/$(NAME)_$(BIN_SUFFIX_32) - rm -rf Debug/$(NAME)_$(BIN_SUFFIX_64) + rm -rf $(BIN_DIR)/*.o + rm -rf $(BIN_DIR)/mysql/*.o + rm -rf $(BIN_DIR)/thread/*.o + rm -rf $(BIN_DIR)/sdk/*.o + rm -f $(BIN_DIR)/$(BINARY) + diff --git a/dlls/mysqlx/mysql/MysqlDriver.cpp b/dlls/mysqlx/mysql/MysqlDriver.cpp index 38b8144a..44a72e84 100644 --- a/dlls/mysqlx/mysql/MysqlDriver.cpp +++ b/dlls/mysqlx/mysql/MysqlDriver.cpp @@ -42,7 +42,7 @@ IDatabase *MysqlDriver::_Connect(DatabaseInfo *info, int *errcode, char *error, { snprintf(error, maxlength, "Initialization failed"); } - return false; + return NULL; } if (do_timeout && info->max_timeout) @@ -67,7 +67,7 @@ IDatabase *MysqlDriver::_Connect(DatabaseInfo *info, int *errcode, char *error, { snprintf(error, maxlength, "%s", mysql_error(mysql)); } - return false; + return NULL; } MysqlDatabase *pMysql = new MysqlDatabase(mysql, this); diff --git a/dlls/mysqlx/sdk/amxxmodule.cpp b/dlls/mysqlx/sdk/amxxmodule.cpp index a634e9ac..faf8f75c 100755 --- a/dlls/mysqlx/sdk/amxxmodule.cpp +++ b/dlls/mysqlx/sdk/amxxmodule.cpp @@ -2240,7 +2240,7 @@ static META_FUNCTIONS g_MetaFunctions_Table = GetEngineFunctions_Post }; -C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) +C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) { if ((int) CVAR_GET_FLOAT("developer") != 0) UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n", @@ -2334,7 +2334,7 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason) -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) // linux prototype C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) { @@ -3050,7 +3050,7 @@ char* UTIL_VarArgs( char *format, ... ) // UTIL_LogPrintf - Prints a logged message to console. // Preceded by LOG: ( timestamp ) < message > //========================================================= -void UTIL_LogPrintf( char *fmt, ... ) +void UTIL_LogPrintf( const char *fmt, ... ) { va_list argptr; static char string[1024]; diff --git a/dlls/mysqlx/sdk/amxxmodule.h b/dlls/mysqlx/sdk/amxxmodule.h index c53b72da..9e42b72f 100755 --- a/dlls/mysqlx/sdk/amxxmodule.h +++ b/dlls/mysqlx/sdk/amxxmodule.h @@ -20,11 +20,16 @@ // DLL Export #undef DLLEXPORT -#ifndef __linux__ +#if defined(_WIN32) #define DLLEXPORT __declspec(dllexport) #else #define DLLEXPORT __attribute__((visibility("default"))) +#endif + +#if defined(__linux__) && !defined(LINUX) #define LINUX +#elif defined(__APPLE__) && !defined(OSX) +#define OSX #endif #undef C_DLLEXPORT @@ -66,7 +71,7 @@ struct amxx_module_info_s #if defined HAVE_STDINT_H #include #else - #if defined __LCC__ || defined __DMC__ || defined LINUX + #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__ #if defined HAVE_INTTYPES_H #include #else @@ -308,7 +313,7 @@ typedef int (AMXAPI *AMX_DEBUG)(struct tagAMX *amx); #endif #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack(1) /* structures must be packed (byte-aligned) */ #elif defined MACOS && defined __MWERKS__ #pragma options align=mac68k @@ -395,7 +400,7 @@ enum { }; #if !defined AMX_NO_ALIGN - #if defined __linux__ + #if defined(__linux__) || defined(__APPLE__) #pragma pack() /* reset default packing */ #else #pragma pack(pop) /* reset previous packing */ @@ -406,7 +411,7 @@ enum { // ***** declare functions ***** #ifdef USE_METAMOD -void UTIL_LogPrintf( char *fmt, ... ); +void UTIL_LogPrintf( const char *fmt, ... ); void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage); short FixedSigned16( float value, float scale ); unsigned short FixedUnsigned16( float value, float scale ); @@ -833,11 +838,11 @@ int FN_AllowLagCompensation_Post(void); #ifdef FN_PrecacheModel -int FN_PrecacheModel(char *s); +int FN_PrecacheModel(const char *s); #endif // FN_PrecacheModel #ifdef FN_PrecacheSound -int FN_PrecacheSound(char *s); +int FN_PrecacheSound(const char *s); #endif // FN_PrecacheSound #ifdef FN_SetModel @@ -857,7 +862,7 @@ void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize #ifdef FN_ChangeLevel -void FN_ChangeLevel(char *s1, char *s2); +void FN_ChangeLevel(const char *s1, const char *s2); #endif // FN_ChangeLevel #ifdef FN_GetSpawnParms @@ -1261,19 +1266,19 @@ char *FN_GetInfoKeyBuffer(edict_t *e); #endif // FN_GetInfoKeyBuffer #ifdef FN_InfoKeyValue -char *FN_InfoKeyValue(char *infobuffer, char *key); +char *FN_InfoKeyValue(char *infobuffer, const char *key); #endif // FN_InfoKeyValue #ifdef FN_SetKeyValue -void FN_SetKeyValue(char *infobuffer, char *key, char *value); +void FN_SetKeyValue(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue #ifdef FN_SetClientKeyValue -void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue #ifdef FN_IsMapValid -int FN_IsMapValid(char *filename); +int FN_IsMapValid(const char *filename); #endif // FN_IsMapValid #ifdef FN_StaticDecal @@ -1281,7 +1286,7 @@ void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int mo #endif // FN_StaticDecal #ifdef FN_PrecacheGeneric -int FN_PrecacheGeneric(char *s); +int FN_PrecacheGeneric(const char *s); #endif // FN_PrecacheGeneric #ifdef FN_GetPlayerUserId @@ -1414,11 +1419,11 @@ const char *FN_GetPlayerAuthId(edict_t *e); #ifdef FN_PrecacheModel_Post -int FN_PrecacheModel_Post(char *s); +int FN_PrecacheModel_Post(const char *s); #endif // FN_PrecacheModel_Post #ifdef FN_PrecacheSound_Post -int FN_PrecacheSound_Post(char *s); +int FN_PrecacheSound_Post(const char *s); #endif // FN_PrecacheSound_Post #ifdef FN_SetModel_Post @@ -1438,7 +1443,7 @@ void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize_Post #ifdef FN_ChangeLevel_Post -void FN_ChangeLevel_Post(char *s1, char *s2); +void FN_ChangeLevel_Post(const char *s1, const char *s2); #endif // FN_ChangeLevel_Post #ifdef FN_GetSpawnParms_Post @@ -1842,19 +1847,19 @@ char *FN_GetInfoKeyBuffer_Post(edict_t *e); #endif // FN_GetInfoKeyBuffer_Post #ifdef FN_InfoKeyValue_Post -char *FN_InfoKeyValue_Post(char *infobuffer, char *key); +char *FN_InfoKeyValue_Post(char *infobuffer, const char *key); #endif // FN_InfoKeyValue_Post #ifdef FN_SetKeyValue_Post -void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value); +void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue_Post #ifdef FN_SetClientKeyValue_Post -void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue_Post #ifdef FN_IsMapValid_Post -int FN_IsMapValid_Post(char *filename); +int FN_IsMapValid_Post(const char *filename); #endif // FN_IsMapValid_Post #ifdef FN_StaticDecal_Post @@ -1862,7 +1867,7 @@ void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, i #endif // FN_StaticDecal_Post #ifdef FN_PrecacheGeneric_Post -int FN_PrecacheGeneric_Post(char *s); +int FN_PrecacheGeneric_Post(const char *s); #endif // FN_PrecacheGeneric_Post #ifdef FN_GetPlayerUserId_Post @@ -2116,7 +2121,7 @@ typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/); typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...); typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...); typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/); -typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...); +typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...); typedef const char * (*PFN_GET_MODNAME) (void); typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/); typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/); @@ -2175,8 +2180,8 @@ typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned i typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/); typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/); typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/); -typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); -typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */); typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/); typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/); diff --git a/dlls/mysqlx/sdk/sh_list.h b/dlls/mysqlx/sdk/sh_list.h index e5c65347..f7276989 100644 --- a/dlls/mysqlx/sdk/sh_list.h +++ b/dlls/mysqlx/sdk/sh_list.h @@ -19,7 +19,7 @@ #endif #include -#include +#include namespace SourceHook { diff --git a/dlls/mysqlx/sdk/sh_string.h b/dlls/mysqlx/sdk/sh_string.h index 08bc6ebb..e1cc54d6 100755 --- a/dlls/mysqlx/sdk/sh_string.h +++ b/dlls/mysqlx/sdk/sh_string.h @@ -196,7 +196,7 @@ public: if (is_space(v[len-1])) { - for (i=len-1; i>=0; i--) + for (i=len-1; itime; } diff --git a/dlls/ns/CString.h b/dlls/ns/CString.h index efed1b59..632f430b 100644 --- a/dlls/ns/CString.h +++ b/dlls/ns/CString.h @@ -245,7 +245,7 @@ public: if (is_space(v[len-1])) { - for (i=len-1; i>=0; i--) + for (i=len-1; i 0) + --m_CurrentUsedSize; FreeMemIfPossible(); } diff --git a/dlls/ns/Makefile b/dlls/ns/Makefile index 5126d9f2..9bd98cd6 100755 --- a/dlls/ns/Makefile +++ b/dlls/ns/Makefile @@ -1,98 +1,128 @@ -#(C)2004-2005 AMX Mod X Development Team +# (C)2004-2013 AMX Mod X Development Team # Makefile written by David "BAILOPAN" Anderson -HLSDK = ../../../hlsdk +########################################### +### EDIT THESE PATHS FOR YOUR OWN SETUP ### +########################################### + +HLSDK = ../../../hlsdk/multiplayer MM_ROOT = ../../../metamod/metamod +##################################### ### EDIT BELOW FOR OTHER PROJECTS ### +##################################### +PROJECT = ns -CRAZY_OPT_FLAGS = -DCRAZY_OPTS -O3 -funroll-loops -ffast-math -s -pipe -fomit-frame-pointer -fno-strict-aliasing -DNDEBUG -fmerge-all-constants -fmodulo-sched -fgcse-sm -fgcse-las -fgcse-after-reload -floop-optimize2 -funsafe-loop-optimizations -ftree-loop-linear -ftree-loop-im -ftree-loop-ivcanon -fivopts -ftree-vectorize -fvariable-expansion-in-unroller -funsafe-math-optimizations -ffinite-math-only -fpeel-loops -funswitch-loops -fvisibility=hidden -fvisibility-inlines-hidden -Wall -Wno-unknown-pragmas -Wno-deprecated -fno-exceptions -DHAVE_STDINT_H -static-libgcc -fno-rtti -Wpointer-arith -Wcast-qual -Wcast-align -Wconversion -Wsign-compare -Wmissing-noreturn -Winline -Wlong-long -Wunsafe-loop-optimizations -Wctor-dtor-privacy -Wno-non-virtual-dtor -Wreorder -Woverloaded-virtual -Wsign-promo -Wsynth -shared +OBJECTS = sdk/amxxmodule.cpp dllapi.cpp utils.cpp amxxapi.cpp engineapi.cpp TitleManager.cpp \ + ParticleManager.cpp MessageHandler.cpp GameManager.cpp natives/general.cpp \ + natives/player.cpp natives/player_memory.cpp natives/structure.cpp natives/weapons.cpp \ + natives/particles.cpp natives/memberfuncs.cpp -CRAZY_LINK_FLAGS = -#-fwhole-program -#-fwhole-program -combine +############################################## +### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### +############################################## -SANE_OPT_FLAGS = -O3 -funroll-loops -s -pipe -fomit-frame-pointer -fno-strict-aliasing -DNDEBUG +C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -fomit-frame-pointer -pipe +C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3 +C_GCC4_FLAGS = -fvisibility=hidden +CPP_GCC4_FLAGS = -fvisibility-inlines-hidden +CPP = gcc +CPP_OSX = clang -OPT_FLAGS = +LINK = -DEBUG_FLAGS = -g -ggdb3 -CPP = gcc-4.1 -NAME = ns +INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \ + -I$(HLSDK)/pm_shared -I$(MM_ROOT) -Isdk -BIN_SUFFIX = amxx_i386.so +################################################ +### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### +################################################ -OBJECTS = sdk/amxxmodule.cpp dllapi.cpp utils.cpp amxxapi.cpp engineapi.cpp \ -TitleManager.cpp ParticleManager.cpp MessageHandler.cpp GameManager.cpp \ -natives/general.cpp natives/player.cpp natives/player_memory.cpp \ -natives/structure.cpp natives/weapons.cpp natives/particles.cpp \ -natives/memberfuncs.cpp +OS := $(shell uname -s) -LINK = +ifeq "$(OS)" "Darwin" + CPP = $(CPP_OSX) + LIB_EXT = dylib + LIB_SUFFIX = _amxx + CFLAGS += -DOSX + LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5 +else + LIB_EXT = so + LIB_SUFFIX = _amxx_i386 + CFLAGS += -DLINUX + LINK += -shared +endif -INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \ - -I$(MM_ROOT) -I$(HLSDK)/common -I$(HLSDK)/pm_shared +LINK += -m32 -lm -ldl -GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) +CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror +CPPFLAGS += -fno-exceptions -fno-rtti + +BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT) ifeq "$(DEBUG)" "true" BIN_DIR = Debug - CFLAGS = $(DEBUG_FLAGS) + CFLAGS += $(C_DEBUG_FLAGS) else - ifeq "$(CRAZY)" "true" - BIN_DIR = Optimized - OPT_FLAGS = $(CRAZY_OPT_FLAGS) - LINK = $(CRAZY_LINK_FLAGS) - else - BIN_DIR = Release - OPT_FLAGS = $(SANE_OPT_FLAGS) - endif - ifeq "$(GCC_VERSION)" "4" - OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden - endif - CFLAGS = $(OPT_FLAGS) + BIN_DIR = Release + CFLAGS += $(C_OPT_FLAGS) + LINK += -s endif -CFLAGS += -Wall -Wno-non-virtual-dtor -Werror -fno-exceptions -DHAVE_STDINT_H -static-libgcc -fno-rtti -m32 +IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0") -BINARY = $(NAME)_$(BIN_SUFFIX) -CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -OPT_FLAGS += -march=i586 +ifeq "$(IS_CLANG)" "1" + CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/") + CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/") +else + CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1) + CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3) +endif -OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) +# Clang || GCC >= 4 +ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1" + CFLAGS += $(C_GCC4_FLAGS) + CPPFLAGS += $(CPP_GCC4_FLAGS) +endif + +# Clang >= 3 || GCC >= 4.7 +ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1" + CFLAGS += -Wno-delete-non-virtual-dtor +endif + +# OS is Linux and not using clang +ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1" + LINK += -static-libgcc +endif + +OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) + +# This will break if we include other Makefiles, but is fine for now. It allows +# us to make a copy of this file that uses altered paths (ie. Makefile.mine) +# or other changes without mucking up the original. +MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) $(BIN_DIR)/%.o: %.cpp - $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $< + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< all: mkdir -p $(BIN_DIR) mkdir -p $(BIN_DIR)/sdk mkdir -p $(BIN_DIR)/natives - $(MAKE) ns + $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT) -ns: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) +$(PROJECT): $(OBJ_BIN) + $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY) -debug: - $(MAKE) all DEBUG=true +debug: + $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true default: all -crazy: - $(MAKE) all CRAZY=true - clean: - rm -rf Release/*.o - rm -rf Release/sdk/*.o - rm -rf Release/natives/*.o - rm -rf Release/$(NAME)_$(BIN_SUFFIX) - rm -rf Debug/*.o - rm -rf Debug/sdk/*.o - rm -rf Debug/natives/*.o - rm -rf Debug/$(NAME)_$(BIN_SUFFIX) - rm -rf Optimized/*.o - rm -rf Optimized/sdk/*.o - rm -rf Optimized/natives/*.o - rm -rf Optimized/$(NAME)_$(BIN_SUFFIX) - + rm -rf $(BIN_DIR)/*.o + rm -rf $(BIN_DIR)/sdk/*.o + rm -rf $(BIN_DIR)/natives/*.o + rm -f $(BIN_DIR)/$(BINARY) + diff --git a/dlls/ns/engineapi.cpp b/dlls/ns/engineapi.cpp index 69896462..10a9ada6 100644 --- a/dlls/ns/engineapi.cpp +++ b/dlls/ns/engineapi.cpp @@ -49,7 +49,7 @@ // Parse log messages here for any desired information (structure_built, etc.) // The following logs are needed: // "sawce<1>" triggered "structure_built" (type "defensechamber")` -void AlertMessage_Post(ALERT_TYPE atype, char *szFmt, ...) +void AlertMessage_Post(ALERT_TYPE atype, const char *szFmt, ...) { if (atype != at_logged) { diff --git a/dlls/ns/natives/particles.cpp b/dlls/ns/natives/particles.cpp index 99c1c9d2..716c6dbb 100644 --- a/dlls/ns/natives/particles.cpp +++ b/dlls/ns/natives/particles.cpp @@ -58,7 +58,7 @@ typedef struct partsyskey_s partsystype type; }partsyskey; -cell PSKeyValueI(char *name, AMX *amx, cell *params) +cell PSKeyValueI(const char *name, AMX *amx, cell *params) { if (params[1]==0) { @@ -81,7 +81,7 @@ cell PSKeyValueI(char *name, AMX *amx, cell *params) return 1; } -cell PSKeyValueF(char *name, AMX *amx, cell *params) +cell PSKeyValueF(const char *name, AMX *amx, cell *params) { if (params[1]==0) { @@ -106,7 +106,7 @@ cell PSKeyValueF(char *name, AMX *amx, cell *params) return 1; } -cell PSKeyValueS(char *name, AMX *amx, cell *params) +cell PSKeyValueS(const char *name, AMX *amx, cell *params) { if (params[1]==0) { diff --git a/dlls/ns/ns.h b/dlls/ns/ns.h index 934f6288..d88aae77 100755 --- a/dlls/ns/ns.h +++ b/dlls/ns/ns.h @@ -63,7 +63,7 @@ void PlayerPostThink_Post(edict_t *pEntity); void UpdateClientData( const struct edict_s *ent, int sendweapons, struct clientdata_s *cd ); void StartFrame(void); edict_t* CreateNamedEntity_Post(int className); -void AlertMessage_Post(ALERT_TYPE atype, char *szFmt, ...); +void AlertMessage_Post(ALERT_TYPE atype, const char *szFmt, ...); typedef struct tagAMX_HEADER { diff --git a/dlls/ns/sdk/amxxmodule.cpp b/dlls/ns/sdk/amxxmodule.cpp index a634e9ac..faf8f75c 100755 --- a/dlls/ns/sdk/amxxmodule.cpp +++ b/dlls/ns/sdk/amxxmodule.cpp @@ -2240,7 +2240,7 @@ static META_FUNCTIONS g_MetaFunctions_Table = GetEngineFunctions_Post }; -C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) +C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) { if ((int) CVAR_GET_FLOAT("developer") != 0) UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n", @@ -2334,7 +2334,7 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason) -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) // linux prototype C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) { @@ -3050,7 +3050,7 @@ char* UTIL_VarArgs( char *format, ... ) // UTIL_LogPrintf - Prints a logged message to console. // Preceded by LOG: ( timestamp ) < message > //========================================================= -void UTIL_LogPrintf( char *fmt, ... ) +void UTIL_LogPrintf( const char *fmt, ... ) { va_list argptr; static char string[1024]; diff --git a/dlls/ns/sdk/amxxmodule.h b/dlls/ns/sdk/amxxmodule.h index c53b72da..9e42b72f 100755 --- a/dlls/ns/sdk/amxxmodule.h +++ b/dlls/ns/sdk/amxxmodule.h @@ -20,11 +20,16 @@ // DLL Export #undef DLLEXPORT -#ifndef __linux__ +#if defined(_WIN32) #define DLLEXPORT __declspec(dllexport) #else #define DLLEXPORT __attribute__((visibility("default"))) +#endif + +#if defined(__linux__) && !defined(LINUX) #define LINUX +#elif defined(__APPLE__) && !defined(OSX) +#define OSX #endif #undef C_DLLEXPORT @@ -66,7 +71,7 @@ struct amxx_module_info_s #if defined HAVE_STDINT_H #include #else - #if defined __LCC__ || defined __DMC__ || defined LINUX + #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__ #if defined HAVE_INTTYPES_H #include #else @@ -308,7 +313,7 @@ typedef int (AMXAPI *AMX_DEBUG)(struct tagAMX *amx); #endif #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack(1) /* structures must be packed (byte-aligned) */ #elif defined MACOS && defined __MWERKS__ #pragma options align=mac68k @@ -395,7 +400,7 @@ enum { }; #if !defined AMX_NO_ALIGN - #if defined __linux__ + #if defined(__linux__) || defined(__APPLE__) #pragma pack() /* reset default packing */ #else #pragma pack(pop) /* reset previous packing */ @@ -406,7 +411,7 @@ enum { // ***** declare functions ***** #ifdef USE_METAMOD -void UTIL_LogPrintf( char *fmt, ... ); +void UTIL_LogPrintf( const char *fmt, ... ); void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage); short FixedSigned16( float value, float scale ); unsigned short FixedUnsigned16( float value, float scale ); @@ -833,11 +838,11 @@ int FN_AllowLagCompensation_Post(void); #ifdef FN_PrecacheModel -int FN_PrecacheModel(char *s); +int FN_PrecacheModel(const char *s); #endif // FN_PrecacheModel #ifdef FN_PrecacheSound -int FN_PrecacheSound(char *s); +int FN_PrecacheSound(const char *s); #endif // FN_PrecacheSound #ifdef FN_SetModel @@ -857,7 +862,7 @@ void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize #ifdef FN_ChangeLevel -void FN_ChangeLevel(char *s1, char *s2); +void FN_ChangeLevel(const char *s1, const char *s2); #endif // FN_ChangeLevel #ifdef FN_GetSpawnParms @@ -1261,19 +1266,19 @@ char *FN_GetInfoKeyBuffer(edict_t *e); #endif // FN_GetInfoKeyBuffer #ifdef FN_InfoKeyValue -char *FN_InfoKeyValue(char *infobuffer, char *key); +char *FN_InfoKeyValue(char *infobuffer, const char *key); #endif // FN_InfoKeyValue #ifdef FN_SetKeyValue -void FN_SetKeyValue(char *infobuffer, char *key, char *value); +void FN_SetKeyValue(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue #ifdef FN_SetClientKeyValue -void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue #ifdef FN_IsMapValid -int FN_IsMapValid(char *filename); +int FN_IsMapValid(const char *filename); #endif // FN_IsMapValid #ifdef FN_StaticDecal @@ -1281,7 +1286,7 @@ void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int mo #endif // FN_StaticDecal #ifdef FN_PrecacheGeneric -int FN_PrecacheGeneric(char *s); +int FN_PrecacheGeneric(const char *s); #endif // FN_PrecacheGeneric #ifdef FN_GetPlayerUserId @@ -1414,11 +1419,11 @@ const char *FN_GetPlayerAuthId(edict_t *e); #ifdef FN_PrecacheModel_Post -int FN_PrecacheModel_Post(char *s); +int FN_PrecacheModel_Post(const char *s); #endif // FN_PrecacheModel_Post #ifdef FN_PrecacheSound_Post -int FN_PrecacheSound_Post(char *s); +int FN_PrecacheSound_Post(const char *s); #endif // FN_PrecacheSound_Post #ifdef FN_SetModel_Post @@ -1438,7 +1443,7 @@ void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize_Post #ifdef FN_ChangeLevel_Post -void FN_ChangeLevel_Post(char *s1, char *s2); +void FN_ChangeLevel_Post(const char *s1, const char *s2); #endif // FN_ChangeLevel_Post #ifdef FN_GetSpawnParms_Post @@ -1842,19 +1847,19 @@ char *FN_GetInfoKeyBuffer_Post(edict_t *e); #endif // FN_GetInfoKeyBuffer_Post #ifdef FN_InfoKeyValue_Post -char *FN_InfoKeyValue_Post(char *infobuffer, char *key); +char *FN_InfoKeyValue_Post(char *infobuffer, const char *key); #endif // FN_InfoKeyValue_Post #ifdef FN_SetKeyValue_Post -void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value); +void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue_Post #ifdef FN_SetClientKeyValue_Post -void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue_Post #ifdef FN_IsMapValid_Post -int FN_IsMapValid_Post(char *filename); +int FN_IsMapValid_Post(const char *filename); #endif // FN_IsMapValid_Post #ifdef FN_StaticDecal_Post @@ -1862,7 +1867,7 @@ void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, i #endif // FN_StaticDecal_Post #ifdef FN_PrecacheGeneric_Post -int FN_PrecacheGeneric_Post(char *s); +int FN_PrecacheGeneric_Post(const char *s); #endif // FN_PrecacheGeneric_Post #ifdef FN_GetPlayerUserId_Post @@ -2116,7 +2121,7 @@ typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/); typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...); typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...); typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/); -typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...); +typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...); typedef const char * (*PFN_GET_MODNAME) (void); typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/); typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/); @@ -2175,8 +2180,8 @@ typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned i typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/); typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/); typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/); -typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); -typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */); typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/); typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/); diff --git a/dlls/ns/sh_list.h b/dlls/ns/sh_list.h index 93daad36..ba300dc1 100644 --- a/dlls/ns/sh_list.h +++ b/dlls/ns/sh_list.h @@ -19,7 +19,7 @@ #endif #include -#include +#include //namespace SourceHook //{ diff --git a/dlls/ns/utilfunctions.h b/dlls/ns/utilfunctions.h index 55c25fc8..73221392 100755 --- a/dlls/ns/utilfunctions.h +++ b/dlls/ns/utilfunctions.h @@ -124,7 +124,7 @@ class CPlayer; CPlayer *UTIL_PlayerByCID(int CID); // Converts something such as RESOURCES into OFFSET_WIN_RESOURCES or OFFSET_LIN_RESOURCES -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) #define MAKE_OFFSET(Offset) OFFSET_LIN_##Offset #define MAKE_MEMBER_OFFSET(Offs) (Offs - OFFSET_LIN_MEMBERFUNCSTART) #else diff --git a/dlls/nvault/Journal.cpp b/dlls/nvault/Journal.cpp index 16255269..9d4021f7 100755 --- a/dlls/nvault/Journal.cpp +++ b/dlls/nvault/Journal.cpp @@ -1,6 +1,6 @@ #include #include -#if defined __linux__ +#if defined(__linux__) || defined(__APPLE__) #include #endif #include "Journal.h" diff --git a/dlls/nvault/Makefile b/dlls/nvault/Makefile index 6d23b892..c74d53f6 100755 --- a/dlls/nvault/Makefile +++ b/dlls/nvault/Makefile @@ -1,79 +1,123 @@ -#(C)2004-2005 AMX Mod X Development Team +# (C)2004-2013 AMX Mod X Development Team # Makefile written by David "BAILOPAN" Anderson -HLSDK = ../../../hlsdk +########################################### +### EDIT THESE PATHS FOR YOUR OWN SETUP ### +########################################### + +HLSDK = ../../../hlsdk/multiplayer MM_ROOT = ../../../metamod/metamod +##################################### ### EDIT BELOW FOR OTHER PROJECTS ### +##################################### -OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing -fomit-frame-pointer -DEBUG_FLAGS = -g -ggdb3 -CPP = gcc-4.1 -NAME = nvault - -BIN_SUFFIX_32 = amxx_i386.so -BIN_SUFFIX_64 = amxx_amd64.so +PROJECT = nvault OBJECTS = sdk/amxxmodule.cpp amxxapi.cpp Binary.cpp Journal.cpp NVault.cpp -#LINK = /lib/libgcc_eh.a /lib/libstdc++-3.4.a -LINK = +############################################## +### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### +############################################## -INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \ - -I$(MM_ROOT) -I$(HLSDK)/common -Isdk +C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -fomit-frame-pointer -pipe +C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3 +C_GCC4_FLAGS = -fvisibility=hidden +CPP_GCC4_FLAGS = -fvisibility-inlines-hidden +CPP = gcc +CPP_OSX = clang -GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) +LINK = -ifeq "$(GCC_VERSION)" "4" - OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden +INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \ + -I$(MM_ROOT) -Isdk + +################################################ +### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### +################################################ + +OS := $(shell uname -s) + +ifeq "$(OS)" "Darwin" + CPP = $(CPP_OSX) + LIB_EXT = dylib + LIB_SUFFIX = _amxx + CFLAGS += -DOSX + LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5 +else + LIB_EXT = so + LIB_SUFFIX = _amxx_i386 + CFLAGS += -DLINUX + LINK += -shared endif +LINK += -m32 -lm -ldl + +CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror +CPPFLAGS += -fno-exceptions -fno-rtti + +BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT) + ifeq "$(DEBUG)" "true" BIN_DIR = Debug - CFLAGS = $(DEBUG_FLAGS) + CFLAGS += $(C_DEBUG_FLAGS) else BIN_DIR = Release - CFLAGS = $(OPT_FLAGS) + CFLAGS += $(C_OPT_FLAGS) + LINK += -s endif -CFLAGS += -DNDEBUG -Wall -Werror -DHAVE_STDINT_H -fno-rtti -static-libgcc -fno-exceptions -m32 +IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0") -ifeq "$(AMD64)" "true" - BINARY = $(NAME)_$(BIN_SUFFIX_64) - CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -m64 +ifeq "$(IS_CLANG)" "1" + CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/") + CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/") else - BINARY = $(NAME)_$(BIN_SUFFIX_32) - CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 - OPT_FLAGS += -march=i586 + CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1) + CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3) endif -OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) +# Clang || GCC >= 4 +ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1" + CFLAGS += $(C_GCC4_FLAGS) + CPPFLAGS += $(CPP_GCC4_FLAGS) +endif + +# Clang >= 3 || GCC >= 4.7 +ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1" + CFLAGS += -Wno-delete-non-virtual-dtor +endif + +# OS is Linux and not using clang +ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1" + LINK += -static-libgcc +endif + +OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) + +# This will break if we include other Makefiles, but is fine for now. It allows +# us to make a copy of this file that uses altered paths (ie. Makefile.mine) +# or other changes without mucking up the original. +MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) $(BIN_DIR)/%.o: %.cpp - $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $< + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< all: mkdir -p $(BIN_DIR) mkdir -p $(BIN_DIR)/sdk - $(MAKE) nvault + $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT) -amd64: - $(MAKE) all AMD64=true +$(PROJECT): $(OBJ_BIN) + $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY) -nvault: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) - -debug: - $(MAKE) all DEBUG=true +debug: + $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true default: all clean: - rm -rf Release/sdk/*.o - rm -rf Release/*.o - rm -rf Release/$(NAME)_$(BIN_SUFFIX_32) - rm -rf Release/$(NAME)_$(BIN_SUFFIX_64) - rm -rf Debug/sdk/*.o - rm -rf Debug/*.o - rm -rf Debug/$(NAME)_$(BIN_SUFFIX_32) - rm -rf Debug/$(NAME)_$(BIN_SUFFIX_64) + rm -rf $(BIN_DIR)/*.o + rm -rf $(BIN_DIR)/sdk/*.o + rm -f $(BIN_DIR)/$(BINARY) + diff --git a/dlls/nvault/NVault.cpp b/dlls/nvault/NVault.cpp index b269c869..8bea86b3 100755 --- a/dlls/nvault/NVault.cpp +++ b/dlls/nvault/NVault.cpp @@ -4,7 +4,7 @@ #include "Binary.h" #include "CString.h" -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) #define _snprintf snprintf #endif diff --git a/dlls/nvault/amxxapi.cpp b/dlls/nvault/amxxapi.cpp index c05e34cc..880e9dd8 100755 --- a/dlls/nvault/amxxapi.cpp +++ b/dlls/nvault/amxxapi.cpp @@ -9,7 +9,7 @@ #define MKDIR(p) mkdir(p, 0755) #endif -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) #include #include #include diff --git a/dlls/nvault/sdk/CString.h b/dlls/nvault/sdk/CString.h index 14b86509..1c2c5789 100755 --- a/dlls/nvault/sdk/CString.h +++ b/dlls/nvault/sdk/CString.h @@ -220,7 +220,7 @@ public: if (is_space(v[len-1])) { - for (i=len-1; i>=0; i--) + for (i=len-1; i //========================================================= -void UTIL_LogPrintf( char *fmt, ... ) +void UTIL_LogPrintf( const char *fmt, ... ) { va_list argptr; static char string[1024]; diff --git a/dlls/nvault/sdk/amxxmodule.h b/dlls/nvault/sdk/amxxmodule.h index c53b72da..9e42b72f 100755 --- a/dlls/nvault/sdk/amxxmodule.h +++ b/dlls/nvault/sdk/amxxmodule.h @@ -20,11 +20,16 @@ // DLL Export #undef DLLEXPORT -#ifndef __linux__ +#if defined(_WIN32) #define DLLEXPORT __declspec(dllexport) #else #define DLLEXPORT __attribute__((visibility("default"))) +#endif + +#if defined(__linux__) && !defined(LINUX) #define LINUX +#elif defined(__APPLE__) && !defined(OSX) +#define OSX #endif #undef C_DLLEXPORT @@ -66,7 +71,7 @@ struct amxx_module_info_s #if defined HAVE_STDINT_H #include #else - #if defined __LCC__ || defined __DMC__ || defined LINUX + #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__ #if defined HAVE_INTTYPES_H #include #else @@ -308,7 +313,7 @@ typedef int (AMXAPI *AMX_DEBUG)(struct tagAMX *amx); #endif #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack(1) /* structures must be packed (byte-aligned) */ #elif defined MACOS && defined __MWERKS__ #pragma options align=mac68k @@ -395,7 +400,7 @@ enum { }; #if !defined AMX_NO_ALIGN - #if defined __linux__ + #if defined(__linux__) || defined(__APPLE__) #pragma pack() /* reset default packing */ #else #pragma pack(pop) /* reset previous packing */ @@ -406,7 +411,7 @@ enum { // ***** declare functions ***** #ifdef USE_METAMOD -void UTIL_LogPrintf( char *fmt, ... ); +void UTIL_LogPrintf( const char *fmt, ... ); void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage); short FixedSigned16( float value, float scale ); unsigned short FixedUnsigned16( float value, float scale ); @@ -833,11 +838,11 @@ int FN_AllowLagCompensation_Post(void); #ifdef FN_PrecacheModel -int FN_PrecacheModel(char *s); +int FN_PrecacheModel(const char *s); #endif // FN_PrecacheModel #ifdef FN_PrecacheSound -int FN_PrecacheSound(char *s); +int FN_PrecacheSound(const char *s); #endif // FN_PrecacheSound #ifdef FN_SetModel @@ -857,7 +862,7 @@ void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize #ifdef FN_ChangeLevel -void FN_ChangeLevel(char *s1, char *s2); +void FN_ChangeLevel(const char *s1, const char *s2); #endif // FN_ChangeLevel #ifdef FN_GetSpawnParms @@ -1261,19 +1266,19 @@ char *FN_GetInfoKeyBuffer(edict_t *e); #endif // FN_GetInfoKeyBuffer #ifdef FN_InfoKeyValue -char *FN_InfoKeyValue(char *infobuffer, char *key); +char *FN_InfoKeyValue(char *infobuffer, const char *key); #endif // FN_InfoKeyValue #ifdef FN_SetKeyValue -void FN_SetKeyValue(char *infobuffer, char *key, char *value); +void FN_SetKeyValue(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue #ifdef FN_SetClientKeyValue -void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue #ifdef FN_IsMapValid -int FN_IsMapValid(char *filename); +int FN_IsMapValid(const char *filename); #endif // FN_IsMapValid #ifdef FN_StaticDecal @@ -1281,7 +1286,7 @@ void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int mo #endif // FN_StaticDecal #ifdef FN_PrecacheGeneric -int FN_PrecacheGeneric(char *s); +int FN_PrecacheGeneric(const char *s); #endif // FN_PrecacheGeneric #ifdef FN_GetPlayerUserId @@ -1414,11 +1419,11 @@ const char *FN_GetPlayerAuthId(edict_t *e); #ifdef FN_PrecacheModel_Post -int FN_PrecacheModel_Post(char *s); +int FN_PrecacheModel_Post(const char *s); #endif // FN_PrecacheModel_Post #ifdef FN_PrecacheSound_Post -int FN_PrecacheSound_Post(char *s); +int FN_PrecacheSound_Post(const char *s); #endif // FN_PrecacheSound_Post #ifdef FN_SetModel_Post @@ -1438,7 +1443,7 @@ void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize_Post #ifdef FN_ChangeLevel_Post -void FN_ChangeLevel_Post(char *s1, char *s2); +void FN_ChangeLevel_Post(const char *s1, const char *s2); #endif // FN_ChangeLevel_Post #ifdef FN_GetSpawnParms_Post @@ -1842,19 +1847,19 @@ char *FN_GetInfoKeyBuffer_Post(edict_t *e); #endif // FN_GetInfoKeyBuffer_Post #ifdef FN_InfoKeyValue_Post -char *FN_InfoKeyValue_Post(char *infobuffer, char *key); +char *FN_InfoKeyValue_Post(char *infobuffer, const char *key); #endif // FN_InfoKeyValue_Post #ifdef FN_SetKeyValue_Post -void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value); +void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue_Post #ifdef FN_SetClientKeyValue_Post -void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue_Post #ifdef FN_IsMapValid_Post -int FN_IsMapValid_Post(char *filename); +int FN_IsMapValid_Post(const char *filename); #endif // FN_IsMapValid_Post #ifdef FN_StaticDecal_Post @@ -1862,7 +1867,7 @@ void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, i #endif // FN_StaticDecal_Post #ifdef FN_PrecacheGeneric_Post -int FN_PrecacheGeneric_Post(char *s); +int FN_PrecacheGeneric_Post(const char *s); #endif // FN_PrecacheGeneric_Post #ifdef FN_GetPlayerUserId_Post @@ -2116,7 +2121,7 @@ typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/); typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...); typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...); typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/); -typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...); +typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...); typedef const char * (*PFN_GET_MODNAME) (void); typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/); typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/); @@ -2175,8 +2180,8 @@ typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned i typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/); typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/); typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/); -typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); -typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */); typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/); typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/); diff --git a/dlls/nvault/sdk/sh_list.h b/dlls/nvault/sdk/sh_list.h index 9c97406f..e45a2f8a 100755 --- a/dlls/nvault/sdk/sh_list.h +++ b/dlls/nvault/sdk/sh_list.h @@ -19,7 +19,7 @@ #endif #include -#include +#include //namespace SourceHook //{ diff --git a/dlls/nvault/sdk/sh_tinyhash.h b/dlls/nvault/sdk/sh_tinyhash.h index 0e47fb2b..07ef5ec6 100755 --- a/dlls/nvault/sdk/sh_tinyhash.h +++ b/dlls/nvault/sdk/sh_tinyhash.h @@ -432,7 +432,7 @@ public: void erase() { if (end || !hash || curbucket < 0 || curbucket >= static_cast(hash->m_numBuckets)) - return true; + return; iterator tmp = *this; ++tmp; diff --git a/dlls/regex/Makefile b/dlls/regex/Makefile index 256bcb8d..ed0e7cf0 100755 --- a/dlls/regex/Makefile +++ b/dlls/regex/Makefile @@ -1,80 +1,124 @@ -#(C)2004-2005 AMX Mod X Development Team +# (C)2004-2013 AMX Mod X Development Team # Makefile written by David "BAILOPAN" Anderson -HLSDK = ../../../hlsdk +########################################### +### EDIT THESE PATHS FOR YOUR OWN SETUP ### +########################################### + +HLSDK = ../../../hlsdk/multiplayer MM_ROOT = ../../../metamod/metamod +##################################### ### EDIT BELOW FOR OTHER PROJECTS ### +##################################### -OPT_FLAGS = -O3 -funroll-loops -s -pipe -fomit-frame-pointer -fno-strict-aliasing -DEBUG_FLAGS = -g -ggdb3 -CPP = gcc-4.1 -NAME = regex - -BIN_SUFFIX_32 = amxx_i386.so -BIN_SUFFIX_64 = amxx_amd64.so +PROJECT = regex OBJECTS = sdk/amxxmodule.cpp module.cpp CRegEx.cpp +############################################## +### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### +############################################## + +C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -fomit-frame-pointer -pipe +C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3 +C_GCC4_FLAGS = -fvisibility=hidden +CPP_GCC4_FLAGS = -fvisibility-inlines-hidden +CPP = gcc +CPP_OSX = clang + LINK = -lpcre -INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \ - -I$(MM_ROOT) -I$(HLSDK)/common -Isdk +INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \ + -I$(MM_ROOT) -Isdk -GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) +################################################ +### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### +################################################ -ifeq "$(GCC_VERSION)" "4" - OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden +OS := $(shell uname -s) + +ifeq "$(OS)" "Darwin" + CPP = $(CPP_OSX) + LIB_EXT = dylib + LIB_SUFFIX = _amxx + CFLAGS += -DOSX + LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5 -Llib_darwin +else + LIB_EXT = so + LIB_SUFFIX = _amxx_i386 + CFLAGS += -DLINUX + LINK += -shared -Llib_linux endif +LINK += -m32 -lm -ldl + +CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror +CPPFLAGS += -fno-exceptions -fno-rtti + +BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT) + ifeq "$(DEBUG)" "true" BIN_DIR = Debug - CFLAGS = $(DEBUG_FLAGS) + CFLAGS += $(C_DEBUG_FLAGS) else BIN_DIR = Release - CFLAGS = $(OPT_FLAGS) + CFLAGS += $(C_OPT_FLAGS) + LINK += -s endif -CFLAGS += -DNDEBUG -Wall -Werror -fno-exceptions -DHAVE_STDINT_H -static-libgcc -fno-rtti -m32 +IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0") -ifeq "$(AMD64)" "true" - BINARY = $(NAME)_$(BIN_SUFFIX_64) - CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -m64 - INCLUDE += -Llib_linux64 +ifeq "$(IS_CLANG)" "1" + CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/") + CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/") else - BINARY = $(NAME)_$(BIN_SUFFIX_32) - CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 - OPT_FLAGS += -march=i586 - INCLUDE += -Llib_linux + CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1) + CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3) endif -OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) +# Clang || GCC >= 4 +ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1" + CFLAGS += $(C_GCC4_FLAGS) + CPPFLAGS += $(CPP_GCC4_FLAGS) +endif + +# Clang >= 3 || GCC >= 4.7 +ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1" + CFLAGS += -Wno-delete-non-virtual-dtor +endif + +# OS is Linux and not using clang +ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1" + LINK += -static-libgcc +endif + +OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) + +# This will break if we include other Makefiles, but is fine for now. It allows +# us to make a copy of this file that uses altered paths (ie. Makefile.mine) +# or other changes without mucking up the original. +MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) $(BIN_DIR)/%.o: %.cpp - $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $< + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< + all: mkdir -p $(BIN_DIR) mkdir -p $(BIN_DIR)/sdk - $(MAKE) regex + $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT) -amd64: - $(MAKE) all AMD64=true +$(PROJECT): $(OBJ_BIN) + $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY) -regex: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) - -debug: - $(MAKE) all DEBUG=true +debug: + $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true default: all clean: - rm -rf Release/sdk/*.o - rm -rf Release/*.o - rm -rf Release/$(NAME)_$(BIN_SUFFIX_32) - rm -rf Release/$(NAME)_$(BIN_SUFFIX_64) - rm -rf Debug/sdk/*.o - rm -rf Debug/*.o - rm -rf Debug/$(NAME)_$(BIN_SUFFIX_32) - rm -rf Debug/$(NAME)_$(BIN_SUFFIX_64) + rm -rf $(BIN_DIR)/*.o + rm -rf $(BIN_DIR)/sdk/*.o + rm -f $(BIN_DIR)/$(BINARY) + diff --git a/dlls/regex/sdk/amxxmodule.cpp b/dlls/regex/sdk/amxxmodule.cpp index a634e9ac..faf8f75c 100755 --- a/dlls/regex/sdk/amxxmodule.cpp +++ b/dlls/regex/sdk/amxxmodule.cpp @@ -2240,7 +2240,7 @@ static META_FUNCTIONS g_MetaFunctions_Table = GetEngineFunctions_Post }; -C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) +C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) { if ((int) CVAR_GET_FLOAT("developer") != 0) UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n", @@ -2334,7 +2334,7 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason) -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) // linux prototype C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) { @@ -3050,7 +3050,7 @@ char* UTIL_VarArgs( char *format, ... ) // UTIL_LogPrintf - Prints a logged message to console. // Preceded by LOG: ( timestamp ) < message > //========================================================= -void UTIL_LogPrintf( char *fmt, ... ) +void UTIL_LogPrintf( const char *fmt, ... ) { va_list argptr; static char string[1024]; diff --git a/dlls/regex/sdk/amxxmodule.h b/dlls/regex/sdk/amxxmodule.h index c53b72da..9e42b72f 100755 --- a/dlls/regex/sdk/amxxmodule.h +++ b/dlls/regex/sdk/amxxmodule.h @@ -20,11 +20,16 @@ // DLL Export #undef DLLEXPORT -#ifndef __linux__ +#if defined(_WIN32) #define DLLEXPORT __declspec(dllexport) #else #define DLLEXPORT __attribute__((visibility("default"))) +#endif + +#if defined(__linux__) && !defined(LINUX) #define LINUX +#elif defined(__APPLE__) && !defined(OSX) +#define OSX #endif #undef C_DLLEXPORT @@ -66,7 +71,7 @@ struct amxx_module_info_s #if defined HAVE_STDINT_H #include #else - #if defined __LCC__ || defined __DMC__ || defined LINUX + #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__ #if defined HAVE_INTTYPES_H #include #else @@ -308,7 +313,7 @@ typedef int (AMXAPI *AMX_DEBUG)(struct tagAMX *amx); #endif #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack(1) /* structures must be packed (byte-aligned) */ #elif defined MACOS && defined __MWERKS__ #pragma options align=mac68k @@ -395,7 +400,7 @@ enum { }; #if !defined AMX_NO_ALIGN - #if defined __linux__ + #if defined(__linux__) || defined(__APPLE__) #pragma pack() /* reset default packing */ #else #pragma pack(pop) /* reset previous packing */ @@ -406,7 +411,7 @@ enum { // ***** declare functions ***** #ifdef USE_METAMOD -void UTIL_LogPrintf( char *fmt, ... ); +void UTIL_LogPrintf( const char *fmt, ... ); void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage); short FixedSigned16( float value, float scale ); unsigned short FixedUnsigned16( float value, float scale ); @@ -833,11 +838,11 @@ int FN_AllowLagCompensation_Post(void); #ifdef FN_PrecacheModel -int FN_PrecacheModel(char *s); +int FN_PrecacheModel(const char *s); #endif // FN_PrecacheModel #ifdef FN_PrecacheSound -int FN_PrecacheSound(char *s); +int FN_PrecacheSound(const char *s); #endif // FN_PrecacheSound #ifdef FN_SetModel @@ -857,7 +862,7 @@ void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize #ifdef FN_ChangeLevel -void FN_ChangeLevel(char *s1, char *s2); +void FN_ChangeLevel(const char *s1, const char *s2); #endif // FN_ChangeLevel #ifdef FN_GetSpawnParms @@ -1261,19 +1266,19 @@ char *FN_GetInfoKeyBuffer(edict_t *e); #endif // FN_GetInfoKeyBuffer #ifdef FN_InfoKeyValue -char *FN_InfoKeyValue(char *infobuffer, char *key); +char *FN_InfoKeyValue(char *infobuffer, const char *key); #endif // FN_InfoKeyValue #ifdef FN_SetKeyValue -void FN_SetKeyValue(char *infobuffer, char *key, char *value); +void FN_SetKeyValue(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue #ifdef FN_SetClientKeyValue -void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue #ifdef FN_IsMapValid -int FN_IsMapValid(char *filename); +int FN_IsMapValid(const char *filename); #endif // FN_IsMapValid #ifdef FN_StaticDecal @@ -1281,7 +1286,7 @@ void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int mo #endif // FN_StaticDecal #ifdef FN_PrecacheGeneric -int FN_PrecacheGeneric(char *s); +int FN_PrecacheGeneric(const char *s); #endif // FN_PrecacheGeneric #ifdef FN_GetPlayerUserId @@ -1414,11 +1419,11 @@ const char *FN_GetPlayerAuthId(edict_t *e); #ifdef FN_PrecacheModel_Post -int FN_PrecacheModel_Post(char *s); +int FN_PrecacheModel_Post(const char *s); #endif // FN_PrecacheModel_Post #ifdef FN_PrecacheSound_Post -int FN_PrecacheSound_Post(char *s); +int FN_PrecacheSound_Post(const char *s); #endif // FN_PrecacheSound_Post #ifdef FN_SetModel_Post @@ -1438,7 +1443,7 @@ void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize_Post #ifdef FN_ChangeLevel_Post -void FN_ChangeLevel_Post(char *s1, char *s2); +void FN_ChangeLevel_Post(const char *s1, const char *s2); #endif // FN_ChangeLevel_Post #ifdef FN_GetSpawnParms_Post @@ -1842,19 +1847,19 @@ char *FN_GetInfoKeyBuffer_Post(edict_t *e); #endif // FN_GetInfoKeyBuffer_Post #ifdef FN_InfoKeyValue_Post -char *FN_InfoKeyValue_Post(char *infobuffer, char *key); +char *FN_InfoKeyValue_Post(char *infobuffer, const char *key); #endif // FN_InfoKeyValue_Post #ifdef FN_SetKeyValue_Post -void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value); +void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue_Post #ifdef FN_SetClientKeyValue_Post -void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue_Post #ifdef FN_IsMapValid_Post -int FN_IsMapValid_Post(char *filename); +int FN_IsMapValid_Post(const char *filename); #endif // FN_IsMapValid_Post #ifdef FN_StaticDecal_Post @@ -1862,7 +1867,7 @@ void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, i #endif // FN_StaticDecal_Post #ifdef FN_PrecacheGeneric_Post -int FN_PrecacheGeneric_Post(char *s); +int FN_PrecacheGeneric_Post(const char *s); #endif // FN_PrecacheGeneric_Post #ifdef FN_GetPlayerUserId_Post @@ -2116,7 +2121,7 @@ typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/); typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...); typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...); typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/); -typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...); +typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...); typedef const char * (*PFN_GET_MODNAME) (void); typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/); typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/); @@ -2175,8 +2180,8 @@ typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned i typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/); typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/); typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/); -typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); -typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */); typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/); typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/); diff --git a/dlls/sockets/Makefile b/dlls/sockets/Makefile index ec52f84d..be81aa17 100755 --- a/dlls/sockets/Makefile +++ b/dlls/sockets/Makefile @@ -1,78 +1,124 @@ -#(C)2004-2005 AMX Mod X Development Team +# (C)2004-2013 AMX Mod X Development Team # Makefile written by David "BAILOPAN" Anderson -HLSDK = ../../../hlsdk +########################################### +### EDIT THESE PATHS FOR YOUR OWN SETUP ### +########################################### + +HLSDK = ../../../hlsdk/multiplayer MM_ROOT = ../../../metamod/metamod +##################################### ### EDIT BELOW FOR OTHER PROJECTS ### +##################################### -OPT_FLAGS = -O2 -funroll-loops -s -pipe -fno-strict-aliasing -fomit-frame-pointer -DEBUG_FLAGS = -g -ggdb3 -CPP = gcc-4.1 -NAME = sockets - -BIN_SUFFIX_32 = amxx_i386.so -BIN_SUFFIX_64 = amxx_amd64.so +PROJECT = sockets OBJECTS = sdk/amxxmodule.cpp sockets.cpp -LINK = +############################################## +### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### +############################################## -INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \ - -I$(MM_ROOT) -I$(HLSDK)/common -Isdk +C_OPT_FLAGS = -DNDEBUG -O2 -funroll-loops -fomit-frame-pointer -pipe +C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3 +C_GCC4_FLAGS = -fvisibility=hidden +CPP_GCC4_FLAGS = -fvisibility-inlines-hidden +CPP = gcc +CPP_OSX = clang -GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) +LINK = -ifeq "$(GCC_VERSION)" "4" - OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden +INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \ + -I$(MM_ROOT) -Isdk + +################################################ +### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### +################################################ + +OS := $(shell uname -s) + +ifeq "$(OS)" "Darwin" + CPP = $(CPP_OSX) + LIB_EXT = dylib + LIB_SUFFIX = _amxx + CFLAGS += -DOSX + LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5 +else + LIB_EXT = so + LIB_SUFFIX = _amxx_i386 + CFLAGS += -DLINUX + LINK += -shared endif +LINK += -m32 -lm -ldl + +CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror +CPPFLAGS += -fno-exceptions -fno-rtti + +BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT) + ifeq "$(DEBUG)" "true" BIN_DIR = Debug - CFLAGS = $(DEBUG_FLAGS) + CFLAGS += $(C_DEBUG_FLAGS) else BIN_DIR = Release - CFLAGS = $(OPT_FLAGS) + CFLAGS += $(C_OPT_FLAGS) + LINK += -s endif -CFLAGS += -DNDEBUG -Wall -Werror -fno-exceptions -DHAVE_STDINT_H -static-libgcc -fno-rtti -m32 +IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0") -ifeq "$(AMD64)" "true" - BINARY = $(NAME)_$(BIN_SUFFIX_64) - CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -m64 +ifeq "$(IS_CLANG)" "1" + CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/") + CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/") else - BINARY = $(NAME)_$(BIN_SUFFIX_32) - CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 - OPT_FLAGS += -march=i586 + CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1) + CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3) endif -OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) +# Clang || GCC >= 4 +ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1" + CFLAGS += $(C_GCC4_FLAGS) + CPPFLAGS += $(CPP_GCC4_FLAGS) +endif + +# Clang >= 3 || GCC >= 4.7 +ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1" + CFLAGS += -Wno-delete-non-virtual-dtor +endif + +# OS is Linux and not using clang +ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1" + LINK += -static-libgcc +endif + +OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) + +# This will break if we include other Makefiles, but is fine for now. It allows +# us to make a copy of this file that uses altered paths (ie. Makefile.mine) +# or other changes without mucking up the original. +MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) $(BIN_DIR)/%.o: %.cpp - $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $< + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< + all: mkdir -p $(BIN_DIR) mkdir -p $(BIN_DIR)/sdk - $(MAKE) sockets + $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT) -amd64: - $(MAKE) all AMD64=true +$(PROJECT): $(OBJ_BIN) + $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY) -sockets: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) - -debug: - $(MAKE) all DEBUG=true +debug: + $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true default: all clean: - rm -rf Release/sdk/*.o - rm -rf Release/*.o - rm -rf Release/$(NAME)_$(BIN_SUFFIX_32) - rm -rf Release/$(NAME)_$(BIN_SUFFIX_64) - rm -rf Debug/sdk/*.o - rm -rf Debug/*.o - rm -rf Debug/$(NAME)_$(BIN_SUFFIX_32) - rm -rf Debug/$(NAME)_$(BIN_SUFFIX_64) + rm -rf $(BIN_DIR)/*.o + rm -rf $(BIN_DIR)/sdk/*.o + rm -f $(BIN_DIR)/$(BINARY) + diff --git a/dlls/sockets/sdk/amxxmodule.cpp b/dlls/sockets/sdk/amxxmodule.cpp index a634e9ac..faf8f75c 100755 --- a/dlls/sockets/sdk/amxxmodule.cpp +++ b/dlls/sockets/sdk/amxxmodule.cpp @@ -2240,7 +2240,7 @@ static META_FUNCTIONS g_MetaFunctions_Table = GetEngineFunctions_Post }; -C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) +C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) { if ((int) CVAR_GET_FLOAT("developer") != 0) UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n", @@ -2334,7 +2334,7 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason) -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) // linux prototype C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) { @@ -3050,7 +3050,7 @@ char* UTIL_VarArgs( char *format, ... ) // UTIL_LogPrintf - Prints a logged message to console. // Preceded by LOG: ( timestamp ) < message > //========================================================= -void UTIL_LogPrintf( char *fmt, ... ) +void UTIL_LogPrintf( const char *fmt, ... ) { va_list argptr; static char string[1024]; diff --git a/dlls/sockets/sdk/amxxmodule.h b/dlls/sockets/sdk/amxxmodule.h index c53b72da..9e42b72f 100755 --- a/dlls/sockets/sdk/amxxmodule.h +++ b/dlls/sockets/sdk/amxxmodule.h @@ -20,11 +20,16 @@ // DLL Export #undef DLLEXPORT -#ifndef __linux__ +#if defined(_WIN32) #define DLLEXPORT __declspec(dllexport) #else #define DLLEXPORT __attribute__((visibility("default"))) +#endif + +#if defined(__linux__) && !defined(LINUX) #define LINUX +#elif defined(__APPLE__) && !defined(OSX) +#define OSX #endif #undef C_DLLEXPORT @@ -66,7 +71,7 @@ struct amxx_module_info_s #if defined HAVE_STDINT_H #include #else - #if defined __LCC__ || defined __DMC__ || defined LINUX + #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__ #if defined HAVE_INTTYPES_H #include #else @@ -308,7 +313,7 @@ typedef int (AMXAPI *AMX_DEBUG)(struct tagAMX *amx); #endif #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack(1) /* structures must be packed (byte-aligned) */ #elif defined MACOS && defined __MWERKS__ #pragma options align=mac68k @@ -395,7 +400,7 @@ enum { }; #if !defined AMX_NO_ALIGN - #if defined __linux__ + #if defined(__linux__) || defined(__APPLE__) #pragma pack() /* reset default packing */ #else #pragma pack(pop) /* reset previous packing */ @@ -406,7 +411,7 @@ enum { // ***** declare functions ***** #ifdef USE_METAMOD -void UTIL_LogPrintf( char *fmt, ... ); +void UTIL_LogPrintf( const char *fmt, ... ); void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage); short FixedSigned16( float value, float scale ); unsigned short FixedUnsigned16( float value, float scale ); @@ -833,11 +838,11 @@ int FN_AllowLagCompensation_Post(void); #ifdef FN_PrecacheModel -int FN_PrecacheModel(char *s); +int FN_PrecacheModel(const char *s); #endif // FN_PrecacheModel #ifdef FN_PrecacheSound -int FN_PrecacheSound(char *s); +int FN_PrecacheSound(const char *s); #endif // FN_PrecacheSound #ifdef FN_SetModel @@ -857,7 +862,7 @@ void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize #ifdef FN_ChangeLevel -void FN_ChangeLevel(char *s1, char *s2); +void FN_ChangeLevel(const char *s1, const char *s2); #endif // FN_ChangeLevel #ifdef FN_GetSpawnParms @@ -1261,19 +1266,19 @@ char *FN_GetInfoKeyBuffer(edict_t *e); #endif // FN_GetInfoKeyBuffer #ifdef FN_InfoKeyValue -char *FN_InfoKeyValue(char *infobuffer, char *key); +char *FN_InfoKeyValue(char *infobuffer, const char *key); #endif // FN_InfoKeyValue #ifdef FN_SetKeyValue -void FN_SetKeyValue(char *infobuffer, char *key, char *value); +void FN_SetKeyValue(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue #ifdef FN_SetClientKeyValue -void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue #ifdef FN_IsMapValid -int FN_IsMapValid(char *filename); +int FN_IsMapValid(const char *filename); #endif // FN_IsMapValid #ifdef FN_StaticDecal @@ -1281,7 +1286,7 @@ void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int mo #endif // FN_StaticDecal #ifdef FN_PrecacheGeneric -int FN_PrecacheGeneric(char *s); +int FN_PrecacheGeneric(const char *s); #endif // FN_PrecacheGeneric #ifdef FN_GetPlayerUserId @@ -1414,11 +1419,11 @@ const char *FN_GetPlayerAuthId(edict_t *e); #ifdef FN_PrecacheModel_Post -int FN_PrecacheModel_Post(char *s); +int FN_PrecacheModel_Post(const char *s); #endif // FN_PrecacheModel_Post #ifdef FN_PrecacheSound_Post -int FN_PrecacheSound_Post(char *s); +int FN_PrecacheSound_Post(const char *s); #endif // FN_PrecacheSound_Post #ifdef FN_SetModel_Post @@ -1438,7 +1443,7 @@ void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize_Post #ifdef FN_ChangeLevel_Post -void FN_ChangeLevel_Post(char *s1, char *s2); +void FN_ChangeLevel_Post(const char *s1, const char *s2); #endif // FN_ChangeLevel_Post #ifdef FN_GetSpawnParms_Post @@ -1842,19 +1847,19 @@ char *FN_GetInfoKeyBuffer_Post(edict_t *e); #endif // FN_GetInfoKeyBuffer_Post #ifdef FN_InfoKeyValue_Post -char *FN_InfoKeyValue_Post(char *infobuffer, char *key); +char *FN_InfoKeyValue_Post(char *infobuffer, const char *key); #endif // FN_InfoKeyValue_Post #ifdef FN_SetKeyValue_Post -void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value); +void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue_Post #ifdef FN_SetClientKeyValue_Post -void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue_Post #ifdef FN_IsMapValid_Post -int FN_IsMapValid_Post(char *filename); +int FN_IsMapValid_Post(const char *filename); #endif // FN_IsMapValid_Post #ifdef FN_StaticDecal_Post @@ -1862,7 +1867,7 @@ void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, i #endif // FN_StaticDecal_Post #ifdef FN_PrecacheGeneric_Post -int FN_PrecacheGeneric_Post(char *s); +int FN_PrecacheGeneric_Post(const char *s); #endif // FN_PrecacheGeneric_Post #ifdef FN_GetPlayerUserId_Post @@ -2116,7 +2121,7 @@ typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/); typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...); typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...); typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/); -typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...); +typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...); typedef const char * (*PFN_GET_MODNAME) (void); typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/); typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/); @@ -2175,8 +2180,8 @@ typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned i typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/); typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/); typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/); -typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); -typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */); typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/); typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/); diff --git a/dlls/sockets/sockets.cpp b/dlls/sockets/sockets.cpp index 1e1913e7..bc5eed88 100755 --- a/dlls/sockets/sockets.cpp +++ b/dlls/sockets/sockets.cpp @@ -18,7 +18,7 @@ #include #include #include -#include +#include #ifdef _WIN32 /* Windows */ diff --git a/dlls/sqlite/Makefile b/dlls/sqlite/Makefile index d30eb4ce..433f8c3c 100755 --- a/dlls/sqlite/Makefile +++ b/dlls/sqlite/Makefile @@ -1,112 +1,146 @@ -#(C)2004-2006 AMX Mod X Development Team +# (C)2004-2013 AMX Mod X Development Team # Makefile written by David "BAILOPAN" Anderson -HLSDK = ../../../hlsdk +########################################### +### EDIT THESE PATHS FOR YOUR OWN SETUP ### +########################################### + +HLSDK = ../../../hlsdk/multiplayer MM_ROOT = ../../../metamod/metamod - -### EDIT BELOW FOR OTHER PROJECTS ### - -OPT_FLAGS = -O3 -funroll-loops -s -pipe -fomit-frame-pointer -fno-strict-aliasing -DEBUG_FLAGS = -g -ggdb3 -CPP = gcc-4.1 -CC = gcc-4.1 -NAME = sqlite SQL = sqlite-source -BIN_SUFFIX_32 = amxx_i386.so -BIN_SUFFIX_64 = amxx_amd64.so +##################################### +### EDIT BELOW FOR OTHER PROJECTS ### +##################################### -CPP_OBJECTS = basic_sql.cpp handles.cpp module.cpp threading.cpp sdk/amxxmodule.cpp oldcompat_sql.cpp -CPP_OBJECTS += thread/BaseWorker.cpp thread/ThreadWorker.cpp thread/PosixThreads.cpp -CPP_OBJECTS += sqlitepp/SqliteQuery.cpp sqlitepp/SqliteResultSet.cpp sqlitepp/SqliteDatabase.cpp sqlitepp/SqliteDriver.cpp +PROJECT = sqlite -C_OBJECTS = $(SQL)/alter.c $(SQL)/analyze.c $(SQL)/attach.c $(SQL)/auth.c $(SQL)/btree.c $(SQL)/build.c \ - $(SQL)/callback.c $(SQL)/complete.c $(SQL)/date.c $(SQL)/delete.c $(SQL)/expr.c $(SQL)/func.c \ - $(SQL)/hash.c $(SQL)/insert.c $(SQL)/legacy.c $(SQL)/loadext.c $(SQL)/main.c $(SQL)/opcodes.c \ - $(SQL)/os.c $(SQL)/os_unix.c $(SQL)/pager.c $(SQL)/parse.c $(SQL)/pragma.c $(SQL)/prepare.c \ - $(SQL)/printf.c $(SQL)/random.c $(SQL)/select.c $(SQL)/table.c $(SQL)/tokenize.c $(SQL)/trigger.c \ - $(SQL)/update.c $(SQL)/utf.c $(SQL)/util.c $(SQL)/vacuum.c $(SQL)/vdbe.c $(SQL)/vdbeapi.c \ - $(SQL)/vdbeaux.c $(SQL)/vdbefifo.c $(SQL)/vdbemem.c $(SQL)/vtab.c $(SQL)/where.c \ +OBJECTS = basic_sql.cpp handles.cpp module.cpp threading.cpp sdk/amxxmodule.cpp oldcompat_sql.cpp \ + thread/BaseWorker.cpp thread/ThreadWorker.cpp thread/PosixThreads.cpp \ + sqlitepp/SqliteQuery.cpp sqlitepp/SqliteResultSet.cpp sqlitepp/SqliteDatabase.cpp \ + sqlitepp/SqliteDriver.cpp +OBJECTS += $(SQL)/alter.c $(SQL)/analyze.c $(SQL)/attach.c $(SQL)/auth.c $(SQL)/btree.c \ + $(SQL)/build.c $(SQL)/callback.c $(SQL)/complete.c $(SQL)/date.c $(SQL)/delete.c \ + $(SQL)/expr.c $(SQL)/func.c $(SQL)/hash.c $(SQL)/insert.c $(SQL)/legacy.c \ + $(SQL)/loadext.c $(SQL)/main.c $(SQL)/opcodes.c $(SQL)/os.c $(SQL)/os_unix.c \ + $(SQL)/pager.c $(SQL)/parse.c $(SQL)/pragma.c $(SQL)/prepare.c $(SQL)/printf.c \ + $(SQL)/random.c $(SQL)/select.c $(SQL)/table.c $(SQL)/tokenize.c $(SQL)/trigger.c \ + $(SQL)/update.c $(SQL)/utf.c $(SQL)/util.c $(SQL)/vacuum.c $(SQL)/vdbe.c $(SQL)/vdbeapi.c \ + $(SQL)/vdbeaux.c $(SQL)/vdbefifo.c $(SQL)/vdbemem.c $(SQL)/vtab.c $(SQL)/where.c -CFLAGS = -Wall -Werror -m32 -CPPFLAGS = -Wall -Wno-non-virtual-dtor -Werror -m32 +############################################## +### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### +############################################## -LINK = -lgcc -static-libgcc -lpthread +C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -fomit-frame-pointer -pipe +C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3 +C_GCC4_FLAGS = -fvisibility=hidden +CPP_GCC4_FLAGS = -fvisibility-inlines-hidden +CPP = gcc +CPP_OSX = clang -INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \ - -I$(MM_ROOT) -I$(HLSDK)/common -I$(SQL) -I./sqlitepp -I./sdk -I./thread +LINK = + +INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \ + -I$(MM_ROOT) -I$(SQL) -Isqlitepp -Ithread -Isdk + +################################################ +### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### +################################################ + +OS := $(shell uname -s) + +ifeq "$(OS)" "Darwin" + CPP = $(CPP_OSX) + LIB_EXT = dylib + LIB_SUFFIX = _amxx + CFLAGS += -DOSX + LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5 +else + LIB_EXT = so + LIB_SUFFIX = _amxx_i386 + CFLAGS += -DLINUX + LINK += -shared +endif + +LINK += -m32 -lm -ldl -lpthread + +CFLAGS += -DSM_DEFAULT_THREADER -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H \ + -Dstricmp=strcasecmp -fno-strict-aliasing -m32 -Wall -Werror +CPPFLAGS += -fno-exceptions -fno-rtti + +BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT) ifeq "$(DEBUG)" "true" BIN_DIR = Debug - CFLAGS += $(DEBUG_FLAGS) - CPPFLAGS += $(DEBUG_FLAGS) + CFLAGS += $(C_DEBUG_FLAGS) else BIN_DIR = Release - CFLAGS += $(OPT_FLAGS) - CPPFLAGS += $(OPT_FLAGS) + CFLAGS += $(C_OPT_FLAGS) + LINK += -s endif -GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) +IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0") -ifeq "$(GCC_VERSION)" "4" - CFLAGS += -fvisibility=hidden - CPPFLAGS += -fvisibility=hidden -fvisibility-inlines-hidden -endif - -CPPFLAGS += -DNDEBUG -Wno-deprecated -fno-exceptions -DHAVE_STDINT_H -fno-rtti -CPPFLAGS += -DSM_DEFAULT_THREADER -Dstricmp=strcasecmp -CFLAGS += -DNDEBUG -DHAVE_STDINT_H -DSM_DEFAULT_THREADER -Dstricmp=strcasecmp - -ifeq "$(AMD64)" "true" - BINARY = $(NAME)_$(BIN_SUFFIX_64) - CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -m64 - CPPFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -m64 +ifeq "$(IS_CLANG)" "1" + CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/") + CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/") else - BINARY = $(NAME)_$(BIN_SUFFIX_32) - CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 - CPPFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 - OPT_FLAGS += -march=i586 + CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1) + CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3) endif -OBJ_LINUX_CPP := $(CPP_OBJECTS:%.cpp=$(BIN_DIR)/%.o) +# Clang || GCC >= 4 +ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1" + CFLAGS += $(C_GCC4_FLAGS) + CPPFLAGS += $(CPP_GCC4_FLAGS) +endif + +# Clang >= 3 || GCC >= 4.7 +ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1" + CFLAGS += -Wno-delete-non-virtual-dtor +endif + +# OS is Linux and not using clang +ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1" + LINK += -static-libgcc +endif + +OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) +OBJ_BIN := $(OBJ_BIN:%.c=$(BIN_DIR)/%.o) + +# This will break if we include other Makefiles, but is fine for now. It allows +# us to make a copy of this file that uses altered paths (ie. Makefile.mine) +# or other changes without mucking up the original. +MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) $(BIN_DIR)/%.o: %.cpp - $(CPP) $(INCLUDE) $(CPPFLAGS) -o $@ -c $< - -OBJ_LINUX_C := $(C_OBJECTS:%.c=$(BIN_DIR)/%.o) + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< $(BIN_DIR)/%.o: %.c - $(CC) $(INCLUDE) $(CFLAGS) -c -o $@ $< + $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $< all: + mkdir -p $(BIN_DIR) + mkdir -p $(BIN_DIR)/sdk mkdir -p $(BIN_DIR)/thread mkdir -p $(BIN_DIR)/sqlitepp - mkdir -p $(BIN_DIR)/sdk - mkdir -p $(BIN_DIR) mkdir -p $(BIN_DIR)/$(SQL) - $(MAKE) sqlite + $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT) -amd64: - $(MAKE) all AMD64=true +$(PROJECT): $(OBJ_BIN) + $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY) -sqlite: $(OBJ_LINUX_C) $(OBJ_LINUX_CPP) - $(CPP) $(INCLUDE) $(CPPFLAGS) $(OBJ_LINUX_C) $(OBJ_LINUX_CPP) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) - -debug: - $(MAKE) all DEBUG=true +debug: + $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true default: all clean: - rm -rf Release/$(SQL)/*.o - rm -rf Release/sdk/*.o - rm -rf Release/sqlitepp/*.o - rm -rf Release/*.o - rm -rf Release/$(NAME)_$(BIN_SUFFIX_32) - rm -rf Release/$(NAME)_$(BIN_SUFFIX_64) - rm -rf Debug/$(SQL)/*.o - rm -rf Debug/sdk/*.o - rm -rf Debug/sqlitepp/*.o - rm -rf Debug/*.o - rm -rf Debug/$(NAME)_$(BIN_SUFFIX_32) - rm -rf Debug/$(NAME)_$(BIN_SUFFIX_64) + rm -rf $(BIN_DIR)/*.o + rm -rf $(BIN_DIR)/sdk/*.o + rm -rf $(BIN_DIR)/thread/*.o + rm -rf $(BIN_DIR)/sqlitepp/*.o + rm -rf $(BIN_DIR)/$(SQL)/*.o + rm -f $(BIN_DIR)/$(BINARY) + diff --git a/dlls/sqlite/module.cpp b/dlls/sqlite/module.cpp index be1f2c1c..f359ed67 100644 --- a/dlls/sqlite/module.cpp +++ b/dlls/sqlite/module.cpp @@ -60,7 +60,7 @@ void OnAmxxAttach() if (!DirExists(path)) { mkdir(path -#if defined __linux__ +#if defined(__linux__) || defined(__APPLE__) , 0775 #endif ); diff --git a/dlls/sqlite/sdk/amxxmodule.cpp b/dlls/sqlite/sdk/amxxmodule.cpp index a634e9ac..faf8f75c 100755 --- a/dlls/sqlite/sdk/amxxmodule.cpp +++ b/dlls/sqlite/sdk/amxxmodule.cpp @@ -2240,7 +2240,7 @@ static META_FUNCTIONS g_MetaFunctions_Table = GetEngineFunctions_Post }; -C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) +C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) { if ((int) CVAR_GET_FLOAT("developer") != 0) UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n", @@ -2334,7 +2334,7 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason) -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) // linux prototype C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) { @@ -3050,7 +3050,7 @@ char* UTIL_VarArgs( char *format, ... ) // UTIL_LogPrintf - Prints a logged message to console. // Preceded by LOG: ( timestamp ) < message > //========================================================= -void UTIL_LogPrintf( char *fmt, ... ) +void UTIL_LogPrintf( const char *fmt, ... ) { va_list argptr; static char string[1024]; diff --git a/dlls/sqlite/sdk/amxxmodule.h b/dlls/sqlite/sdk/amxxmodule.h index c53b72da..9e42b72f 100755 --- a/dlls/sqlite/sdk/amxxmodule.h +++ b/dlls/sqlite/sdk/amxxmodule.h @@ -20,11 +20,16 @@ // DLL Export #undef DLLEXPORT -#ifndef __linux__ +#if defined(_WIN32) #define DLLEXPORT __declspec(dllexport) #else #define DLLEXPORT __attribute__((visibility("default"))) +#endif + +#if defined(__linux__) && !defined(LINUX) #define LINUX +#elif defined(__APPLE__) && !defined(OSX) +#define OSX #endif #undef C_DLLEXPORT @@ -66,7 +71,7 @@ struct amxx_module_info_s #if defined HAVE_STDINT_H #include #else - #if defined __LCC__ || defined __DMC__ || defined LINUX + #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__ #if defined HAVE_INTTYPES_H #include #else @@ -308,7 +313,7 @@ typedef int (AMXAPI *AMX_DEBUG)(struct tagAMX *amx); #endif #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack(1) /* structures must be packed (byte-aligned) */ #elif defined MACOS && defined __MWERKS__ #pragma options align=mac68k @@ -395,7 +400,7 @@ enum { }; #if !defined AMX_NO_ALIGN - #if defined __linux__ + #if defined(__linux__) || defined(__APPLE__) #pragma pack() /* reset default packing */ #else #pragma pack(pop) /* reset previous packing */ @@ -406,7 +411,7 @@ enum { // ***** declare functions ***** #ifdef USE_METAMOD -void UTIL_LogPrintf( char *fmt, ... ); +void UTIL_LogPrintf( const char *fmt, ... ); void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage); short FixedSigned16( float value, float scale ); unsigned short FixedUnsigned16( float value, float scale ); @@ -833,11 +838,11 @@ int FN_AllowLagCompensation_Post(void); #ifdef FN_PrecacheModel -int FN_PrecacheModel(char *s); +int FN_PrecacheModel(const char *s); #endif // FN_PrecacheModel #ifdef FN_PrecacheSound -int FN_PrecacheSound(char *s); +int FN_PrecacheSound(const char *s); #endif // FN_PrecacheSound #ifdef FN_SetModel @@ -857,7 +862,7 @@ void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize #ifdef FN_ChangeLevel -void FN_ChangeLevel(char *s1, char *s2); +void FN_ChangeLevel(const char *s1, const char *s2); #endif // FN_ChangeLevel #ifdef FN_GetSpawnParms @@ -1261,19 +1266,19 @@ char *FN_GetInfoKeyBuffer(edict_t *e); #endif // FN_GetInfoKeyBuffer #ifdef FN_InfoKeyValue -char *FN_InfoKeyValue(char *infobuffer, char *key); +char *FN_InfoKeyValue(char *infobuffer, const char *key); #endif // FN_InfoKeyValue #ifdef FN_SetKeyValue -void FN_SetKeyValue(char *infobuffer, char *key, char *value); +void FN_SetKeyValue(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue #ifdef FN_SetClientKeyValue -void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue #ifdef FN_IsMapValid -int FN_IsMapValid(char *filename); +int FN_IsMapValid(const char *filename); #endif // FN_IsMapValid #ifdef FN_StaticDecal @@ -1281,7 +1286,7 @@ void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int mo #endif // FN_StaticDecal #ifdef FN_PrecacheGeneric -int FN_PrecacheGeneric(char *s); +int FN_PrecacheGeneric(const char *s); #endif // FN_PrecacheGeneric #ifdef FN_GetPlayerUserId @@ -1414,11 +1419,11 @@ const char *FN_GetPlayerAuthId(edict_t *e); #ifdef FN_PrecacheModel_Post -int FN_PrecacheModel_Post(char *s); +int FN_PrecacheModel_Post(const char *s); #endif // FN_PrecacheModel_Post #ifdef FN_PrecacheSound_Post -int FN_PrecacheSound_Post(char *s); +int FN_PrecacheSound_Post(const char *s); #endif // FN_PrecacheSound_Post #ifdef FN_SetModel_Post @@ -1438,7 +1443,7 @@ void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize_Post #ifdef FN_ChangeLevel_Post -void FN_ChangeLevel_Post(char *s1, char *s2); +void FN_ChangeLevel_Post(const char *s1, const char *s2); #endif // FN_ChangeLevel_Post #ifdef FN_GetSpawnParms_Post @@ -1842,19 +1847,19 @@ char *FN_GetInfoKeyBuffer_Post(edict_t *e); #endif // FN_GetInfoKeyBuffer_Post #ifdef FN_InfoKeyValue_Post -char *FN_InfoKeyValue_Post(char *infobuffer, char *key); +char *FN_InfoKeyValue_Post(char *infobuffer, const char *key); #endif // FN_InfoKeyValue_Post #ifdef FN_SetKeyValue_Post -void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value); +void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue_Post #ifdef FN_SetClientKeyValue_Post -void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue_Post #ifdef FN_IsMapValid_Post -int FN_IsMapValid_Post(char *filename); +int FN_IsMapValid_Post(const char *filename); #endif // FN_IsMapValid_Post #ifdef FN_StaticDecal_Post @@ -1862,7 +1867,7 @@ void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, i #endif // FN_StaticDecal_Post #ifdef FN_PrecacheGeneric_Post -int FN_PrecacheGeneric_Post(char *s); +int FN_PrecacheGeneric_Post(const char *s); #endif // FN_PrecacheGeneric_Post #ifdef FN_GetPlayerUserId_Post @@ -2116,7 +2121,7 @@ typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/); typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...); typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...); typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/); -typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...); +typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...); typedef const char * (*PFN_GET_MODNAME) (void); typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/); typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/); @@ -2175,8 +2180,8 @@ typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned i typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/); typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/); typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/); -typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); -typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */); typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/); typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/); diff --git a/dlls/sqlite/sdk/sh_list.h b/dlls/sqlite/sdk/sh_list.h index e5c65347..f7276989 100644 --- a/dlls/sqlite/sdk/sh_list.h +++ b/dlls/sqlite/sdk/sh_list.h @@ -19,7 +19,7 @@ #endif #include -#include +#include namespace SourceHook { diff --git a/dlls/sqlite/sdk/sh_string.h b/dlls/sqlite/sdk/sh_string.h index 08bc6ebb..e1cc54d6 100755 --- a/dlls/sqlite/sdk/sh_string.h +++ b/dlls/sqlite/sdk/sh_string.h @@ -196,7 +196,7 @@ public: if (is_space(v[len-1])) { - for (i=len-1; i>=0; i--) + for (i=len-1; ispan, &pRight->span); - if( pRight->flags && EP_ExpCollate ){ + if( pRight->flags & EP_ExpCollate ){ pNew->flags |= EP_ExpCollate; pNew->pColl = pRight->pColl; } } - if( pLeft->flags && EP_ExpCollate ){ + if( pLeft->flags & EP_ExpCollate ){ pNew->flags |= EP_ExpCollate; pNew->pColl = pLeft->pColl; } diff --git a/dlls/sqlite/sqlitepp/SqliteDriver.cpp b/dlls/sqlite/sqlitepp/SqliteDriver.cpp index 9e977d9a..9e41cd75 100644 --- a/dlls/sqlite/sqlitepp/SqliteDriver.cpp +++ b/dlls/sqlite/sqlitepp/SqliteDriver.cpp @@ -27,7 +27,7 @@ const char *SqliteDriver::NameString() int busy_handler(void *unused1, int unused2) { -#if defined __linux__ +#if defined __linux__ || defined __APPLE__ usleep(100000); #else Sleep(100); diff --git a/dlls/sqlite/thread/ThreadSupport.h b/dlls/sqlite/thread/ThreadSupport.h index 40e3ff0c..b15b0d30 100644 --- a/dlls/sqlite/thread/ThreadSupport.h +++ b/dlls/sqlite/thread/ThreadSupport.h @@ -1,7 +1,7 @@ #ifndef _INCLUDE_SOURCEMOD_THREAD_SUPPORT_H #define _INCLUDE_SOURCEMOD_THREAD_SUPPORT_H -#if defined __linux__ +#if defined __linux__ || defined __APPLE__ #include "PosixThreads.h" #elif defined WIN32 #include "WinThreads.h" diff --git a/dlls/tfcx/CMisc.h b/dlls/tfcx/CMisc.h index 27611556..c023ec3a 100755 --- a/dlls/tfcx/CMisc.h +++ b/dlls/tfcx/CMisc.h @@ -6,7 +6,7 @@ #include "amxxmodule.h" #include "CRank.h" -#ifndef __linux__ +#if defined(_WIN32) #define LINUXOFFSET 0 #define CLIP_LINUXOFFSET 0 #else @@ -105,14 +105,14 @@ enum { }; struct weaponsVault { - char* name; - char* logName; + char name[32]; + char logName[32]; short int ammoSlot; bool melee; }; struct traceVault { - char * szName; + const char* szName; char szTag[6]; int iId; int iAction; diff --git a/dlls/tfcx/Makefile b/dlls/tfcx/Makefile index b93812d4..8e03660c 100755 --- a/dlls/tfcx/Makefile +++ b/dlls/tfcx/Makefile @@ -1,67 +1,124 @@ -#(C)2004-2005 AMX Mod X Development Team +# (C)2004-2013 AMX Mod X Development Team # Makefile written by David "BAILOPAN" Anderson -HLSDK = ../../../hlsdk +########################################### +### EDIT THESE PATHS FOR YOUR OWN SETUP ### +########################################### + +HLSDK = ../../../hlsdk/multiplayer MM_ROOT = ../../../metamod/metamod +##################################### ### EDIT BELOW FOR OTHER PROJECTS ### +##################################### -OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing -fomit-frame-pointer -DEBUG_FLAGS = -g -ggdb3 -CPP = gcc-4.1 -NAME = tfcx +PROJECT = tfcx -BIN_SUFFIX = amxx_i386.so +OBJECTS = sdk/amxxmodule.cpp CRank.cpp CMisc.cpp NBase.cpp NRank.cpp usermsg.cpp Utils.cpp \ + moduleconfig.cpp -OBJECTS = sdk/amxxmodule.cpp CRank.cpp CMisc.cpp NBase.cpp NRank.cpp usermsg.cpp Utils.cpp moduleconfig.cpp +############################################## +### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### +############################################## -LINK = +C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -fomit-frame-pointer -pipe +C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3 +C_GCC4_FLAGS = -fvisibility=hidden +CPP_GCC4_FLAGS = -fvisibility-inlines-hidden +CPP = gcc +CPP_OSX = clang -INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \ - -I$(MM_ROOT) -I$(HLSDK)/common -Isdk +LINK = -GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) +INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \ + -I$(MM_ROOT) -Isdk -ifeq "$(GCC_VERSION)" "4" - OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden +################################################ +### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### +################################################ + +OS := $(shell uname -s) + +ifeq "$(OS)" "Darwin" + CPP = $(CPP_OSX) + LIB_EXT = dylib + LIB_SUFFIX = _amxx + CFLAGS += -DOSX + LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5 +else + LIB_EXT = so + LIB_SUFFIX = _amxx_i386 + CFLAGS += -DLINUX + LINK += -shared endif +LINK += -m32 -lm -ldl + +CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror +CPPFLAGS += -fno-exceptions -fno-rtti + +BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT) + ifeq "$(DEBUG)" "true" BIN_DIR = Debug - CFLAGS = $(DEBUG_FLAGS) + CFLAGS += $(C_DEBUG_FLAGS) else BIN_DIR = Release - CFLAGS = $(OPT_FLAGS) + CFLAGS += $(C_OPT_FLAGS) + LINK += -s endif -CFLAGS += -DNDEBUG -Wall -Wno-non-virtual-dtor -Werror -fno-exceptions -DHAVE_STDINT_H -m32 +IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0") -BINARY = $(NAME)_$(BIN_SUFFIX) -CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -OPT_FLAGS += -march=i586 +ifeq "$(IS_CLANG)" "1" + CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/") + CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/") +else + CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1) + CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3) +endif -OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) +# Clang || GCC >= 4 +ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1" + CFLAGS += $(C_GCC4_FLAGS) + CPPFLAGS += $(CPP_GCC4_FLAGS) +endif + +# Clang >= 3 || GCC >= 4.7 +ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1" + CFLAGS += -Wno-delete-non-virtual-dtor +endif + +# OS is Linux and not using clang +ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1" + LINK += -static-libgcc +endif + +OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) + +# This will break if we include other Makefiles, but is fine for now. It allows +# us to make a copy of this file that uses altered paths (ie. Makefile.mine) +# or other changes without mucking up the original. +MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) $(BIN_DIR)/%.o: %.cpp - $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $< + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< all: mkdir -p $(BIN_DIR) mkdir -p $(BIN_DIR)/sdk - $(MAKE) tfcx + $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT) -tfcx: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) +$(PROJECT): $(OBJ_BIN) + $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY) -debug: - $(MAKE) all DEBUG=true +debug: + $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true default: all clean: - rm -rf Release/sdk/*.o - rm -rf Release/*.o - rm -rf Release/$(NAME)_$(BIN_SUFFIX) - rm -rf Debug/sdk/*.o - rm -rf Debug/*.o - rm -rf Debug/$(NAME)_$(BIN_SUFFIX) + rm -rf $(BIN_DIR)/*.o + rm -rf $(BIN_DIR)/sdk/*.o + rm -f $(BIN_DIR)/$(BINARY) + diff --git a/dlls/tfcx/sdk/amxxmodule.cpp b/dlls/tfcx/sdk/amxxmodule.cpp index a634e9ac..faf8f75c 100755 --- a/dlls/tfcx/sdk/amxxmodule.cpp +++ b/dlls/tfcx/sdk/amxxmodule.cpp @@ -2240,7 +2240,7 @@ static META_FUNCTIONS g_MetaFunctions_Table = GetEngineFunctions_Post }; -C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) +C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) { if ((int) CVAR_GET_FLOAT("developer") != 0) UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n", @@ -2334,7 +2334,7 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason) -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) // linux prototype C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) { @@ -3050,7 +3050,7 @@ char* UTIL_VarArgs( char *format, ... ) // UTIL_LogPrintf - Prints a logged message to console. // Preceded by LOG: ( timestamp ) < message > //========================================================= -void UTIL_LogPrintf( char *fmt, ... ) +void UTIL_LogPrintf( const char *fmt, ... ) { va_list argptr; static char string[1024]; diff --git a/dlls/tfcx/sdk/amxxmodule.h b/dlls/tfcx/sdk/amxxmodule.h index c53b72da..9e42b72f 100755 --- a/dlls/tfcx/sdk/amxxmodule.h +++ b/dlls/tfcx/sdk/amxxmodule.h @@ -20,11 +20,16 @@ // DLL Export #undef DLLEXPORT -#ifndef __linux__ +#if defined(_WIN32) #define DLLEXPORT __declspec(dllexport) #else #define DLLEXPORT __attribute__((visibility("default"))) +#endif + +#if defined(__linux__) && !defined(LINUX) #define LINUX +#elif defined(__APPLE__) && !defined(OSX) +#define OSX #endif #undef C_DLLEXPORT @@ -66,7 +71,7 @@ struct amxx_module_info_s #if defined HAVE_STDINT_H #include #else - #if defined __LCC__ || defined __DMC__ || defined LINUX + #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__ #if defined HAVE_INTTYPES_H #include #else @@ -308,7 +313,7 @@ typedef int (AMXAPI *AMX_DEBUG)(struct tagAMX *amx); #endif #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack(1) /* structures must be packed (byte-aligned) */ #elif defined MACOS && defined __MWERKS__ #pragma options align=mac68k @@ -395,7 +400,7 @@ enum { }; #if !defined AMX_NO_ALIGN - #if defined __linux__ + #if defined(__linux__) || defined(__APPLE__) #pragma pack() /* reset default packing */ #else #pragma pack(pop) /* reset previous packing */ @@ -406,7 +411,7 @@ enum { // ***** declare functions ***** #ifdef USE_METAMOD -void UTIL_LogPrintf( char *fmt, ... ); +void UTIL_LogPrintf( const char *fmt, ... ); void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage); short FixedSigned16( float value, float scale ); unsigned short FixedUnsigned16( float value, float scale ); @@ -833,11 +838,11 @@ int FN_AllowLagCompensation_Post(void); #ifdef FN_PrecacheModel -int FN_PrecacheModel(char *s); +int FN_PrecacheModel(const char *s); #endif // FN_PrecacheModel #ifdef FN_PrecacheSound -int FN_PrecacheSound(char *s); +int FN_PrecacheSound(const char *s); #endif // FN_PrecacheSound #ifdef FN_SetModel @@ -857,7 +862,7 @@ void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize #ifdef FN_ChangeLevel -void FN_ChangeLevel(char *s1, char *s2); +void FN_ChangeLevel(const char *s1, const char *s2); #endif // FN_ChangeLevel #ifdef FN_GetSpawnParms @@ -1261,19 +1266,19 @@ char *FN_GetInfoKeyBuffer(edict_t *e); #endif // FN_GetInfoKeyBuffer #ifdef FN_InfoKeyValue -char *FN_InfoKeyValue(char *infobuffer, char *key); +char *FN_InfoKeyValue(char *infobuffer, const char *key); #endif // FN_InfoKeyValue #ifdef FN_SetKeyValue -void FN_SetKeyValue(char *infobuffer, char *key, char *value); +void FN_SetKeyValue(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue #ifdef FN_SetClientKeyValue -void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue #ifdef FN_IsMapValid -int FN_IsMapValid(char *filename); +int FN_IsMapValid(const char *filename); #endif // FN_IsMapValid #ifdef FN_StaticDecal @@ -1281,7 +1286,7 @@ void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int mo #endif // FN_StaticDecal #ifdef FN_PrecacheGeneric -int FN_PrecacheGeneric(char *s); +int FN_PrecacheGeneric(const char *s); #endif // FN_PrecacheGeneric #ifdef FN_GetPlayerUserId @@ -1414,11 +1419,11 @@ const char *FN_GetPlayerAuthId(edict_t *e); #ifdef FN_PrecacheModel_Post -int FN_PrecacheModel_Post(char *s); +int FN_PrecacheModel_Post(const char *s); #endif // FN_PrecacheModel_Post #ifdef FN_PrecacheSound_Post -int FN_PrecacheSound_Post(char *s); +int FN_PrecacheSound_Post(const char *s); #endif // FN_PrecacheSound_Post #ifdef FN_SetModel_Post @@ -1438,7 +1443,7 @@ void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize_Post #ifdef FN_ChangeLevel_Post -void FN_ChangeLevel_Post(char *s1, char *s2); +void FN_ChangeLevel_Post(const char *s1, const char *s2); #endif // FN_ChangeLevel_Post #ifdef FN_GetSpawnParms_Post @@ -1842,19 +1847,19 @@ char *FN_GetInfoKeyBuffer_Post(edict_t *e); #endif // FN_GetInfoKeyBuffer_Post #ifdef FN_InfoKeyValue_Post -char *FN_InfoKeyValue_Post(char *infobuffer, char *key); +char *FN_InfoKeyValue_Post(char *infobuffer, const char *key); #endif // FN_InfoKeyValue_Post #ifdef FN_SetKeyValue_Post -void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value); +void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue_Post #ifdef FN_SetClientKeyValue_Post -void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue_Post #ifdef FN_IsMapValid_Post -int FN_IsMapValid_Post(char *filename); +int FN_IsMapValid_Post(const char *filename); #endif // FN_IsMapValid_Post #ifdef FN_StaticDecal_Post @@ -1862,7 +1867,7 @@ void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, i #endif // FN_StaticDecal_Post #ifdef FN_PrecacheGeneric_Post -int FN_PrecacheGeneric_Post(char *s); +int FN_PrecacheGeneric_Post(const char *s); #endif // FN_PrecacheGeneric_Post #ifdef FN_GetPlayerUserId_Post @@ -2116,7 +2121,7 @@ typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/); typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...); typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...); typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/); -typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...); +typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...); typedef const char * (*PFN_GET_MODNAME) (void); typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/); typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/); @@ -2175,8 +2180,8 @@ typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned i typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/); typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/); typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/); -typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); -typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */); typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/); typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/); diff --git a/dlls/tfcx/tfcx.h b/dlls/tfcx/tfcx.h index f1923ca7..0d947bbe 100755 --- a/dlls/tfcx/tfcx.h +++ b/dlls/tfcx/tfcx.h @@ -49,7 +49,7 @@ extern AMX_NATIVE_INFO stats_Natives[]; extern AMX_NATIVE_INFO base_Natives[]; -extern weaponsVault weaponData[MAX_WEAPONS]; +extern weaponsVault weaponData[TFCMAX_WEAPONS]; extern traceVault traceData[MAX_TRACE]; typedef void (*funEventCall)(void*); diff --git a/dlls/ts/tsfun/Makefile b/dlls/ts/tsfun/Makefile index a0dcbbac..934426ed 100755 --- a/dlls/ts/tsfun/Makefile +++ b/dlls/ts/tsfun/Makefile @@ -1,67 +1,123 @@ -#(C)2004-2005 AMX Mod X Development Team +# (C)2004-2013 AMX Mod X Development Team # Makefile written by David "BAILOPAN" Anderson -HLSDK = ../../../../hlsdk +########################################### +### EDIT THESE PATHS FOR YOUR OWN SETUP ### +########################################### + +HLSDK = ../../../../hlsdk/multiplayer MM_ROOT = ../../../../metamod/metamod +##################################### ### EDIT BELOW FOR OTHER PROJECTS ### +##################################### -OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing -fomit-frame-pointer -DEBUG_FLAGS = -g -ggdb3 -CPP = gcc-4.1 -NAME = tsfun - -BIN_SUFFIX = amxx_i386.so +PROJECT = tsfun OBJECTS = sdk/amxxmodule.cpp -LINK = +############################################## +### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### +############################################## -INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \ - -I$(MM_ROOT) -I$(HLSDK)/common -Isdk +C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -fomit-frame-pointer -pipe +C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3 +C_GCC4_FLAGS = -fvisibility=hidden +CPP_GCC4_FLAGS = -fvisibility-inlines-hidden +CPP = gcc +CPP_OSX = clang -GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) +LINK = -ifeq "$(GCC_VERSION)" "4" - OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden +INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \ + -I$(MM_ROOT) -Isdk + +################################################ +### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### +################################################ + +OS := $(shell uname -s) + +ifeq "$(OS)" "Darwin" + CPP = $(CPP_OSX) + LIB_EXT = dylib + LIB_SUFFIX = _amxx + CFLAGS += -DOSX + LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5 +else + LIB_EXT = so + LIB_SUFFIX = _amxx_i386 + CFLAGS += -DLINUX + LINK += -shared endif +LINK += -m32 -lm -ldl + +CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror +CPPFLAGS += -fno-exceptions -fno-rtti + +BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT) + ifeq "$(DEBUG)" "true" BIN_DIR = Debug - CFLAGS = $(DEBUG_FLAGS) + CFLAGS += $(C_DEBUG_FLAGS) else BIN_DIR = Release - CFLAGS = $(OPT_FLAGS) + CFLAGS += $(C_OPT_FLAGS) + LINK += -s endif -CFLAGS += -DNDEBUG -Wall -Werror -fno-exceptions -DHAVE_STDINT_H -static-libgcc -fno-rtti -m32 +IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0") -BINARY = $(NAME)_$(BIN_SUFFIX) -CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -OPT_FLAGS += -march=i586 +ifeq "$(IS_CLANG)" "1" + CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/") + CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/") +else + CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1) + CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3) +endif -OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) +# Clang || GCC >= 4 +ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1" + CFLAGS += $(C_GCC4_FLAGS) + CPPFLAGS += $(CPP_GCC4_FLAGS) +endif + +# Clang >= 3 || GCC >= 4.7 +ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1" + CFLAGS += -Wno-delete-non-virtual-dtor +endif + +# OS is Linux and not using clang +ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1" + LINK += -static-libgcc +endif + +OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) + +# This will break if we include other Makefiles, but is fine for now. It allows +# us to make a copy of this file that uses altered paths (ie. Makefile.mine) +# or other changes without mucking up the original. +MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) $(BIN_DIR)/%.o: %.cpp - $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $< + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< all: mkdir -p $(BIN_DIR) mkdir -p $(BIN_DIR)/sdk - $(MAKE) tsfun + $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT) -tsfun: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) +$(PROJECT): $(OBJ_BIN) + $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY) -debug: - $(MAKE) all DEBUG=true +debug: + $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true default: all clean: - rm -rf Release/sdk/*.o - rm -rf Release/*.o - rm -rf Release/$(NAME)_$(BIN_SUFFIX) - rm -rf Debug/sdk/*.o - rm -rf Debug/*.o - rm -rf Debug/$(NAME)_$(BIN_SUFFIX) + rm -rf $(BIN_DIR)/*.o + rm -rf $(BIN_DIR)/sdk/*.o + rm -f $(BIN_DIR)/$(BINARY) + diff --git a/dlls/ts/tsfun/sdk/amxxmodule.cpp b/dlls/ts/tsfun/sdk/amxxmodule.cpp index 3a6a2a00..faf8f75c 100755 --- a/dlls/ts/tsfun/sdk/amxxmodule.cpp +++ b/dlls/ts/tsfun/sdk/amxxmodule.cpp @@ -2240,7 +2240,7 @@ static META_FUNCTIONS g_MetaFunctions_Table = GetEngineFunctions_Post }; -C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) +C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) { if ((int) CVAR_GET_FLOAT("developer") != 0) UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n", @@ -2334,7 +2334,7 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason) -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) // linux prototype C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) { @@ -2548,6 +2548,14 @@ C_DLLEXPORT int AMXX_Query(int *interfaceVersion, amxx_module_info_s *moduleInfo // request optional function #define REQFUNC_OPT(name, fptr, type) fptr = (type)reqFnptrFunc(name) +C_DLLEXPORT int AMXX_CheckGame(const char *game) +{ +#ifdef FN_AMXX_CHECKGAME + return FN_AMXX_CHECKGAME(game); +#else + return AMXX_GAME_OK; +#endif +} C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc) { // Check pointer @@ -3042,7 +3050,7 @@ char* UTIL_VarArgs( char *format, ... ) // UTIL_LogPrintf - Prints a logged message to console. // Preceded by LOG: ( timestamp ) < message > //========================================================= -void UTIL_LogPrintf( char *fmt, ... ) +void UTIL_LogPrintf( const char *fmt, ... ) { va_list argptr; static char string[1024]; diff --git a/dlls/ts/tsfun/sdk/amxxmodule.h b/dlls/ts/tsfun/sdk/amxxmodule.h index a99c1fca..9e42b72f 100755 --- a/dlls/ts/tsfun/sdk/amxxmodule.h +++ b/dlls/ts/tsfun/sdk/amxxmodule.h @@ -10,6 +10,7 @@ // config #include "moduleconfig.h" +#include // size_t // metamod include files #ifdef USE_METAMOD #include @@ -19,11 +20,16 @@ // DLL Export #undef DLLEXPORT -#ifndef __linux__ +#if defined(_WIN32) #define DLLEXPORT __declspec(dllexport) #else #define DLLEXPORT __attribute__((visibility("default"))) +#endif + +#if defined(__linux__) && !defined(LINUX) #define LINUX +#elif defined(__APPLE__) && !defined(OSX) +#define OSX #endif #undef C_DLLEXPORT @@ -55,6 +61,9 @@ struct amxx_module_info_s #define AMXX_PARAM 2 /* Invalid parameter */ #define AMXX_FUNC_NOT_PRESENT 3 /* Function not present */ +#define AMXX_GAME_OK 0 /* This module can load on the current game mod. */ +#define AMXX_GAME_BAD 1 /* This module can not load on the current game mod. */ + // *** Small stuff *** // The next section is copied from the amx.h file // Copyright (c) ITB CompuPhase, 1997-2005 @@ -62,7 +71,7 @@ struct amxx_module_info_s #if defined HAVE_STDINT_H #include #else - #if defined __LCC__ || defined __DMC__ || defined LINUX + #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__ #if defined HAVE_INTTYPES_H #include #else @@ -304,7 +313,7 @@ typedef int (AMXAPI *AMX_DEBUG)(struct tagAMX *amx); #endif #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack(1) /* structures must be packed (byte-aligned) */ #elif defined MACOS && defined __MWERKS__ #pragma options align=mac68k @@ -391,7 +400,7 @@ enum { }; #if !defined AMX_NO_ALIGN - #if defined __linux__ + #if defined(__linux__) || defined(__APPLE__) #pragma pack() /* reset default packing */ #else #pragma pack(pop) /* reset previous packing */ @@ -402,7 +411,7 @@ enum { // ***** declare functions ***** #ifdef USE_METAMOD -void UTIL_LogPrintf( char *fmt, ... ); +void UTIL_LogPrintf( const char *fmt, ... ); void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage); short FixedSigned16( float value, float scale ); unsigned short FixedUnsigned16( float value, float scale ); @@ -829,11 +838,11 @@ int FN_AllowLagCompensation_Post(void); #ifdef FN_PrecacheModel -int FN_PrecacheModel(char *s); +int FN_PrecacheModel(const char *s); #endif // FN_PrecacheModel #ifdef FN_PrecacheSound -int FN_PrecacheSound(char *s); +int FN_PrecacheSound(const char *s); #endif // FN_PrecacheSound #ifdef FN_SetModel @@ -853,7 +862,7 @@ void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize #ifdef FN_ChangeLevel -void FN_ChangeLevel(char *s1, char *s2); +void FN_ChangeLevel(const char *s1, const char *s2); #endif // FN_ChangeLevel #ifdef FN_GetSpawnParms @@ -1257,19 +1266,19 @@ char *FN_GetInfoKeyBuffer(edict_t *e); #endif // FN_GetInfoKeyBuffer #ifdef FN_InfoKeyValue -char *FN_InfoKeyValue(char *infobuffer, char *key); +char *FN_InfoKeyValue(char *infobuffer, const char *key); #endif // FN_InfoKeyValue #ifdef FN_SetKeyValue -void FN_SetKeyValue(char *infobuffer, char *key, char *value); +void FN_SetKeyValue(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue #ifdef FN_SetClientKeyValue -void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue #ifdef FN_IsMapValid -int FN_IsMapValid(char *filename); +int FN_IsMapValid(const char *filename); #endif // FN_IsMapValid #ifdef FN_StaticDecal @@ -1277,7 +1286,7 @@ void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int mo #endif // FN_StaticDecal #ifdef FN_PrecacheGeneric -int FN_PrecacheGeneric(char *s); +int FN_PrecacheGeneric(const char *s); #endif // FN_PrecacheGeneric #ifdef FN_GetPlayerUserId @@ -1410,11 +1419,11 @@ const char *FN_GetPlayerAuthId(edict_t *e); #ifdef FN_PrecacheModel_Post -int FN_PrecacheModel_Post(char *s); +int FN_PrecacheModel_Post(const char *s); #endif // FN_PrecacheModel_Post #ifdef FN_PrecacheSound_Post -int FN_PrecacheSound_Post(char *s); +int FN_PrecacheSound_Post(const char *s); #endif // FN_PrecacheSound_Post #ifdef FN_SetModel_Post @@ -1434,7 +1443,7 @@ void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize_Post #ifdef FN_ChangeLevel_Post -void FN_ChangeLevel_Post(char *s1, char *s2); +void FN_ChangeLevel_Post(const char *s1, const char *s2); #endif // FN_ChangeLevel_Post #ifdef FN_GetSpawnParms_Post @@ -1838,19 +1847,19 @@ char *FN_GetInfoKeyBuffer_Post(edict_t *e); #endif // FN_GetInfoKeyBuffer_Post #ifdef FN_InfoKeyValue_Post -char *FN_InfoKeyValue_Post(char *infobuffer, char *key); +char *FN_InfoKeyValue_Post(char *infobuffer, const char *key); #endif // FN_InfoKeyValue_Post #ifdef FN_SetKeyValue_Post -void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value); +void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue_Post #ifdef FN_SetClientKeyValue_Post -void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue_Post #ifdef FN_IsMapValid_Post -int FN_IsMapValid_Post(char *filename); +int FN_IsMapValid_Post(const char *filename); #endif // FN_IsMapValid_Post #ifdef FN_StaticDecal_Post @@ -1858,7 +1867,7 @@ void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, i #endif // FN_StaticDecal_Post #ifdef FN_PrecacheGeneric_Post -int FN_PrecacheGeneric_Post(char *s); +int FN_PrecacheGeneric_Post(const char *s); #endif // FN_PrecacheGeneric_Post #ifdef FN_GetPlayerUserId_Post @@ -2023,6 +2032,10 @@ int FN_ShouldCollide_Post(edict_t *pentTouched, edict_t *pentOther); void FN_AMXX_QUERY(void); #endif // FN_AMXX_QUERY +#ifdef FN_AMXX_CHECKGAME +int FN_AMXX_CHECKGAME(const char *); +#endif // FN_AMXX_CHECKGAME + #ifdef FN_AMXX_ATTACH void FN_AMXX_ATTACH(void); #endif // FN_AMXX_ATTACH @@ -2108,7 +2121,7 @@ typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/); typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...); typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...); typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/); -typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...); +typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...); typedef const char * (*PFN_GET_MODNAME) (void); typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/); typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/); @@ -2167,8 +2180,8 @@ typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned i typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/); typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/); typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/); -typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); -typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */); typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/); typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/); diff --git a/dlls/ts/tsx/CMisc.h b/dlls/ts/tsx/CMisc.h index b1b2d5de..d8d0560a 100755 --- a/dlls/ts/tsx/CMisc.h +++ b/dlls/ts/tsx/CMisc.h @@ -39,7 +39,7 @@ #define TSMAX_WEAPONS 39 + TSMAX_CUSTOMWPNS -#ifndef __linux__ +#if defined(_WIN32) #define TSKNIFE_OFFSET 31 // owner offset in knife entity #else #define TSKNIFE_OFFSET 35 @@ -52,7 +52,7 @@ #define TSPWUP_DFIRERATE 16 #define TSPWUP_SJUMP 256 -#if defined __linux__ +#if defined(__linux__) || defined(__APPLE__) #define EXTRAOFFSET 5 #else #define EXTRAOFFSET 0 diff --git a/dlls/ts/tsx/Makefile b/dlls/ts/tsx/Makefile index 76411e02..be9dd971 100755 --- a/dlls/ts/tsx/Makefile +++ b/dlls/ts/tsx/Makefile @@ -1,68 +1,124 @@ -#(C)2004-2005 AMX Mod X Development Team +# (C)2004-2013 AMX Mod X Development Team # Makefile written by David "BAILOPAN" Anderson -HLSDK = ../../../../hlsdk +########################################### +### EDIT THESE PATHS FOR YOUR OWN SETUP ### +########################################### + +HLSDK = ../../../../hlsdk/multiplayer MM_ROOT = ../../../../metamod/metamod +##################################### ### EDIT BELOW FOR OTHER PROJECTS ### +##################################### -OPT_FLAGS = -O2 -funroll-loops -s -pipe -fno-strict-aliasing -fomit-frame-pointer -DEBUG_FLAGS = -g -ggdb3 -CPP = gcc-4.1 -NAME = tsx +PROJECT = tsx -BIN_SUFFIX = amxx_i386.so +OBJECTS = sdk/amxxmodule.cpp CMisc.cpp CRank.cpp NBase.cpp NRank.cpp Utils.cpp moduleconfig.cpp \ + usermsg.cpp -OBJECTS = sdk/amxxmodule.cpp CMisc.cpp CRank.cpp NBase.cpp \ - NRank.cpp Utils.cpp moduleconfig.cpp usermsg.cpp \ +############################################## +### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### +############################################## -LINK = +C_OPT_FLAGS = -DNDEBUG -O2 -funroll-loops -fomit-frame-pointer -pipe +C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3 +C_GCC4_FLAGS = -fvisibility=hidden +CPP_GCC4_FLAGS = -fvisibility-inlines-hidden +CPP = gcc +CPP_OSX = clang -INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \ - -I$(MM_ROOT) -I$(HLSDK)/common -Isdk +LINK = -GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) +INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \ + -I$(MM_ROOT) -Isdk -ifeq "$(GCC_VERSION)" "4" - OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden +################################################ +### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### +################################################ + +OS := $(shell uname -s) + +ifeq "$(OS)" "Darwin" + CPP = $(CPP_OSX) + LIB_EXT = dylib + LIB_SUFFIX = _amxx + CFLAGS += -DOSX + LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5 +else + LIB_EXT = so + LIB_SUFFIX = _amxx_i386 + CFLAGS += -DLINUX + LINK += -shared endif +LINK += -m32 -lm -ldl + +CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror +CPPFLAGS += -fno-exceptions -fno-rtti + +BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT) + ifeq "$(DEBUG)" "true" BIN_DIR = Debug - CFLAGS = $(DEBUG_FLAGS) + CFLAGS += $(C_DEBUG_FLAGS) else BIN_DIR = Release - CFLAGS = $(OPT_FLAGS) + CFLAGS += $(C_OPT_FLAGS) + LINK += -s endif -CFLAGS += -DNDEBUG -Wall -Wno-non-virtual-dtor -Werror -fno-exceptions -DHAVE_STDINT_H -static-libgcc -fno-rtti -m32 +IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0") -BINARY = $(NAME)_$(BIN_SUFFIX) -CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -OPT_FLAGS += -march=i586 +ifeq "$(IS_CLANG)" "1" + CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/") + CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/") +else + CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1) + CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3) +endif -OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) +# Clang || GCC >= 4 +ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1" + CFLAGS += $(C_GCC4_FLAGS) + CPPFLAGS += $(CPP_GCC4_FLAGS) +endif + +# Clang >= 3 || GCC >= 4.7 +ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1" + CFLAGS += -Wno-delete-non-virtual-dtor +endif + +# OS is Linux and not using clang +ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1" + LINK += -static-libgcc +endif + +OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) + +# This will break if we include other Makefiles, but is fine for now. It allows +# us to make a copy of this file that uses altered paths (ie. Makefile.mine) +# or other changes without mucking up the original. +MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) $(BIN_DIR)/%.o: %.cpp - $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $< + $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< all: mkdir -p $(BIN_DIR) mkdir -p $(BIN_DIR)/sdk - $(MAKE) tsx + $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT) -tsx: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) +$(PROJECT): $(OBJ_BIN) + $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY) -debug: - $(MAKE) all DEBUG=true +debug: + $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true default: all clean: - rm -rf Release/sdk/*.o - rm -rf Release/*.o - rm -rf Release/$(NAME)_$(BIN_SUFFIX) - rm -rf Debug/sdk/*.o - rm -rf Debug/*.o - rm -rf Debug/$(NAME)_$(BIN_SUFFIX) + rm -rf $(BIN_DIR)/*.o + rm -rf $(BIN_DIR)/sdk/*.o + rm -f $(BIN_DIR)/$(BINARY) + diff --git a/dlls/ts/tsx/sdk/amxxmodule.cpp b/dlls/ts/tsx/sdk/amxxmodule.cpp index a634e9ac..faf8f75c 100755 --- a/dlls/ts/tsx/sdk/amxxmodule.cpp +++ b/dlls/ts/tsx/sdk/amxxmodule.cpp @@ -2240,7 +2240,7 @@ static META_FUNCTIONS g_MetaFunctions_Table = GetEngineFunctions_Post }; -C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) +C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs) { if ((int) CVAR_GET_FLOAT("developer") != 0) UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n", @@ -2334,7 +2334,7 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason) -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) // linux prototype C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) { @@ -3050,7 +3050,7 @@ char* UTIL_VarArgs( char *format, ... ) // UTIL_LogPrintf - Prints a logged message to console. // Preceded by LOG: ( timestamp ) < message > //========================================================= -void UTIL_LogPrintf( char *fmt, ... ) +void UTIL_LogPrintf( const char *fmt, ... ) { va_list argptr; static char string[1024]; diff --git a/dlls/ts/tsx/sdk/amxxmodule.h b/dlls/ts/tsx/sdk/amxxmodule.h index c53b72da..9e42b72f 100755 --- a/dlls/ts/tsx/sdk/amxxmodule.h +++ b/dlls/ts/tsx/sdk/amxxmodule.h @@ -20,11 +20,16 @@ // DLL Export #undef DLLEXPORT -#ifndef __linux__ +#if defined(_WIN32) #define DLLEXPORT __declspec(dllexport) #else #define DLLEXPORT __attribute__((visibility("default"))) +#endif + +#if defined(__linux__) && !defined(LINUX) #define LINUX +#elif defined(__APPLE__) && !defined(OSX) +#define OSX #endif #undef C_DLLEXPORT @@ -66,7 +71,7 @@ struct amxx_module_info_s #if defined HAVE_STDINT_H #include #else - #if defined __LCC__ || defined __DMC__ || defined LINUX + #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__ #if defined HAVE_INTTYPES_H #include #else @@ -308,7 +313,7 @@ typedef int (AMXAPI *AMX_DEBUG)(struct tagAMX *amx); #endif #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack(1) /* structures must be packed (byte-aligned) */ #elif defined MACOS && defined __MWERKS__ #pragma options align=mac68k @@ -395,7 +400,7 @@ enum { }; #if !defined AMX_NO_ALIGN - #if defined __linux__ + #if defined(__linux__) || defined(__APPLE__) #pragma pack() /* reset default packing */ #else #pragma pack(pop) /* reset previous packing */ @@ -406,7 +411,7 @@ enum { // ***** declare functions ***** #ifdef USE_METAMOD -void UTIL_LogPrintf( char *fmt, ... ); +void UTIL_LogPrintf( const char *fmt, ... ); void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage); short FixedSigned16( float value, float scale ); unsigned short FixedUnsigned16( float value, float scale ); @@ -833,11 +838,11 @@ int FN_AllowLagCompensation_Post(void); #ifdef FN_PrecacheModel -int FN_PrecacheModel(char *s); +int FN_PrecacheModel(const char *s); #endif // FN_PrecacheModel #ifdef FN_PrecacheSound -int FN_PrecacheSound(char *s); +int FN_PrecacheSound(const char *s); #endif // FN_PrecacheSound #ifdef FN_SetModel @@ -857,7 +862,7 @@ void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize #ifdef FN_ChangeLevel -void FN_ChangeLevel(char *s1, char *s2); +void FN_ChangeLevel(const char *s1, const char *s2); #endif // FN_ChangeLevel #ifdef FN_GetSpawnParms @@ -1261,19 +1266,19 @@ char *FN_GetInfoKeyBuffer(edict_t *e); #endif // FN_GetInfoKeyBuffer #ifdef FN_InfoKeyValue -char *FN_InfoKeyValue(char *infobuffer, char *key); +char *FN_InfoKeyValue(char *infobuffer, const char *key); #endif // FN_InfoKeyValue #ifdef FN_SetKeyValue -void FN_SetKeyValue(char *infobuffer, char *key, char *value); +void FN_SetKeyValue(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue #ifdef FN_SetClientKeyValue -void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue #ifdef FN_IsMapValid -int FN_IsMapValid(char *filename); +int FN_IsMapValid(const char *filename); #endif // FN_IsMapValid #ifdef FN_StaticDecal @@ -1281,7 +1286,7 @@ void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int mo #endif // FN_StaticDecal #ifdef FN_PrecacheGeneric -int FN_PrecacheGeneric(char *s); +int FN_PrecacheGeneric(const char *s); #endif // FN_PrecacheGeneric #ifdef FN_GetPlayerUserId @@ -1414,11 +1419,11 @@ const char *FN_GetPlayerAuthId(edict_t *e); #ifdef FN_PrecacheModel_Post -int FN_PrecacheModel_Post(char *s); +int FN_PrecacheModel_Post(const char *s); #endif // FN_PrecacheModel_Post #ifdef FN_PrecacheSound_Post -int FN_PrecacheSound_Post(char *s); +int FN_PrecacheSound_Post(const char *s); #endif // FN_PrecacheSound_Post #ifdef FN_SetModel_Post @@ -1438,7 +1443,7 @@ void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize_Post #ifdef FN_ChangeLevel_Post -void FN_ChangeLevel_Post(char *s1, char *s2); +void FN_ChangeLevel_Post(const char *s1, const char *s2); #endif // FN_ChangeLevel_Post #ifdef FN_GetSpawnParms_Post @@ -1842,19 +1847,19 @@ char *FN_GetInfoKeyBuffer_Post(edict_t *e); #endif // FN_GetInfoKeyBuffer_Post #ifdef FN_InfoKeyValue_Post -char *FN_InfoKeyValue_Post(char *infobuffer, char *key); +char *FN_InfoKeyValue_Post(char *infobuffer, const char *key); #endif // FN_InfoKeyValue_Post #ifdef FN_SetKeyValue_Post -void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value); +void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue_Post #ifdef FN_SetClientKeyValue_Post -void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue_Post #ifdef FN_IsMapValid_Post -int FN_IsMapValid_Post(char *filename); +int FN_IsMapValid_Post(const char *filename); #endif // FN_IsMapValid_Post #ifdef FN_StaticDecal_Post @@ -1862,7 +1867,7 @@ void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, i #endif // FN_StaticDecal_Post #ifdef FN_PrecacheGeneric_Post -int FN_PrecacheGeneric_Post(char *s); +int FN_PrecacheGeneric_Post(const char *s); #endif // FN_PrecacheGeneric_Post #ifdef FN_GetPlayerUserId_Post @@ -2116,7 +2121,7 @@ typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/); typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...); typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...); typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/); -typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...); +typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...); typedef const char * (*PFN_GET_MODNAME) (void); typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/); typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/); @@ -2175,8 +2180,8 @@ typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned i typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/); typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/); typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/); -typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); -typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */); typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/); typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/); diff --git a/installer/amxmodx-installer.nsi b/installer/amxmodx-installer.nsi index b73c2f29..0549ea08 100755 --- a/installer/amxmodx-installer.nsi +++ b/installer/amxmodx-installer.nsi @@ -2,7 +2,7 @@ ; Licensed under the GNU General Public License ; Originally written by -=HaXoMaTiC=- !define PRODUCT_NAME "AMX Mod X Installer" -!define PRODUCT_VERSION "1.8.1" +!define PRODUCT_VERSION "1.8.2" !define PRODUCT_PUBLISHER "AMX Mod X Dev Team" !define PRODUCT_WEB_SITE "http://www.amxmodx.org/" !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\Installer.exe" @@ -149,29 +149,41 @@ Section "MainSection" SEC01 File "installer\files\base\addons\amxmodx\data\lang\timeleft.txt" SetOutPath "$INSTDIR\files\base\dlls" File "installer\files\base\addons\amxmodx\dlls\amxmodx_mm.dll" + File "installer\files\base\addons\amxmodx\dlls\amxmodx_mm.dylib" File "installer\files\base\addons\amxmodx\dlls\amxmodx_mm_i386.so" File "installer\files\base\addons\amxmodx\dlls\metamod.dll" - File "installer\files\base\addons\amxmodx\dlls\metamod_i386.so" + File "installer\files\base\addons\amxmodx\dlls\metamod.dylib" + File "installer\files\base\addons\amxmodx\dlls\metamod.so" SetOutPath "$INSTDIR\files\base\modules" File "installer\files\base\addons\amxmodx\modules\nvault_amxx.dll" + File "installer\files\base\addons\amxmodx\modules\nvault_amxx.dylib" File "installer\files\base\addons\amxmodx\modules\nvault_amxx_i386.so" File "installer\files\base\addons\amxmodx\modules\engine_amxx.dll" + File "installer\files\base\addons\amxmodx\modules\engine_amxx.dylib" File "installer\files\base\addons\amxmodx\modules\engine_amxx_i386.so" File "installer\files\base\addons\amxmodx\modules\fakemeta_amxx.dll" + File "installer\files\base\addons\amxmodx\modules\fakemeta_amxx.dylib" File "installer\files\base\addons\amxmodx\modules\fakemeta_amxx_i386.so" File "installer\files\base\addons\amxmodx\modules\fun_amxx.dll" + File "installer\files\base\addons\amxmodx\modules\fun_amxx.dylib" File "installer\files\base\addons\amxmodx\modules\fun_amxx_i386.so" File "installer\files\base\addons\amxmodx\modules\geoip_amxx.dll" + File "installer\files\base\addons\amxmodx\modules\geoip_amxx.dylib" File "installer\files\base\addons\amxmodx\modules\geoip_amxx_i386.so" File "installer\files\base\addons\amxmodx\modules\sqlite_amxx.dll" + File "installer\files\base\addons\amxmodx\modules\sqlite_amxx.dylib" File "installer\files\base\addons\amxmodx\modules\sqlite_amxx_i386.so" File "installer\files\base\addons\amxmodx\modules\mysql_amxx.dll" + File "installer\files\base\addons\amxmodx\modules\mysql_amxx.dylib" File "installer\files\base\addons\amxmodx\modules\mysql_amxx_i386.so" File "installer\files\base\addons\amxmodx\modules\regex_amxx.dll" + File "installer\files\base\addons\amxmodx\modules\regex_amxx.dylib" File "installer\files\base\addons\amxmodx\modules\regex_amxx_i386.so" File "installer\files\base\addons\amxmodx\modules\sockets_amxx.dll" + File "installer\files\base\addons\amxmodx\modules\sockets_amxx.dylib" File "installer\files\base\addons\amxmodx\modules\sockets_amxx_i386.so" File "installer\files\base\addons\amxmodx\modules\hamsandwich_amxx.dll" + File "installer\files\base\addons\amxmodx\modules\hamsandwich_amxx.dylib" File "installer\files\base\addons\amxmodx\modules\hamsandwich_amxx_i386.so" SetOutPath "$INSTDIR\files\base\plugins" File "installer\files\base\addons\amxmodx\plugins\admin.amxx" @@ -207,7 +219,9 @@ Section "MainSection" SEC01 File "installer\files\base\addons\amxmodx\scripting\amxxpc" File "installer\files\base\addons\amxmodx\scripting\amxxpc.exe" File "installer\files\base\addons\amxmodx\scripting\amxxpc32.dll" + File "installer\files\base\addons\amxmodx\scripting\amxxpc32.dylib" File "installer\files\base\addons\amxmodx\scripting\amxxpc32.so" + File "installer\files\base\addons\amxmodx\scripting\amxxpc_osx" File "installer\files\base\addons\amxmodx\scripting\antiflood.sma" File "installer\files\base\addons\amxmodx\scripting\cmdmenu.sma" File "installer\files\base\addons\amxmodx\scripting\compile.exe" @@ -332,8 +346,10 @@ Section "MainSection" SEC01 File "installer\files\cstrike\addons\amxmodx\data\WinCSX.exe" SetOutPath "$INSTDIR\files\cstrike\modules" File "installer\files\cstrike\addons\amxmodx\modules\cstrike_amxx.dll" + File "installer\files\cstrike\addons\amxmodx\modules\cstrike_amxx.dylib" File "installer\files\cstrike\addons\amxmodx\modules\cstrike_amxx_i386.so" File "installer\files\cstrike\addons\amxmodx\modules\csx_amxx.dll" + File "installer\files\cstrike\addons\amxmodx\modules\csx_amxx.dylib" File "installer\files\cstrike\addons\amxmodx\modules\csx_amxx_i386.so" SetOutPath "$INSTDIR\files\cstrike\plugins" File "installer\files\cstrike\addons\amxmodx\plugins\miscstats.amxx" @@ -356,8 +372,10 @@ Section "MainSection" SEC01 File "installer\files\dod\addons\amxmodx\data\dodstats.amxx" SetOutPath "$INSTDIR\files\dod\modules" File "installer\files\dod\addons\amxmodx\modules\dodfun_amxx.dll" + File "installer\files\dod\addons\amxmodx\modules\dodfun_amxx.dylib" File "installer\files\dod\addons\amxmodx\modules\dodfun_amxx_i386.so" File "installer\files\dod\addons\amxmodx\modules\dodx_amxx.dll" + File "installer\files\dod\addons\amxmodx\modules\dodx_amxx.dylib" File "installer\files\dod\addons\amxmodx\modules\dodx_amxx_i386.so" SetOutPath "$INSTDIR\files\dod\plugins" File "installer\files\dod\addons\amxmodx\plugins\plmenu.amxx" @@ -415,6 +433,7 @@ Section "MainSection" SEC01 File "installer\files\tfc\addons\amxmodx\data\tfcstats.amxx" SetOutPath "$INSTDIR\files\tfc\modules" File "installer\files\tfc\addons\amxmodx\modules\tfcx_amxx.dll" + File "installer\files\tfc\addons\amxmodx\modules\tfcx_amxx.dylib" File "installer\files\tfc\addons\amxmodx\modules\tfcx_amxx_i386.so" SetOutPath "$INSTDIR\files\tfc\plugins" File "installer\files\tfc\addons\amxmodx\plugins\plmenu.amxx" @@ -527,6 +546,7 @@ Section Uninstall Delete "$INSTDIR\files\tfc\plugins\stats.amxx" Delete "$INSTDIR\files\tfc\plugins\plmenu.amxx" Delete "$INSTDIR\files\tfc\modules\tfcx_amxx_i386.so" + Delete "$INSTDIR\files\tfc\modules\tfcx_amxx.dylib" Delete "$INSTDIR\files\tfc\modules\tfcx_amxx.dll" Delete "$INSTDIR\files\tfc\data\tfcstats.amxx" Delete "$INSTDIR\files\tfc\configs\plugins.ini" @@ -567,8 +587,10 @@ Section Uninstall Delete "$INSTDIR\files\dod\plugins\stats.amxx" Delete "$INSTDIR\files\dod\plugins\plmenu.amxx" Delete "$INSTDIR\files\dod\modules\dodx_amxx_i386.so" + Delete "$INSTDIR\files\dod\modules\dodx_amxx.dylib" Delete "$INSTDIR\files\dod\modules\dodx_amxx.dll" Delete "$INSTDIR\files\dod\modules\dodfun_amxx_i386.so" + Delete "$INSTDIR\files\dod\modules\dodfun_amxx.dylib" Delete "$INSTDIR\files\dod\modules\dodfun_amxx.dll" Delete "$INSTDIR\files\dod\data\dodstats.amxx" Delete "$INSTDIR\files\dod\configs\plugins.ini" @@ -586,11 +608,13 @@ Section Uninstall Delete "$INSTDIR\files\cstrike\plugins\restmenu.amxx" Delete "$INSTDIR\files\cstrike\plugins\miscstats.amxx" Delete "$INSTDIR\files\cstrike\modules\csx_amxx_i386.so" + Delete "$INSTDIR\files\cstrike\modules\csx_amxx.dylib" Delete "$INSTDIR\files\cstrike\modules\csx_amxx.dll" Delete "$INSTDIR\files\cstrike\modules\cstrike_amxx_i386.so" + Delete "$INSTDIR\files\cstrike\modules\cstrike_amxx.dylib" Delete "$INSTDIR\files\cstrike\modules\cstrike_amxx.dll" Delete "$INSTDIR\files\cstrike\data\csstats.amxx" - Delete "$INSTDIR\files\cstrike\data\WinCSX.amxx" + Delete "$INSTDIR\files\cstrike\data\WinCSX.exe" Delete "$INSTDIR\files\cstrike\configs\stats.ini" Delete "$INSTDIR\files\cstrike\configs\plugins.ini" Delete "$INSTDIR\files\cstrike\configs\modules.ini" @@ -706,7 +730,9 @@ Section Uninstall Delete "$INSTDIR\files\base\addons\amxmodx\scripting\compile.exe" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\cmdmenu.sma" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\antiflood.sma" + Delete "$INSTDIR\files\base\addons\amxmodx\scripting\amxxpc_osx" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\amxxpc32.so" + Delete "$INSTDIR\files\base\addons\amxmodx\scripting\amxxpc32.dylib" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\amxxpc32.dll" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\amxxpc.exe" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\amxxpc" @@ -739,28 +765,40 @@ Section Uninstall Delete "$INSTDIR\files\base\plugins\adminchat.amxx" Delete "$INSTDIR\files\base\plugins\admin.amxx" Delete "$INSTDIR\files\base\modules\nvault_amxx_i386.so" + Delete "$INSTDIR\files\base\modules\nvault_amxx.dylib" Delete "$INSTDIR\files\base\modules\nvault_amxx.dll" Delete "$INSTDIR\files\base\modules\sockets_amxx_i386.so" + Delete "$INSTDIR\files\base\modules\sockets_amxx.dylib" Delete "$INSTDIR\files\base\modules\sockets_amxx.dll" Delete "$INSTDIR\files\base\modules\regex_amxx_i386.so" + Delete "$INSTDIR\files\base\modules\regex_amxx.dylib" Delete "$INSTDIR\files\base\modules\regex_amxx.dll" Delete "$INSTDIR\files\base\modules\sqlite_amxx_i386.so" + Delete "$INSTDIR\files\base\modules\sqlite_amxx.dylib" Delete "$INSTDIR\files\base\modules\sqlite_amxx.dll" Delete "$INSTDIR\files\base\modules\mysql_amxx_i386.so" + Delete "$INSTDIR\files\base\modules\mysql_amxx.dylib" Delete "$INSTDIR\files\base\modules\mysql_amxx.dll" Delete "$INSTDIR\files\base\modules\geoip_amxx_i386.so" + Delete "$INSTDIR\files\base\modules\geoip_amxx.dylib" Delete "$INSTDIR\files\base\modules\geoip_amxx.dll" Delete "$INSTDIR\files\base\modules\fun_amxx_i386.so" + Delete "$INSTDIR\files\base\modules\fun_amxx.dylib" Delete "$INSTDIR\files\base\modules\fun_amxx.dll" Delete "$INSTDIR\files\base\modules\fakemeta_amxx_i386.so" + Delete "$INSTDIR\files\base\modules\fakemeta_amxx.dylib" Delete "$INSTDIR\files\base\modules\fakemeta_amxx.dll" Delete "$INSTDIR\files\base\modules\engine_amxx_i386.so" + Delete "$INSTDIR\files\base\modules\engine_amxx.dylib" Delete "$INSTDIR\files\base\modules\engine_amxx.dll" Delete "$INSTDIR\files\base\modules\hamsandwich_amxx_i386.so" + Delete "$INSTDIR\files\base\modules\hamsandwich_amxx.dylib" Delete "$INSTDIR\files\base\modules\hamsandwich_amxx.dll" - Delete "$INSTDIR\files\base\dlls\metamod_i386.so" + Delete "$INSTDIR\files\base\dlls\metamod.so" + Delete "$INSTDIR\files\base\dlls\metamod.dylib" Delete "$INSTDIR\files\base\dlls\metamod.dll" Delete "$INSTDIR\files\base\dlls\amxmodx_mm_i386.so" + Delete "$INSTDIR\files\base\dlls\amxmodx_mm.dylib" Delete "$INSTDIR\files\base\dlls\amxmodx_mm.dll" Delete "$INSTDIR\files\base\data\lang\timeleft.txt" Delete "$INSTDIR\files\base\data\lang\time.txt" diff --git a/installer/builder/Build.cs b/installer/builder/Build.cs index 5dbf91e8..7d80a9d0 100755 --- a/installer/builder/Build.cs +++ b/installer/builder/Build.cs @@ -17,21 +17,25 @@ public Build(Config cfg) CoreMod core = new CoreMod(); ModCstrike cstrike = new ModCstrike(); + ModDoD dod = new ModDoD(); + ModTFC tfc = new ModTFC(); m_Mods.Add(core); m_Mods.Add(cstrike); - - ModDoD dod = new ModDoD(); - ModEsf esf = new ModEsf(); - ModNs ns = new ModNs(); - ModTFC tfc = new ModTFC(); - ModTs ts = new ModTs(); - m_Mods.Add(dod); - m_Mods.Add(esf); - m_Mods.Add(ns); m_Mods.Add(tfc); - m_Mods.Add(ts); + + // These mods don't have OS X builds + if (!Releaser.IsOSX) + { + ModEsf esf = new ModEsf(); + ModNs ns = new ModNs(); + ModTs ts = new ModTs(); + + m_Mods.Add(esf); + m_Mods.Add(ns); + m_Mods.Add(ts); + } } public virtual int GetMods() diff --git a/installer/builder/CoreMod.cs b/installer/builder/CoreMod.cs index 9eaad1b5..e3a95e71 100755 --- a/installer/builder/CoreMod.cs +++ b/installer/builder/CoreMod.cs @@ -31,14 +31,17 @@ public override sealed string GetBaseName() public override sealed bool ExcludeCopy(string file) { if ( ((file.IndexOf(".so")!=-1) || (ABuilder.GetFileName(file).CompareTo("amxxpc")==0)) - && (Releaser.IsWindows) ) + && (Releaser.IsWindows || Releaser.IsOSX) ) + return true; + if ( ((file.IndexOf(".dylib")!=-1) || (ABuilder.GetFileName(file).CompareTo("amxxpc_osx")==0)) + && (!Releaser.IsOSX) ) return true; if ( (file.IndexOf(".sh")!=-1) && Releaser.IsWindows ) return true; if ( ((file.IndexOf(".exe")!=-1) || (file.IndexOf(".dll")!=-1)) && (!Releaser.IsWindows) ) return true; - if ( (file.IndexOf("dlsym")!=-1) && Releaser.IsWindows ) + if ( (file.IndexOf("dlsym")!=-1) && (Releaser.IsWindows || Releaser.IsOSX) ) return true; if (ABuilder.GetFileName(file).CompareTo("svn_version.tpl") == 0) { diff --git a/installer/builder/LinuxBuilder.cs b/installer/builder/LinuxBuilder.cs index bffd253b..5807e0a6 100755 --- a/installer/builder/LinuxBuilder.cs +++ b/installer/builder/LinuxBuilder.cs @@ -39,7 +39,7 @@ public override void CompressDir(string target, string dir) c.Close(); - info.Arguments = "zcvf \"" + target + ".tar.gz\" " + file_list; + info.Arguments = "zcvf \"" + target + "-linux.tar.gz\" " + file_list; info.UseShellExecute = false; Process p = Process.Start(info); diff --git a/installer/builder/MacBuilder.cs b/installer/builder/MacBuilder.cs new file mode 100644 index 00000000..e46acd78 --- /dev/null +++ b/installer/builder/MacBuilder.cs @@ -0,0 +1,111 @@ +using System; +using System.Diagnostics; +using System.IO; + +namespace AMXXRelease +{ + //Build process for Mac OS X + public class MacBuilder : ABuilder + { + private string m_AmxxPc; + + public override void OnBuild() + { + m_AmxxPc = PropSlashes(m_Cfg.GetSourceTree() + "/plugins/amxxpc_osx"); + } + + public override void CompressDir(string target, string dir) + { + ProcessStartInfo info = new ProcessStartInfo(); + + info.FileName = m_Cfg.CompressPath(); + info.WorkingDirectory = dir; + + string [] files = Directory.GetFiles(dir); + string file_list = ""; + for (int i=0; i + @@ -65,4 +66,4 @@ --> - \ No newline at end of file + diff --git a/installer/builder/mac.info b/installer/builder/mac.info new file mode 100644 index 00000000..c3aa4618 --- /dev/null +++ b/installer/builder/mac.info @@ -0,0 +1,6 @@ +compress = /usr/bin/zip +source = /Users/Scott/Code/hl/amxmodx-central +makeopts = +output = /Users/Scott/Code/hl/amxmodx-bin +devenv = /usr/bin/make +release = amxmodx-1.8.2 diff --git a/plugins/compile.sh b/plugins/compile.sh index 68402ba1..02dc4c6f 100755 --- a/plugins/compile.sh +++ b/plugins/compile.sh @@ -12,11 +12,18 @@ test -e compiled || mkdir compiled rm -f temp.txt +# Choose compiler binary +if test `uname` = "Darwin"; then + pc=./amxxpc_osx +else + pc=./amxxpc +fi + for sourcefile in *.sma do amxxfile="`echo $sourcefile | sed -e 's/\.sma$/.amxx/'`" echo -n "Compiling $sourcefile ..." - ./amxxpc $sourcefile -ocompiled/$amxxfile >> temp.txt + $pc $sourcefile -ocompiled/$amxxfile >> temp.txt echo "done" done diff --git a/plugins/include/fakemeta.inc b/plugins/include/fakemeta.inc index b0ba09a5..3e76dd56 100755 --- a/plugins/include/fakemeta.inc +++ b/plugins/include/fakemeta.inc @@ -99,16 +99,16 @@ native pev_serial(entindex); native global_get(_value, any:...); /* Returns an integer from private data. _linuxdiff is added into the _Offset if it's used on a linux server. */ -native get_pdata_int(_index,_Offset,_linuxdiff=5); +native get_pdata_int(_index,_Offset,_linuxdiff=5,_macdiff=5); /* Sets an integer from private data. _linuxdiff is added into the _Offset if it's used on a linux server. */ -native set_pdata_int(_index,_Offset,_Value,_linuxdiff=5); +native set_pdata_int(_index,_Offset,_Value,_linuxdiff=5,_macdiff=5); /* Returns a float from private data. _linuxdiff is added into the _Offset if it's used on a linux server. */ -native Float:get_pdata_float(_index,_Offset,_linuxdiff=5); +native Float:get_pdata_float(_index,_Offset,_linuxdiff=5,_macdiff=5); /* Sets a float from private data. _linuxdiff is added into the _Offset if it's used on a linux server. */ -native set_pdata_float(_index,_Offset,Float:_Value,_linuxdiff=5); +native set_pdata_float(_index,_Offset,Float:_Value,_linuxdiff=5,_macdiff=5); /** * Tries to retrieve an edict (entity encapsulation) pointer from an entity's private data. @@ -118,12 +118,13 @@ native set_pdata_float(_index,_Offset,Float:_Value,_linuxdiff=5); * * @param _index Entity index. * @param _offset Offset to search. - * @param _linuxdiff Linux difference. + * @param _linuxdiff Linux difference. + * @param _macdiff Mac OS X difference. * @return -2 if an invalid entity was found. * -1 if an empty entity was found. * Otherwise, an entity index is returned. */ -native get_pdata_ent(_index, _offset, _linuxdiff=20); +native get_pdata_ent(_index, _offset, _linuxdiff=20, _macdiff=20); /* Registers a forward. * Returns an id you can pass to unregister_forward @@ -217,8 +218,9 @@ native set_uc(uc_handle, UserCmd:member, {Float,_}:...); //In fact it's QWORD aligned rather than DWORD aligned, so the offset will be exactly half. //Gets a string from a private offset. If byref is false, the string is treated as static rather than dynamic. //linux value is what to add to the offset for linux servers. +//mac value is what to add to the offset for os x servers. Default (cellmin) means that linux value will be used. //this cannot use a default value due to older version using an awkward default value. -native get_pdata_string(entity, offset, dest[], maxlength, byref=1, linux); +native get_pdata_string(entity, offset, dest[], maxlength, byref=1, linux, mac=cellmin); //Sets a string in a private offset. //realloc = -1 - nonbyref copy (static @@ -226,8 +228,9 @@ native get_pdata_string(entity, offset, dest[], maxlength, byref=1, linux); //realloc = 1 - reallocate new string with free+malloc //realloc = 2 - reallocate new string with delete[]+new[] //linux value is what to add to the offset for linux servers. +//mac value iswhat to add to the offset for os x servers. //this cannot use a default value due to older version using an awkward default value. -native set_pdata_string(entity, offset, const source[], realloc=2, linux); +native set_pdata_string(entity, offset, const source[], realloc=2, linux, mac=cellmin); // Copies the given infoBuffer pointer into out[] // An infoBuffer pointer is returned by EngFunc_GetInfoKeyBuffer diff --git a/plugins/include/hamsandwich.inc b/plugins/include/hamsandwich.inc index d2e90840..0cb55cce 100644 --- a/plugins/include/hamsandwich.inc +++ b/plugins/include/hamsandwich.inc @@ -315,9 +315,10 @@ native bool:IsHamValid(Ham:function); * @param id The entity to examine the private data. * @param offset The windows offset of the data. * @param linuxdiff The linux difference of the data. + * @param macdiff The mac os x difference of the data. * @return The index of the corresponding pdata field. -1 for none set. */ -native get_pdata_cbase(id, offset, linuxdiff=5); +native get_pdata_cbase(id, offset, linuxdiff=5, macdiff=5); /** * This is used to compliment fakemeta's {get,set}_pdata_{int,float,string}. @@ -329,8 +330,9 @@ native get_pdata_cbase(id, offset, linuxdiff=5); * @param offset The windows offset of the data. * @param value The index to store, -1 for invalid * @param linuxdiff The linux difference of the data. + * @param macdiff The mac os x difference of the data. */ -native set_pdata_cbase(id, offset, value, linuxdiff=5); +native set_pdata_cbase(id, offset, value, linuxdiff=5, macdiff=5); /** * This is similar to the get_pdata_cbase, however it does not dereference memory. @@ -342,9 +344,10 @@ native set_pdata_cbase(id, offset, value, linuxdiff=5); * @param id Entry to examine the private data. * @param offset The windows offset of the data. * @param linuxdiff The linux difference of the data. + * @param macdiff The mac os x difference of the data. * @return The index of the corresponding pdata field, -1 for null, -2 for invalid. */ -native get_pdata_cbase_safe(id, offset, linuxdiff=5); +native get_pdata_cbase_safe(id, offset, linuxdiff=5, macdiff=5);