make mac allow X again via -version=ArsdNoCocoa

This commit is contained in:
Adam D. Ruppe 2025-12-03 14:20:56 -05:00
parent 6b3aba5374
commit de5c8055cf
2 changed files with 65 additions and 36 deletions

45
core.d
View File

@ -119,6 +119,8 @@ version(ArsdUseCustomRuntime)
}
else
{
version(ArsdNoCocoa) {
} else {
version(D_OpenD) {
version(OSX)
version=OSXCocoa;
@ -135,6 +137,7 @@ else
version(iOS)
version=OSXCocoa;
}
}
version = HasFile;
version = HasSocket;
@ -145,7 +148,7 @@ else
version = HasTimer;
version(linux)
version = HasTimer;
version(OSXCocoa)
version(OSX)
version = HasTimer;
}
@ -236,7 +239,11 @@ version(Emscripten) {
// THIS FILE DOESN'T ACTUALLY EXIST, WE NEED TO MAKE IT
import core.sys.openbsd.sys.event;
} else version(OSX) {
version(ArsdNoCocoa) {
version=Arsd_core_kqueue;
} else {
version=Arsd_core_dispatch;
}
import core.sys.darwin.sys.event;
} else version(iOS) {
@ -5427,6 +5434,8 @@ class Timer {
auto el = getThisThreadEventLoop(EventLoopType.Ui);
unregisterToken = el.addCallbackOnFdReadable(fd, new CallbackHelper(&trigger));
} else version(Arsd_core_kqueue) {
this.ident = ++identTicker;
} else throw new NotYetImplementedException();
// FIXME: freebsd 12 has timer_fd and netbsd 10 too
}
@ -5462,6 +5471,17 @@ class Timer {
if(timerfd_settime(fd, 0, &value, null) == -1) {
throw new ErrnoApiException("couldn't change pulse timer", errno);
}
} else version(Arsd_core_kqueue) {
// FIXME
auto el = cast(CoreEventLoopImplementation) getThisThreadEventLoop();
kevent_t ev;
cbh = new CallbackHelper(&trigger);
EV_SET(&ev, this.ident, EVFILT_TIMER, EV_ADD | EV_ENABLE | EV_CLEAR | (repeats ? 0 : EV_ONESHOT), NOTE_USECONDS, 1000 * intervalInMilliseconds, cast(void*) cbh);
ErrnoEnforce!kevent(el.kqueuefd, &ev, 1, null, 0, null);
} else {
throw new NotYetImplementedException();
}
@ -5524,7 +5544,7 @@ class Timer {
}
}
version(Windows) {} else {
version(Windows) {} else version(Arsd_core_kqueue) {} else {
ICoreEventLoop.UnregisterToken unregisterToken;
}
@ -5539,25 +5559,23 @@ class Timer {
void destroy() {
version(Windows) {
cbh.release();
} else {
unregisterToken.unregister();
}
version(Windows) {
staticDestroy(handle);
handle = null;
} else version(linux) {
unregisterToken.unregister();
staticDestroy(fd);
fd = -1;
} else version(Arsd_core_kqueue) {
} else throw new NotYetImplementedException();
}
~this() {
version(Windows) {} else
cleanupQueue.queue!unregister(unregisterToken);
version(Windows) { if(handle)
version(Windows) {
if(handle)
cleanupQueue.queue!staticDestroy(handle);
} else version(linux) { if(fd != -1)
} else version(linux) {
cleanupQueue.queue!unregister(unregisterToken);
if(fd != -1)
cleanupQueue.queue!staticDestroy(fd);
}
}
@ -5621,6 +5639,7 @@ class Timer {
if(this.lastEventLoopRoundTriggered == eventLoopRound)
return; // never try to actually run faster than the event loop
lastEventLoopRoundTriggered = eventLoopRound;
} else version(Arsd_core_kqueue) {
} else throw new NotYetImplementedException();
if(onPulse)
@ -5642,6 +5661,10 @@ class Timer {
CallbackHelper cbh;
} else version(linux) {
int fd = -1;
} else version(Arsd_core_kqueue) {
int ident;
static int identTicker;
CallbackHelper cbh;
} else static if(UseCocoa) {
} else static assert(0, "timer not supported");
}

View File

@ -1164,6 +1164,8 @@ unittest {
import arsd.core;
version(ArsdNoCocoa) {
} else {
version(D_OpenD) {
version(OSX)
version=OSXCocoa;
@ -1172,7 +1174,7 @@ version(D_OpenD) {
} else {
version(OSX) version(DigitalMars) version=OSXCocoa;
}
}
version(Emscripten) {
@ -4415,6 +4417,10 @@ struct EventLoopImpl {
void delegate(int) signalHandler;
}
else
version(Posix) {
static import unix = core.sys.posix.unistd;
}
version(X11) {
int pulseFd = -1;
@ -4624,7 +4630,7 @@ struct EventLoopImpl {
ref int customEventFDRead() { return SimpleWindow.customEventFDRead; }
version(Posix)
ref int customEventFDWrite() { return SimpleWindow.customEventFDWrite; }
version(linux)
version(Posix)
ref int customSignalFD() { return SimpleWindow.customSignalFD; }
version(Windows)
ref auto customEventH() { return SimpleWindow.customEventH; }