Skip to content

Full Build

Full Build #676

Workflow file for this run

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.13
# Exoected filename: ${{env.LIBSSH_SOURCE}}libssh-${{env.LIBSSH_VERSION}}.tar.xz
LIBSSH_SOURCE: https://www.libssh.org/files/0.10/
LIBSSH_VERSION: 0.10.6
# 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