Full Build #666
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Full Build | |
on: | |
push: | |
branches: [ "master" ] | |
pull_request: | |
branches: [ "master" ] | |
workflow_dispatch: | |
env: | |
# Expected filename: https://zlib.net/zlib-${{env.ZLIB_VERSION}}.tar.gz | |
#ZLIB: https://zlib.net/ | |
ZLIB: https://ftp.zx.net.nz/pub/dev/lib/zlib/ | |
# As of 2023-01-21 downloads from zlib.net are coming back corrupted for an unknown reason. | |
# So we're now fetching zlib from ftp.zx.net.nz instead. | |
ZLIB_VERSION: 1.2.13 | |
# Expected filename: https://www.openssl.org/source/openssl-${{env.OPENSSL_VERSION}}.tar.gz | |
OPENSSL_VERSION: 3.0.11 | |
# Exoected filename: ${{env.LIBSSH_SOURCE}}libssh-${{env.LIBSSH_VERSION}}.tar.xz | |
LIBSSH_SOURCE: https://www.libssh.org/files/0.10/ | |
LIBSSH_VERSION: 0.10.5 | |
# OpenZinc is available from http://openzinc.com/Downloads/OZ1.zip | |
# But we don't want to waste the resources of the generous OpenZinc developer, | |
# so we grab it from a mirror | |
OPENZINC: https://ftp.zx.net.nz/pub/dev/openzinc/oz1/OZ1.zip | |
# For building k95crypt.dll - expected to be a .tar.gz file | |
LIBDES: https://www.mirrorservice.org/sites/ftp.wiretapped.net/pub/security/cryptography/libraries/libdes/libdes.tar.gz | |
# Kerberos for Windows - current release for modern builds | |
KFW_x86: https://web.mit.edu/kerberos/dist/kfw/4.1/kfw-4.1-i386.msi | |
KFW_x86_64: https://web.mit.edu/kerberos/dist/kfw/4.1/kfw-4.1-amd64.msi | |
# These are the binaries we expect to be generated by any standard build of CKW | |
# This includes the core applications plus the telnet crypto and XYZ-MODEM DLLs. | |
# ctl3dins.exe is not currently included but perhaps should be. | |
STANDARD_BUILD_OUTPUTS: k95.exe iksd.exe iksdsvc.exe k95d.exe rlogin.exe telnet.exe textps.exe k95g.exe k95crypt.dll p95.dll | |
# And these are what we currently expect from standard builds for OS/2 | |
OS2_BUILD_OUTPUTS: k2.exe k2clip.exe k2dc.exe rlogin.exe telnet.exe telnetpm.exe textps.exe | |
# Use JOM instead of nmake for parallel builds | |
JOM: https://download.qt.io/official_releases/jom/jom.zip | |
# Make tool for openssl builds. Jom works fine with OpenSSL 1.1.1 but is broken with 3.0.10. | |
# If jom works ideally we use that as it results in shorter build times. | |
OPENSSL_MAKE: nmake | |
# Any extra build flags for OpenSSL. -FS is required if using Jom. | |
# and -D"_WIN32_WINNT=0x502" is required for targeting Windows XP | |
OPENSSL_EXTRA_BUILD_FLAGS: -D"_WIN32_WINNT=0x502" -FS | |
# Where to get the latest official C-Kermit for UNIX/Linux/MacOS X from | |
# along with its version. The version is only used as a cache key to ensure | |
# we're not hammering the kermit website or fetching code thats newer than | |
# what CKW is currently based on. | |
C_KERMIT_VERSION: 10.0b10 | |
C_KERMIT_CODE: https://www.kermitproject.org/ftp/kermit/test/tar/x.tar.gz | |
jobs: | |
Get-CACerts-Bundle: | |
runs-on: windows-latest | |
steps: | |
- name: Fetch CA Certs bundle | |
run: | | |
wget https://curl.se/ca/cacert.pem -outfile ca_certs.pem | |
wget https://www.mozilla.org/media/MPL/2.0/index.815ca599c9df.txt -outfile ca_certs.license | |
$readme = @" | |
ca_certs.pem was exported from the Mozilla CA Certificate Store and is licensed | |
under the MPL version 2.0. | |
For more information and updates, see: https://curl.se/docs/caextract.html | |
"@ | |
New-Item ca_certs.readme | |
Set-Content ca_certs.readme $readme | |
dir | |
shell: powershell | |
- name: Upload artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ca_certs | |
path: | | |
*.pem | |
*.readme | |
*.license | |
retention-days: 1 | |
Prepare-Docs: | |
runs-on: windows-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: HTMLise Markdown Docs | |
run: | | |
pip3 install markdown | |
( | |
echo ^<html^> | |
echo ^<head^>^<title^>C-Kermit for Windows SSH Readme^</title^>^</head^> | |
echo ^<body^> | |
) > ssh-readme.html | |
( | |
echo ^<html^> | |
echo ^<head^>^<title^>C-Kermit for Windows Change-Log^</title^>^</head^> | |
echo ^<body^> | |
) > change-log.html | |
python -m markdown -x markdown.extensions.fenced_code ${{ github.workspace }}\doc\ssh-readme.md >> ssh-readme.html | |
python -m markdown -x markdown.extensions.fenced_code ${{ github.workspace }}\doc\changes.md >> change-log.html | |
( | |
echo ^</body^> | |
echo ^</html^> | |
) >> change-log.html | |
( | |
echo ^</body^> | |
echo ^</html^> | |
) >> ssh-readme.html | |
shell: cmd | |
working-directory: ${{ github.workspace }} | |
- name: Upload artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: markdown-docs | |
path: | | |
change-log.html | |
ssh-readme.html | |
retention-days: 1 | |
############################################################################## | |
# Build with Visual C++ 14.x (2015/2017/2019/2022) # | |
############################################################################## | |
# This includes the latest compilers available (2022), plus the most recent | |
# capable of still targeting Windows XP (2017). All support x86, x86-64, ARM32 | |
# and ARM64. | |
Build-VisualCxx: | |
runs-on: windows-latest | |
needs: [Get-CACerts-Bundle, Prepare-Docs] | |
strategy: | |
matrix: | |
arch: | |
- x86 | |
- x64 | |
- x64_arm | |
- x64_arm64 | |
toolset: | |
- 14.0 | |
- 14.2 | |
- 14.3 | |
exclude: | |
# No point building ARM or ARM64 targets with anything less than the latest as the latest | |
# still supports the first ARM Windows. | |
- arch: x64_arm | |
toolset: 14.0 | |
- arch: x64_arm | |
toolset: 14.1 | |
- arch: x64_arm | |
toolset: 14.2 | |
- arch: x64_arm64 | |
toolset: 14.0 | |
- arch: x64_arm64 | |
toolset: 14.1 | |
- arch: x64_arm64 | |
toolset: 14.2 | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Enable Developer Command Prompt | |
# You may pin to the exact commit or the version. | |
# uses: ilammy/msvc-dev-cmd@d8610e2b41c6d0f0c3b4c46dad8df0fd826c68e1 | |
uses: ilammy/msvc-dev-cmd@v1.12.0 | |
with: | |
arch: ${{ matrix.arch }} | |
toolset: ${{ matrix.toolset }} | |
#sdk: # use the latest | |
#spectre: # set true to use VC libraries with sepctre mitigations | |
########################################################################## | |
# Build optional dependencies (zlib, openssl, libssh) # | |
########################################################################## | |
- name: Cache Optional Dependencies | |
uses: actions/cache@v3.0.11 | |
id: cache-optional-dependencies | |
with: | |
path: | | |
${{github.workspace}}\zlib | |
${{github.workspace}}\openssl\${{env.OPENSSL_VERSION}} | |
${{github.workspace}}\libssh\${{env.LIBSSH_VERSION}} | |
${{github.workspace}}\libssh\${{env.LIBSSH_VERSION}}-gssapi | |
${{github.workspace}}\libdes\des | |
${{github.workspace}}\libdes\Release | |
${{github.workspace}}\libdes\Debug | |
${{github.workspace}}\tools | |
${{github.workspace}}\kerberos\kfw | |
key: msvc-${{ matrix.toolset }}-${{ matrix.arch }}+zlib-${{env.ZLIB_VERSION}}+openssl-${{env.OPENSSL_VERSION}}+${{env.OPENSSL_MAKE}}+libssh-${{env.LIBSSH_VERSION}}+rel+nasm+xp+dsa+libdes+kfw+ver3 | |
- name: Get dependencies | |
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true' | |
run: | | |
# Get and unpack zlib | |
mkdir zlib | |
cd zlib | |
echo "Fetching ${{env.ZLIB}}/zlib-${{env.ZLIB_VERSION}}.tar.gz to file zlib-${{env.ZLIB_VERSION}}.tar.gz..." | |
wget ${{env.ZLIB}}/zlib-${{env.ZLIB_VERSION}}.tar.gz -outfile zlib-${{env.ZLIB_VERSION}}.tar.gz | |
echo "Cmd is: 7z x zlib-${{env.ZLIB_VERSION}}.tar.gz" | |
7z x zlib-${{env.ZLIB_VERSION}}.tar.gz | |
echo "Cmd is: 7z x zlib-${{env.ZLIB_VERSION}}.tar" | |
7z x zlib-${{env.ZLIB_VERSION}}.tar | |
ren zlib-${{env.ZLIB_VERSION}} ${{env.ZLIB_VERSION}} | |
del *.tar | |
del *.gz | |
cd .. | |
# Get and unpack openssl | |
cd openssl | |
wget https://www.openssl.org/source/openssl-${{env.OPENSSL_VERSION}}.tar.gz -outfile openssl-${{env.OPENSSL_VERSION}}.tar.gz | |
7z x openssl-${{env.OPENSSL_VERSION}}.tar.gz | |
7z x openssl-${{env.OPENSSL_VERSION}}.tar | |
ren openssl-${{env.OPENSSL_VERSION}} ${{env.OPENSSL_VERSION}} | |
del *.tar | |
del *.gz | |
cd .. | |
# Get and unpack libssh | |
cd libssh | |
wget ${{env.LIBSSH_SOURCE}}libssh-${{env.LIBSSH_VERSION}}.tar.xz -outfile libssh-${{env.LIBSSH_VERSION}}.tar.xz | |
7z x libssh-${{env.LIBSSH_VERSION}}.tar.xz | |
7z x libssh-${{env.LIBSSH_VERSION}}.tar | |
ren libssh-${{env.LIBSSH_VERSION}} ${{env.LIBSSH_VERSION}} | |
# And a second copy for the GSSAPI-enabled build (x86 and x86-64 only | |
# at this time) | |
if (("${{matrix.arch}}" -eq "x86") -or ("${{matrix.arch}}" -eq "x64")) { | |
7z x libssh-${{env.LIBSSH_VERSION}}.tar | |
ren libssh-${{env.LIBSSH_VERSION}} ${{env.LIBSSH_VERSION}}-gssapi | |
cd ${{env.LIBSSH_VERSION}}-gssapi | |
mkdir build | |
cd .. | |
} | |
del *.tar | |
del *.xz | |
cd ${{env.LIBSSH_VERSION}} | |
mkdir build | |
cd .. | |
cd .. | |
# Get and unpack libdes | |
cd libdes | |
wget ${{env.LIBDES}} -outfile libdes.tar.gz | |
7z x libdes.tar.gz | |
7z x libdes.tar | |
del *.tar | |
del *.gz | |
cd .. | |
# Get and unpack nasm | |
mkdir tools | |
cd tools | |
wget https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/win32/nasm-2.15.05-win32.zip -outfile nasm-2.15.05-win32.zip | |
7z x nasm-2.15.05-win32.zip | |
ren nasm-2.15.05 nasm | |
del *.zip | |
dir | |
cd nasm | |
dir | |
cd .. | |
# Get and unpack JOM | |
mkdir jom | |
cd jom | |
wget ${{env.JOM}} -outfile jom.zip | |
7z x jom.zip | |
del *.zip | |
cd .. | |
# Get KFW | |
echo Get KFW... | |
mkdir kerberos | |
cd kerberos | |
if ("${{matrix.arch}}" -eq "x86") { | |
echo x86 platform: ${{env.KFW_x86}} | |
wget ${{env.KFW_x86}} -outfile kfw.msi | |
} else { | |
echo x86-64 platform: ${{env.KFW_x86}} | |
wget ${{env.KFW_x86_64}} -outfile kfw.msi | |
} | |
start-process msiexec -argumentlist "/a kfw.msi /qn TARGETDIR=${{github.workspace}}\kerberos\kfw" -wait | |
dir ${{github.workspace}}\kerberos\kfw | |
cd .. | |
cd .. | |
# Install perl modules required by OpenSSL build | |
cpan -i Text::Template | |
shell: powershell | |
# No zlib for ARM - it fails at the link step: | |
# link -nologo -debug -incremental:no -opt:ref -def:./win32/zlib.def -dll -implib:zdll.lib -out:zlib1.dll -base:0x5A4C0000 adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj gzwrite.obj infback.obj inflate.obj inftrees.obj inffast.obj trees.obj uncompr.obj zutil.obj zlib1.res | |
# Creating library zdll.lib and object zdll.exp | |
# LINK : fatal error LNK1355: invalid base address 0x5A4C0000; ARM64 image cannot have base address below 4GB | |
# See bug: https://github.com/madler/zlib/issues/325 | |
- name: Build zlib | |
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true' && (matrix.arch == 'x86' || matrix.arch == 'x64') | |
shell: cmd | |
run: | | |
cd zlib\${{env.ZLIB_VERSION}} | |
cmake . | |
nmake -f win32\Makefile.msc | |
- name: Build openssl (x86) | |
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true' && matrix.arch == 'x86' | |
shell: cmd | |
run: | | |
set PATH=%PATH%;${{github.workspace}}\tools\jom;${{github.workspace}}\tools\nasm | |
echo %PATH% | |
cd openssl\${{env.OPENSSL_VERSION}} | |
perl Configure VC-WIN32 zlib-dynamic --with-zlib-include=${{github.workspace}}\zlib\${{env.ZLIB_VERSION}} ${{env.OPENSSL_EXTRA_BUILD_FLAGS}} | |
${{env.OPENSSL_MAKE}} | |
- name: Build openssl (x86-64) | |
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true' && matrix.arch == 'x64' | |
shell: cmd | |
run: | | |
set PATH=%PATH%;${{github.workspace}}\tools\jom;${{github.workspace}}\tools\nasm | |
echo %PATH% | |
cd openssl\${{env.OPENSSL_VERSION}} | |
perl Configure VC-WIN64A zlib-dynamic --with-zlib-include=${{github.workspace}}\zlib\${{env.ZLIB_VERSION}} ${{env.OPENSSL_EXTRA_BUILD_FLAGS}} | |
${{env.OPENSSL_MAKE}} | |
- name: Build openssl (ARM) | |
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true' && matrix.arch == 'x64_arm' | |
shell: cmd | |
run: | | |
set PATH=%PATH%;${{github.workspace}}\tools\jom;${{github.workspace}}\tools\nasm | |
echo %PATH% | |
cd openssl\${{env.OPENSSL_VERSION}} | |
perl Configure VC-WIN32-ARM ${{env.OPENSSL_EXTRA_BUILD_FLAGS}} | |
${{env.OPENSSL_MAKE}} | |
- name: Build openssl (ARM-64) | |
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true' && matrix.arch == 'x64_arm64' | |
shell: cmd | |
run: | | |
set PATH=%PATH%;${{github.workspace}}\tools\jom;${{github.workspace}}\tools\nasm | |
echo %PATH% | |
cd openssl\${{env.OPENSSL_VERSION}} | |
perl Configure VC-WIN64-ARM ${{env.OPENSSL_EXTRA_BUILD_FLAGS}} | |
${{env.OPENSSL_MAKE}} | |
- name: Build libssh (x86/x86-64) | |
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true' && (matrix.arch == 'x86' || matrix.arch == 'x64') | |
shell: powershell | |
run: | | |
cd libssh\${{env.LIBSSH_VERSION}}\build | |
cmake .. -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DOPENSSL_ROOT_DIR=${{github.workspace}}\openssl\${{env.OPENSSL_VERSION}}\ -DZLIB_ROOT:PATH=${{github.workspace}}\zlib\${{env.ZLIB_VERSION}}\ -DWITH_DSA=ON | |
nmake | |
- name: Build GSSAPI-enabled libssh (x86/x86-64) | |
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true' && (matrix.arch == 'x86' || matrix.arch == 'x64') | |
shell: cmd | |
run: | | |
cd libssh\${{env.LIBSSH_VERSION}}-gssapi | |
patch -p1 < ..\win32-gssapi.patch | |
cd build | |
cmake .. -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DOPENSSL_ROOT_DIR=${{github.workspace}}\openssl\${{env.OPENSSL_VERSION}}\ -DZLIB_ROOT:PATH=${{github.workspace}}\zlib\${{env.ZLIB_VERSION}}\ -DWITH_DSA=ON -DGSSAPI_ROOT_DIR="${{github.workspace}}\kerberos\kfw\Kerberos" | |
nmake | |
# 32bit ARM doesn't get libssh as version 0.10.3 gets link errors there: | |
# misc.c.obj : error LNK2019: unresolved external symbol __imp_GetUserNameA referenced in function ssh_get_local_username | |
# misc.c.obj : error LNK2019: unresolved external symbol __imp_SHGetSpecialFolderPathA referenced in function ssh_get_user_home_dir | |
# zlib is also disabled as it doesn't currently build for ARM | |
- name: Build libssh (arm64) | |
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true' && matrix.arch == 'x64_arm64' | |
shell: powershell | |
run: | | |
cd libssh\${{env.LIBSSH_VERSION}}\build | |
cmake .. -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DOPENSSL_ROOT_DIR=${{github.workspace}}\openssl\${{env.OPENSSL_VERSION}}\ -DWITH_DSA=ON -DWITH_ZLIB=OFF | |
nmake | |
- name: Build libdes | |
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true' | |
shell: cmd | |
run: | | |
set PATH=%PATH%;${{github.workspace}}\tools\jom | |
set MAKE=jom | |
cd libdes\ | |
call mknt.bat | |
########################################################################## | |
# Build K95, K95G and other bits for redistribution # | |
########################################################################## | |
- name: Full Build | |
run: | | |
set k4w_root_override=${{github.workspace}}\kerberos\kfw\Kerberos | |
set openssl_root_override=${{github.workspace}}\openssl\${{env.OPENSSL_VERSION}} | |
set zlib_root_override=${{github.workspace}}\zlib\${{env.ZLIB_VERSION}} | |
set libssh_root_override${{github.workspace}}\libssh\${{env.LIBSSH_VERSION}} | |
call ..\setenv.bat | |
set PATH=%PATH%;${{github.workspace}}\tools\jom | |
set MAKE=jom | |
cd p95 | |
call mknt.bat | |
cd ..\k95 | |
call mk.bat | |
call mkdist.bat | |
REM Check outputs | |
set MISSING_BUILD_RESULTS= | |
for %%y in (${{env.STANDARD_BUILD_OUTPUTS}}) do ( | |
if not exist dist\%%y echo Build result not found: %%y | |
if not exist dist\%%y set MISSING_BUILD_RESULTS=%MISSING_BUILD_RESULTS% %%y | |
if not exist dist\%%y set FAILED=yes | |
) | |
if "%MISSING_BUILD_RESULTS%" NEQ "" echo Missing build outputs: %MISSING_BUILD_RESULTS% | |
if "%MISSING_BUILD_RESULTS%" NEQ "" echo One or more expected outputs are missing - failing build | |
if "%MISSING_BUILD_RESULTS%" NEQ "" exit /b 1 | |
shell: cmd | |
working-directory: ${{ github.workspace }}\kermit\ | |
env: | |
ROOT: ${{ github.workspace }} | |
- name: Dist GSSAPI-enabled libssh (x86/x86-64) | |
if: matrix.arch == 'x86' || matrix.arch == 'x64' | |
shell: cmd | |
working-directory: ${{ github.workspace }}\kermit\k95\dist | |
run: | | |
copy ${{ github.workspace }}\libssh\${{env.LIBSSH_VERSION}}-gssapi\build\src\ssh.dll ssh-gssapi.dll | |
- name: Fetch CA Certs bundle | |
uses: actions/download-artifact@v3 | |
with: | |
name: ca_certs | |
path: ${{ github.workspace }}\kermit\k95\dist | |
- name: Fetch Docs | |
uses: actions/download-artifact@v3 | |
with: | |
name: markdown-docs | |
path: ${{ github.workspace }}\kermit\k95\dist | |
# ARM builds don't currently include SSH so don't need the SSH Readme | |
- name: Remove SSH Readme | |
if: matrix.arch == 'x64_arm' | |
run: del ${{ github.workspace }}\kermit\k95\dist\ssh-readme.html | |
shell: cmd | |
- name: Prepare Artifact | |
shell: cmd | |
working-directory: ${{ github.workspace }}\kermit\k95 | |
run: | | |
move dist ${{ github.workspace }}\ckwin | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v3.1.1 | |
with: | |
name: ckwin-vc${{ matrix.toolset }}-${{ matrix.arch }} | |
path: ${{ github.workspace }}\ckwin | |
if-no-files-found: error | |
retention-days: 7 | |
############################################################################## | |
# Build with Windows 7 Platform SDK version 7.1 (Visual C++ 2010) # | |
############################################################################## | |
# This is the last compiler that can target Itanium. Due to its lack of C99 | |
# support, builds with Visual C++ 2010 and older don't include SSH support. | |
# OpenSSL 1.1.1t is supported however. | |
Build-PSDK71: | |
runs-on: windows-latest | |
needs: [Get-CACerts-Bundle, Prepare-Docs] | |
strategy: | |
matrix: | |
arch: | |
- ia64 | |
#- x86 | |
#- x64 | |
steps: | |
- uses: actions/checkout@v3 | |
########################################################################## | |
# Fetch the compiler # | |
########################################################################## | |
- name: Cache Compiler | |
uses: actions/cache@v3.0.11 | |
id: cache-compiler | |
with: | |
path: | | |
${{github.workspace}}\Microsoft SDKs | |
${{github.workspace}}\Microsoft Visual Studio 10.0 | |
${{github.workspace}}\vc10.cmd | |
${{github.workspace}}\vcredist_x86.exe | |
key: platform-sdk-71-compiler+sdk+redist | |
- name: Get Windows 7 Platform SDK v7.1 | |
if: steps.cache-compiler.outputs.cache-hit != 'true' | |
run: | | |
wget https://ftp.zx.net.nz/pub/dev/WinSDK/win7-7.1-dn4/win7-7.1-sdk-vc.7z -outfile win7-7.1-sdk-vc.7z | |
7z x win7-7.1-sdk-vc.7z | |
wget https://ftp.zx.net.nz/pub/dev/WinSDK/win7-7.1-dn4/win7-7.1-sdk-psdk.7z -outfile win7-7.1-sdk-psdk.7z | |
7z x win7-7.1-sdk-psdk.7z | |
del *.7z | |
wget http://download.microsoft.com/download/5/B/C/5BC5DBB3-652D-4DCE-B14A-475AB85EEF6E/vcredist_x86.exe -outfile vcredist_x86.exe | |
shell: powershell | |
- name: Install the Visual C++ 2010 Runtime | |
run: vcredist_x86.exe /q /norestart | |
shell: cmd | |
working-directory: ${{ github.workspace }} | |
########################################################################## | |
# Build optional dependencies (openssl, libdes) # | |
########################################################################## | |
- name: Cache Optional Dependencies | |
uses: actions/cache@v3.0.11 | |
id: cache-optional-dependencies | |
with: | |
path: | | |
${{github.workspace}}\zlib | |
${{github.workspace}}\openssl\${{env.OPENSSL_VERSION}} | |
${{github.workspace}}\libssh | |
${{github.workspace}}\libdes\des | |
${{github.workspace}}\libdes\Release | |
${{github.workspace}}\libdes\Debug | |
${{github.workspace}}\tools | |
key: platform-sdk-71-optdepts-${{ matrix.arch }}+nasm+openssl-${{env.OPENSSL_VERSION}}+libdes+v3 | |
- name: Get dependencies | |
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true' | |
run: | | |
# Get and unpack openssl | |
cd openssl | |
wget https://www.openssl.org/source/openssl-${{env.OPENSSL_VERSION}}.tar.gz -outfile openssl-${{env.OPENSSL_VERSION}}.tar.gz | |
7z x openssl-${{env.OPENSSL_VERSION}}.tar.gz | |
7z x openssl-${{env.OPENSSL_VERSION}}.tar | |
ren openssl-${{env.OPENSSL_VERSION}} ${{env.OPENSSL_VERSION}} | |
del *.tar | |
del *.gz | |
cd .. | |
# Get and unpack libdes | |
cd libdes | |
wget ${{env.LIBDES}} -outfile libdes.tar.gz | |
7z x libdes.tar.gz | |
7z x libdes.tar | |
del *.tar | |
del *.gz | |
cd .. | |
# Get and unpack nasm | |
mkdir tools | |
cd tools | |
wget https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/win32/nasm-2.15.05-win32.zip -outfile nasm-2.15.05-win32.zip | |
7z x nasm-2.15.05-win32.zip | |
ren nasm-2.15.05 nasm | |
del *.zip | |
dir | |
cd nasm | |
dir | |
cd .. | |
cd .. | |
# Get and unpack JOM | |
cd ${{github.workspace}}\tools | |
mkdir jom | |
cd jom | |
wget ${{env.JOM}} -outfile jom.zip | |
7z x jom.zip | |
del *.zip | |
cd .. | |
cd .. | |
# Install perl modules required by OpenSSL build | |
cpan -i Text::Template | |
shell: powershell | |
- name: Build openssl (ia64) | |
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true' && matrix.arch == 'ia64' | |
shell: cmd | |
run: | | |
SET PlatformToolset=100 | |
set PATH=%PATH%;${{github.workspace}}\tools\jom | |
call vc10.cmd /release /xp /${{matrix.arch}} | |
cd openssl\${{env.OPENSSL_VERSION}} | |
perl Configure VC-WIN64I -D"_WIN32_WINNT=0x502" | |
REM The perl configure script doesn't work quite right for cross-compiling to IA64 | |
REM it leaves the /machine flag off the link flags, so we'll just add it on ourselves. | |
sed -i "s/^LDFLAGS=\/nologo.*/& \/machine:ia64/g" makefile | |
nmake | |
- name: Build openssl (x86-64) | |
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true' && matrix.arch == 'x64' | |
shell: cmd | |
run: | | |
SET PlatformToolset=100 | |
call vc10.cmd /release /xp /${{matrix.arch}} | |
cd openssl\${{env.OPENSSL_VERSION}} | |
set PATH=%PATH%;${{github.workspace}}\tools\nasm;${{github.workspace}}\tools\jom | |
perl Configure VC-WIN64A -D"_WIN32_WINNT=0x502" | |
REM The perl configure script doesn't work quite right for cross-compiling to x64 | |
REM it leaves the /machine flag off the link flags, so we'll just add it on ourselves. | |
sed -i "s/^LDFLAGS=\/nologo.*/& \/machine:x64/g" makefile | |
nmake | |
- name: Build openssl (x86) | |
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true' && matrix.arch == 'x86' | |
shell: cmd | |
run: | | |
SET PlatformToolset=100 | |
call vc10.cmd /release /xp /${{matrix.arch}} | |
cd openssl\${{env.OPENSSL_VERSION}} | |
set PATH=%PATH%;${{github.workspace}}\tools\nasm;${{github.workspace}}\tools\jom | |
perl Configure VC-WIN32 -D"_WIN32_WINNT=0x502" | |
nmake | |
- name: Build libdes | |
if: steps.cache-optional-dependencies.outputs.cache-hit != 'true' | |
shell: cmd | |
run: | | |
SET PlatformToolset=100 | |
call vc10.cmd /release /xp /${{matrix.arch}} | |
set PATH=%PATH%;${{github.workspace}}\tools\jom | |
set MAKE=jom | |
cd libdes | |
call mknt.bat | |
########################################################################## | |
# Build K95, K95G and other bits for redistribution # | |
########################################################################## | |
- name: Full Build | |
run: | | |
echo Configure Platform SDK Build Environment... | |
SET PlatformToolset=100 | |
call vc10.cmd /release /xp /${{matrix.arch}} | |
echo Configure build environment... | |
set openssl_root_override=${{github.workspace}}\openssl\${{env.OPENSSL_VERSION}} | |
call setenv.bat | |
set PATH=%PATH%;${{github.workspace}}\tools\jom | |
set MAKE=jom | |
echo Run Build... | |
cd kermit\p95 | |
call mknt.bat | |
cd ..\k95 | |
call mk.bat | |
call mkdist.bat | |
echo Check outputs... | |
set MISSING_BUILD_RESULTS= | |
for %%y in (${{env.STANDARD_BUILD_OUTPUTS}}) do ( | |
if not exist dist\%%y echo Build result not found: %%y | |
if not exist dist\%%y set MISSING_BUILD_RESULTS=%MISSING_BUILD_RESULTS% %%y | |
if not exist dist\%%y set FAILED=yes | |
) | |
if "%MISSING_BUILD_RESULTS%" NEQ "" echo Missing build outputs: %MISSING_BUILD_RESULTS% | |
if "%MISSING_BUILD_RESULTS%" NEQ "" echo One or more expected outputs are missing - failing build | |
if "%MISSING_BUILD_RESULTS%" NEQ "" exit /b 1 | |
shell: cmd | |
working-directory: ${{ github.workspace }} | |
env: | |
ROOT: ${{ github.workspace }} | |
- name: Fetch CA Certs bundle | |
uses: actions/download-artifact@v3 | |
with: | |
name: ca_certs | |
path: ${{ github.workspace }}\kermit\k95\dist | |
- name: Fetch Docs | |
uses: actions/download-artifact@v3 | |
with: | |
name: markdown-docs | |
path: ${{ github.workspace }}\kermit\k95\dist | |
# Builds with Visual C++ 2010 don't support SSH so don't need the SSH Readme | |
- name: Remove SSH Readme | |
run: del ${{ github.workspace }}\kermit\k95\dist\ssh-readme.html | |
shell: cmd | |
- name: Prepare Artifact | |
shell: cmd | |
working-directory: ${{ github.workspace }}\kermit\k95 | |
run: | | |
move dist ${{ github.workspace }}\ckwin | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v3.1.1 | |
with: | |
name: ckwin-vc10-${{ matrix.arch }} | |
path: ${{ github.workspace }}\ckwin | |
if-no-files-found: error | |
retention-days: 7 | |
############################################################################## | |
# Build with OpenWatcom 1.9 which allows targeting older versions of Windows # | |
############################################################################## | |
# It is also likely to be upset by the same sorts of things as Visual C++ 6 | |
# which reduces the likelihood of accidentally breaking that compiler. | |
Build-OpenWatcom19-Win32: | |
runs-on: windows-latest | |
needs: Prepare-Docs | |
steps: | |
- uses: actions/checkout@v3 | |
# Cache OpenWatcom because it takes quite a while to download and | |
# decompress. | |
- name: Cache OpenWatcom and Dependencies | |
uses: actions/cache@v3.0.11 | |
id: cache-watcom-zinc | |
with: | |
path: | | |
${{github.workspace}}\watcom | |
key: w32-watcom-1.9+openzinc1 | |
- name: Get OpenWatcom 1.9 and Dependencies | |
if: steps.cache-watcom-zinc.outputs.cache-hit != 'true' | |
run: | | |
if (Test-Path watcom) { | |
Remove-Item watcom -Force | |
} | |
mkdir watcom | |
cd watcom | |
wget https://github.com/open-watcom/open-watcom-1.9/releases/download/ow1.9/open-watcom-c-win32-1.9.exe -outfile open-watcom-c-win32-1.9.exe | |
7z x open-watcom-c-win32-1.9.exe | |
cd .. | |
mkdir zinc | |
cd zinc | |
wget ${{ env.OPENZINC }} -outfile OZ1.zip | |
7z x OZ1.zip | |
cd .. | |
shell: powershell | |
- name: Full Build | |
run: | | |
SET PATH=%WATCOM%\BINW;%PATH% | |
SET PATH=%WATCOM%\BINNT;%PATH% | |
SET INCLUDE=%WATCOM%\H\NT;%INCLUDE% | |
SET INCLUDE=%WATCOM%\H\NT;%INCLUDE% | |
SET INCLUDE=%INCLUDE%;C:\WATCOM\H\NT\DIRECTX | |
SET INCLUDE=%INCLUDE%;C:\WATCOM\H\NT\DDK | |
SET INCLUDE=%WATCOM%\H;%INCLUDE% | |
SET EDPATH=%WATCOM%\EDDAT | |
SET WHTMLHELP=%WATCOM%\BINNT\HELP | |
SET WIPFC=%WATCOM%\WIPFC | |
call setenv.bat | |
cd kermit\p95 | |
call mknt.bat | |
cd ..\k95 | |
call mk.bat | |
call mkdist.bat | |
REM Check outputs | |
REM ctl3d.exe | |
set MISSING_BUILD_RESULTS= | |
REM Can't use STANDARD_BUILD_OUTPUTS as we're not building k95crypt.dll | |
REM here for some reason. | |
for %%y in (k95.exe iksd.exe iksdsvc.exe k95d.exe rlogin.exe telnet.exe textps.exe k95g.exe p95.dll) do ( | |
if not exist dist\%%y echo Build result not found: %%y | |
if not exist dist\%%y set MISSING_BUILD_RESULTS=%MISSING_BUILD_RESULTS% %%y | |
if not exist dist\%%y set FAILED=yes | |
) | |
if "%MISSING_BUILD_RESULTS%" NEQ "" echo Missing build outputs: %MISSING_BUILD_RESULTS% | |
if "%MISSING_BUILD_RESULTS%" NEQ "" echo One or more expected outputs are missing - failing build | |
if "%MISSING_BUILD_RESULTS%" NEQ "" exit /b 1 | |
shell: cmd | |
working-directory: ${{ github.workspace }} | |
env: | |
ROOT: ${{ github.workspace }} | |
WATCOM: ${{ github.workspace }}\watcom | |
- name: Dialer Build | |
run: | | |
SET PATH=%WATCOM%\BINW;%PATH% | |
SET PATH=%WATCOM%\BINNT;%PATH% | |
SET INCLUDE=%WATCOM%\H\NT;%INCLUDE% | |
SET INCLUDE=%WATCOM%\H\NT;%INCLUDE% | |
SET INCLUDE=%INCLUDE%;C:\WATCOM\H\NT\DIRECTX | |
SET INCLUDE=%INCLUDE%;C:\WATCOM\H\NT\DDK | |
SET INCLUDE=%WATCOM%\H;%INCLUDE% | |
SET EDPATH=%WATCOM%\EDDAT | |
SET WHTMLHELP=%WATCOM%\BINNT\HELP | |
SET WIPFC=%WATCOM%\WIPFC | |
call setenv.bat | |
cd kermit\dialer | |
call mk.bat | |
call mkdist.bat | |
shell: cmd | |
working-directory: ${{ github.workspace }} | |
env: | |
ROOT: ${{ github.workspace }} | |
WATCOM: ${{ github.workspace }}\watcom | |
- name: Prepare Artifacts | |
shell: cmd | |
working-directory: ${{ github.workspace }}\kermit\k95 | |
run: | | |
move dist ${{ github.workspace }}\ckwin | |
move ..\dialer\dist ${{ github.workspace }}\dialer | |
- name: Fetch Docs | |
uses: actions/download-artifact@v3 | |
with: | |
name: markdown-docs | |
path: ${{ github.workspace }}\ckwin | |
# OpenWatcom builds don't include SSH so don't need the SSH Readme | |
- name: Remove SSH Readme | |
run: del ${{ github.workspace }}\ckwin\ssh-readme.html | |
shell: cmd | |
- name: Upload CKW Artifact | |
uses: actions/upload-artifact@v3.1.1 | |
with: | |
name: ckwin-ow1.9-x86 | |
path: ${{ github.workspace }}\ckwin | |
if-no-files-found: error | |
retention-days: 7 | |
- name: Upload Dialer Artifact | |
uses: actions/upload-artifact@v3.1.1 | |
with: | |
name: dialer-ow1.9-x86 | |
path: ${{ github.workspace }}\dialer | |
if-no-files-found: error | |
retention-days: 7 | |
Build-OpenWatcom19-Win32-NT-legacy: | |
runs-on: windows-latest | |
needs: Prepare-Docs | |
steps: | |
- uses: actions/checkout@v3 | |
# Cache OpenWatcom because it takes quite a while to download and | |
# decompress. | |
- name: Cache OpenWatcom | |
uses: actions/cache@v3.0.11 | |
id: cache-watcom | |
with: | |
path: | | |
${{github.workspace}}\watcom | |
key: nt-watcom-1.9 | |
- name: Get OpenWatcom 1.9 | |
if: steps.cache-watcom.outputs.cache-hit != 'true' | |
run: | | |
if (Test-Path watcom) { | |
Remove-Item watcom -Force | |
} | |
mkdir watcom | |
cd watcom | |
wget https://github.com/open-watcom/open-watcom-1.9/releases/download/ow1.9/open-watcom-c-win32-1.9.exe -outfile open-watcom-c-win32-1.9.exe | |
7z x open-watcom-c-win32-1.9.exe | |
shell: powershell | |
- name: Full Build | |
run: | | |
SET PATH=%WATCOM%\BINW;%PATH% | |
SET PATH=%WATCOM%\BINNT;%PATH% | |
SET INCLUDE=%WATCOM%\H\NT;%INCLUDE% | |
SET INCLUDE=%WATCOM%\H\NT;%INCLUDE% | |
SET INCLUDE=%INCLUDE%;C:\WATCOM\H\NT\DIRECTX | |
SET INCLUDE=%INCLUDE%;C:\WATCOM\H\NT\DDK | |
SET INCLUDE=%WATCOM%\H;%INCLUDE% | |
SET EDPATH=%WATCOM%\EDDAT | |
SET WHTMLHELP=%WATCOM%\BINNT\HELP | |
SET WIPFC=%WATCOM%\WIPFC | |
REM Build for Windows NT 3.50 (and, someday, NT 3.1) | |
set CKT_NT31=yes | |
call ..\setenv.bat | |
cd p95 | |
call mknt.bat | |
cd ..\k95 | |
call mk.bat | |
call mkdist.bat | |
REM Check outputs | |
REM ctl3d.exe | |
set MISSING_BUILD_RESULTS= | |
REM Can't use STANDARD_BUILD_OUTPUTS as we're not building k95crypt.dll | |
REM here for some reason. | |
for %%y in (k95.exe iksd.exe iksdsvc.exe k95d.exe rlogin.exe telnet.exe textps.exe k95g.exe p95.dll) do ( | |
if not exist dist\%%y echo Build result not found: %%y | |
if not exist dist\%%y set MISSING_BUILD_RESULTS=%MISSING_BUILD_RESULTS% %%y | |
if not exist dist\%%y set FAILED=yes | |
) | |
if "%MISSING_BUILD_RESULTS%" NEQ "" echo Missing build outputs: %MISSING_BUILD_RESULTS% | |
if "%MISSING_BUILD_RESULTS%" NEQ "" echo One or more expected outputs are missing - failing build | |
if "%MISSING_BUILD_RESULTS%" NEQ "" exit /b 1 | |
shell: cmd | |
working-directory: ${{ github.workspace }}\kermit | |
env: | |
ROOT: ${{ github.workspace }} | |
WATCOM: ${{ github.workspace }}\watcom | |
- name: Fetch Docs | |
uses: actions/download-artifact@v3 | |
with: | |
name: markdown-docs | |
path: ${{ github.workspace }}\ckwin | |
# OpenWatcom builds don't include SSH so don't need the SSH Readme | |
- name: Remove SSH Readme | |
run: del ${{ github.workspace }}\ckwin\ssh-readme.html | |
shell: cmd | |
- name: Prepare Artifact | |
shell: cmd | |
working-directory: ${{ github.workspace }}\kermit\k95 | |
run: | | |
move dist ${{ github.workspace }}\ckwin | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v3.1.1 | |
with: | |
name: ckwin-ow1.9-x86-nt350 | |
path: ${{ github.workspace }}\ckwin | |
if-no-files-found: error | |
retention-days: 7 | |
############################################################################## | |
# Build C-Kermit for OS/2 with OpenWatcom 1.9 which can cross-compile # | |
############################################################################## | |
Build-OpenWatcom19-OS2: | |
runs-on: windows-latest | |
steps: | |
- uses: actions/checkout@v3 | |
# Cache OpenWatcom because it takes quite a while to download and | |
# decompress. | |
- name: Cache OpenWatcom | |
uses: actions/cache@v3.0.11 | |
id: cache-watcom-zinc | |
with: | |
path: | | |
${{github.workspace}}\watcom | |
${{github.workspace}}\zinc | |
key: os2-watcom-1.9+openzinc1+v2 | |
- name: Get OpenWatcom 1.9 | |
if: steps.cache-watcom-zinc.outputs.cache-hit != 'true' | |
run: | | |
if (Test-Path watcom) { | |
Remove-Item watcom -Force | |
} | |
mkdir watcom | |
cd watcom | |
wget https://github.com/open-watcom/open-watcom-1.9/releases/download/ow1.9/open-watcom-c-win32-1.9.exe -outfile open-watcom-c-win32-1.9.exe | |
7z x open-watcom-c-win32-1.9.exe | |
cd .. | |
mkdir zinc | |
cd zinc | |
wget ${{ env.OPENZINC }} -outfile OZ1.zip | |
7z x OZ1.zip | |
cd .. | |
dir | |
shell: powershell | |
- name: Kermit/2 Build | |
run: | | |
SET PATH=%WATCOM%\BINW;%PATH% | |
SET PATH=%WATCOM%\BINNT;%PATH% | |
SET INCLUDE=%WATCOM%\H;%INCLUDE% | |
SET EDPATH=%WATCOM%\EDDAT | |
SET WHTMLHELP=%WATCOM%\BINNT\HELP | |
SET WIPFC=%WATCOM%\WIPFC | |
call setenv.bat | |
cd kermit\k95 | |
call mkos2.bat | |
call mkdist-os2.bat | |
REM Check outputs | |
set MISSING_BUILD_RESULTS= | |
for %%y in (${{env.OS2_BUILD_OUTPUTS}}) do ( | |
if not exist dist-os2\%%y echo Build result not found: %%y | |
if not exist dist-os2\%%y set MISSING_BUILD_RESULTS=%MISSING_BUILD_RESULTS% %%y | |
if not exist dist-os2\%%y set FAILED=yes | |
) | |
if "%MISSING_BUILD_RESULTS%" NEQ "" echo Missing build outputs: %MISSING_BUILD_RESULTS% | |
if "%MISSING_BUILD_RESULTS%" NEQ "" echo One or more expected outputs are missing - failing build | |
if "%MISSING_BUILD_RESULTS%" NEQ "" exit /b 1 | |
shell: cmd | |
working-directory: ${{ github.workspace }} | |
env: | |
ROOT: ${{ github.workspace }} | |
WATCOM: ${{ github.workspace }}\watcom | |
- name: Dialer Build | |
run: | | |
SET PATH=%WATCOM%\BINW;%PATH% | |
SET PATH=%WATCOM%\BINNT;%PATH% | |
SET INCLUDE=%WATCOM%\H;%INCLUDE% | |
SET EDPATH=%WATCOM%\EDDAT | |
SET WHTMLHELP=%WATCOM%\BINNT\HELP | |
SET WIPFC=%WATCOM%\WIPFC | |
call setenv.bat | |
cd kermit\dialer | |
call mkos2.bat | |
shell: cmd | |
working-directory: ${{ github.workspace }} | |
env: | |
ROOT: ${{ github.workspace }} | |
WATCOM: ${{ github.workspace }}\watcom | |
- name: Make Dialer Distribution | |
run: mkdist-os2.bat | |
shell: cmd | |
working-directory: ${{ github.workspace }}\kermit\dialer | |
env: | |
ROOT: ${{ github.workspace }} | |
WATCOM: ${{ github.workspace }}\watcom | |
- name: Prepare Artifact | |
shell: cmd | |
working-directory: ${{ github.workspace }}\kermit\k95 | |
run: | | |
move ..\dialer\dist-os2\* dist-os2\ | |
move dist-os2 ${{ github.workspace }}\ckos2 | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v3.1.1 | |
with: | |
name: ckos2-ow1.9-x86 | |
path: ${{ github.workspace }}\ckos2 | |
if-no-files-found: error | |
retention-days: 7 | |
############################################################################## | |
# Build with Visual C++ 2003 Toolkit + Windows Server 2003 SP1 Platform SDK # | |
############################################################################## | |
# This is the oldest freely available compiler from Microsoft. The bits come | |
# from the Visual C++ 2003 Toolkit, the Windows Server 2003 SP1 Platform SDK | |
# as described here: | |
# https://epics.anl.gov/base/msvctk.php | |
Build-VCT2003-PSDK2003: | |
runs-on: windows-latest | |
needs: [Get-CACerts-Bundle, Prepare-Docs] | |
strategy: | |
matrix: | |
# Do a build using ancient and insecure libraries like libsrp, k4w | |
# and SuperLAT? This is *purely* for checking support with these | |
# otherwise rarely tested build options doesn't get accidentlaly | |
# broken. | |
legacy_dependencies: | |
- yes | |
- no | |
steps: | |
- uses: actions/checkout@v3 | |
# We need this only to get cvtres.exe which didn't come with either the | |
# Visual C++ 2003 Toolkit or the Windows Server 2003 SP1 Platform SDK. | |
- name: Enable Developer Command Prompt | |
# You may pin to the exact commit or the version. | |
# uses: ilammy/msvc-dev-cmd@d8610e2b41c6d0f0c3b4c46dad8df0fd826c68e1 | |
uses: ilammy/msvc-dev-cmd@v1.12.0 | |
with: | |
arch: x86 | |
toolset: 14.0 | |
# Cache the Visual C++ 2003 Toolkit & Platform SDK because it takes | |
# quite a while to download and decompress and I don't want my FTP | |
# server being hit constantly to download this whenever a build runs. | |
- name: Cache VCT2003 | |
uses: actions/cache@v3.0.11 | |
id: cache-vct2003 | |
with: | |
path: | | |
${{github.workspace}}\vct2003 | |
${{github.workspace}}\jom | |
key: vct2003+psdk2003sp1+jom | |
- name: Get Visual C++ 2003 Toolkit + Platform SDK 2003 | |
if: steps.cache-vct2003.outputs.cache-hit != 'true' | |
run: | | |
wget https://ftp.zx.net.nz/pub/dev/VC2003Toolkit/VCT2003+PSDK2003+cvtres.7z -outfile VCT2003+PSDK2003+cvtres.7z | |
7z x VCT2003+PSDK2003+cvtres.7z | |
Rename-Item -Path "Microsoft Platform SDK 2003SP1" -NewName "VCT2003" | |
Remove-Item VCT2003+PSDK2003+cvtres.7z | |
Remove-Item VCT2003\Bin\Cvtres.exe | |
# Get and unpack JOM | |
mkdir jom | |
cd jom | |
wget ${{env.JOM}} -outfile jom.zip | |
7z x jom.zip | |
del *.zip | |
cd .. | |
shell: powershell | |
- name: Cache legacy dependencies | |
uses: actions/cache@v3.0.11 | |
id: cache-legacy-deps | |
if: matrix.legacy_dependencies == 'yes' | |
with: | |
path: | | |
${{github.workspace}}\srp-2.1.2 | |
${{github.workspace}}\openssl-1.0.1u | |
${{github.workspace}}\kerberos\kfw-2.6-final | |
${{github.workspace}}\libdes\des | |
${{github.workspace}}\libdes\Release | |
${{github.workspace}}\libdes\Debug | |
${{github.workspace}}\superlat | |
${{github.workspace}}\tools | |
key: libdes+libsrp+openssl-1.0.1u+superlat+kfw-2.6.0-ver2 | |
- name: Get Legacy Dependencies | |
if: steps.cache-legacy-deps.outputs.cache-hit != 'true' && matrix.legacy_dependencies == 'yes' | |
run: | | |
# Make sure everything is clean | |
#Remove-Item -Recurse -Force libdes\des | |
#Remove-Item -Recurse -Force libdes\Release | |
#Remove-Item -Recurse -Force libdes\Debug | |
#Remove-Item -Recurse -Force kerberos | |
#Remove-Item -Recurse -Force openssl-1.0.1u | |
#Remove-Item -Recurse -Force srp-2.1.2 | |
#Remove-Item -Recurse -Force tools | |
# Get and unpack nasm | |
mkdir tools | |
cd tools | |
wget https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/win32/nasm-2.15.05-win32.zip -outfile nasm-2.15.05-win32.zip | |
7z x nasm-2.15.05-win32.zip | |
ren nasm-2.15.05 nasm | |
del *.zip | |
dir | |
cd nasm | |
dir | |
cd .. | |
cd .. | |
# Get and unpack libdes | |
cd libdes | |
wget ${{env.LIBDES}} -outfile libdes.tar.gz | |
7z x libdes.tar.gz | |
7z x libdes.tar | |
del *.tar | |
del *.gz | |
cd .. | |
# and libsrp | |
wget http://srp.stanford.edu/source/srp-2.1.2.tar.gz -outfile srp-2.1.2.tar.gz | |
7z x srp-2.1.2.tar.gz | |
7z x srp-2.1.2.tar | |
cd srp-2.1.2 | |
copy ..\srp\* | |
cd .. | |
# and openssl | |
wget https://www.openssl.org/source/old/1.0.1/openssl-1.0.1u.tar.gz -outfile openssl.tar.gz | |
7z x openssl.tar.gz | |
7z x openssl.tar | |
del *.tar | |
del *.gz | |
# and kerberos for windows 2.6.0 (pre-built with Visual C++ 2003 Professional) | |
cd kerberos | |
wget https://ftp.zx.net.nz/pub/dev/lib/kfw/kfw-2.6-final-vc2003.zip -outfile kfw-2.6-final-vc2003.zip | |
7z x *.zip | |
del *.zip | |
cd .. | |
# SuperLAT Headers | |
mkdir superlat | |
cd superlat | |
wget https://web.archive.org/web/20000929005919if_/http://www.meridian.com:80/slatfio.zip -outfile slatfio.zip | |
7z x slatfio.zip | |
mkdir include | |
cd include | |
copy ..\TESTSVC\LATIOC.H | |
copy ..\TESTSVC\NETTYPES.H | |
copy ..\TESTSVC\NTDDTDI.H | |
copy ..\TESTSVC\PACKOFF.H | |
copy ..\TESTSVC\PACKON.H | |
copy ..\TESTSVC\TDI.H | |
copy ..\TESTSVC\TIHDR.H | |
cd .. | |
Remove-Item -Recurse -Force TESTSVC | |
Remove-Item -Recurse -Force CONN | |
del README.1ST | |
del slatfio.zip | |
cd .. | |
# Install perl modules required by OpenSSL build | |
cpan -i Text::Template | |
shell: powershell | |
- name: Build libdes | |
if: steps.cache-legacy-deps.outputs.cache-hit != 'true' && matrix.legacy_dependencies == 'yes' | |
shell: cmd | |
run: | | |
Set PATH=%VCT2003%\bin;%PATH% | |
REM Don't want to pick up headers or libraries from Visual C++ 14.0 | |
REM which is also on here - we only want it for cvtres.exe. | |
Set INCLUDE=%VCT2003%\include | |
Set LIB=%VCT2003%\lib | |
set CKB_STATIC_CRT=yes | |
set PATH=%PATH%;${{github.workspace}}\jom | |
set MAKE=jom | |
cd libdes | |
call mknt.bat | |
env: | |
VCT2003: ${{ github.workspace }}\VCT2003 | |
- name: Build openssl | |
if: steps.cache-legacy-deps.outputs.cache-hit != 'true' && matrix.legacy_dependencies == 'yes' | |
shell: cmd | |
run: | | |
Set PATH=%VCT2003%\bin;%PATH% | |
REM Don't want to pick up headers or libraries from Visual C++ 14.0 | |
REM which is also on here - we only want it for cvtres.exe. | |
Set INCLUDE=%VCT2003%\include | |
Set LIB=%VCT2003%\lib;%LIB% | |
cd openssl-1.0.1u | |
set PATH=%PATH%;${{github.workspace}}\tools\nasm | |
perl Configure VC-WIN32 enable-static-engine | |
call ms\do_ms.bat | |
REM adjust the makefile to statically link | |
sed -i "s/\/MD /\/MT /g" ms\ntdll.mak | |
nmake -f ms\ntdll.mak | |
env: | |
VCT2003: ${{ github.workspace }}\VCT2003 | |
- name: Build libsrp | |
if: steps.cache-legacy-deps.outputs.cache-hit != 'true' && matrix.legacy_dependencies == 'yes' | |
shell: cmd | |
run: | | |
Set PATH=%VCT2003%\bin;%PATH% | |
REM Don't want to pick up headers or libraries from Visual C++ 14.0 | |
REM which is also on here - we only want it for cvtres.exe. | |
Set INCLUDE=%VCT2003%\include | |
Set LIB=%VCT2003%\lib | |
set CKB_STATIC_CRT=yes | |
set openssl_root_override=${{ github.workspace }}\openssl-1.0.1u | |
set srp_root_override=${{ github.workspace }}\srp-2.1.2 | |
call setenv.bat | |
cd %srp_root_override% | |
call mknt.bat | |
env: | |
ROOT: ${{ github.workspace }} | |
VCT2003: ${{ github.workspace }}\VCT2003 | |
- name: Full Build | |
run: | | |
Set PATH=%VCT2003%\bin;%PATH% | |
REM Don't want to pick up headers or libraries from Visual C++ 14.0 | |
REM which is also on here - we only want it for cvtres.exe. | |
Set INCLUDE=%VCT2003%\include | |
Set LIB=%VCT2003%\lib | |
set openssl_root_override=${{ github.workspace }}\openssl-1.0.1u | |
set srp_root_override=${{ github.workspace }}\srp-2.1.2 | |
set k4w_root_override=${{ github.workspace }}\kerberos\kfw-2.6-final\src | |
call setenv.bat | |
set PATH=%PATH%;${{github.workspace}}\jom | |
set MAKE=jom | |
REM The Visual C++ 2003 Toolkit can only statically link the C Runtime | |
REM (though apparently you can get the required import library for | |
REM dynamic linking from the .NET SDK 1.1) | |
set CKB_STATIC_CRT=yes | |
cd kermit | |
echo Building p95... | |
cd p95 | |
call mknt.bat | |
echo Building CKW... | |
cd ..\k95 | |
call mk.bat | |
call mkdist.bat | |
REM Check outputs | |
set MISSING_BUILD_RESULTS= | |
REM ctl3dins.exe | |
for %%y in (k95.exe iksd.exe iksdsvc.exe k95d.exe rlogin.exe telnet.exe textps.exe k95g.exe p95.dll) do ( | |
if not exist dist\%%y echo Build result not found: %%y | |
if not exist dist\%%y set MISSING_BUILD_RESULTS=%MISSING_BUILD_RESULTS% %%y | |
if not exist dist\%%y set FAILED=yes | |
) | |
if "%MISSING_BUILD_RESULTS%" NEQ "" echo Missing build outputs: %MISSING_BUILD_RESULTS% | |
if "%MISSING_BUILD_RESULTS%" NEQ "" echo One or more expected outputs are missing - failing build | |
if "%MISSING_BUILD_RESULTS%" NEQ "" exit /b 1 | |
shell: cmd | |
working-directory: ${{ github.workspace }} | |
env: | |
ROOT: ${{ github.workspace }} | |
VCT2003: ${{ github.workspace }}\VCT2003 | |
- name: Full Build Non-standard configs | |
run: | | |
Set PATH=%VCT2003%\bin;%PATH% | |
REM Don't want to pick up headers or libraries from Visual C++ 14.0 | |
REM which is also on here - we only want it for cvtres.exe. | |
Set INCLUDE=%VCT2003%\include | |
Set LIB=%VCT2003%\lib | |
set openssl_root_override=${{ github.workspace }}\openssl-1.0.1u | |
set srp_root_override=${{ github.workspace }}\srp-2.1.2 | |
set k4w_root_override=${{ github.workspace }}\kerberos\kfw-2.6-final\src | |
call setenv.bat | |
set PATH=%PATH%;${{github.workspace}}\jom | |
set MAKE=jom | |
REM The Visual C++ 2003 Toolkit can only statically link the C Runtime | |
REM (though apparently you can get the required import library for | |
REM dynamic linking from the .NET SDK 1.1) | |
set CKB_STATIC_CRT=yes | |
cd kermit\k95 | |
echo Cleaning... | |
call clean.bat | |
echo Building iksdnt... | |
call mkiksd.bat | |
echo Building kui... | |
call mkkui.bat | |
mkdir dist-misc | |
move *.exe dist-misc | |
REM Check outputs | |
set MISSING_BUILD_RESULTS= | |
for %%y in (cknkui.exe iksdnt.exe) do ( | |
if not exist dist-misc\%%y echo Build result not found: %%y | |
if not exist dist-misc\%%y set MISSING_BUILD_RESULTS=%MISSING_BUILD_RESULTS% %%y | |
if not exist dist-misc\%%y set FAILED=yes | |
) | |
if "%MISSING_BUILD_RESULTS%" NEQ "" echo Missing build outputs: %MISSING_BUILD_RESULTS% | |
if "%MISSING_BUILD_RESULTS%" NEQ "" echo One or more expected outputs are missing - failing build | |
if "%MISSING_BUILD_RESULTS%" NEQ "" exit /b 1 | |
shell: cmd | |
working-directory: ${{ github.workspace }} | |
env: | |
ROOT: ${{ github.workspace }} | |
VCT2003: ${{ github.workspace }}\VCT2003 | |
- name: Check additional legacy outputs | |
if: matrix.legacy_dependencies == 'yes' | |
shell: cmd | |
working-directory: ${{ github.workspace }}\kermit\k95 | |
run: | | |
REM Check outputs | |
set MISSING_BUILD_RESULTS= | |
REM TODO: srp-tconf.exe srp-passwd.exe | |
REM TODO: Kerberos bits | |
for %%y in (k95crypt.dll) do ( | |
if not exist dist\%%y echo Build result not found: %%y | |
if not exist dist\%%y set MISSING_BUILD_RESULTS=%MISSING_BUILD_RESULTS% %%y | |
if not exist dist\%%y set FAILED=yes | |
) | |
if "%MISSING_BUILD_RESULTS%" NEQ "" echo Missing legacy build outputs: %MISSING_BUILD_RESULTS% | |
if "%MISSING_BUILD_RESULTS%" NEQ "" echo One or more expected outputs are missing - failing build | |
if "%MISSING_BUILD_RESULTS%" NEQ "" exit /b 1 | |
- name: Fetch CA Certs bundle | |
if: matrix.legacy_dependencies == 'yes' | |
uses: actions/download-artifact@v3 | |
with: | |
name: ca_certs | |
path: ${{ github.workspace }}\kermit\k95\dist | |
- name: Fetch Docs | |
uses: actions/download-artifact@v3 | |
with: | |
name: markdown-docs | |
path: ${{ github.workspace }}\kermit\k95\dist | |
# Builds with Visual C++ 2003 include SSH so don't need the SSH Readme | |
- name: Remove SSH Readme | |
run: del ${{ github.workspace }}\kermit\k95\dist\ssh-readme.html | |
shell: cmd | |
- name: Prepare Artifact | |
shell: cmd | |
working-directory: ${{ github.workspace }}\kermit\k95 | |
run: | | |
move dist ${{ github.workspace }}\ckwin | |
move dist-misc ${{ github.workspace }}\ckwin-extra | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v3.1.1 | |
if: matrix.legacy_dependencies == 'no' | |
with: | |
name: ckwin-vc7.1-x86 | |
path: ${{ github.workspace }}\ckwin | |
if-no-files-found: error | |
retention-days: 7 | |
- name: Upload Artifact (extra) | |
uses: actions/upload-artifact@v3.1.1 | |
if: matrix.legacy_dependencies == 'no' | |
with: | |
name: ckwin-vc7.1-x86-extra | |
path: ${{ github.workspace }}\ckwin-extra | |
if-no-files-found: error | |
retention-days: 7 | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v3.1.1 | |
if: matrix.legacy_dependencies == 'yes' | |
with: | |
name: ckwin-vc7.1-x86-insecure | |
path: ${{ github.workspace }}\ckwin | |
if-no-files-found: error | |
retention-days: 7 | |
- name: Upload Artifact (extra) | |
uses: actions/upload-artifact@v3.1.1 | |
if: matrix.legacy_dependencies == 'yes' | |
with: | |
name: ckwin-vc7.1-x86-insecure-extra | |
path: ${{ github.workspace }}\ckwin-extra | |
if-no-files-found: error | |
retention-days: 7 | |
############################################################################## | |
# Build for Itanium with the Windows Server 2003 SP1 Platform SDK # | |
############################################################################## | |
# This uses Visual C++ 2005 | |
# | |
Build-PSDK2003SP1-IA64: | |
runs-on: windows-latest | |
needs: Prepare-Docs | |
steps: | |
- uses: actions/checkout@v3 | |
# We need this only to get cvtres.exe which didn't come with either the | |
# Visual C++ 2003 Toolkit or the Windows Server 2003 SP1 Platform SDK. | |
- name: Enable Developer Command Prompt | |
# You may pin to the exact commit or the version. | |
# uses: ilammy/msvc-dev-cmd@d8610e2b41c6d0f0c3b4c46dad8df0fd826c68e1 | |
uses: ilammy/msvc-dev-cmd@v1.12.0 | |
with: | |
arch: x86 | |
toolset: 14.0 | |
# Cache the Visual C++ 2003 Toolkit & Platform SDK because it takes | |
# quite a while to download and decompress and I don't want my FTP | |
# server being hit constantly to download this whenever a build runs. | |
- name: Cache VCT2003+libdes | |
uses: actions/cache@v3.0.11 | |
id: cache-vct2003 | |
with: | |
path: | | |
${{github.workspace}}\vct2003 | |
${{github.workspace}}\libdes\des | |
${{github.workspace}}\libdes\Release | |
${{github.workspace}}\libdes\Debug | |
${{github.workspace}}\tools | |
key: vct2003+psdk2003sp1+libdes+v2+jom1 | |
- name: Get Visual C++ 2003 Toolkit + Platform SDK 2003 + libdes | |
if: steps.cache-vct2003.outputs.cache-hit != 'true' | |
run: | | |
wget https://ftp.zx.net.nz/pub/dev/VC2003Toolkit/VCT2003+PSDK2003+cvtres.7z -outfile VCT2003+PSDK2003+cvtres.7z | |
7z x VCT2003+PSDK2003+cvtres.7z | |
Rename-Item -Path "Microsoft Platform SDK 2003SP1" -NewName "VCT2003" | |
Remove-Item VCT2003+PSDK2003+cvtres.7z | |
Remove-Item VCT2003\Bin\Cvtres.exe | |
mkdir tools | |
# Get and unpack JOM | |
cd tools | |
mkdir jom | |
cd jom | |
wget ${{env.JOM}} -outfile jom.zip | |
7z x jom.zip | |
del *.zip | |
cd .. | |
cd .. | |
# Get and unpack libdes | |
cd libdes | |
wget ${{env.LIBDES}} -outfile libdes.tar.gz | |
7z x libdes.tar.gz | |
7z x libdes.tar | |
del *.tar | |
del *.gz | |
cd .. | |
shell: powershell | |
- name: Full Build | |
run: | | |
Set PATH=%VCT2003%\bin\win64;%VCT2003%\bin;%PATH% | |
REM Don't want to pick up headers or libraries from Visual C++ 14.0 | |
REM which is also on here - we only want it for cvtres.exe. | |
Set INCLUDE=%VCT2003%\include | |
Set LIB=%VCT2003%\lib\ia64 | |
call setenv.bat | |
set PATH=%PATH%;${{github.workspace}}\tools\jom | |
set MAKE=jom | |
cd libdes | |
call mknt.bat | |
cd .. | |
cd kermit\p95 | |
call mknt.bat | |
cd ..\k95 | |
call mk.bat | |
call mkdist.bat | |
REM Check outputs | |
set MISSING_BUILD_RESULTS= | |
for %%y in (${{env.STANDARD_BUILD_OUTPUTS}}) do ( | |
if not exist dist\%%y echo Build result not found: %%y | |
if not exist dist\%%y set MISSING_BUILD_RESULTS=%MISSING_BUILD_RESULTS% %%y | |
if not exist dist\%%y set FAILED=yes | |
) | |
if "%MISSING_BUILD_RESULTS%" NEQ "" echo Missing build outputs: %MISSING_BUILD_RESULTS% | |
if "%MISSING_BUILD_RESULTS%" NEQ "" echo One or more expected outputs are missing - failing build | |
if "%MISSING_BUILD_RESULTS%" NEQ "" exit /b 1 | |
shell: cmd | |
working-directory: ${{ github.workspace }} | |
env: | |
ROOT: ${{ github.workspace }} | |
VCT2003: ${{ github.workspace }}\VCT2003 | |
- name: Fetch Docs | |
uses: actions/download-artifact@v3 | |
with: | |
name: markdown-docs | |
path: ${{ github.workspace }}\kermit\k95\dist | |
# Builds with Visual C++ 2005 don't include SSH so don't need the SSH Readme | |
- name: Remove SSH Readme | |
if: matrix.arch == 'x64_arm' | |
run: del ${{ github.workspace }}\kermit\k95\dist\ssh-readme.html | |
shell: cmd | |
- name: Prepare Artifact | |
shell: cmd | |
working-directory: ${{ github.workspace }}\kermit\k95 | |
run: | | |
move dist ${{ github.workspace }}\ckwin | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v3.1.1 | |
with: | |
name: ckwin-vc8-ia64 | |
path: ${{ github.workspace }}\ckwin | |
if-no-files-found: error | |
retention-days: 7 | |
############################################################################## | |
# Cross-compile for 64bit Windows from Linux with MinGW64 # | |
############################################################################## | |
# Not for release builds. Just to ensure GCC/MinGW compatibility doesn't get | |
# broken accidentally. | |
# | |
Build-MinGW64-Linux: | |
runs-on: ubuntu-latest | |
needs: [Get-CACerts-Bundle, Prepare-Docs] | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Install MinGW-w64 | |
run: sudo apt install -y g++-mingw-w64-x86-64-posix gcc-mingw-w64-x86-64-posix binutils-mingw-w64-x86-64 | |
- name: Cache Dependencies | |
uses: actions/cache@v3.0.11 | |
id: cache-dependencies | |
with: | |
path: | | |
${{github.workspace}}/openssl | |
${{github.workspace}}/libssh | |
${{github.workspace}}/zlib | |
key: deps-openssl-${{env.OPENSSL_VERSION}}-parallel | |
- name: Build OpenSSL | |
if: steps.cache-dependencies.outputs.cache-hit != 'true' | |
shell: bash | |
env: | |
CXX: /usr/bin/x86_64-w64-mingw32-c++ | |
CC: /usr/bin/x86_64-w64-mingw32-gcc | |
RC: /usr/bin/x86_64-w64-mingw32-windres | |
run: | | |
mkdir -p openssl | |
cd openssl | |
wget https://www.openssl.org/source/openssl-${{env.OPENSSL_VERSION}}.tar.gz | |
tar zxf openssl-${{env.OPENSSL_VERSION}}.tar.gz | |
rm openssl-${{env.OPENSSL_VERSION}}.tar.gz | |
cd openssl-${{env.OPENSSL_VERSION}} | |
perl Configure mingw64 | |
make depend | |
make -j 2 | |
- name: Build | |
shell: bash | |
env: | |
CXX: /usr/bin/x86_64-w64-mingw32-c++ | |
CC: /usr/bin/x86_64-w64-mingw32-gcc | |
run: | | |
cd kermit/k95 | |
make -j 2 RC=/usr/bin/x86_64-w64-mingw32-windres OPENSSL=../../openssl/openssl-${{env.OPENSSL_VERSION}}/ | |
- name: Make Distribution | |
shell: bash | |
run: | | |
pushd kermit/k95 | |
bash ./mkdist.sh | |
popd | |
mv kermit/k95/ckwin ./ | |
- name: Fetch CA Certs bundle | |
uses: actions/download-artifact@v3 | |
with: | |
name: ca_certs | |
path: ${{ github.workspace }}/ckwin | |
- name: Fetch Docs | |
uses: actions/download-artifact@v3 | |
with: | |
name: markdown-docs | |
path: ${{ github.workspace }}/ckwin | |
# We're not currently building libssh on linux so remove the ssh readme | |
- name: Remove SSH Readme | |
run: rm ${{ github.workspace }}/ckwin/ssh-readme.html | |
shell: bash | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v3.1.1 | |
with: | |
name: ckwin-mingw64-cross | |
path: ${{ github.workspace }}/ckwin | |
if-no-files-found: error | |
############################################################################## | |
# Build C-Kermit for Linux with the ckwin version of the shared modules # | |
############################################################################## | |
# To ensure any local changes to ckc* and cku* modules haven't accidentally | |
# broken C-Kermit on Linux, grab the latest linux code and substitute in | |
# our version of these files to check it all still builds. | |
# | |
# Note that if we get out-of-sync with C-Kermit for UNIX changes this may | |
# run into build errors. | |
# | |
# This also isn't anywhere near a perfect test. Just because this builds | |
# doesn't mean we haven't broken something on OpenVMS or Solaris or AIX | |
# or Digital UNIX or BSD or MacOS X or any number of other platforms. | |
C-Kermit-Linux-Build-Test: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Install dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get install libpam-dev openssl libssl-dev | |
# Cache the C-Kermit code so that we're not hitting the C-Kermit website | |
# for every build. | |
- name: Cache code | |
uses: actions/cache@v3.0.11 | |
id: cache-code | |
with: | |
path: | | |
${{github.workspace}}/ckermit | |
${{github.workspace}}/openssl | |
key: ${{ runner.os }}-ckermit${{ env.C_KERMIT_VERSION }}-r1 | |
- name: Get C-Kermit ${{env.C_KERMIT_VERSION}} | |
if: steps.cache-code.outputs.cache-hit != 'true' | |
run: | | |
wget ${{ env.C_KERMIT_CODE }} -O ckermit.tar.gz | |
mkdir -p ckermit | |
pushd ckermit | |
tar -zxvf ../ckermit.tar.gz | |
popd | |
rm ckermit.tar.gz | |
shell: bash | |
- name: Copy C-Kermit for Unix files | |
run: | | |
pushd ckermit | |
cp -n ../kermit/k95/cku* ./ | |
cp -n ../kermit/k95/ckc* ./ | |
popd | |
shell: bash | |
- name: Build C-Kermit | |
run: | | |
pushd ckermit | |
chmod +x ckubuildlog | |
make clean | |
make linux+ssl | tee log | |
./ckubuildlog | |
cat linux+ssl.txt | |
popd | |
shell: bash |