mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-10 09:42:29 +00:00
* fcopy 515 linux compat (#75835) This is a byond bug, but @ san7890 @ lessthnthree found it months ago and didn't report it to byond. So I will not open the issue report reporting this byond. They can fucking do that. This pr needs a speed merge because we have linux downstreams that follow upstream code affected by this byond bug. then again skyrat also knows about this bug on top of this workaround and has not opened a bug report so maybe they don't fucking need a speed merge and instead should have filed a bug report with byond. Its out of my hands. --------- Co-authored-by: Watermelon914 <37270891+Watermelon914@ users.noreply.github.com> * fcopy 515 linux compat --------- Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com> Co-authored-by: Watermelon914 <37270891+Watermelon914@ users.noreply.github.com>
76 lines
3.2 KiB
Plaintext
76 lines
3.2 KiB
Plaintext
// This file contains defines allowing targeting byond versions newer than the supported
|
|
|
|
//Update this whenever you need to take advantage of more recent byond features
|
|
#define MIN_COMPILER_VERSION 514
|
|
#define MIN_COMPILER_BUILD 1556
|
|
#if (DM_VERSION < MIN_COMPILER_VERSION || DM_BUILD < MIN_COMPILER_BUILD) && !defined(SPACEMAN_DMM)
|
|
//Don't forget to update this part
|
|
#error Your version of BYOND is too out-of-date to compile this project. Go to https://secure.byond.com/download and update.
|
|
#error You need version 514.1556 or higher
|
|
#endif
|
|
|
|
#if (DM_VERSION == 514 && DM_BUILD > 1575 && DM_BUILD <= 1577)
|
|
#error Your version of BYOND currently has a crashing issue that will prevent you from running Dream Daemon test servers.
|
|
#error We require developers to test their content, so an inability to test means we cannot allow the compile.
|
|
#error Please consider downgrading to 514.1575 or lower.
|
|
#endif
|
|
|
|
// Keep savefile compatibilty at minimum supported level
|
|
#if DM_VERSION >= 515
|
|
/savefile/byond_version = MIN_COMPILER_VERSION
|
|
#endif
|
|
|
|
// 515 split call for external libraries into call_ext
|
|
#if DM_VERSION < 515
|
|
#define LIBCALL call
|
|
#else
|
|
#define LIBCALL call_ext
|
|
#endif
|
|
|
|
// So we want to have compile time guarantees these methods exist on local type, unfortunately 515 killed the .proc/procname and .verb/verbname syntax so we have to use nameof()
|
|
// For the record: GLOBAL_VERB_REF would be useless as verbs can't be global.
|
|
|
|
#if DM_VERSION < 515
|
|
|
|
/// Call by name proc references, checks if the proc exists on either this type or as a global proc.
|
|
#define PROC_REF(X) (.proc/##X)
|
|
/// Call by name verb references, checks if the verb exists on either this type or as a global verb.
|
|
#define VERB_REF(X) (.verb/##X)
|
|
|
|
/// Call by name proc reference, checks if the proc exists on either the given type or as a global proc
|
|
#define TYPE_PROC_REF(TYPE, X) (##TYPE.proc/##X)
|
|
/// Call by name verb reference, checks if the verb exists on either the given type or as a global verb
|
|
#define TYPE_VERB_REF(TYPE, X) (##TYPE.verb/##X)
|
|
|
|
/// Call by name proc reference, checks if the proc is an existing global proc
|
|
#define GLOBAL_PROC_REF(X) (/proc/##X)
|
|
|
|
#else
|
|
|
|
/// Call by name proc references, checks if the proc exists on either this type or as a global proc.
|
|
#define PROC_REF(X) (nameof(.proc/##X))
|
|
/// Call by name verb references, checks if the verb exists on either this type or as a global verb.
|
|
#define VERB_REF(X) (nameof(.verb/##X))
|
|
|
|
/// Call by name proc reference, checks if the proc exists on either the given type or as a global proc
|
|
#define TYPE_PROC_REF(TYPE, X) (nameof(##TYPE.proc/##X))
|
|
/// Call by name verb reference, checks if the verb exists on either the given type or as a global verb
|
|
#define TYPE_VERB_REF(TYPE, X) (nameof(##TYPE.verb/##X))
|
|
|
|
/// Call by name proc reference, checks if the proc is an existing global proc
|
|
#define GLOBAL_PROC_REF(X) (/proc/##X)
|
|
|
|
#endif
|
|
|
|
#if (DM_VERSION == 515)
|
|
/// fcopy will crash on 515 linux if given a non-existant file, instead of returning 0 like on 514 linux or 515 windows
|
|
/// var case matches documentation for fcopy.
|
|
/world/proc/__fcopy(Src, Dst)
|
|
if (istext(Src) && !fexists(Src))
|
|
return 0
|
|
return fcopy(Src, Dst)
|
|
|
|
#define fcopy(Src, Dst) world.__fcopy(Src, Dst)
|
|
|
|
#endif
|