summary refs log tree commit diff stats
path: root/tools/detect/detect.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tools/detect/detect.nim')
-rw-r--r--tools/detect/detect.nim57
1 files changed, 45 insertions, 12 deletions
diff --git a/tools/detect/detect.nim b/tools/detect/detect.nim
index 5b4fdc99e..ed9438494 100644
--- a/tools/detect/detect.nim
+++ b/tools/detect/detect.nim
@@ -12,14 +12,27 @@
 # The second one is more portable, and less semantically correct. It only works
 # when there's a backing C compiler available as well, preventing standalone
 # compilation.
-import os, strutils
+import std/[os, strutils]
+
+when defined(nimPreviewSlimSystem):
+  import std/syncio
+
+when defined(openbsd) or defined(freebsd) or defined(netbsd):
+  const
+    cc = "cc -o $# $#.c"
+    cpp = "cc -E -o $#.i $#.c"
+    ccLinkMath = "cc -lm -o $# $#.c"
+    cppLinkMath = "cc -lm -E -o $#.i $#.c"
+else:
+  const
+    cc = "gcc -o $# $#.c"
+    cpp = "gcc -E -o $#.i $#.c"
 
 const
-  cc = "gcc -o $# $#.c"
-  cpp = "gcc -E -o $#.i $#.c"
-
   cfile = """
 /* Generated by detect.nim */
+#define _GNU_SOURCE
+#define _POSIX_C_SOURCE 200809L
 
 #include <stdlib.h>
 #include <stdio.h>
@@ -87,8 +100,11 @@ proc main =
   if open(f, "other_consts.nim", fmWrite):
     f.write(nimfile % [other])
     close(f)
-  if not myExec(cc % [gen.addFileExt(ExeExt), gen]): quit(1)
-  if not myExec(cpp % [pre.addFileExt(ExeExt), pre]): quit(1)
+
+  let cCompile = when defined(openbsd) or defined(freebsd) or defined(netbsd): ccLinkMath else: cc
+  let cppCompile = when defined(openbsd) or defined(freebsd) or defined(netbsd): cppLinkMath else: cpp
+  if not myExec(cCompile % [gen.addFileExt(ExeExt), gen]): quit(1)
+  if not myExec(cppCompile % [pre.addFileExt(ExeExt), pre]): quit(1)
   when defined(windows):
     if not myExec(gen.addFileExt(ExeExt)): quit(1)
   else:
@@ -119,10 +135,14 @@ proc v(name: string, typ = "cint", no_other = false) =
     addf(tl,
       "#ifdef $3\n  fprintf(f, \"const $1* = $2(%ld)\\n\", $3);\n#endif\n",
       n, t, name)
-  of "cint", "cshort", "InAddrScalar", "TSa_Family":
+  of "cint", "cshort", "TSa_Family":
     addf(tl,
       "#ifdef $3\n  fprintf(f, \"const $1* = $2(%d)\\n\", $3);\n#endif\n",
       n, t, name)
+  of "InAddrScalar":
+    addf(tl,
+      "#ifdef $3\n  fprintf(f, \"const $1* = $2(%u)\\n\", $3);\n#endif\n",
+      n, t, name)
   else:
     addf(tl,
       "#ifdef $3\n  fprintf(f, \"const $1* = cast[$2](%d)\\n\", $3);\n#endif\n",
@@ -228,6 +248,7 @@ v("EXDEV")
 
 header("<fcntl.h>")
 v("F_DUPFD")
+v("F_DUPFD_CLOEXEC")
 v("F_GETFD")
 v("F_SETFD")
 v("F_GETFL")
@@ -254,6 +275,11 @@ v("O_ACCMODE")
 v("O_RDONLY")
 v("O_RDWR")
 v("O_WRONLY")
+v("O_CLOEXEC")
+v("O_DIRECT")
+v("O_PATH")
+v("O_NOATIME")
+v("O_TMPFILE")
 v("POSIX_FADV_NORMAL")
 v("POSIX_FADV_SEQUENTIAL")
 v("POSIX_FADV_RANDOM")
@@ -431,6 +457,7 @@ header("<netinet/in.h>")
 v("IPPROTO_IP")
 v("IPPROTO_IPV6")
 v("IPPROTO_ICMP")
+v("IPPROTO_ICMPV6")
 v("IPPROTO_RAW")
 v("IPPROTO_TCP")
 v("IPPROTO_UDP")
@@ -567,6 +594,9 @@ v("PROT_READ")
 v("PROT_WRITE")
 v("PROT_EXEC")
 v("PROT_NONE")
+v("MAP_ANONYMOUS")
+v("MAP_FIXED_NOREPLACE")
+v("MAP_NORESERVE")
 v("MAP_SHARED")
 v("MAP_PRIVATE")
 v("MAP_FIXED")
@@ -588,6 +618,7 @@ v("MAP_POPULATE", no_other = true)
 
 header("<sys/resource.h>")
 v("RLIMIT_NOFILE")
+v("RLIMIT_STACK")
 
 header("<sys/select.h>")
 v("FD_SETSIZE")
@@ -599,6 +630,7 @@ v("MSG_EOR")
 v("MSG_OOB")
 v("SCM_RIGHTS")
 v("SO_ACCEPTCONN")
+v("SO_BINDTODEVICE")
 v("SO_BROADCAST")
 v("SO_DEBUG")
 v("SO_DONTROUTE")
@@ -618,6 +650,7 @@ v("SOCK_DGRAM")
 v("SOCK_RAW")
 v("SOCK_SEQPACKET")
 v("SOCK_STREAM")
+v("SOCK_CLOEXEC", no_other = true)
 v("SOL_SOCKET")
 v("SOMAXCONN")
 v("SO_REUSEPORT", no_other = true)
@@ -625,10 +658,10 @@ v("MSG_NOSIGNAL", no_other = true)
 v("MSG_PEEK")
 v("MSG_TRUNC")
 v("MSG_WAITALL")
-v("AF_INET", "TSa_Family")
-v("AF_INET6", "TSa_Family")
-v("AF_UNIX", "TSa_Family")
-v("AF_UNSPEC", "TSa_Family")
+v("AF_INET")
+v("AF_INET6")
+v("AF_UNIX")
+v("AF_UNSPEC")
 v("SHUT_RD")
 v("SHUT_RDWR")
 v("SHUT_WR")
@@ -795,7 +828,7 @@ v("_SC_MQ_OPEN_MAX")
 v("_SC_MQ_PRIO_MAX")
 v("_SC_NGROUPS_MAX")
 v("_SC_OPEN_MAX")
-v("_SC_PAGE_SIZE")
+v("_SC_PAGESIZE") # Synonym for _SC_PAGE_SIZE
 v("_SC_PRIORITIZED_IO")
 v("_SC_PRIORITY_SCHEDULING")
 v("_SC_RAW_SOCKETS")