Files
swift-mirror/stdlib/private/SwiftPrivateLibcExtras/Subprocess.c
Saleem Abdulrasool a05fd17b64 Platform: port to msvcrt, add msvcrt module
This adds the swiftMSVCRT module which is similar in spirit to swiftGlibc and
swiftDarwin, exposing the Microsoft C Runtime library to swift.  Furthermore,
disable pieces of the standard library which are not immediately trivially
portable to Windows.  A lot of this functionality can still be implemented and
exposed to the user, however, this is the quickest means to a PoC for native
windows support.

As a temporary solution, add a -DCYGWIN flag to indicate that we are building
for the cygwin windows target.  This allows us to continue supporting the cygwin
environment whilst making the windows port work natively against the windows
environment (msvc).  Eventually, that will hopefully be replaced with an
environment check in swift.
2016-07-12 17:31:06 -07:00

70 lines
2.4 KiB
C

//===--- Subprocess.c - Subprocess Stubs ----------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
// posix_spawn is not available on Android or Windows (MSVC).
#if !defined(__ANDROID__) && (!defined(_WIN32) || defined(__CYGWIN__))
#include "swift/Runtime/Config.h"
// NOTE: preprocess away the availability information to allow use of
// unsupported APIs on certain targets (i.e. tvOS)
#define availability(...)
#include <spawn.h>
#include <sys/types.h>
#if defined(__APPLE__)
// NOTE: forward declare this rather than including crt_externs.h as not all
// SDKs provide it
extern char ***_NSGetEnviron(void);
#endif // defined(__APPLE__)
SWIFT_CC(swift)
int swift_posix_spawn_file_actions_init(
posix_spawn_file_actions_t *file_actions) {
return posix_spawn_file_actions_init(file_actions);
}
SWIFT_CC(swift)
int swift_posix_spawn_file_actions_destroy(
posix_spawn_file_actions_t *file_actions) {
return posix_spawn_file_actions_destroy(file_actions);
}
SWIFT_CC(swift)
int swift_posix_spawn_file_actions_addclose(
posix_spawn_file_actions_t *file_actions, int filedes) {
return posix_spawn_file_actions_addclose(file_actions, filedes);
}
SWIFT_CC(swift)
int swift_posix_spawn_file_actions_adddup2(
posix_spawn_file_actions_t *file_actions, int filedes, int newfiledes) {
return posix_spawn_file_actions_adddup2(file_actions, filedes, newfiledes);
}
SWIFT_CC(swift)
int swift_posix_spawn(pid_t *__restrict pid, const char * __restrict path,
const posix_spawn_file_actions_t *file_actions,
const posix_spawnattr_t *__restrict attrp,
char *const argv[__restrict],
char *const envp[__restrict]) {
return posix_spawn(pid, path, file_actions, attrp, argv, envp);
}
#if defined(__APPLE__)
SWIFT_CC(swift)
char ***swift_SwiftPrivateLibcExtras_NSGetEnviron(void) {
return _NSGetEnviron();
}
#endif // defined(__APPLE__)
#endif // !defined(__ANDROID__) && (!defined(_WIN32) || defined(__CGYWIN__))