@shitiandmw/node-pty 1.1.0-agent.0
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.
- package/LICENSE +69 -0
- package/README.md +170 -0
- package/binding.gyp +111 -0
- package/deps/.editorconfig +2 -0
- package/deps/winpty/.drone.yml +17 -0
- package/deps/winpty/.gitattributes +19 -0
- package/deps/winpty/LICENSE +21 -0
- package/deps/winpty/Makefile +166 -0
- package/deps/winpty/README.md +151 -0
- package/deps/winpty/RELEASES.md +280 -0
- package/deps/winpty/VERSION.txt +1 -0
- package/deps/winpty/configure +167 -0
- package/deps/winpty/misc/BufferResizeTests.cc +90 -0
- package/deps/winpty/misc/ChangeScreenBuffer.cc +53 -0
- package/deps/winpty/misc/ClearConsole.cc +72 -0
- package/deps/winpty/misc/ConinMode.cc +117 -0
- package/deps/winpty/misc/ConinMode.ps1 +116 -0
- package/deps/winpty/misc/ConoutMode.cc +113 -0
- package/deps/winpty/misc/DebugClient.py +42 -0
- package/deps/winpty/misc/DebugServer.py +63 -0
- package/deps/winpty/misc/DumpLines.py +5 -0
- package/deps/winpty/misc/EnableExtendedFlags.txt +46 -0
- package/deps/winpty/misc/Font-Report-June2016/CP437-Consolas.txt +528 -0
- package/deps/winpty/misc/Font-Report-June2016/CP437-Lucida.txt +633 -0
- package/deps/winpty/misc/Font-Report-June2016/CP932.txt +630 -0
- package/deps/winpty/misc/Font-Report-June2016/CP936.txt +630 -0
- package/deps/winpty/misc/Font-Report-June2016/CP949.txt +630 -0
- package/deps/winpty/misc/Font-Report-June2016/CP950.txt +630 -0
- package/deps/winpty/misc/Font-Report-June2016/MinimumWindowWidths.txt +16 -0
- package/deps/winpty/misc/Font-Report-June2016/Results.txt +4 -0
- package/deps/winpty/misc/Font-Report-June2016/Windows10SetFontBugginess.txt +144 -0
- package/deps/winpty/misc/FontSurvey.cc +100 -0
- package/deps/winpty/misc/FormatChar.h +21 -0
- package/deps/winpty/misc/FreezePerfTest.cc +62 -0
- package/deps/winpty/misc/GetCh.cc +20 -0
- package/deps/winpty/misc/GetConsolePos.cc +41 -0
- package/deps/winpty/misc/GetFont.cc +261 -0
- package/deps/winpty/misc/IdentifyConsoleWindow.ps1 +51 -0
- package/deps/winpty/misc/IsNewConsole.cc +87 -0
- package/deps/winpty/misc/MouseInputNotes.txt +90 -0
- package/deps/winpty/misc/MoveConsoleWindow.cc +34 -0
- package/deps/winpty/misc/Notes.txt +219 -0
- package/deps/winpty/misc/OSVersion.cc +27 -0
- package/deps/winpty/misc/ScreenBufferFreezeInactive.cc +101 -0
- package/deps/winpty/misc/ScreenBufferTest.cc +671 -0
- package/deps/winpty/misc/ScreenBufferTest2.cc +151 -0
- package/deps/winpty/misc/SelectAllTest.cc +45 -0
- package/deps/winpty/misc/SetBufferSize.cc +32 -0
- package/deps/winpty/misc/SetCursorPos.cc +10 -0
- package/deps/winpty/misc/SetFont.cc +145 -0
- package/deps/winpty/misc/SetWindowRect.cc +36 -0
- package/deps/winpty/misc/ShowArgv.cc +12 -0
- package/deps/winpty/misc/ShowConsoleInput.cc +40 -0
- package/deps/winpty/misc/Spew.py +5 -0
- package/deps/winpty/misc/TestUtil.cc +172 -0
- package/deps/winpty/misc/UnicodeDoubleWidthTest.cc +102 -0
- package/deps/winpty/misc/UnicodeWideTest1.cc +246 -0
- package/deps/winpty/misc/UnicodeWideTest2.cc +130 -0
- package/deps/winpty/misc/UnixEcho.cc +89 -0
- package/deps/winpty/misc/Utf16Echo.cc +46 -0
- package/deps/winpty/misc/VeryLargeRead.cc +122 -0
- package/deps/winpty/misc/VkEscapeTest.cc +56 -0
- package/deps/winpty/misc/Win10ResizeWhileFrozen.cc +52 -0
- package/deps/winpty/misc/Win10WrapTest1.cc +57 -0
- package/deps/winpty/misc/Win10WrapTest2.cc +30 -0
- package/deps/winpty/misc/Win32Echo1.cc +26 -0
- package/deps/winpty/misc/Win32Echo2.cc +19 -0
- package/deps/winpty/misc/Win32Test1.cc +46 -0
- package/deps/winpty/misc/Win32Test2.cc +70 -0
- package/deps/winpty/misc/Win32Test3.cc +78 -0
- package/deps/winpty/misc/Win32Write1.cc +44 -0
- package/deps/winpty/misc/WindowsBugCrashReader.cc +27 -0
- package/deps/winpty/misc/WriteConsole.cc +106 -0
- package/deps/winpty/misc/build32.sh +9 -0
- package/deps/winpty/misc/build64.sh +9 -0
- package/deps/winpty/misc/color-test.sh +212 -0
- package/deps/winpty/misc/font-notes.txt +300 -0
- package/deps/winpty/misc/winbug-15048.cc +201 -0
- package/deps/winpty/ship/build-pty4j-libpty.bat +36 -0
- package/deps/winpty/ship/common_ship.py +53 -0
- package/deps/winpty/ship/make_msvc_package.py +165 -0
- package/deps/winpty/ship/ship.py +108 -0
- package/deps/winpty/src/agent/Agent.cc +613 -0
- package/deps/winpty/src/agent/Agent.h +103 -0
- package/deps/winpty/src/agent/AgentCreateDesktop.cc +84 -0
- package/deps/winpty/src/agent/AgentCreateDesktop.h +28 -0
- package/deps/winpty/src/agent/ConsoleFont.cc +632 -0
- package/deps/winpty/src/agent/ConsoleFont.h +28 -0
- package/deps/winpty/src/agent/ConsoleInput.cc +852 -0
- package/deps/winpty/src/agent/ConsoleInput.h +109 -0
- package/deps/winpty/src/agent/ConsoleInputReencoding.cc +121 -0
- package/deps/winpty/src/agent/ConsoleInputReencoding.h +36 -0
- package/deps/winpty/src/agent/ConsoleLine.cc +152 -0
- package/deps/winpty/src/agent/ConsoleLine.h +41 -0
- package/deps/winpty/src/agent/Coord.h +87 -0
- package/deps/winpty/src/agent/DebugShowInput.cc +239 -0
- package/deps/winpty/src/agent/DebugShowInput.h +32 -0
- package/deps/winpty/src/agent/DefaultInputMap.cc +422 -0
- package/deps/winpty/src/agent/DefaultInputMap.h +28 -0
- package/deps/winpty/src/agent/DsrSender.h +30 -0
- package/deps/winpty/src/agent/EventLoop.cc +99 -0
- package/deps/winpty/src/agent/EventLoop.h +47 -0
- package/deps/winpty/src/agent/InputMap.cc +246 -0
- package/deps/winpty/src/agent/InputMap.h +114 -0
- package/deps/winpty/src/agent/LargeConsoleRead.cc +71 -0
- package/deps/winpty/src/agent/LargeConsoleRead.h +68 -0
- package/deps/winpty/src/agent/NamedPipe.cc +378 -0
- package/deps/winpty/src/agent/NamedPipe.h +125 -0
- package/deps/winpty/src/agent/Scraper.cc +699 -0
- package/deps/winpty/src/agent/Scraper.h +103 -0
- package/deps/winpty/src/agent/SimplePool.h +75 -0
- package/deps/winpty/src/agent/SmallRect.h +143 -0
- package/deps/winpty/src/agent/Terminal.cc +535 -0
- package/deps/winpty/src/agent/Terminal.h +69 -0
- package/deps/winpty/src/agent/UnicodeEncoding.h +157 -0
- package/deps/winpty/src/agent/UnicodeEncodingTest.cc +189 -0
- package/deps/winpty/src/agent/Win32Console.cc +107 -0
- package/deps/winpty/src/agent/Win32Console.h +67 -0
- package/deps/winpty/src/agent/Win32ConsoleBuffer.cc +193 -0
- package/deps/winpty/src/agent/Win32ConsoleBuffer.h +99 -0
- package/deps/winpty/src/agent/main.cc +114 -0
- package/deps/winpty/src/agent/subdir.mk +61 -0
- package/deps/winpty/src/configurations.gypi +60 -0
- package/deps/winpty/src/debugserver/DebugServer.cc +117 -0
- package/deps/winpty/src/debugserver/subdir.mk +41 -0
- package/deps/winpty/src/include/winpty.h +242 -0
- package/deps/winpty/src/include/winpty_constants.h +131 -0
- package/deps/winpty/src/libwinpty/AgentLocation.cc +75 -0
- package/deps/winpty/src/libwinpty/AgentLocation.h +28 -0
- package/deps/winpty/src/libwinpty/LibWinptyException.h +54 -0
- package/deps/winpty/src/libwinpty/WinptyInternal.h +72 -0
- package/deps/winpty/src/libwinpty/subdir.mk +46 -0
- package/deps/winpty/src/libwinpty/winpty.cc +970 -0
- package/deps/winpty/src/shared/AgentMsg.h +38 -0
- package/deps/winpty/src/shared/BackgroundDesktop.cc +122 -0
- package/deps/winpty/src/shared/BackgroundDesktop.h +73 -0
- package/deps/winpty/src/shared/Buffer.cc +103 -0
- package/deps/winpty/src/shared/Buffer.h +102 -0
- package/deps/winpty/src/shared/DebugClient.cc +187 -0
- package/deps/winpty/src/shared/DebugClient.h +38 -0
- package/deps/winpty/src/shared/GenRandom.cc +138 -0
- package/deps/winpty/src/shared/GenRandom.h +55 -0
- package/deps/winpty/src/shared/GetCommitHash.bat +13 -0
- package/deps/winpty/src/shared/Mutex.h +54 -0
- package/deps/winpty/src/shared/OsModule.h +63 -0
- package/deps/winpty/src/shared/OwnedHandle.cc +36 -0
- package/deps/winpty/src/shared/OwnedHandle.h +45 -0
- package/deps/winpty/src/shared/PrecompiledHeader.h +43 -0
- package/deps/winpty/src/shared/StringBuilder.h +227 -0
- package/deps/winpty/src/shared/StringBuilderTest.cc +114 -0
- package/deps/winpty/src/shared/StringUtil.cc +55 -0
- package/deps/winpty/src/shared/StringUtil.h +80 -0
- package/deps/winpty/src/shared/TimeMeasurement.h +63 -0
- package/deps/winpty/src/shared/UnixCtrlChars.h +45 -0
- package/deps/winpty/src/shared/UpdateGenVersion.bat +20 -0
- package/deps/winpty/src/shared/WindowsSecurity.cc +460 -0
- package/deps/winpty/src/shared/WindowsSecurity.h +104 -0
- package/deps/winpty/src/shared/WindowsVersion.cc +252 -0
- package/deps/winpty/src/shared/WindowsVersion.h +29 -0
- package/deps/winpty/src/shared/WinptyAssert.cc +55 -0
- package/deps/winpty/src/shared/WinptyAssert.h +64 -0
- package/deps/winpty/src/shared/WinptyException.cc +57 -0
- package/deps/winpty/src/shared/WinptyException.h +43 -0
- package/deps/winpty/src/shared/WinptyVersion.cc +42 -0
- package/deps/winpty/src/shared/WinptyVersion.h +27 -0
- package/deps/winpty/src/shared/winpty_snprintf.h +99 -0
- package/deps/winpty/src/subdir.mk +5 -0
- package/deps/winpty/src/tests/subdir.mk +28 -0
- package/deps/winpty/src/tests/trivial_test.cc +158 -0
- package/deps/winpty/src/unix-adapter/InputHandler.cc +114 -0
- package/deps/winpty/src/unix-adapter/InputHandler.h +56 -0
- package/deps/winpty/src/unix-adapter/OutputHandler.cc +80 -0
- package/deps/winpty/src/unix-adapter/OutputHandler.h +53 -0
- package/deps/winpty/src/unix-adapter/Util.cc +86 -0
- package/deps/winpty/src/unix-adapter/Util.h +31 -0
- package/deps/winpty/src/unix-adapter/WakeupFd.cc +70 -0
- package/deps/winpty/src/unix-adapter/WakeupFd.h +42 -0
- package/deps/winpty/src/unix-adapter/main.cc +729 -0
- package/deps/winpty/src/unix-adapter/subdir.mk +41 -0
- package/deps/winpty/src/winpty.gyp +234 -0
- package/deps/winpty/vcbuild.bat +83 -0
- package/lib/conpty_console_list_agent.js +16 -0
- package/lib/conpty_console_list_agent.js.map +1 -0
- package/lib/eventEmitter2.js +47 -0
- package/lib/eventEmitter2.js.map +1 -0
- package/lib/eventEmitter2.test.js +30 -0
- package/lib/eventEmitter2.test.js.map +1 -0
- package/lib/index.js +52 -0
- package/lib/index.js.map +1 -0
- package/lib/interfaces.js +7 -0
- package/lib/interfaces.js.map +1 -0
- package/lib/shared/conout.js +11 -0
- package/lib/shared/conout.js.map +1 -0
- package/lib/terminal.js +190 -0
- package/lib/terminal.js.map +1 -0
- package/lib/terminal.test.js +139 -0
- package/lib/terminal.test.js.map +1 -0
- package/lib/testUtils.test.js +28 -0
- package/lib/testUtils.test.js.map +1 -0
- package/lib/types.js +7 -0
- package/lib/types.js.map +1 -0
- package/lib/unixTerminal.js +346 -0
- package/lib/unixTerminal.js.map +1 -0
- package/lib/unixTerminal.test.js +351 -0
- package/lib/unixTerminal.test.js.map +1 -0
- package/lib/utils.js +39 -0
- package/lib/utils.js.map +1 -0
- package/lib/windowsConoutConnection.js +125 -0
- package/lib/windowsConoutConnection.js.map +1 -0
- package/lib/windowsPtyAgent.js +320 -0
- package/lib/windowsPtyAgent.js.map +1 -0
- package/lib/windowsPtyAgent.test.js +90 -0
- package/lib/windowsPtyAgent.test.js.map +1 -0
- package/lib/windowsTerminal.js +199 -0
- package/lib/windowsTerminal.js.map +1 -0
- package/lib/windowsTerminal.test.js +219 -0
- package/lib/windowsTerminal.test.js.map +1 -0
- package/lib/worker/conoutSocketWorker.js +22 -0
- package/lib/worker/conoutSocketWorker.js.map +1 -0
- package/package.json +68 -0
- package/prebuilds/darwin-arm64/pty.node +0 -0
- package/prebuilds/darwin-arm64/spawn-helper +0 -0
- package/prebuilds/darwin-x64/pty.node +0 -0
- package/prebuilds/darwin-x64/spawn-helper +0 -0
- package/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
- package/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
- package/prebuilds/win32-arm64/conpty.node +0 -0
- package/prebuilds/win32-arm64/conpty.pdb +0 -0
- package/prebuilds/win32-arm64/conpty_console_list.node +0 -0
- package/prebuilds/win32-arm64/conpty_console_list.pdb +0 -0
- package/prebuilds/win32-arm64/pty.node +0 -0
- package/prebuilds/win32-arm64/pty.pdb +0 -0
- package/prebuilds/win32-arm64/winpty-agent.exe +0 -0
- package/prebuilds/win32-arm64/winpty-agent.pdb +0 -0
- package/prebuilds/win32-arm64/winpty.dll +0 -0
- package/prebuilds/win32-arm64/winpty.pdb +0 -0
- package/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
- package/prebuilds/win32-x64/conpty/conpty.dll +0 -0
- package/prebuilds/win32-x64/conpty.node +0 -0
- package/prebuilds/win32-x64/conpty.pdb +0 -0
- package/prebuilds/win32-x64/conpty_console_list.node +0 -0
- package/prebuilds/win32-x64/conpty_console_list.pdb +0 -0
- package/prebuilds/win32-x64/pty.node +0 -0
- package/prebuilds/win32-x64/pty.pdb +0 -0
- package/prebuilds/win32-x64/winpty-agent.exe +0 -0
- package/prebuilds/win32-x64/winpty-agent.pdb +0 -0
- package/prebuilds/win32-x64/winpty.dll +0 -0
- package/prebuilds/win32-x64/winpty.pdb +0 -0
- package/scripts/gen-compile-commands.js +8 -0
- package/scripts/increment-version.js +54 -0
- package/scripts/post-install.js +99 -0
- package/scripts/prebuild.js +39 -0
- package/scripts/sync-prebuild.js +31 -0
- package/scripts/verify-darwin-fd-leak.js +63 -0
- package/src/conpty_console_list_agent.ts +15 -0
- package/src/eventEmitter2.test.ts +30 -0
- package/src/eventEmitter2.ts +48 -0
- package/src/index.ts +52 -0
- package/src/interfaces.ts +130 -0
- package/src/native.d.ts +54 -0
- package/src/shared/conout.ts +15 -0
- package/src/terminal.test.ts +119 -0
- package/src/terminal.ts +211 -0
- package/src/testUtils.test.ts +23 -0
- package/src/tsconfig.json +22 -0
- package/src/types.ts +15 -0
- package/src/unix/pty.cc +808 -0
- package/src/unix/spawn-helper.cc +23 -0
- package/src/unixTerminal.test.ts +367 -0
- package/src/unixTerminal.ts +388 -0
- package/src/utils.ts +29 -0
- package/src/win/conpty.cc +583 -0
- package/src/win/conpty.h +41 -0
- package/src/win/conpty_console_list.cc +44 -0
- package/src/win/path_util.cc +95 -0
- package/src/win/path_util.h +26 -0
- package/src/win/winpty.cc +333 -0
- package/src/windowsConoutConnection.ts +82 -0
- package/src/windowsPtyAgent.test.ts +94 -0
- package/src/windowsPtyAgent.ts +321 -0
- package/src/windowsTerminal.test.ts +229 -0
- package/src/windowsTerminal.ts +203 -0
- package/src/worker/conoutSocketWorker.ts +22 -0
- package/third_party/conpty/1.23.251008001/win10-arm64/OpenConsole.exe +0 -0
- package/third_party/conpty/1.23.251008001/win10-arm64/conpty.dll +0 -0
- package/third_party/conpty/1.23.251008001/win10-x64/OpenConsole.exe +0 -0
- package/third_party/conpty/1.23.251008001/win10-x64/conpty.dll +0 -0
- package/typings/node-pty.d.ts +211 -0
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/*
|
|
2
|
+
|
|
3
|
+
Test program demonstrating a problem in Windows 15048's ReadConsoleOutput API.
|
|
4
|
+
|
|
5
|
+
To compile:
|
|
6
|
+
|
|
7
|
+
cl /nologo /EHsc winbug-15048.cc shell32.lib
|
|
8
|
+
|
|
9
|
+
Example of regressed input:
|
|
10
|
+
|
|
11
|
+
Case 1:
|
|
12
|
+
|
|
13
|
+
> chcp 932
|
|
14
|
+
> winbug-15048 -face-gothic 3044
|
|
15
|
+
|
|
16
|
+
Correct output:
|
|
17
|
+
|
|
18
|
+
1**34 (nb: U+3044 replaced with '**' to avoid MSVC encoding warning)
|
|
19
|
+
5678
|
|
20
|
+
|
|
21
|
+
ReadConsoleOutputW (both rows, 3 cols)
|
|
22
|
+
row 0: U+0031(0007) U+3044(0107) U+3044(0207) U+0033(0007)
|
|
23
|
+
row 1: U+0035(0007) U+0036(0007) U+0037(0007) U+0038(0007)
|
|
24
|
+
|
|
25
|
+
ReadConsoleOutputW (both rows, 4 cols)
|
|
26
|
+
row 0: U+0031(0007) U+3044(0107) U+3044(0207) U+0033(0007) U+0034(0007)
|
|
27
|
+
row 1: U+0035(0007) U+0036(0007) U+0037(0007) U+0038(0007) U+0020(0007)
|
|
28
|
+
|
|
29
|
+
ReadConsoleOutputW (second row)
|
|
30
|
+
row 1: U+0035(0007) U+0036(0007) U+0037(0007) U+0038(0007) U+0020(0007)
|
|
31
|
+
|
|
32
|
+
...
|
|
33
|
+
|
|
34
|
+
Win10 15048 bad output:
|
|
35
|
+
|
|
36
|
+
1**34
|
|
37
|
+
5678
|
|
38
|
+
|
|
39
|
+
ReadConsoleOutputW (both rows, 3 cols)
|
|
40
|
+
row 0: U+0031(0007) U+3044(0007) U+0033(0007) U+0035(0007)
|
|
41
|
+
row 1: U+0036(0007) U+0037(0007) U+0038(0007) U+0000(0000)
|
|
42
|
+
|
|
43
|
+
ReadConsoleOutputW (both rows, 4 cols)
|
|
44
|
+
row 0: U+0031(0007) U+3044(0007) U+0033(0007) U+0034(0007) U+0035(0007)
|
|
45
|
+
row 1: U+0036(0007) U+0037(0007) U+0038(0007) U+0020(0007) U+0000(0000)
|
|
46
|
+
|
|
47
|
+
ReadConsoleOutputW (second row)
|
|
48
|
+
row 1: U+0035(0007) U+0036(0007) U+0037(0007) U+0038(0007) U+0020(0007)
|
|
49
|
+
|
|
50
|
+
...
|
|
51
|
+
|
|
52
|
+
The U+3044 character (HIRAGANA LETTER I) occupies two columns, but it only
|
|
53
|
+
fills one record in the ReadConsoleOutput output buffer, which has the
|
|
54
|
+
effect of shifting the first cell of the second row into the last cell of
|
|
55
|
+
the first row. Ordinarily, the first and second cells would also have the
|
|
56
|
+
COMMON_LVB_LEADING_BYTE and COMMON_LVB_TRAILING_BYTE attributes set, which
|
|
57
|
+
allows winpty to detect the double-column character.
|
|
58
|
+
|
|
59
|
+
Case 2:
|
|
60
|
+
|
|
61
|
+
> chcp 437
|
|
62
|
+
> winbug-15048 -face "Lucida Console" -h 4 221A
|
|
63
|
+
|
|
64
|
+
The same issue happens with U+221A (SQUARE ROOT), but only in certain
|
|
65
|
+
fonts. The console seems to think this character occupies two columns
|
|
66
|
+
if the font is sufficiently small. The Windows console properties dialog
|
|
67
|
+
doesn't allow fonts below 5 pt, but winpty tries to use 2pt and 4pt Lucida
|
|
68
|
+
Console to allow very large console windows.
|
|
69
|
+
|
|
70
|
+
Case 3:
|
|
71
|
+
|
|
72
|
+
> chcp 437
|
|
73
|
+
> winbug-15048 -face "Lucida Console" -h 12 FF12
|
|
74
|
+
|
|
75
|
+
The console selection system thinks U+FF12 (FULLWIDTH DIGIT TWO) occupies
|
|
76
|
+
two columns, which happens to be correct, but it's displayed as a single
|
|
77
|
+
column unrecognized character. It otherwise behaves the same as the other
|
|
78
|
+
cases.
|
|
79
|
+
|
|
80
|
+
*/
|
|
81
|
+
|
|
82
|
+
#include <windows.h>
|
|
83
|
+
#include <assert.h>
|
|
84
|
+
#include <string.h>
|
|
85
|
+
#include <stdlib.h>
|
|
86
|
+
#include <stdio.h>
|
|
87
|
+
#include <wchar.h>
|
|
88
|
+
|
|
89
|
+
#include <string>
|
|
90
|
+
|
|
91
|
+
#define COUNT_OF(array) (sizeof(array) / sizeof((array)[0]))
|
|
92
|
+
|
|
93
|
+
// See https://en.wikipedia.org/wiki/List_of_CJK_fonts
|
|
94
|
+
const wchar_t kMSGothic[] = { 0xff2d, 0xff33, 0x0020, 0x30b4, 0x30b7, 0x30c3, 0x30af, 0 }; // Japanese
|
|
95
|
+
const wchar_t kNSimSun[] = { 0x65b0, 0x5b8b, 0x4f53, 0 }; // Simplified Chinese
|
|
96
|
+
const wchar_t kMingLight[] = { 0x7d30, 0x660e, 0x9ad4, 0 }; // Traditional Chinese
|
|
97
|
+
const wchar_t kGulimChe[] = { 0xad74, 0xb9bc, 0xccb4, 0 }; // Korean
|
|
98
|
+
|
|
99
|
+
static void set_font(const wchar_t *name, int size) {
|
|
100
|
+
const HANDLE conout = GetStdHandle(STD_OUTPUT_HANDLE);
|
|
101
|
+
CONSOLE_FONT_INFOEX fontex {};
|
|
102
|
+
fontex.cbSize = sizeof(fontex);
|
|
103
|
+
fontex.dwFontSize.Y = size;
|
|
104
|
+
fontex.FontWeight = 400;
|
|
105
|
+
fontex.FontFamily = 0x36;
|
|
106
|
+
wcsncpy(fontex.FaceName, name, COUNT_OF(fontex.FaceName));
|
|
107
|
+
assert(SetCurrentConsoleFontEx(conout, FALSE, &fontex));
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
static void usage(const wchar_t *prog) {
|
|
111
|
+
printf("Usage: %ls [options]\n", prog);
|
|
112
|
+
printf(" -h HEIGHT\n");
|
|
113
|
+
printf(" -face FACENAME\n");
|
|
114
|
+
printf(" -face-{gothic|simsun|minglight|gulimche) [JP,CN-sim,CN-tra,KR]\n");
|
|
115
|
+
printf(" hhhh -- print U+hhhh\n");
|
|
116
|
+
exit(1);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
static void dump_region(SMALL_RECT region, const char *name) {
|
|
120
|
+
const HANDLE conout = GetStdHandle(STD_OUTPUT_HANDLE);
|
|
121
|
+
|
|
122
|
+
CHAR_INFO buf[1000];
|
|
123
|
+
memset(buf, 0xcc, sizeof(buf));
|
|
124
|
+
|
|
125
|
+
const int w = region.Right - region.Left + 1;
|
|
126
|
+
const int h = region.Bottom - region.Top + 1;
|
|
127
|
+
|
|
128
|
+
assert(ReadConsoleOutputW(
|
|
129
|
+
conout, buf, { (short)w, (short)h }, { 0, 0 },
|
|
130
|
+
®ion));
|
|
131
|
+
|
|
132
|
+
printf("\n");
|
|
133
|
+
printf("ReadConsoleOutputW (%s)\n", name);
|
|
134
|
+
for (int y = 0; y < h; ++y) {
|
|
135
|
+
printf("row %d: ", region.Top + y);
|
|
136
|
+
for (int i = 0; i < region.Left * 13; ++i) {
|
|
137
|
+
printf(" ");
|
|
138
|
+
}
|
|
139
|
+
for (int x = 0; x < w; ++x) {
|
|
140
|
+
const int i = y * w + x;
|
|
141
|
+
printf("U+%04x(%04x) ", buf[i].Char.UnicodeChar, buf[i].Attributes);
|
|
142
|
+
}
|
|
143
|
+
printf("\n");
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
int main() {
|
|
148
|
+
wchar_t *cmdline = GetCommandLineW();
|
|
149
|
+
int argc = 0;
|
|
150
|
+
wchar_t **argv = CommandLineToArgvW(cmdline, &argc);
|
|
151
|
+
const wchar_t *font_name = L"Lucida Console";
|
|
152
|
+
int font_height = 8;
|
|
153
|
+
int test_ch = 0xff12; // U+FF12 FULLWIDTH DIGIT TWO
|
|
154
|
+
|
|
155
|
+
for (int i = 1; i < argc; ++i) {
|
|
156
|
+
const std::wstring arg = argv[i];
|
|
157
|
+
const std::wstring next = i + 1 < argc ? argv[i + 1] : L"";
|
|
158
|
+
if (arg == L"-face" && i + 1 < argc) {
|
|
159
|
+
font_name = argv[i + 1];
|
|
160
|
+
i++;
|
|
161
|
+
} else if (arg == L"-face-gothic") {
|
|
162
|
+
font_name = kMSGothic;
|
|
163
|
+
} else if (arg == L"-face-simsun") {
|
|
164
|
+
font_name = kNSimSun;
|
|
165
|
+
} else if (arg == L"-face-minglight") {
|
|
166
|
+
font_name = kMingLight;
|
|
167
|
+
} else if (arg == L"-face-gulimche") {
|
|
168
|
+
font_name = kGulimChe;
|
|
169
|
+
} else if (arg == L"-h" && i + 1 < argc) {
|
|
170
|
+
font_height = _wtoi(next.c_str());
|
|
171
|
+
i++;
|
|
172
|
+
} else if (arg.c_str()[0] != '-') {
|
|
173
|
+
test_ch = wcstol(arg.c_str(), NULL, 16);
|
|
174
|
+
} else {
|
|
175
|
+
printf("Unrecognized argument: %ls\n", arg.c_str());
|
|
176
|
+
usage(argv[0]);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
const HANDLE conout = GetStdHandle(STD_OUTPUT_HANDLE);
|
|
181
|
+
|
|
182
|
+
set_font(font_name, font_height);
|
|
183
|
+
|
|
184
|
+
system("cls");
|
|
185
|
+
DWORD actual = 0;
|
|
186
|
+
wchar_t output[] = L"1234\n5678\n";
|
|
187
|
+
output[1] = test_ch;
|
|
188
|
+
WriteConsoleW(conout, output, 10, &actual, nullptr);
|
|
189
|
+
|
|
190
|
+
dump_region({ 0, 0, 3, 1 }, "both rows, 3 cols");
|
|
191
|
+
dump_region({ 0, 0, 4, 1 }, "both rows, 4 cols");
|
|
192
|
+
dump_region({ 0, 1, 4, 1 }, "second row");
|
|
193
|
+
dump_region({ 0, 0, 4, 0 }, "first row");
|
|
194
|
+
dump_region({ 1, 0, 4, 0 }, "first row, skip 1");
|
|
195
|
+
dump_region({ 2, 0, 4, 0 }, "first row, skip 2");
|
|
196
|
+
dump_region({ 3, 0, 4, 0 }, "first row, skip 3");
|
|
197
|
+
|
|
198
|
+
set_font(font_name, 14);
|
|
199
|
+
|
|
200
|
+
return 0;
|
|
201
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
@echo off
|
|
2
|
+
|
|
3
|
+
setlocal
|
|
4
|
+
cd %~dp0..
|
|
5
|
+
set Path=C:\Python27;C:\Program Files\Git\cmd;%Path%
|
|
6
|
+
|
|
7
|
+
call "%VS140COMNTOOLS%\VsDevCmd.bat" || goto :fail
|
|
8
|
+
|
|
9
|
+
rmdir /s/q build-libpty 2>NUL
|
|
10
|
+
mkdir build-libpty\win
|
|
11
|
+
mkdir build-libpty\win\x86
|
|
12
|
+
mkdir build-libpty\win\x86_64
|
|
13
|
+
mkdir build-libpty\win\xp
|
|
14
|
+
|
|
15
|
+
rmdir /s/q src\Release 2>NUL
|
|
16
|
+
rmdir /s/q src\.vs 2>NUL
|
|
17
|
+
del src\*.vcxproj src\*.vcxproj.filters src\*.sln src\*.sdf 2>NUL
|
|
18
|
+
|
|
19
|
+
call vcbuild.bat --msvc-platform Win32 --gyp-msvs-version 2015 --toolset v140_xp || goto :fail
|
|
20
|
+
copy src\Release\Win32\winpty.dll build-libpty\win\xp || goto :fail
|
|
21
|
+
copy src\Release\Win32\winpty-agent.exe build-libpty\win\xp || goto :fail
|
|
22
|
+
|
|
23
|
+
call vcbuild.bat --msvc-platform Win32 --gyp-msvs-version 2015 || goto :fail
|
|
24
|
+
copy src\Release\Win32\winpty.dll build-libpty\win\x86 || goto :fail
|
|
25
|
+
copy src\Release\Win32\winpty-agent.exe build-libpty\win\x86 || goto :fail
|
|
26
|
+
|
|
27
|
+
call vcbuild.bat --msvc-platform x64 --gyp-msvs-version 2015 || goto :fail
|
|
28
|
+
copy src\Release\x64\winpty.dll build-libpty\win\x86_64 || goto :fail
|
|
29
|
+
copy src\Release\x64\winpty-agent.exe build-libpty\win\x86_64 || goto :fail
|
|
30
|
+
|
|
31
|
+
echo success
|
|
32
|
+
goto :EOF
|
|
33
|
+
|
|
34
|
+
:fail
|
|
35
|
+
echo error: build failed
|
|
36
|
+
exit /b 1
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import sys
|
|
3
|
+
|
|
4
|
+
if os.name != "nt":
|
|
5
|
+
sys.exit("Error: ship scripts require native Python 2.7. (wrong os.name)")
|
|
6
|
+
if sys.version_info[0:2] != (2,7):
|
|
7
|
+
sys.exit("Error: ship scripts require native Python 2.7. (wrong version)")
|
|
8
|
+
|
|
9
|
+
import glob
|
|
10
|
+
import shutil
|
|
11
|
+
import subprocess
|
|
12
|
+
from distutils.spawn import find_executable
|
|
13
|
+
|
|
14
|
+
topDir = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
|
|
15
|
+
|
|
16
|
+
with open(topDir + "/VERSION.txt", "rt") as f:
|
|
17
|
+
winptyVersion = f.read().strip()
|
|
18
|
+
|
|
19
|
+
def rmrf(patterns):
|
|
20
|
+
for pattern in patterns:
|
|
21
|
+
for path in glob.glob(pattern):
|
|
22
|
+
if os.path.isdir(path) and not os.path.islink(path):
|
|
23
|
+
print "+ rm -r " + path
|
|
24
|
+
sys.stdout.flush()
|
|
25
|
+
shutil.rmtree(path)
|
|
26
|
+
elif os.path.isfile(path):
|
|
27
|
+
print "+ rm " + path
|
|
28
|
+
sys.stdout.flush()
|
|
29
|
+
os.remove(path)
|
|
30
|
+
|
|
31
|
+
def mkdir(path):
|
|
32
|
+
if not os.path.isdir(path):
|
|
33
|
+
os.makedirs(path)
|
|
34
|
+
|
|
35
|
+
def requireExe(name, guesses):
|
|
36
|
+
if find_executable(name) is None:
|
|
37
|
+
for guess in guesses:
|
|
38
|
+
if os.path.exists(guess):
|
|
39
|
+
newDir = os.path.dirname(guess)
|
|
40
|
+
print "Adding " + newDir + " to Path to provide " + name
|
|
41
|
+
os.environ["Path"] = newDir + ";" + os.environ["Path"]
|
|
42
|
+
ret = find_executable(name)
|
|
43
|
+
if ret is None:
|
|
44
|
+
sys.exit("Error: required EXE is missing from Path: " + name)
|
|
45
|
+
return ret
|
|
46
|
+
|
|
47
|
+
requireExe("git.exe", [
|
|
48
|
+
"C:\\Program Files\\Git\\cmd\\git.exe",
|
|
49
|
+
"C:\\Program Files (x86)\\Git\\cmd\\git.exe"
|
|
50
|
+
])
|
|
51
|
+
|
|
52
|
+
commitHash = subprocess.check_output(["git.exe", "rev-parse", "HEAD"]).decode().strip()
|
|
53
|
+
defaultPathEnviron = "C:\\Windows\\System32;C:\\Windows"
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
#!python
|
|
2
|
+
|
|
3
|
+
# Copyright (c) 2016 Ryan Prichard
|
|
4
|
+
#
|
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
# of this software and associated documentation files (the "Software"), to
|
|
7
|
+
# deal in the Software without restriction, including without limitation the
|
|
8
|
+
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
9
|
+
# sell copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
# furnished to do so, subject to the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be included in
|
|
13
|
+
# all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
20
|
+
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
21
|
+
# IN THE SOFTWARE.
|
|
22
|
+
|
|
23
|
+
#
|
|
24
|
+
# Run with native CPython 2.7.
|
|
25
|
+
#
|
|
26
|
+
# This script looks for MSVC using a version-specific environment variable,
|
|
27
|
+
# such as VS140COMNTOOLS for MSVC 2015.
|
|
28
|
+
#
|
|
29
|
+
|
|
30
|
+
import common_ship
|
|
31
|
+
|
|
32
|
+
import argparse
|
|
33
|
+
import os
|
|
34
|
+
import shutil
|
|
35
|
+
import subprocess
|
|
36
|
+
import sys
|
|
37
|
+
|
|
38
|
+
os.chdir(common_ship.topDir)
|
|
39
|
+
ZIP_TOOL = common_ship.requireExe("7z.exe", [
|
|
40
|
+
"C:\\Program Files\\7-Zip\\7z.exe",
|
|
41
|
+
"C:\\Program Files (x86)\\7-Zip\\7z.exe",
|
|
42
|
+
])
|
|
43
|
+
|
|
44
|
+
MSVC_VERSION_TABLE = {
|
|
45
|
+
"2015" : {
|
|
46
|
+
"package_name" : "msvc2015",
|
|
47
|
+
"gyp_version" : "2015",
|
|
48
|
+
"common_tools_env" : "VS140COMNTOOLS",
|
|
49
|
+
"xp_toolset" : "v140_xp",
|
|
50
|
+
},
|
|
51
|
+
"2013" : {
|
|
52
|
+
"package_name" : "msvc2013",
|
|
53
|
+
"gyp_version" : "2013",
|
|
54
|
+
"common_tools_env" : "VS120COMNTOOLS",
|
|
55
|
+
"xp_toolset" : "v120_xp",
|
|
56
|
+
},
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
ARCH_TABLE = {
|
|
60
|
+
"x64" : {
|
|
61
|
+
"msvc_platform" : "x64",
|
|
62
|
+
},
|
|
63
|
+
"ia32" : {
|
|
64
|
+
"msvc_platform" : "Win32",
|
|
65
|
+
},
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
def readArguments():
|
|
69
|
+
parser = argparse.ArgumentParser()
|
|
70
|
+
parser.add_argument("--msvc-version", default="2015")
|
|
71
|
+
ret = parser.parse_args()
|
|
72
|
+
if ret.msvc_version not in MSVC_VERSION_TABLE:
|
|
73
|
+
sys.exit("Error: unrecognized version: " + ret.msvc_version + ". " +
|
|
74
|
+
"Versions: " + " ".join(sorted(MSVC_VERSION_TABLE.keys())))
|
|
75
|
+
return ret
|
|
76
|
+
|
|
77
|
+
ARGS = readArguments()
|
|
78
|
+
|
|
79
|
+
def checkoutGyp():
|
|
80
|
+
if os.path.isdir("build-gyp"):
|
|
81
|
+
return
|
|
82
|
+
subprocess.check_call([
|
|
83
|
+
"git.exe",
|
|
84
|
+
"clone",
|
|
85
|
+
"https://chromium.googlesource.com/external/gyp",
|
|
86
|
+
"build-gyp"
|
|
87
|
+
])
|
|
88
|
+
|
|
89
|
+
def cleanMsvc():
|
|
90
|
+
common_ship.rmrf("""
|
|
91
|
+
src/Release src/.vs src/gen
|
|
92
|
+
src/*.vcxproj src/*.vcxproj.filters src/*.sln src/*.sdf
|
|
93
|
+
""".split())
|
|
94
|
+
|
|
95
|
+
def build(arch, packageDir, xp=False):
|
|
96
|
+
archInfo = ARCH_TABLE[arch]
|
|
97
|
+
versionInfo = MSVC_VERSION_TABLE[ARGS.msvc_version]
|
|
98
|
+
|
|
99
|
+
devCmdPath = os.path.join(os.environ[versionInfo["common_tools_env"]], "VsDevCmd.bat")
|
|
100
|
+
if not os.path.isfile(devCmdPath):
|
|
101
|
+
sys.exit("Error: MSVC environment script missing: " + devCmdPath)
|
|
102
|
+
|
|
103
|
+
newEnv = os.environ.copy()
|
|
104
|
+
newEnv["PATH"] = os.path.dirname(sys.executable) + ";" + common_ship.defaultPathEnviron
|
|
105
|
+
commandLine = (
|
|
106
|
+
'"' + devCmdPath + '" && '
|
|
107
|
+
" vcbuild.bat" +
|
|
108
|
+
" --gyp-msvs-version " + versionInfo["gyp_version"] +
|
|
109
|
+
" --msvc-platform " + archInfo["msvc_platform"] +
|
|
110
|
+
" --commit-hash " + common_ship.commitHash
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
subprocess.check_call(commandLine, shell=True, env=newEnv)
|
|
114
|
+
|
|
115
|
+
archPackageDir = os.path.join(packageDir, arch)
|
|
116
|
+
if xp:
|
|
117
|
+
archPackageDir += "_xp"
|
|
118
|
+
|
|
119
|
+
common_ship.mkdir(archPackageDir + "/bin")
|
|
120
|
+
common_ship.mkdir(archPackageDir + "/lib")
|
|
121
|
+
|
|
122
|
+
binSrc = os.path.join(common_ship.topDir, "src/Release", archInfo["msvc_platform"])
|
|
123
|
+
|
|
124
|
+
shutil.copy(binSrc + "/winpty.dll", archPackageDir + "/bin")
|
|
125
|
+
shutil.copy(binSrc + "/winpty-agent.exe", archPackageDir + "/bin")
|
|
126
|
+
shutil.copy(binSrc + "/winpty-debugserver.exe", archPackageDir + "/bin")
|
|
127
|
+
shutil.copy(binSrc + "/winpty.lib", archPackageDir + "/lib")
|
|
128
|
+
|
|
129
|
+
def buildPackage():
|
|
130
|
+
versionInfo = MSVC_VERSION_TABLE[ARGS.msvc_version]
|
|
131
|
+
|
|
132
|
+
packageName = "winpty-%s-%s" % (
|
|
133
|
+
common_ship.winptyVersion,
|
|
134
|
+
versionInfo["package_name"],
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
packageRoot = os.path.join(common_ship.topDir, "ship/packages")
|
|
138
|
+
packageDir = os.path.join(packageRoot, packageName)
|
|
139
|
+
packageFile = packageDir + ".zip"
|
|
140
|
+
|
|
141
|
+
common_ship.rmrf([packageDir])
|
|
142
|
+
common_ship.rmrf([packageFile])
|
|
143
|
+
common_ship.mkdir(packageDir)
|
|
144
|
+
|
|
145
|
+
checkoutGyp()
|
|
146
|
+
cleanMsvc()
|
|
147
|
+
build("ia32", packageDir, True)
|
|
148
|
+
build("x64", packageDir, True)
|
|
149
|
+
cleanMsvc()
|
|
150
|
+
build("ia32", packageDir)
|
|
151
|
+
build("x64", packageDir)
|
|
152
|
+
|
|
153
|
+
topDir = common_ship.topDir
|
|
154
|
+
|
|
155
|
+
common_ship.mkdir(packageDir + "/include")
|
|
156
|
+
shutil.copy(topDir + "/src/include/winpty.h", packageDir + "/include")
|
|
157
|
+
shutil.copy(topDir + "/src/include/winpty_constants.h", packageDir + "/include")
|
|
158
|
+
shutil.copy(topDir + "/LICENSE", packageDir)
|
|
159
|
+
shutil.copy(topDir + "/README.md", packageDir)
|
|
160
|
+
shutil.copy(topDir + "/RELEASES.md", packageDir)
|
|
161
|
+
|
|
162
|
+
subprocess.check_call([ZIP_TOOL, "a", packageFile, "."], cwd=packageDir)
|
|
163
|
+
|
|
164
|
+
if __name__ == "__main__":
|
|
165
|
+
buildPackage()
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
#!python
|
|
2
|
+
|
|
3
|
+
# Copyright (c) 2015 Ryan Prichard
|
|
4
|
+
#
|
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
# of this software and associated documentation files (the "Software"), to
|
|
7
|
+
# deal in the Software without restriction, including without limitation the
|
|
8
|
+
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
9
|
+
# sell copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
# furnished to do so, subject to the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be included in
|
|
13
|
+
# all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
20
|
+
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
21
|
+
# IN THE SOFTWARE.
|
|
22
|
+
|
|
23
|
+
#
|
|
24
|
+
# Run with native CPython 2.7 on a 64-bit computer.
|
|
25
|
+
#
|
|
26
|
+
# Each of the targets in BUILD_TARGETS must be installed to the default
|
|
27
|
+
# location. Each target must have the appropriate MinGW and non-MinGW
|
|
28
|
+
# compilers installed, as well as make and tar.
|
|
29
|
+
#
|
|
30
|
+
|
|
31
|
+
import common_ship
|
|
32
|
+
|
|
33
|
+
import multiprocessing
|
|
34
|
+
import os
|
|
35
|
+
import shutil
|
|
36
|
+
import subprocess
|
|
37
|
+
import sys
|
|
38
|
+
|
|
39
|
+
os.chdir(common_ship.topDir)
|
|
40
|
+
|
|
41
|
+
def dllVersion(path):
|
|
42
|
+
version = subprocess.check_output(
|
|
43
|
+
["powershell.exe",
|
|
44
|
+
"[System.Diagnostics.FileVersionInfo]::GetVersionInfo(\"" + path + "\").FileVersion"])
|
|
45
|
+
return version.strip()
|
|
46
|
+
|
|
47
|
+
# Determine other build parameters.
|
|
48
|
+
print "Determining Cygwin/MSYS2 DLL versions..."
|
|
49
|
+
sys.stdout.flush()
|
|
50
|
+
BUILD_TARGETS = [
|
|
51
|
+
# {
|
|
52
|
+
# "name": "msys",
|
|
53
|
+
# "path": "C:\\MinGW\\bin;C:\\MinGW\\msys\\1.0\\bin",
|
|
54
|
+
# # The parallel make.exe in the original MSYS/MinGW project hangs.
|
|
55
|
+
# "make_binary": "mingw32-make.exe",
|
|
56
|
+
# },
|
|
57
|
+
{
|
|
58
|
+
"name": "msys2-" + dllVersion("C:\\msys32\\usr\\bin\\msys-2.0.dll") + "-ia32",
|
|
59
|
+
"path": "C:\\msys32\\mingw32\\bin;C:\\msys32\\usr\\bin",
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"name": "msys2-" + dllVersion("C:\\msys64\\usr\\bin\\msys-2.0.dll") + "-x64",
|
|
63
|
+
"path": "C:\\msys64\\mingw64\\bin;C:\\msys64\\usr\\bin",
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"name": "cygwin-" + dllVersion("C:\\cygwin\\bin\\cygwin1.dll") + "-ia32",
|
|
67
|
+
"path": "C:\\cygwin\\bin",
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"name": "cygwin-" + dllVersion("C:\\cygwin64\\bin\\cygwin1.dll") + "-x64",
|
|
71
|
+
"path": "C:\\cygwin64\\bin",
|
|
72
|
+
},
|
|
73
|
+
]
|
|
74
|
+
|
|
75
|
+
def buildTarget(target):
|
|
76
|
+
packageName = "winpty-" + common_ship.winptyVersion + "-" + target["name"]
|
|
77
|
+
if os.path.exists("ship\\packages\\" + packageName):
|
|
78
|
+
shutil.rmtree("ship\\packages\\" + packageName)
|
|
79
|
+
oldPath = os.environ["PATH"]
|
|
80
|
+
os.environ["PATH"] = target["path"] + ";" + common_ship.defaultPathEnviron
|
|
81
|
+
subprocess.check_call(["sh.exe", "configure"])
|
|
82
|
+
makeBinary = target.get("make_binary", "make.exe")
|
|
83
|
+
subprocess.check_call([makeBinary, "clean"])
|
|
84
|
+
makeBaseCmd = [
|
|
85
|
+
makeBinary,
|
|
86
|
+
"USE_PCH=0",
|
|
87
|
+
"COMMIT_HASH=" + common_ship.commitHash,
|
|
88
|
+
"PREFIX=ship/packages/" + packageName
|
|
89
|
+
]
|
|
90
|
+
subprocess.check_call(makeBaseCmd + ["all", "tests", "-j%d" % multiprocessing.cpu_count()])
|
|
91
|
+
subprocess.check_call(["build\\trivial_test.exe"])
|
|
92
|
+
subprocess.check_call(makeBaseCmd + ["install"])
|
|
93
|
+
subprocess.check_call(["tar.exe", "cvfz",
|
|
94
|
+
packageName + ".tar.gz",
|
|
95
|
+
packageName], cwd=os.path.join(os.getcwd(), "ship", "packages"))
|
|
96
|
+
os.environ["PATH"] = oldPath
|
|
97
|
+
|
|
98
|
+
def main():
|
|
99
|
+
oldPath = os.environ["PATH"]
|
|
100
|
+
for t in BUILD_TARGETS:
|
|
101
|
+
os.environ["PATH"] = t["path"] + ";" + common_ship.defaultPathEnviron
|
|
102
|
+
subprocess.check_output(["tar.exe", "--help"])
|
|
103
|
+
subprocess.check_output(["make.exe", "--help"])
|
|
104
|
+
for t in BUILD_TARGETS:
|
|
105
|
+
buildTarget(t)
|
|
106
|
+
|
|
107
|
+
if __name__ == "__main__":
|
|
108
|
+
main()
|