Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement clock_nanosleep() for DragonFly BSD #1121

Closed
dankamongmen opened this issue Nov 17, 2020 · 25 comments
Closed

Implement clock_nanosleep() for DragonFly BSD #1121

dankamongmen opened this issue Nov 17, 2020 · 25 comments
Assignees
Labels
bug Something isn't working freebsd the freest of bsds, but not very dragonFLY
Milestone

Comments

@dankamongmen
Copy link
Owner

We're failing in DPorts, last tested on 1.6.6: DragonFlyBSD/DeltaPorts#995

Apparently, we need work around a missing clock_nanosleep() at a minimum.

@dankamongmen dankamongmen added bug Something isn't working freebsd the freest of bsds, but not very dragonFLY labels Nov 17, 2020
@dankamongmen dankamongmen added this to the 2.1.0 milestone Nov 17, 2020
@dankamongmen dankamongmen self-assigned this Nov 17, 2020
@dankamongmen
Copy link
Owner Author

GNUlib doesn't implement clock_nanosleep(), le sigh. DragonFlyBSD only appears to offer us nanosleep(), from which we can construct a clock_nanosleep() easily enough.

Of course, we then need integrate it with the project. clock_nanosleep() is used by demo, PoCs, and the core lib. So I'm thinking we'd need a new src/shared/ directory, members of which are compiled up and directly linked into various objects. I don't want to, like, export clock_nanosleep_portable() from notcurses.

@dankamongmen
Copy link
Owner Author

It looks like @grendello 's #1280 will implement clock_nanosleep() (though not with TIMER_ABSTIME, which i think will cause problems for fades and streamings, not to mention the demo's control flow). we ought then ping the DBSD people and ask them to give 'er another try.

dankamongmen added a commit that referenced this issue Jan 10, 2021
I've created the new files src/compat/compat.{hc}. These
are available to all binaries by adding src to the include
directories, and src/compat/compat.c to the sources. Several
functions are implemented here which one or more target
operating systems are missing, right now all related to time.
This includes clock_nanosleep(), which is missing on OS X and
DragonFly BSD. Eliminate the other three definitions of
timespec_to_ns() and friends. Standardize on NANOSECS_IN_SEC
rather than the more opaque GIG. Progress on #1121.
@dankamongmen
Copy link
Owner Author

I've gone ahead and implemented clock_nanosleep() including TIMER_ABSTIME in src/compat/compat.[hc], and without any ISC code.

@dankamongmen
Copy link
Owner Author

I've asked the DragonFlyBSD people to attempt a build with this fix. Closing until we hear otherwise.

@dankamongmen dankamongmen changed the title Get Notcurses working on DragonFly BSD Implement clock_nanosleep() for DragonFly BSD Jan 10, 2021
@liweitianux
Copy link

liweitianux commented Jan 11, 2021

Hi @dankamongmen , thank you for taking care of DragonFly BSD. With this change, notcurses still has issues to compile on DragonFly. I've made the following patches to fix the compilation issues:

