Dropped the macros
BOOST_PROCESS_WIN32_API as Boost.System defines the macros
Dropped exception class boost::process::not_found_error which was only thrown by
find_executable_in_path and replaced it with
Updated and extended the documentation (e.g. added documentation to functions which were not yet documented).
Fixed various bugs including problems with code calling Unicode- or ANSI-versions of Windows API functions.
On Windows named pipes are used if the macro
BOOST_PROCESS_WINDOWS_USE_NAMED_PIPE is defined. As only named pipes support asynchronous I/O on Windows this macro must be defined if Boost.Process should be used together with Asio.
Relicensed the code under the Boost Software License 1.0 only. The first version was available under both this license and the MIT one only to comply with Summer of Code guidelines.
The POSIX-specific bits of a child's exit status were split from the
status class into a new
children constructors were made private to prevent accidental construction by the user.
Fixed duplicate symbols when linking multiple compilation units that use the library.
Fixed build with Visual C++ compilers older than 8.0 that do not provide
strcpy_s and similar safe functions.
Removed the command_line class. The user now specifies the executable path and its arguments separately, using any classes he wants (such as a standard string and a STL container). This removes some black-box magic.
Decoupled the launcher classes into context classes and free launch functions. For example, the configuration bits of the old launcher class are now part of
context while its
start method is now implemented as the
launch free function. The same goes for the POSIX and Windows launchers. This was done to cleanly separate the action of launching a process from the parameters describing its properties. As a side effect, a lot of useless getters and setters are gone.
environment class was refactored (much simplified) and made public because it is now exposed to the user through the new
forward_decls.hpp was removed. It is not clear it was any useful, and it could be flawed in concept. Will add later on again if there really is a need for it.
stream_behavior enumeration was converted to a class so that it can carry more information than a simple type. This is useful to be able to implement more complex stream behaviors. As a side effect, stream merging by the use of booleans or standalone data sets is now superseded by the new
environment_context base classes were added. These are mainly provided to simplify the code in the final Context implementations but may also come handy to the end user in case he is working on his own Context implementation.
posix_status classes were greatly simplified. Instead of providing lots of accessor functions they now just expose some constant members. This avoids the need for several preconditions and consistency checks because the interface makes incoherent situations impossible.
children classes were removed. The former was replaced by the
launch_pipeline convenience function and the
pipeline_entry class. The latter was superseded by a simple typedef and a generic
wait_children function that can be applied to any kind of collection of Child objects.
Made the processes be identified by a system-wide integer instead of a process-specific handle under Windows.
process class, an abstraction on top of
child that is able to represent any running process within the system. This was a requisite to introduce the
self class, whose instances allow access to the current process.
Added a way to force the termination of processes.
Initial public release. This is what was presented at the end of the program under which Boost.Process was developed: Google Summer of Code 2006.
This section contains a list of pending items in the library that should be addressed before it can be sent for a serious/formal review. Some of these are a simple matter of programming but others will require more consideration to decide the best way to solve them.
Improve integration with Asio for example to permit asynchronous notification of child process termination.
Make it possible to specify a timeout when waiting for child processes to terminate.
status' constructor private.
Add an interface to
self to modify the current environment.
child's streams so that
self can also provide a way to access the current process' standard streams.
Add a way (a win32_self class?) that allows the retrieval of a Windows HANDLE for the current process.
process class might conflict with the
process namespace. I like the names as they are, but maybe one of the two should be renamed or simply put a warning in the documentation explaining where the conflicts may arise. These happen in some compilers when giving both
using namespace boost::process and
using namespace boost.