win32-open3 0.2.8 → 0.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/CHANGES CHANGED
@@ -1,10 +1,15 @@
1
- == 0.2.8 - 27-Feb-2008
1
+ == 0.2.9 - 8-Mar-2009
2
+ * Fixed a bug within an internal function that could cause an exception.
3
+ Thanks go to Ross Bunker for the spot and patch.
4
+ * Fixed the release dates for 0.2.7 and 0.2.8 (2009, not 2008).
5
+
6
+ == 0.2.8 - 27-Feb-2009
2
7
  * Fixed a potential bug where nil might be returned instead of an actual
3
8
  Process::Status object. Thanks go to Benny Bach for the spot.
4
9
  * The 'test' Rake task now runs the 'clean' task after the fact.
5
10
  * Some updates to the README about precompiled binaries.
6
11
 
7
- == 0.2.7 - 11-Jan-2008
12
+ == 0.2.7 - 11-Jan-2009
8
13
  * Fixed a bug that could cause exitstatus to return bogus information. Thanks
9
14
  go to Roman Zawada for the spot.
10
15
  * Added a 'build_binary_gem' Rake task.
@@ -0,0 +1,86 @@
1
+ require 'rake'
2
+ require 'rake/clean'
3
+ require 'rake/testtask'
4
+ require 'rbconfig'
5
+ include Config
6
+
7
+ desc 'Install the win32-open3 library'
8
+ task :install => [:build] do
9
+ Dir.chdir('ext'){
10
+ sh 'nmake install'
11
+ }
12
+ end
13
+
14
+ desc 'Install the win32-open3 library as a gem'
15
+ task :install_gem do
16
+ ruby 'win32-open3.gemspec'
17
+ file = Dir["*.gem"].first
18
+ sh "gem install #{file}"
19
+ end
20
+
21
+ desc "Clean any build files for win32-open3"
22
+ task :clean do
23
+ Dir.chdir('ext') do
24
+ if File.exists?('open3.so') || File.exists?('win32/open3.so')
25
+ sh 'nmake distclean'
26
+ rm 'win32/open3.so' if File.exists?('win32/open3.so')
27
+ end
28
+ end
29
+ end
30
+
31
+ desc "Build win32-open3 (but don't install it)"
32
+ task :build => [:clean] do
33
+ Dir.chdir('ext') do
34
+ ruby 'extconf.rb'
35
+ sh 'nmake'
36
+ mv 'open3.so', 'win32' # For the test suite
37
+ end
38
+ end
39
+
40
+ desc "Run the sample program"
41
+ task :example => [:build] do |t|
42
+ Dir.chdir('examples'){
43
+ sh 'ruby -I../ext open3_test.rb'
44
+ }
45
+ end
46
+
47
+ desc "Build a binary gem"
48
+ task :build_binary_gem => [:build] do
49
+ mkdir_p 'lib/win32'
50
+ mv 'ext/win32/open3.so', 'lib/win32'
51
+
52
+ task :build_binary_gem => [:clean]
53
+
54
+ spec = Gem::Specification.new do |gem|
55
+ gem.name = "win32-open3"
56
+ gem.version = "0.2.9"
57
+ gem.authors = ["Park Heesob", "Daniel Berger"]
58
+ gem.email = "djberg96@gmail.com"
59
+ gem.homepage = "http://www.rubyforge.org/projects/win32utils"
60
+ gem.rubyforge_project = "win32utils"
61
+ gem.platform = Gem::Platform::CURRENT
62
+ gem.summary = 'Provides an Open3.popen3 implementation for MS Windows'
63
+ gem.description = 'Provides an Open3.popen3 implementation for MS Windows'
64
+ gem.has_rdoc = true
65
+ gem.test_files = Dir['test/test*']
66
+ files = Dir["lib/win32/open3.so"] + Dir["test/*"]
67
+ files.delete_if{ |f| f.include?('CVS') }
68
+ gem.files = files
69
+ gem.extra_rdoc_files = ['README', 'CHANGES', 'MANIFEST', 'ext/win32/open3.c']
70
+ gem.rubyforge_project = 'win32utils'
71
+ gem.required_ruby_version = '>= 1.8.2'
72
+ end
73
+
74
+ Gem::Builder.new(spec).build
75
+ end
76
+
77
+ Rake::TestTask.new('test') do |test|
78
+ task :test => [:build]
79
+ test.libs << 'ext'
80
+ test.warning = true
81
+ test.verbose = true
82
+ end
83
+
84
+ task :test do
85
+ Rake.application[:clean].execute
86
+ end
@@ -0,0 +1,34 @@
1
+ ##############################################################################
2
+ # win32_open3_example.rb
3
+ #
4
+ # Test script for the win32-open3 library. You should run this via the
5
+ # 'rake example' Rakefile task.
6
+ #
7
+ # Modify as you see fit.
8
+ ##############################################################################
9
+ require 'win32/open3'
10
+
11
+ puts "VERSION: " + Open3::WIN32_OPEN3_VERSION
12
+
13
+ cmd1 = 'ver' # valid
14
+ cmd2 = 'verb' # invalid
15
+ cmd3 = "ruby -e 'exit 1'" # valid, with explicit exit status
16
+
17
+ # Try each command as you like...
18
+ Open3.popen3(cmd3){ |io_in, io_out, io_err|
19
+ error = io_err.read
20
+ if error && error.length > 0
21
+ puts 'Error: ' + error
22
+ break
23
+ else
24
+ output = io_out.read
25
+ puts 'Output: ' + output if output
26
+ end
27
+ }
28
+
29
+ p $?.class
30
+ p $? >> 8
31
+ p $?.stopped?
32
+ p $?.exited?
33
+ p $?.exitstatus
34
+ p $?.pid
@@ -0,0 +1,181 @@
1
+
2
+ SHELL = /bin/sh
3
+
4
+ #### Start of system configuration section. ####
5
+
6
+ srcdir = win32
7
+ topdir = C:/Ruby/lib/ruby/1.8/i386-mswin32
8
+ hdrdir = $(topdir)
9
+ VPATH = $(srcdir);$(topdir);$(hdrdir)
10
+
11
+ DESTDIR = C:
12
+ prefix = $(DESTDIR)/Ruby
13
+ exec_prefix = $(prefix)
14
+ sitedir = $(prefix)/lib/ruby/site_ruby
15
+ rubylibdir = $(libdir)/ruby/$(ruby_version)
16
+ archdir = $(rubylibdir)/$(arch)
17
+ sbindir = $(exec_prefix)/sbin
18
+ datadir = $(prefix)/share
19
+ includedir = $(prefix)/include
20
+ infodir = $(prefix)/info
21
+ sysconfdir = $(prefix)/etc
22
+ mandir = $(prefix)/man
23
+ libdir = $(exec_prefix)/lib
24
+ sharedstatedir = $(DESTDIR)/etc
25
+ oldincludedir = $(DESTDIR)/usr/include
26
+ sitearchdir = $(sitelibdir)/$(sitearch)
27
+ localstatedir = $(DESTDIR)/var
28
+ bindir = $(exec_prefix)/bin
29
+ sitelibdir = $(sitedir)/$(ruby_version)
30
+ libexecdir = $(exec_prefix)/libexec
31
+
32
+ CC = cl -nologo
33
+ LIBRUBY = $(RUBY_SO_NAME).lib
34
+ LIBRUBY_A = $(RUBY_SO_NAME)-static.lib
35
+ LIBRUBYARG_SHARED = $(LIBRUBY)
36
+ LIBRUBYARG_STATIC = $(LIBRUBY_A)
37
+
38
+ RUBY_EXTCONF_H =
39
+ CFLAGS = -MD -Zi -O2b2xg- -G6
40
+ INCFLAGS = -I. -I$(topdir) -I$(hdrdir) -I$(srcdir)
41
+ DEFS =
42
+ CPPFLAGS = -DHAVE_TYPE_RB_PID_T
43
+ CXXFLAGS = $(CFLAGS)
44
+ DLDFLAGS = -link -incremental:no -debug -opt:ref -opt:icf -dll $(LIBPATH) -def:$(DEFFILE) -implib:$(*F:.so=)-$(arch).lib -pdb:$(*F:.so=)-$(arch).pdb
45
+ LDSHARED = cl -nologo -LD
46
+ AR = lib -nologo
47
+ EXEEXT = .exe
48
+
49
+ RUBY_INSTALL_NAME = ruby
50
+ RUBY_SO_NAME = msvcrt-ruby18
51
+ arch = i386-mswin32
52
+ sitearch = i386-msvcrt
53
+ ruby_version = 1.8
54
+ ruby = C:/Ruby/bin/ruby
55
+ RUBY = $(ruby:/=\)
56
+ RM = $(RUBY) -run -e rm -- -f
57
+ MAKEDIRS = @$(RUBY) -run -e mkdir -- -p
58
+ INSTALL = @$(RUBY) -run -e install -- -vp
59
+ INSTALL_PROG = $(INSTALL) -m 0755
60
+ INSTALL_DATA = $(INSTALL) -m 0644
61
+ COPY = copy > nul
62
+
63
+ #### End of system configuration section. ####
64
+
65
+ preload =
66
+
67
+ libpath = . $(libdir)
68
+ LIBPATH = -libpath:"." -libpath:"$(libdir)"
69
+ DEFFILE = $(TARGET)-$(arch).def
70
+
71
+ CLEANFILES = mkmf.log
72
+ DISTCLEANFILES = vc*.pdb $(DEFFILE)
73
+
74
+ extout =
75
+ extout_prefix =
76
+ target_prefix = /win32
77
+ LOCAL_LIBS =
78
+ LIBS = $(LIBRUBYARG_SHARED) oldnames.lib user32.lib advapi32.lib shell32.lib ws2_32.lib
79
+ SRCS = open3.c
80
+ OBJS = open3.obj
81
+ TARGET = open3
82
+ DLLIB = $(TARGET).so
83
+ EXTSTATIC =
84
+ STATIC_LIB =
85
+
86
+ RUBYCOMMONDIR = $(sitedir)$(target_prefix)
87
+ RUBYLIBDIR = $(sitelibdir)$(target_prefix)
88
+ RUBYARCHDIR = $(sitearchdir)$(target_prefix)
89
+
90
+ TARGET_SO = $(DLLIB)
91
+ CLEANLIBS = $(TARGET).so $(TARGET).il? $(TARGET).tds $(TARGET).map
92
+ CLEANOBJS = *.obj *.lib *.s[ol] *.pdb *.exp *.bak
93
+
94
+ all: $(DLLIB)
95
+ static: $(STATIC_LIB)
96
+
97
+ clean:
98
+ @-$(RM) $(CLEANLIBS:/=\) $(CLEANOBJS:/=\) $(CLEANFILES:/=\)
99
+
100
+ distclean: clean
101
+ @-$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log
102
+ @-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES:/=\)
103
+
104
+ realclean: distclean
105
+ install: install-so install-rb
106
+
107
+ install-so: $(RUBYARCHDIR)
108
+ install-so: $(RUBYARCHDIR)/$(DLLIB)
109
+ $(RUBYARCHDIR)/$(DLLIB): $(DLLIB)
110
+ $(INSTALL_PROG) $(DLLIB:/=\) $(RUBYARCHDIR:/=\)
111
+ install-rb: pre-install-rb install-rb-default
112
+ install-rb-default: pre-install-rb-default
113
+ pre-install-rb: Makefile
114
+ pre-install-rb-default: Makefile
115
+ $(RUBYARCHDIR):
116
+ $(MAKEDIRS) $@
117
+
118
+ site-install: site-install-so site-install-rb
119
+ site-install-so: install-so
120
+ site-install-rb: install-rb
121
+
122
+ .SUFFIXES: .c .m .cc .cxx .cpp .obj
123
+
124
+ {$(srcdir)}.cc{}.obj:
125
+ $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/)
126
+
127
+ {$(topdir)}.cc{}.obj:
128
+ $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/)
129
+
130
+ {$(hdrdir)}.cc{}.obj:
131
+ $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/)
132
+
133
+ .cc.obj:
134
+ $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/)
135
+
136
+ {$(srcdir)}.cxx{}.obj:
137
+ $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/)
138
+
139
+ {$(topdir)}.cxx{}.obj:
140
+ $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/)
141
+
142
+ {$(hdrdir)}.cxx{}.obj:
143
+ $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/)
144
+
145
+ .cxx.obj:
146
+ $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/)
147
+
148
+ {$(srcdir)}.cpp{}.obj:
149
+ $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/)
150
+
151
+ {$(topdir)}.cpp{}.obj:
152
+ $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/)
153
+
154
+ {$(hdrdir)}.cpp{}.obj:
155
+ $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/)
156
+
157
+ .cpp.obj:
158
+ $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/)
159
+
160
+ {$(srcdir)}.c{}.obj:
161
+ $(CC) $(INCFLAGS) $(CFLAGS) $(CPPFLAGS) -c -Tc$(<:\=/)
162
+
163
+ {$(topdir)}.c{}.obj:
164
+ $(CC) $(INCFLAGS) $(CFLAGS) $(CPPFLAGS) -c -Tc$(<:\=/)
165
+
166
+ {$(hdrdir)}.c{}.obj:
167
+ $(CC) $(INCFLAGS) $(CFLAGS) $(CPPFLAGS) -c -Tc$(<:\=/)
168
+
169
+ .c.obj:
170
+ $(CC) $(INCFLAGS) $(CFLAGS) $(CPPFLAGS) -c -Tc$(<:\=/)
171
+
172
+ $(DLLIB): $(DEFFILE) $(OBJS)
173
+ @-$(RM) $@
174
+ $(LDSHARED) -Fe$(@) $(OBJS) $(LIBS) $(LOCAL_LIBS) $(DLDFLAGS)
175
+
176
+
177
+
178
+ $(DEFFILE):
179
+ $(RUBY) -e "puts 'EXPORTS', 'Init_$(TARGET)'" > $@
180
+
181
+ $(OBJS): {.;$(srcdir);$(topdir);$(hdrdir)}ruby.h {.;$(srcdir);$(topdir);$(hdrdir)}defines.h
@@ -0,0 +1,19 @@
1
+ have_type: checking for rb_pid_t in ruby.h... -------------------- yes
2
+
3
+ "cl -nologo -I. -IC:/Ruby/lib/ruby/1.8/i386-mswin32 -I. -MD -Zi -O2b2xg- -G6 -c conftest.c"
4
+ conftest.c
5
+ checked program was:
6
+ /* begin */
7
+ 1: #define WIN32_LEAN_AND_MEAN
8
+ 2: #define WIN32
9
+ 3: #include <winsock2.h>
10
+ 4: #include <windows.h>
11
+ 5: #include <ruby.h>
12
+ 6:
13
+ 7: /*top*/
14
+ 8: typedef rb_pid_t conftest_type;
15
+ 9: static conftest_type conftestval[sizeof(conftest_type)?1:-1];
16
+ /* end */
17
+
18
+ --------------------
19
+
@@ -0,0 +1,2 @@
1
+ EXPORTS
2
+ Init_open3
Binary file
Binary file
@@ -74,7 +74,7 @@ static char* rb_io_modenum_mode(int flags, char* mode){
74
74
  }