--- CMakeLists.txt.orig	2021-01-10 21:47:39 UTC
+++ CMakeLists.txt
@@ -262,6 +262,8 @@ target_compile_definitions(notcurses-sta
 set(PKGCONFIG_DIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
 elseif(${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
 set(PKGCONFIG_DIR "${CMAKE_INSTALL_PREFIX}/libdata/pkgconfig")
+elseif(${CMAKE_SYSTEM_NAME} STREQUAL "DragonFly")
+set(PKGCONFIG_DIR "${CMAKE_INSTALL_PREFIX}/libdata/pkgconfig")
 endif()
 
 # libnotcurses++
@@ -375,7 +377,7 @@ install(FILES ${NCPP_INTERNAL_HEADERS} D
 
 # notcurses-demo
 file(GLOB DEMOSRCS CONFIGURE_DEPENDS src/demo/*.c)
-add_executable(notcurses-demo ${DEMOSRCS})
+add_executable(notcurses-demo ${DEMOSRCS} ${COMPATSRC})
 target_compile_definitions(notcurses-demo
   PRIVATE
     _GNU_SOURCE
@@ -549,7 +551,7 @@ target_link_libraries(notcurses-tetris
 # notcurses-view
 if(${USE_FFMPEG} OR ${USE_OIIO})
 file(GLOB VIEWSRCS CONFIGURE_DEPENDS src/view/*.cpp)
-add_executable(notcurses-view ${VIEWSRCS})
+add_executable(notcurses-view ${VIEWSRCS} ${COMPATSRC})
 target_include_directories(notcurses-view
   PRIVATE
     include

--- src/compat/compat.c.orig	2021-01-10 21:47:39 UTC
+++ src/compat/compat.c
@@ -1,6 +1,8 @@
 #ifndef __linux__
 #ifndef __FreeBSD__
+#include <stdint.h>
 #include <time.h>
+#include "compat/compat.h"
 // clock_nanosleep is unavailable on DragonFly BSD and Mac OS X
 int clock_nanosleep(clockid_t clockid, int flags, const struct timespec *request,
                     struct timespec *remain){
@@ -9,7 +11,7 @@ int clock_nanosleep(clockid_t clockid, i
     return -1;
   }
   uint64_t nowns = timespec_to_ns(&now);
-  uint64_t targns = timespec_to_ns(&request);
+  uint64_t targns = timespec_to_ns(request);
   if(flags != TIMER_ABSTIME){
     targns += nowns;
   }

--- src/compat/compat.h.orig	2021-01-11 04:14:28 UTC
+++ src/compat/compat.h
@@ -1,6 +1,10 @@
 #ifndef NOTCURSES_COMPAT
 #define NOTCURSES_COMPAT
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #include <time.h>
 
 #define NANOSECS_IN_SEC 1000000000ul
@@ -24,4 +28,8 @@ int clock_nanosleep(clockid_t clockid, i
                     const struct timespec *request,
                     struct timespec *remain);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif

In addition, notcurses requires the <filesystem> that is experimental in GCC 8.x, which is the default GCC chosen by DragonFly. We'll need to adjust our Makefile to use GCC 9.x, and it then should be OK. Refs:

@dankamongmen
Copy link
Owner Author

Beautiful! It looks like most of these are changes I ought make upstream--thanks for correcting my stupidities! All necessary changes will be present in the 2.1.5 release.

@dankamongmen
Copy link
Owner Author

@liweitianux i've merged all the changes you provided above, which all look good and correct. They will be released as part of 2.1.5. Until that release (sometime this week, most likely), your patch ought suffice. THANK YOU!

@liweitianux
Copy link

liweitianux commented Jan 12, 2021

@dankamongmen No problem :D

I've switched to GCC 9.x to retry the build, and now I'm having this issue:

/usr/local/bin/ld: libnotcurses.so.2.1.4: undefined reference to `execvpe'
collect2: error: ld returned 1 exit status
*** [notcurses-demo] Error code 1

And the execvpe(3) man page on Linux says execvpe() is a GNU extension...

@dankamongmen
Copy link
Owner Author

dankamongmen commented Jan 12, 2021

@dankamongmen No problem :D

I've switched to GCC 9.x to retry the build, and now I'm having this issue:

/usr/local/bin/ld: libnotcurses.so.2.1.4: undefined reference to `execvpe'
collect2: error: ld returned 1 exit status
*** [notcurses-demo] Error code 1

And the execvpe(3) man page on Linux says execvpe() is a GNU extension...

@liweitianux

diff --git src/lib/fd.c src/lib/fd.c
index 99d5edb1..93ad66bb 100644
--- src/lib/fd.c
+++ src/lib/fd.c
@@ -381,10 +381,10 @@ ncsubproc* ncsubproc_createvpe(ncplane* n, const ncsubproc_options* opts,
   memset(ret, 0, sizeof(*ret));
   ret->pid = launch_pipe_process(&fd, &ret->pidfd);
   if(ret->pid == 0){
-#ifdef __FreeBSD__
-    exect(bin, arg, env);
-#else
+#ifdef __linux__
     execvpe(bin, arg, env);
+#else
+    exect(bin, arg, env);
 #endif
 //fprintf(stderr, "Error execv()ing %s\n", bin);
     exit(EXIT_FAILURE);

dankamongmen added a commit that referenced this issue Jan 12, 2021
@liweitianux
Copy link

@dankamongmen Cool. With the following minor fix, I managed to build and package notcurses on DragonFly BSD:

--- CMakeLists.txt.orig	2021-01-11 22:11:39 UTC
+++ CMakeLists.txt
@@ -405,7 +405,7 @@ if(USE_POC)
 file(GLOB POCSRCS CONFIGURE_DEPENDS src/poc/*.c src/poc/*.cpp)
 foreach(f ${POCSRCS})
   get_filename_component(fe "${f}" NAME_WE)
-  add_executable(${fe} ${f})
+  add_executable(${fe} ${f} ${COMPATSRC})
   target_include_directories(${fe}
     PRIVATE include src "${TERMINFO_INCLUDE_DIRS}"
     "${PROJECT_BINARY_DIR}/include"

(I missed this since I was unable to reach to this stage yesterday.)

In addition, I propose the following patch:

diff --git a/README.md b/README.md
index 89d9b340..0df85ad2 100644
--- a/README.md
+++ b/README.md
@@ -117,7 +117,7 @@ may well be possible to use still older versions. Let me know of any successes!
 * (OPTIONAL) (documentation) [pandoc](https://pandoc.org/index.html) 1.19.2+
 * (OPTIONAL) (python bindings): Python 3.7+, [CFFI](https://pypi.org/project/cffi/) 1.13.2+, [pypandoc](https://pypi.org/project/pypandoc/) 1.5+
 * (OPTIONAL) (rust bindings): rust 1.47.0+, [bindgen](https://crates.io/crates/bindgen) 0.55.1+, pkg-config 0.3.18+, cty 0.2.1+
-* (runtime) Linux 5.3+ or FreeBSD 11+
+* (runtime) Linux 5.3+ or FreeBSD 11+ or DragonFly BSD 5.9+
 
 ### Building
 
diff --git a/src/fetch/main.c b/src/fetch/main.c
index 0d8488bb..9ed54b8e 100644
--- a/src/fetch/main.c
+++ b/src/fetch/main.c
@@ -243,6 +243,7 @@ unix_gethostname(fetched_info* fi){
 typedef enum {
   NCNEO_LINUX,
   NCNEO_FREEBSD,
+  NCNEO_DRAGONFLY,
   NCNEO_UNKNOWN,
 } ncneo_kernel_e;
 
@@ -259,6 +260,8 @@ get_kernel(fetched_info* fi){
     return NCNEO_LINUX;
   }else if(strcmp(uts.sysname, "FreeBSD") == 0){
     return NCNEO_FREEBSD;
+  }else if(strcmp(uts.sysname, "DragonFly") == 0){
+    return NCNEO_DRAGONFLY;
   }
   fprintf(stderr, "Unknown operating system via uname: %s\n", uts.sysname);
   return NCNEO_UNKNOWN;
@@ -274,6 +277,16 @@ freebsd_ncneofetch(fetched_info* fi){
   return &fbsd;
 }
 
+static const distro_info*
+dragonfly_ncneofetch(fetched_info* fi){
+  static const distro_info dfly = {
+    .name = "DragonFly",
+    .logofile = NULL, // FIXME
+  };
+  fi->distro_pretty = NULL;
+  return &dfly;
+}
+
 static int
 drawpalette(struct ncdirect* nc){
   int psize = ncdirect_palette_size(nc);
@@ -484,6 +497,9 @@ ncneofetch(struct ncdirect* nc){
     case NCNEO_FREEBSD:
       fi.distro = freebsd_ncneofetch(&fi);
       break;
+    case NCNEO_DRAGONFLY:
+      fi.distro = dragonfly_ncneofetch(&fi);
+      break;
     case NCNEO_UNKNOWN:
       break;
   }

Moreover, compared to FreeBSD, notcurses still misses the DragonFly logo in src/fetch/ncart.c. The DragonFly logo can be found at: https://www.dragonflybsd.org/images/ . It would be great if we could have it.

Thank you.

@dankamongmen
Copy link
Owner Author

Thank YOU, both for this and for the fascinating DragonFly BSD! i'm really happy to be on it.

I am happy to commit this myself, or if you'd like to get the credit, you can send a PR. It all goes in either way.

Is there any copy of the DragonFly BSD logo on the local filesystem? If not, might I recommend you:

  • add the downloaded image to the package via whatever means you'd like, installing it to /usr/local/share/notcurses
  • set logofile in that distro_info?

I just don't want to end up carrying around logos from a bunch of projects, and having to consider licensing, and keeping them up to date, and all that stuff.

since you seem to be exploring the project thoroughly, might i ask whether notcurses-demo -p ../data -c runs more or less successfully on dragonfly bsd? you might have to export COLORTERM=24bit (assuming your terminal does indeed support DirectColor) and/or finagle with your TERM environment variable. what about notcurses-test -p ../data (or simply make test, assuming you built with doctest)? if you don't have time/inclination to do this, no worries at all!

@dankamongmen
Copy link
Owner Author

oh you meant in ncart.c. i extract those from neofetch. they're suboptimal relative to a nice png:

2021-01-11-215349_802x902_scrot

@liweitianux
Copy link

Cool. I'll explore your suggestions more and open a PR in tomorrow.

With UTF-8 disabled, this is result of notcurses-demo -p data -c (I'm using XFCE terminal on Linux and SSH into my DragonFly box):

% echo $TERM
xterm-256color

% locale
LANG=""
LC_CTYPE="C"
LC_COLLATE="C"
LC_TIME="C"
LC_NUMERIC="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=""

% env COLORTERM=24bit notcurses-demo -p data -c
Term: 30x109 xterm-256color (xterm with 256 colors)

 notcurses 2.1.4 by nick black et al
  30 rows 109 cols (51.09KiB) 16B cells 256 colors+RGB
  compiled with gcc-9.3.0, little-endian
  terminfo from ncurses 6.1.20190525
  avformat 58.45.100 avutil 56.51.100 swscale 5.7.100

 Warning! Encoding is not UTF-8; output may be degraded.

19273 renders, 6.37s total (3.00ns min, 9.75ms max, 330.44us avg)
19273 writes, 22.35s total (3.00ns min, 44.37ms max, 1.16ms avg)
151.50MiB total (6.00B min, 107.38KiB max, 8.05KiB avg)
0 failed renders, 0 failed writes, 9 refreshes
RGB emits:elides: def 5474:49755 fg 3979736:1529431 bg 4691931:806659
Cell emits:elides: 5537172/57514968 (91.22%) 90.09% 27.76% 14.67%

             runtime│ frames│output(B)│rendering│    FPS│%r│%w│TheoFPS║
══╤════════╤════════╪═══════╪═════════╪═════════╪═══════╪══╪══╪═══════╣
 1│   intro│ 35.79us│      0│     0.00│    0.00s│    0.0│ 0│ 0│   0.00║SKIPPED
 2│    xray│   5.95s│    360│  14.41Mi│  74.26ms│   60.5│ 1│25│ 224.11║
 3│   eagle│  14.29s│    506│  20.77Mi│ 199.11ms│   35.4│ 1│13│ 230.59║
 4│     zoo│  13.41s│    797│ 892.92Ki│ 598.12ms│   59.4│ 4│ 8│ 443.01║
 5│  chunli│   7.10s│    344│   1.08Mi│ 263.93ms│   48.4│ 3│ 9│ 379.62║
 6│   yield│  12.02s│   1494│ 531.57Ki│ 301.47ms│  124.3│ 2│ 3│  2.08K║
 7│  dragon│   2.44s│    132│  41.24Ki│  68.37ms│   54.1│ 2│ 3│ 923.69║
 8│   trans│  11.44s│   7704│   1.25Mi│    1.17s│  673.5│10│11│  3.03K║

With UTF-8 enabled, the above test stucks in the following phase (and uses 100% CPU...):

Screenshot_2021-01-12_11-05-28

% setenv LANG en_US.UTF-8

% locale
LANG="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_ALL=""

% env COLORTERM=24bit notcurses-demo -p data -c
Term: 30x109 xterm-256color (xterm with 256 colors)

 notcurses 2.1.4 by nick black et al
  30 rows 109 cols (51.09KiB) 16B cells 256 colors+RGB
  compiled with gcc-9.3.0, little-endian
  terminfo from ncurses 6.1.20190525
  avformat 58.45.100 avutil 56.51.100 swscale 5.7.100

^C

By the way, the demos are awesome and render notcurses really appealing 😄

I'll try notcurses-test later (disabled for now).

@dankamongmen
Copy link
Owner Author

btw, i only now hooked up the neofetch-style logos; they weren't
being used until about five minutes ago. dragonfly ought be
picked up now, though it would still look way better with an
actual image. here's what it looks like:

                        ,--,           |           ,--,
                        |   `-,       ,^,       ,-'   |
                         `,    `-,   (/ \)   ,-'    ,'
                           `-,    `-,/   \,-'    ,-'
                              `------(   )------'
                          ,----------(   )----------,
                         |        _,-(   )-,_        |
                          `-,__,-'   \   /   `-,__,-'
                                      | |
                                      | |
                                      | |
                                      | |
                                      | |
                                      | |
                                      `|'
          ───────────────────[ dank@schwarzgerat ]────────────────────
          │Linux 5.10.6nlb              Debian GNU/Linux bullseye/sid│
          │                                           Processes: 1830│
          │DM: XFCE                                  Shell: /bin/bash│
          │RGB TERM: vte-256color                  Screen0: 3440x1440│
          │LANG: en_US.UTF-8                                UID: 1000│
          │ AMD Ryzen Threadripper 3970X 32-Core Processor (64 cores)│
          ╰──────────────────────────────────────────────────────────╯

@dankamongmen
Copy link
Owner Author

with the logo you provide, we get the rather appealing

2021-01-12-003840_802x1417_scrot

i'm also going to add code to ncneofetch to use sysctl to get cpu info, which is broken on BSD (no /proc/cpuinfo). see #1284.

alright, i'm gonna go ahead and set up a DragonFly BSD VM to work on the problems you identified above -- thanks a lot for running that test! i still think it's probably worth going ahead and making the DPort available, but that's your call. 2.1.5 might get released without notcurses-demo working all the way through on DragonFly, but 2.1.6 will definitely work. woo-hoo!

@liweitianux
Copy link

Great! Thank you for the work. Actually, I'm testing notcurse in a VirtualBox VM on Linux (ofc I have a DFly desktop 😄)

I recommend you use the snapshot image (i.e., DragonFly 5.9-DEVELOPMENT) to create the VM.

It takes a bit effort to build notcurses on DFly. So currently, I cloned the dports sources and copy the devel/notcurses from the freebsd ports and make the following adjustments:

--- Makefile	2021-01-12 07:23:38.530843000 +0800
+++ Makefile.orig	2021-01-12 11:17:42.623815000 +0800
@@ -2,7 +2,7 @@
 
 PORTNAME=	notcurses
 DISTVERSIONPREFIX=	v
-PORTVERSION=	${ABIVERSION}.1.4
+DISTVERSION=	${ABIVERSION}.1.4
 CATEGORIES=	devel
 
 MAINTAINER=	nickblack@linux.com
@@ -18,7 +18,6 @@
 USES=		cmake:noninja compiler:c++17-lang localbase ncurses:port pkgconfig
 USE_GITHUB=	yes
 GH_ACCOUNT=	dankamongmen
-GH_TAGNAME=	ee3dc54
 USE_LDCONFIG=	yes
 
 CONFIGURE_ENV+=	PKGCONFIG_DIR=${LOCALBASE}/libdata/pkgconfig
@@ -27,7 +26,7 @@
 
 TEST_TARGET=	test
 
-PLIST_SUB=	REL_VER=${ABIVERSION}.1.4 ABI_VER=${ABIVERSION}
+PLIST_SUB=	REL_VER=${DISTVERSION} ABI_VER=${ABIVERSION}
 PORTDOCS=	*.md
 
 OPTIONS_DEFINE=		DOCS MANPAGES

--- /dev/null	2021-01-12 11:16:55.828081000 +0800
+++ Makefile.DragonFly	2021-01-11 17:14:31.710120000 +0800
@@ -0,0 +1 @@
+USE_GCC_VERSION=	9

I'll also try to manually build notcurses later and report to you. (I tried direct cmake yesterday but failed to find uniwbrk.h ...)

@dankamongmen
Copy link
Owner Author

I'll also try to manually build notcurses later and report to you. (I tried direct cmake yesterday but failed to find uniwbrk.h ...)

i think i'm misunderstanding something, then -- i thought you were able to build the port? uniwbrk.h is from libunistring (devel/libunistring).

@liweitianux
Copy link

Yes, I'm able to build the devel/notcurses port on DragonFly, because the DPorts would set appropriate environment variables (e.g., CFLAGS). But if I manually did cmake in the cloned notcurses repo yesterday and it failed to find uniwbrk.h. I have devel/libunistring installed, so I believe I was missing some variables...

Well, I just tried cmake again and it works now (one difference is that I was using GCC 8.3 in base):

% env CC=gcc9 CXX=g++9 cmake .. -DUSE_DOCTEST=OFF -DUSE_PANDOC=OFF
-- The C compiler identification is GNU 9.3.0
-- The CXX compiler identification is GNU 9.3.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/local/bin/gcc9 - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/local/bin/g++9 - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Requested multimedia engine: ffmpeg
-- Requested build mode: RelWithDebInfo
-- Found PkgConfig: /usr/local/bin/pkg-config (found version "1.7.3") 
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE  
-- Checking for one of the modules 'tinfo>=6.1;ncursesw>=6.1'
-- Checking for one of the modules 'readline>=8.0'
-- Checking for module 'libavcodec>=57.0'
--   Found libavcodec, version 58.91.100
-- Checking for module 'libavformat>=57.0'
--   Found libavformat, version 58.45.100
-- Checking for module 'libavutil>=56.0'
--   Found libavutil, version 56.51.100
-- Checking for module 'libswscale>=5.0'
--   Found libswscale, version 5.7.100
-- Looking for uniwbrk.h
-- Looking for uniwbrk.h - found
-- Looking for qrcodegen/qrcodegen.h
-- Looking for qrcodegen/qrcodegen.h - found
-- The following OPTIONAL packages have been found:

 * FFMpeg
 * qrcodegen

-- The following REQUIRED packages have been found:

 * PkgConfig
 * Threads
 * terminfo
 * readline
 * libunistring

-- Configuring done
-- Generating done
-- Build files have been written to: /home/aly/build/notcurses/build

And it builds fine :D

So never mind ;)

@dankamongmen
Copy link
Owner Author

-DCMAKE_REQUIRED_INCLUDES=/usr/local/include is necessary for finding the unistring/qrcodegen stuff iirc.

@dankamongmen
Copy link
Owner Author

2.1.5 has been released. https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=252704 updates FreeBSD Ports to 2.1.5.

@liweitianux
Copy link

Great work!

By the way, I'm adding the clock_nanosleep() syscall to DragonFly as well, based on the FreeBSD's implementation. Let's see.

@liweitianux
Copy link

Hi @dankamongmen , I've gotten clock_nanosleep() syscall into DragonFly BSD. Will retry notcurses later 😃

@dankamongmen
Copy link
Owner Author

Uhoh, I'll presumably need to disable our implementation when it's present, then, or else we'll get redefinition errors.

@liweitianux
Copy link

We can use #if defined(__DragonFly_version) && __DragonFly_version >= 500907

@dankamongmen
Copy link
Owner Author

We can use #if defined(__DragonFly_version) && __DragonFly_version >= 500907

you're a beautiful human being

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working freebsd the freest of bsds, but not very dragonFLY
Projects
None yet
Development

No branches or pull requests

2 participants