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() {