75
75
  else{
76
76
  mode[1] = 'b'; mode[2] = '\0';
77
- }
77
+ }
78
78
  }
79
79
  #endif
80
80
  return mode;
@@ -96,15 +96,15 @@ static VALUE io_close(VALUE val) {
96
96
  * call-seq:
97
97
  * Open3.popen3(cmd, mode='t', show=false)
98
98
  * Open3.popen3(cmd, mode='t', show=false){ |io_in, io_out, io_err| ... }
99
- *
99
+ *
100
100
  * Executes 'command', returning an array of three IO handles representing
101
101
  * STDIN, STDOUT and STDERR, respectively. In block form these IO handles
102
102
  * are yielded back to the block and automatically closed at the end of the
103
103
  * block.
104
- *
104
+ *
105
105
  * You may optionally pass a mode flag of 't' (text, the default) or 'b'
106
106
  * (binary) to this method.
107
- *
107
+ *
108
108
  * If the 'show' variable is set to true, then a console window is shown.
109
109
  */
110
110
  static VALUE win32_popen3(int argc, VALUE *argv, VALUE klass)
@@ -133,13 +133,13 @@ static VALUE win32_popen3(int argc, VALUE *argv, VALUE klass)
133
133
  tm = _O_BINARY;
134
134
 
135
135
  v_port = ruby_popen(StringValuePtr(v_name), tm, v_show_window);
136
-
136
+
137
137
  // Ensure handles are closed in block form
138
138
  if(rb_block_given_p()){
139
139
  rb_ensure(rb_yield_splat, v_port, io_close, v_port);
140
140
  return win32_last_status;
141
141
  }
142
-
142
+
143
143
  return v_port;
144
144
  }
