Add netbsd as a platform Change-Id: I752029d3ce3bc12b5bce95ddd202fb40517b86c7 Reviewed-on: https://gn-review.googlesource.com/c/gn/+/9700 Reviewed-by: Brett Wilson <brettw@chromium.org> Commit-Queue: Brett Wilson <brettw@chromium.org>
diff --git a/build/gen.py b/build/gen.py index 0659545..486354b 100755 --- a/build/gen.py +++ b/build/gen.py
@@ -47,6 +47,8 @@ self._platform = 'fuchsia' elif self._platform.startswith('freebsd'): self._platform = 'freebsd' + elif self._platform.startswith('netbsd'): + self._platform = 'netbsd' elif self._platform.startswith('openbsd'): self._platform = 'openbsd' elif self._platform.startswith('haiku'): @@ -56,7 +58,7 @@ @staticmethod def known_platforms(): - return ['linux', 'darwin', 'mingw', 'msys', 'msvc', 'aix', 'fuchsia', 'freebsd', 'openbsd', 'haiku', 'solaris'] + return ['linux', 'darwin', 'mingw', 'msys', 'msvc', 'aix', 'fuchsia', 'freebsd', 'netbsd', 'openbsd', 'haiku', 'solaris'] def platform(self): return self._platform @@ -89,7 +91,7 @@ return self._platform == 'solaris' def is_posix(self): - return self._platform in ['linux', 'freebsd', 'darwin', 'aix', 'openbsd', 'haiku', 'solaris', 'msys'] + return self._platform in ['linux', 'freebsd', 'darwin', 'aix', 'openbsd', 'haiku', 'solaris', 'msys', 'netbsd'] def main(argv): @@ -215,6 +217,7 @@ 'openbsd': 'build_openbsd.ninja.template', 'haiku': 'build_haiku.ninja.template', 'solaris': 'build_linux.ninja.template', + 'netbsd': 'build_linux.ninja.template', }[platform.platform()]) with open(template_filename) as f:
diff --git a/src/base/files/file_util.h b/src/base/files/file_util.h index e2f1197..b44129d 100644 --- a/src/base/files/file_util.h +++ b/src/base/files/file_util.h
@@ -325,7 +325,7 @@ // the directory |path|, in the number of FilePath::CharType, or -1 on failure. int GetMaximumPathComponentLength(const base::FilePath& path); -#if defined(OS_LINUX) || defined(OS_AIX) +#if defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD) // Broad categories of file systems as returned by statfs() on Linux. enum FileSystemType { FILE_SYSTEM_UNKNOWN, // statfs failed.
diff --git a/src/base/files/file_util_posix.cc b/src/base/files/file_util_posix.cc index 79c9428..1eef8e8 100644 --- a/src/base/files/file_util_posix.cc +++ b/src/base/files/file_util_posix.cc
@@ -210,7 +210,7 @@ } bool CreateLocalNonBlockingPipe(int fds[2]) { -#if defined(OS_LINUX) +#if defined(OS_LINUX) || defined(OS_BSD) return pipe2(fds, O_CLOEXEC | O_NONBLOCK) == 0; #else int raw_fds[2];
diff --git a/src/base/files/scoped_file.cc b/src/base/files/scoped_file.cc index 11afedd..1b8733e 100644 --- a/src/base/files/scoped_file.cc +++ b/src/base/files/scoped_file.cc
@@ -31,7 +31,7 @@ int ret = IGNORE_EINTR(close(fd)); #if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA) || \ - defined(OS_ANDROID) + defined(OS_ANDROID) || defined(OS_BSD) // NB: Some file descriptors can return errors from close() e.g. network // filesystems such as NFS and Linux input devices. On Linux, macOS, and // Fuchsia's POSIX layer, errors from close other than EBADF do not indicate
diff --git a/src/gn/args.cc b/src/gn/args.cc index 392c0c9..e59b034 100644 --- a/src/gn/args.cc +++ b/src/gn/args.cc
@@ -318,6 +318,8 @@ os = "haiku"; #elif defined(OS_SOLARIS) os = "solaris"; +#elif defined(OS_NETBSD) + os = "netbsd"; #else #error Unknown OS type. #endif
diff --git a/src/util/exe_path.cc b/src/util/exe_path.cc index 0a91bcc..b67318c 100644 --- a/src/util/exe_path.cc +++ b/src/util/exe_path.cc
@@ -15,7 +15,7 @@ #include <windows.h> #include "base/win/win_util.h" -#elif defined(OS_FREEBSD) +#elif defined(OS_FREEBSD) || defined(OS_NETBSD) #include <limits.h> #include <sys/sysctl.h> #include <sys/types.h> @@ -69,6 +69,18 @@ return base::FilePath(buf); } +#elif defined(OS_NETBSD) + +base::FilePath GetExePath() { + int mib[] = {CTL_KERN, KERN_PROC_ARGS, getpid(), KERN_PROC_PATHNAME}; + char buf[PATH_MAX]; + size_t buf_size = PATH_MAX; + if (sysctl(mib, 4, buf, &buf_size, nullptr, 0) == -1) { + return base::FilePath(); + } + return base::FilePath(buf); +} + #elif defined(OS_HAIKU) base::FilePath GetExePath() {