Commit Graph
100 Commits
Author SHA1 Message Date
David Anderson 785c6aa1cf Update to AMBuild 2.2.
This is a pretty big diff because SourceMod had lots of multi-arch
workarounds that can now go away. I've also changed 'x64' to 'x86_64' in
many places since this is how AMBuild normalizes it, and it's far too
late to pick the shorter string, so we might as well suck it up.

The --target-archs parameter has been replaced with --targets. It works
the same way.

The default behavior for SDK inclusion is now "present" instead of
"all" since this lowers the burden of storing many SDKs. Official builds
will still be made with --sdks=all.
2020-08-18 23:09:43 -07:00
David Anderson 7355e34946 Fix AppVeyor. 2020-07-15 20:18:55 -07:00
David AndersonandKyle Sanderson ed9f214256 appveyor: relocate in-tree and convert to MSVC2015. (#969)
* Move appveyor in-tree and move to MSVC2015.

* appveyor: sync.

* Update appveyor.yml

* Update appveyor.yml

* Update appveyor.yml

* Update appveyor.yml

* Update appveyor.yml

* Update appveyor.yml

* Update appveyor.yml

* Update appveyor.yml

* Update appveyor.yml

* Update appveyor.yml

* Update appveyor.yml

* Update appveyor.yml

* appveyor: align SDKs with travis-ci.

* Update appveyor.yml

Co-authored-by: Kyle Sanderson <[email protected]>
2020-07-13 17:56:12 -07:00
David Anderson 3b386379dd Use more STL for vector insertion/removal. (#1284) 2020-06-13 15:57:02 -07:00
David Anderson 7b887ee9f6 Update SourcePawn.
This will fix a utf8 regression reported in issue #1286.
2020-06-02 13:33:57 -07:00
David Anderson 67f0e4be60 Update SourcePawn and AMTL. 2020-06-01 13:22:29 -07:00
David Anderson 80acff8d7d Replace ke::LinkedList with std::list. 2020-05-31 23:19:41 -07:00
David Anderson d5d4d78023 Update SourcePawn and AMTL to fix the Mac build. 2020-05-31 22:57:14 -07:00
David Anderson 5d94f0bea8 Replace ke::Vector with std::vector. 2020-05-31 11:35:51 -07:00
David Anderson e5ddbd9886 Introduce a pbproxy library to solve macOS linker issues.
On SDKs which use protobufs, the engine has objects compiled against a specific
version of protobuf. Normally this is fine, we take care on Linux to use the
same C++ ABI. On macOS however, we use libc++ to enable C++11 functionality,
whereas the protobuf library has been compiled with libstc++. These ABIs are
not compatible.

To address the problem, we introduce PbHandle. PbHandle is a wrapper around
protobuf::Message with two added pieces of state: whether or not the handle
"owns" the message (and can free it in its destructor), and whether or not
the handle was created by the engine (private) or created by SourceMod
(local).

Whenever we transfer a protobuf::Message pointer to SourceMod, we must take
care to convert it to a Local version first. Whenever we transfer a protobuf
pointer to the engine, we must convert it to a Private handle.

For platforms with no ABI differences (almost all of them), the handle is a
no-op. The private and local localities are compatible and no translation
takes place.

On macOS, CS:GO does require translation. SourceMod loads a tiny shim
library that contains a copy of the protobuf sources compiled against the
game's ABI. It then provides serialization and deserialization methods.
SourceMod must not interact with the game's protobuf objects without first
going through this proxy library.

Note that PbHandle is not quite like unique_ptr. It can be converted into a
PbHandle that does not destroy the underlying object. This is mainly because
UserMessages.cpp has rather complex state, so it is useful to track locality
without destroying an object. An unowned PbHandle must not outlive the
owning PbHandle.
2020-05-30 22:13:07 -07:00
David Anderson d525b466ec Use C++11 for macOS and CS:GO. 2020-05-30 22:13:07 -07:00
David Anderson 333227fad8 Build csgo-x64 on travis. 2020-05-30 22:13:07 -07:00
David Anderson 288a781555 Fix startup crash. 2020-05-30 19:10:23 -07:00
David Anderson 979e410efc Update AMTL, replace ke::Deque with std::deque. 2020-05-30 12:44:02 -07:00
David Anderson 49669f6585 Revert "Fix linking on Linux."
This reverts commit acf8782786.
2020-05-26 20:04:55 -07:00
David Anderson acf8782786 Fix linking on Linux. 2020-05-25 21:35:50 -07:00
David Anderson 6d2e0aa684 Fix Windows build. 2020-05-21 00:11:23 -07:00
David Anderson 032a30f676 Fix mac build, part 2. 2020-05-20 23:17:15 -07:00
David Anderson c9f574c27b Fix mac build. 2020-05-20 22:50:41 -07:00
David Anderson b725196a26 Replace AString with std::string. 2020-05-20 17:57:18 -07:00
David Anderson 301bafa3f5 Replace more Move/Forward with STL variants. 2020-05-19 12:56:28 -07:00
David Anderson 7a3e4054c7 Enable exception handling in C++ code.
It turns out this was already enabled on MSVC (due to /EHsc), but let's
enable it on other platforms as well.

Exception handling comes with a huge caveat: SourceMod and SourcePawn
are not exception safe. Not only do they predate usable STL (C++11),
they often predate C++03, and sometimes even C++ itself. There are many
places we do not use RAII, or where we accumulate state in a way that
cannot be interrupted.

By enabling exceptions, we are NOT inviting general try/catch. We are
still assuming that a `throw` anywhere within SourceMod will ultimately
result in a crash.

However, as we enable more and more STL, we are losing the ability to
gracefully handle constructor failures and malloc failures. So try-catch
is now enabled. It should only be used in the narrowest of
circumstances:

 - When an exception can be thrown by a library call, and
 - There is no way "a priori" to tell if an exception will be thrown
(for example, std::bad_alloc or std::system_error), and
 - Handling the exception is meaningful.

Generally malloc failures should not be considered meaningful. Once
memory is exhausted, the program will crash or be OOM-killed, so there's
no point in handling the failure. However, cases where the allocation
amount is variable may be meaningful to handle. A simple example would
be CDataPack, where if a plugin leaks entries, it's better to handle
this gracefully given that vector growth is geometric. Another example
might be reads of a massive file or network request into a buffer.

These cases should be rare, given that memory pressure is usually
fatal to srcds anyway. But if you've decided to handle an exception,
the try-catch block should be as narrow as possible. For example,
the following is erroneous:

    ke::Maybe<SomeGiganticThing> object;
    try {
        object.init();
    } catch (const std::bad_alloc&) {
    }

`ke::Maybe` is not threadsafe, and this can leak. Basically, do as
little as possible in try blocks, and use them sparingly, because
they're very difficult to audit.

We are also not inviting use of `throw`, as auditing it is even more
complex than try/catch. It is better to abort(), or use boolean
returns and two-stage object initialization.
2020-05-19 12:21:57 -07:00
David Anderson 7d7253c9cc Update AMTL; replace AutoPtr/UniquePtr with STL. 2020-05-18 18:19:16 -07:00
David Anderson c2df49ee33 Rename ke::Lambda to ke::Function. 2020-05-17 12:33:52 -07:00
David Anderson a253e175bb Replace all uses of AMTL threads with STL threads.
This also rewrites the work loop for threaded queries. It has been
simplified significantly.
2020-05-16 22:35:56 -07:00
David Anderson 15023777f4 Merge pull request #1266 from alliedmodders/threads-3
Pare down ThreadSupport and remove ancient thread code.
2020-05-14 10:45:50 -07:00
David Anderson ff018a9a5d Improve Travis coverage.
Our official builds use clang-3.4 (for macOS) and clang-3.8 for Linux.
Linux uses libstdc++-4.9. Make sure these two compilers are being tested
and that libstdc++-4.9 is being used for STL.

Add a macOS builder to get coverage there. This will use a newer
clang than we actually use, but as opposed to the linux builder will
test the platform-specific bits.

Finally, use the latest GCC and clang versions from a bionic image, so
we have some coverage of a popular distribution.
2020-05-13 19:09:20 -07:00
David Anderson f76cb94511 Pare down ThreadSupport and remove ancient thread code.
This patch removes almost all of the existing platform-specific
ThreadSupport code, as well as code derived from it. It is now
implemented on top of C++11 threads and is much simpler.

This is the first inclusion of STL in SourceMod. Mac and Windows are
allowed to dynamically link to their respective implementations. On
Linux, libstdc++ is statically linked, except in the cases where it was
already dynamically linked (csgo, blade).

IEventSignal has been retained because sourcemod-curl-extension relies
on it. As written, it is impossible to use as a condition variable,
because the caller does not have access to the underlying mutex. There
is no way to make this API safe or non-racy, so extensions relying on
it should switch to C++11 threads.

ThreadWorker is now pared down and does not interact or inherit from
BaseWorker in any way. Basic functionality has been tested. Since it is
not used anywhere in SourceMod, or seemingly in any repository on
GitHub, it's unclear whether it should even exist. But it has been
tested in this patch.

This change bumps the minimum macOS version to OS X 10.7, and the
minimum C++ standard level to C++14.
2020-05-13 00:35:29 -07:00
David Anderson 87cc42d348 Fix build failures with clang 10. 2020-05-12 23:04:55 -07:00
David Anderson 2b6833f65d Merge pull request #1167 from Scags/teleport-defaulted
Add default values to TeleportEntity
2020-02-26 13:17:45 -08:00
David Anderson 5efe6d0a42 Merge pull request #1151 from alliedmodders/update-sp
Update SourcePawn.
2019-12-28 12:24:19 -08:00
David Anderson e34fbcce0d Update SourcePawn.
This fixes:
 alliedmodders/sourcepawn#432
 alliedmodders/sourcepawn#435
 alliedmodders/sourcepawn#439
2019-12-28 12:07:36 -08:00
David Anderson 4328627326 Merge pull request #1144 from alliedmodders/update-sp
Update SourcePawn to tip-of-tree.
2019-12-15 20:48:27 -08:00
David Anderson fc6925fa0a Update SourcePawn to tip-of-tree. 2019-12-15 20:34:44 -08:00
David Anderson cd1a296e4f Merge pull request #1131 from alliedmodders/update-sp
Update SourcePawn.
2019-11-24 20:57:06 -08:00
David Anderson 3ddf9f8a0d Update SourcePawn. 2019-11-24 20:41:59 -08:00
David Anderson d6e518838f Merge pull request #1053 from nosoop/remote-ext-filename-check
Check short name for remote extensions
2019-11-12 11:45:02 +09:00
David Anderson 0d320b7922 Merge pull request #1115 from alliedmodders/update-sp
Update SourcePawn.
2019-11-02 12:32:35 -07:00
David Anderson b2a0d0e4da Update SourcePawn.
Bug: alliedmodders/sourcepawn#400
Bug: alliedmodders/sourcepawn#401
Bug: alliedmodders/sourcepawn#402
2019-11-02 12:16:04 -07:00
David Anderson c0686dc4f9 Merge pull request #1106 from alliedmodders/update-sp
Update SourcePawn to master.
2019-10-28 22:51:30 -07:00
David Anderson 7ab3a3cfd9 Update SourcePawn to master.
This turns on the new expression parser by default.
2019-10-28 21:19:22 -07:00
David Anderson c3102c7e9f Bump version to 1.11. 2019-10-18 21:07:36 -07:00
David Anderson f05e39afe1 Merge pull request #1090 from alliedmodders/update-sp
Update SourcePawn to 1.10-dev tip.
2019-10-01 09:50:25 -07:00
David Anderson 78511afa4c Update SourcePawn to 1.10-dev tip. 2019-09-28 18:32:47 -07:00
David Anderson c37c4f830f Merge pull request #1088 from alliedmodders/update-sp
Update SourcePawn to the tip of 1.10-dev.
2019-09-26 13:14:29 -07:00
David Anderson 4fe2ae780b Update SourcePawn to the tip of 1.10-dev. 2019-09-25 21:59:32 -07:00
David Anderson c7392aeded Fully convert dynamicmenu to transitional enum structs. (#1082) 2019-09-15 14:02:46 -07:00
David Anderson 14247af323 Merge pull request #1081 from alliedmodders/enum-structs
Update SourcePawn.
2019-09-15 11:55:56 -07:00
David Anderson 32cb00a4c6 Update SourcePawn. 2019-09-15 11:38:21 -07:00
David Anderson 94b3ca08a2 Update SourcePawn & amtl submodules (#1067) 2019-09-01 13:24:39 -07:00
David Anderson 5868ffd04e Merge pull request #1050 from alliedmodders/update-sp-093edef
Update SourcePawn to 093edef
2019-07-24 09:38:43 -07:00
David Anderson 15a7faeafd Merge pull request #1008 from alliedmodders/update-sp
Update SourcePawn to 4cba235.
2019-05-11 14:13:28 -07:00
David Anderson 626963fc49 Update SourcePawn to 4cba235. 2019-05-11 13:53:09 -07:00
David Anderson 2e11d3400e Fix MSVC2015 build. 2019-03-16 17:25:36 -07:00
David Anderson 364cd094d9 Trigger a build. 2019-03-16 16:57:22 -07:00
David Anderson 2af7600057 Switch to MSVC2015 builders. 2019-03-16 16:21:57 -07:00
David Anderson ae0a03d438 Merge pull request #964 from Bara/patch-5
Add missing semicolon
2019-02-19 21:49:07 -08:00
David Anderson 653e9325fc Merge pull request #963 from alliedmodders/update-sp
Update SourcePawn.
2019-02-18 12:53:21 -08:00
David Anderson 5d7d7c122e Update SourcePawn. 2019-02-17 21:21:43 -08:00
David Anderson ab7519530e Merge pull request #934 from alliedmodders/enum-structs
Inauguration of SourcePawn enum structs
2018-12-16 22:43:43 -08:00
David Anderson faa10f52a8 Move dynamicmenu.sp enum structs to transitional syntax. 2018-12-16 18:49:36 -08:00
David Anderson 53df09fbb7 Fix dynamicmenu.sp indentation. 2018-12-16 18:41:55 -08:00
David Anderson f465985370 Update SourcePawn and AMTL to master.
This brings in enum struct support.
2018-12-15 12:17:11 -08:00
David Anderson 470486ba7e Don't double-format in ReplyToCommand. (#932) 2018-12-12 23:30:27 -08:00
David Anderson 7ed329c11f Remove arch loops from build scripts. (#889)
This simplifies non-sdk build scripts by removing their loops over SM.archs. Instead the top-level
build script will re-evaluate them for each architecture.
2018-09-30 09:59:28 -07:00
David Anderson fe6abb0c48 Merge pull request #822 from alliedmodders/update-sourcepawn
Update SourcePawn.
2018-05-31 23:32:51 -07:00
David Anderson 90e66cbeef Update SourcePawn. 2018-05-31 23:13:36 -07:00
David Anderson 487e01e4ed Merge pull request #821 from alliedmodders/update-amtl
Update AMTL.
2018-05-31 21:44:09 -07:00
David Anderson 25b3d8f354 Update AMTL. 2018-05-31 21:23:59 -07:00
David Anderson 8c88614c2e Merge pull request #714 from Headline22/dvander-rednavd
Pin sourcepawn submodule to 1.9-dev
2017-10-24 20:09:00 -07:00
David Anderson 41bf281f1d Merge pull request #647 from alliedmodders/revert-606-null_natives
Revert "Add natives to check for NULL_VECTOR and NULL_STRING"
2017-08-03 17:13:51 -07:00
David Anderson 7239f1d00a Merge pull request #582 from alliedmodders/update-sp
Update to the latest SourcePawn.
2017-02-03 23:12:58 -08:00
David Anderson 613838626e Update to the latest SourcePawn. 2017-02-03 22:45:47 -08:00
David Anderson 1ff7b72bb0 Merge pull request #558 from peace-maker/suppress_not_runnable
Suppress logging of "Plugin not runnable" errors
2016-10-27 02:57:47 -04:00
David Anderson 07ba8df977 Merge pull request #544 from alliedmodders/update-amtl
Update to the latest SourcePawn and AMTL.
2016-09-24 17:45:34 -07:00
David Anderson 27e812461f Update to the latest SourcePawn and AMTL. 2016-09-24 16:45:04 -07:00
David Anderson ab53e580db Merge pull request #537 from peace-maker/cellarray_bridge
Add ICellArray creation/deletion to logic bridge
2016-08-27 18:17:37 -07:00
David Anderson a7f5fb7a08 Fix Linux build. 2016-07-26 14:46:58 -07:00
David Anderson 61e958e679 Merge pull request #529 from peace-maker/optional_natives
Keep optional natives optional after reloading
2016-07-26 12:59:32 -07:00
David Anderson 57229aac91 Merge pull request #530 from alliedmodders/new-amtl
Update to SourcePawn 1.9 and the latest AMTL.
2016-07-26 01:43:52 -07:00
David Anderson 3cccfc15da Update to SourcePawn 1.9 and the latest AMTL. 2016-07-26 01:36:35 -07:00
David Anderson a34555c45d Merge pull request #527 from alliedmodders/fix-new-sp
Fix syntax for SourcePawn update.
2016-07-09 12:28:43 -07:00
David Anderson adba0560d7 Fix syntax for SourcePawn update. 2016-07-09 12:24:18 -07:00
David Anderson 1b30e78db3 Update to the latest AMTL. 2016-07-09 12:16:17 -07:00
David Anderson 9db8c4af3e Merge pull request #524 from alliedmodders/rm-halfup
Remove half-up rounding.
2016-06-22 16:11:18 -04:00
David Anderson 34dedcaab1 Remove half-up rounding. 2016-06-22 12:54:36 -07:00
David Anderson f7bb423f06 Update to the latest SourcePawn and AMTL. 2016-03-13 16:29:11 -07:00
David Anderson 7bd1ed2339 Merge pull request #477 from 2m/wip-fix-sample-extension-2m
Fix compilation of sample extension
2016-02-29 18:12:15 -05:00
David Anderson a7c7e72004 Merge pull request #485 from peace-maker/plugin_unloading
Fix scheduled plugin unloading
2016-02-29 10:53:26 -05:00
David Anderson e0e9e87326 Merge pull request #468 from splewis/new-syntax-testing
Update sourcepawn testing include to new syntax.
2016-01-07 12:35:12 +07:00
David Anderson c3e5d62bf6 Update to the latest AMTL: remove PassRef. 2015-11-08 13:51:22 -08:00
David Anderson e2b399b8d3 Update to the latest AMTL - Rename Ref to RefPtr. 2015-11-08 13:14:57 -08:00
David Anderson 637941a978 Merge pull request #437 from alliedmodders/rm-pausing-12
Fix race between plugin unload and asynchronous query completion.
2015-11-01 14:52:58 -08:00
David Anderson 1f4be9798e Flush asynchronous queries before OnPluginEnd(). 2015-11-01 00:36:20 -07:00
David Anderson c849616003 Add an OnPluginWillUnload callback that precedes OnPluginEnd(). 2015-11-01 00:30:37 -07:00
David Anderson d674414cf0 Add a versioned IPluginsListener and deprecate the non-versioned class. 2015-11-01 00:23:33 -07:00
David Anderson cb3f6df111 Require that no plugin code be live when any plugin unloads. 2015-10-31 19:38:30 -07:00
David Anderson 59623695af Improve plugin console diagnostics. 2015-10-31 17:30:33 -07:00
David Anderson 87e9dee78b Evict plugins that fail to load. 2015-10-31 17:30:33 -07:00
David Anderson 62edc5f4c0 Clean up "sm plugins list" after status meaning clarifications. 2015-10-31 17:25:59 -07:00