145
145
 
@@ -168,7 +168,7 @@ static BOOL RubyCreateProcess(char *cmdstring, HANDLE hStdin, HANDLE hStdout,
168
168
 
169
169
  ++comshell;
170
170
 
171
- // Windows 95, 98 and ME are not supported
171
+ // Windows 95, 98 and ME are not supported
172
172
  if(GetVersion() < 0x80000000 && _stricmp(comshell, "command.com") != 0){
173
173
  x = i + strlen(s3) + strlen(cmdstring) + 1;
174
174
  s2 = ALLOCA_N(char, x);
@@ -246,7 +246,7 @@ static BOOL RubyCreateProcess(char *cmdstring, HANDLE hStdin, HANDLE hStdout,
246
246
  rb_raise(rb_eRuntimeError, "CreateProcess() failed: %s",
247
247
  ErrorDescription(GetLastError())
248
248
  );
249
-
249
+
250
250
  return FALSE;
251
251
  }
252
252
 
@@ -281,9 +281,9 @@ static void win32_pipe_finalize(OpenFile *file, int noraise)
281
281
 
282
282
  if(pid_handle != NULL){
283
283
  GetExitCodeProcess(pid_handle, &status);
284
- CloseHandle(pid_handle);
285
284
 
286
285
  if(status != STILL_ACTIVE){
286
+ CloseHandle(pid_handle);
287
287
  pid_handle = NULL;
288
288
  win32_set_last_status(status, file->pid);
289
289
  }
@@ -522,7 +522,7 @@ static VALUE ruby_popen(char *cmdstring, int mode, VALUE v_show_window)
522
522
  ErrorDescription(GetLastError())
523
523
  );
524
524
  }
525
-
525
+
526
526
  return port;
527
527
  }
