diff options
Diffstat (limited to 'tools/detect/detect.nim')
-rw-r--r-- | tools/detect/detect.nim | 57 |
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") |