Closed zhuowei closed 8 years ago
A Posix_spawn implementation from FreeBSD (modified to use fork instead of vfork (which is too sketchy)) worked fine.
Looks like the lack of random number generation is being caught in the unit test: test/1_stdlib/ReflectionHashing.swift aborts probably because of missing random.
Need to replace the existing getline, posix_spawn, and SunSoft libm stuff with either public domain or LLVM code - https://lists.swift.org/pipermail/swift-dev/Week-of-Mon-20151221/000547.html
I'd like to work on documenting a list of SwiftAndroid's dependencies, and which of those use incompatible licenses. I'd also like to consider sacrificing some dependencies/Swift features (see https://github.com/SwiftAndroid/swift/commit/1dde6bdfcda2332cda7365e3a3debfd5d80f5709 for an example) in favor of merging this fork upstream. What do you all think?
getline
from Android sourceposix_spawn
from FreeBSD libcstdlib/public/stubs/android_support/
execinfo.h
Is that right?
Is it possible to just tear out the FreeBSD I guess it isn't, since posix_spawn
implementation, and instead simply have that functionality unavailable on Android?stdlib/private/SwiftPrivateDarwinExtras/Subprocess.swift
and the test suite rely on it so heavily. Hmm...
That should be it. The test suite doesn't require a whole lot of functionality from posix_spawn - just redirect file descriptors, if I recall; it might be possible to just rewrite it
I'm looking at https://github.com/apple/swift/blob/e094e9f10ca4a63e195295e74dc852e5dd5a3234/lib/Basic/Unix/TaskQueue.inc#L133, and I bet we could do something similar for the unit tests--using posix_spawn
if available, and fork
if not.
posix_spawn
is more efficient on Darwin and Win32 (and fork
doesn't exist at all in mobile Darwin variants), so we'd prefer that posix_spawn
still be used when available.
@jckarter Absolutely. This will just be a fallback for platforms for which posix_spawn
is unavailable. :+1:
By the way, I notice swift/lib/Basic/Unix/TaskQueue.inc
uses a macro HAVE_POSIX_SPAWN
. I don't suppose you know of anything similar I can use in the Swift file swift/stdlib/private/SwiftPrivateDarwinExtras/Subprocess.swift
? For the time being I'm using #if os(Android)
.
This has mostly been taken care of upstream, through a combination of raising the minimum API level and implementing custom workarounds for StdlibUnittest. Still some room for improvement, though: https://bugs.swift.org/browse/SR-1746
Hopefully I can get around to doing this before someone tries to use this for crypto...