528
528
 
@@ -533,15 +533,15 @@ static VALUE ruby_popen(char *cmdstring, int mode, VALUE v_show_window)
533
533
  void Init_open3()
534
534
  {
535
535
  VALUE mOpen3 = rb_define_module("Open3");
536
-
536
+
537
537
  VALUE mOpen4 = rb_define_module("Open4");
538
538
 
539
539
  rb_define_module_function(mOpen3, "popen3", win32_popen3, -1);
540
540
  rb_define_module_function(mOpen4, "popen4", win32_popen3, -1);
541
-
542
- /* 0.2.8: The version of this library */
541
+
542
+ /* 0.2.9: The version of this library */
543
543
  rb_define_const(mOpen3, "WIN32_OPEN3_VERSION", rb_str_new2(WIN32_OPEN3_VERSION));
544
-
545
- /* 0.2.8: The version of this library */
544
+
545
+ /* 0.2.9: The version of this library */
546
546
  rb_define_const(mOpen4, "WIN32_OPEN3_VERSION", rb_str_new2(WIN32_OPEN3_VERSION));
547
547
  }
Binary file
@@ -0,0 +1,28 @@
1
+ require 'rubygems'
2
+
3
+ spec = Gem::Specification.new do |gem|
4
+ gem.name = 'win32-open3'
5
+ gem.version = '0.2.9'
6
+ gem.authors = ['Park Heesob', 'Daniel J. Berger']
7
+ gem.email = 'djberg96@gmail.com'
8
+ gem.homepage = 'http://www.rubyforge.org/projects/win32utils'
9
+ gem.platform = Gem::Platform::RUBY
10
+ gem.summary = 'Provides an Open3.popen3 implementation for MS Windows'
11
+ gem.description = 'Provides an Open3.popen3 implementation for MS Windows'
12
+ gem.test_file = 'test/test_win32_open3.rb'
13
+ gem.has_rdoc = true
14
+ gem.extra_rdoc_files = ['CHANGES', 'README', 'MANIFEST', 'doc/open3.txt', 'ext/win32/open3.c']
15
+ gem.rubyforge_project = 'win32utils'
16
+ gem.required_ruby_version = '>= 1.8.2'
17
+
18
+ files = Dir["**/*"]
19
+ files.delete_if{ |item| item.include?('CVS') }
20
+
21
+ gem.extensions = ['ext/extconf.rb']
22
+ gem.files = files
23
+ end
24
+
25
+ if $PROGRAM_NAME == __FILE__
26
+ Gem.manage_gems if Gem::RubyGemsVersion.to_f < 1.0
27
+ Gem::Builder.new(spec).build
28
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: win32-open3
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.8
4
+ version: 0.2.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Park Heesob
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-02-27 00:00:00 -07:00
13
+ date: 2009-03-07 23:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies: []
16
16
 
@@ -27,15 +27,33 @@ extra_rdoc_files:
27
27
  - doc/open3.txt
28
28
  - ext/win32/open3.c
29
29
  files:
30
+ - CHANGES
31
+ - doc
30
32
  - doc/open3.txt
31
- - test/test_win32_open3.rb
33
+ - examples
34
+ - examples/win32_open3_example.rb
35
+ - ext
32
36
  - ext/extconf.rb
37
+ - ext/Makefile
38
+ - ext/mkmf.log
39
+ - ext/open3-i386-mswin32.def
40
+ - ext/open3-i386-mswin32.exp
41
+ - ext/open3-i386-mswin32.lib
42
+ - ext/open3-i386-mswin32.pdb
43
+ - ext/open3.obj
44
+ - ext/vc60.pdb
33
45
  - ext/win32
34
46
  - ext/win32/open3.c
35
47
  - ext/win32/open3.h
36
- - CHANGES
37
- - README
48
+ - lib
49
+ - lib/win32
50
+ - lib/win32/open3.so
38
51
  - MANIFEST
52
+ - Rakefile
53
+ - README
54
+ - test
55
+ - test/test_win32_open3.rb
56
+ - win32-open3.gemspec
39
57
  has_rdoc: true
40
58
  homepage: http://www.rubyforge.org/projects/win32utils
41
59
  post_install_message:
@@ -58,7 +76,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
58
76
  requirements: []
59
77
 
60
78
  rubyforge_project: win32utils
61
- rubygems_version: 1.3.0
79
+ rubygems_version: 1.3.1
62
80
  signing_key:
63
81
  specification_version: 2
64
82
  summary: Provides an Open3.popen3 implementation for MS Windows