Skip to content

Windows MSYS1 (build only) #286

Windows MSYS1 (build only)

Windows MSYS1 (build only) #286

Workflow file for this run

name: Windows MSYS1 Workflow
on:
workflow_dispatch:
inputs:
run_id:
description: 'The run ID of the workflow providing the CI tarball'
required: true
env:
MSYS_ROOT: C:\MinGW
MSYS_BIN: C:\MinGW\msys\1.0\bin
#BISON_PKGDATADIR: C:\MinGW\share\bison
M4: m4
MSYSTEM: MINGW32
MSYSPKGS: msys-m4 msys-flex msys-coreutils msys-help2man msys-bison msys-patch
# GC4+:
#MSYSPKGS: msys-m4 msys-flex msys-coreutils msys-help2man
#MINGW_BISON_VERS: bison-3.6 # minimal for GC 4.x+
MINGW_GMP_VERS: gmp-6.3.0 # always update for performance reasons
MINGW_BDB_VERS: db-6.0.19.NC
MINGW_PDCM_VERS: 4.4.0
MINGW_CJSON_VERS: 1.7.18
MINGW_XML2_VERS: 2.8.0
defaults:
run:
shell: cmd
jobs:
build:
strategy:
fail-fast: false
matrix:
target:
- debug
- release
runs-on: windows-latest
timeout-minutes: 45
steps:
#- name: Set git user
# run: |
# git config --global user.name github-actions
# git config --global user.email [email protected]
#- name: Checkout code
# uses: actions/checkout@v4
- name: Get CI dist tarball
uses: actions/download-artifact@v4
with:
name: gnucobol-ci source distribution
run-id: ${{ github.event.inputs.run_id }}
github-token: ${{ secrets.GITHUB_TOKEN }}
#- name: Display structure of downloaded files
# run: ls -R
- name: Build environment setup
run: |
bash -lc "tar -xvf gnucobol*.tar.* --strip-components=1"
mkdir build
rem sed -i 'N;s/else/else :;/g' .\configure
rem sed -i 's/\} else \:;/} else/g' .\configure
rem sed -i 's/#else \:;/#else/g' .\configure
- name: Setup environment
shell: pwsh
run: |
echo GITHUB_WORKSPACE=$env:GITHUB_WORKSPACE >> $env:GITHUB_ENV
echo HOME=$env:GITHUB_WORKSPACE >> $env:GITHUB_ENV
echo PATH="$env:MSYS_BIN;$env:PATH" >> $env:GITHUB_ENV
If ("${{ matrix.target }}" -eq "release") {
echo DISTDIR=GnuCOBOL_mingw >> $env:GITHUB_ENV
echo CFGOPT= >> $env:GITHUB_ENV
} Else {
echo DISTDIR=GnuCOBOL_mingw_dbg >> $env:GITHUB_ENV
echo CFGOPT="--enable-debug --enable-cobc-internal-checks --enable-hardening" >> $env:GITHUB_ENV
}
- name: Restore MSYS1 cache
id: restore-msys
uses: actions/cache/restore@v4
with:
key: cache-msys
path: ${{ env.MSYS_ROOT }}
- name: Install MSYS1
if: steps.restore-msys.outputs.cache-hit != 'true'
run: |
curl -O https://www.arnoldtrembley.com/MinGW-bkup02.7z
7z x -y MinGW-bkup02.7z -o%MSYS_ROOT%\
- name: Install MSYS1 packages
if: steps.restore-msys.outputs.cache-hit != 'true'
run: |
bash -lc "mingw-get install %MSYSPKGS%"
- name: Cleanup MSYS1 env
if: steps.restore-msys.outputs.cache-hit != 'true'
run: |
rmdir /Q /S %MSYS_ROOT%\docs
rmdir /Q /S %MSYS_ROOT%\var
del /Q %MSYS_ROOT%\bin\gdb.exe
- name: Save MSYS1 cache
if: steps.restore-msys.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
key: cache-msys
path: ${{ env.MSYS_ROOT }}
# - name: Restore Bison cache
# id: restore-bison
# uses: actions/cache/restore@v4
# with:
# key: cache-msys-bison
# path: ${{ env.MINGW_BISON_VERS }}
# - name: Install Bison
# if: steps.restore-bison.outputs.cache-hit != 'true'
# run: |
# curl -L https://ftp.gnu.org/gnu/bison/%MINGW_BISON_VERS%.tar.gz -o %MINGW_BISON_VERS%.tar.gz
# tar -xvf %MINGW_BISON_VERS%.tar.gz
# bash -lc "cd %MINGW_BISON_VERS% && ./configure --prefix=/mingw && make"
# - name: Install Bison
# run: |
# bash -lc "make -C %MINGW_BISON_VERS% install"
# - name: Save Bison cache
# if: steps.restore-bison.outputs.cache-hit != 'true'
# uses: actions/cache/save@v4
# with:
# key: cache-msys-bison
# path: ${{ env.MINGW_BISON_VERS }}
- name: Restore GMP cache
id: restore-gmp
uses: actions/cache/restore@v4
with:
key: cache-msys-gmp
path: ${{ env.MINGW_GMP_VERS }}
- name: Build GMP
if: steps.restore-gmp.outputs.cache-hit != 'true'
run: |
rem note: MSYS1 cannot connect to https://gmplib.org, so using GNU mirror side instead
curl -L https://ftp.gnu.org/gnu/gmp/%MINGW_GMP_VERS%.tar.xz -o %MINGW_GMP_VERS%.tar.xz
tar -xvf %MINGW_GMP_VERS%.tar.xz
bash -lc "cd %MINGW_GMP_VERS% && ./configure --prefix=/mingw --enable-fat --enable-shared --disable-static CFLAGS=\"-Wno-attributes -Wno-ignored-attributes\" ABI=32 && make --jobs=$(($(nproc)+1))"
- name: Install GMP
run: |
bash -lc "make -C %MINGW_GMP_VERS% install"
- name: Save GMP cache
if: steps.restore-gmp.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
key: cache-msys-gmp
path: ${{ env.MINGW_GMP_VERS }}
- name: Restore BDB cache
id: restore-bdb
uses: actions/cache/restore@v4
with:
key: cache-msys-bdb
path: ${{ env.MINGW_BDB_VERS }}
- name: Build BDB
if: steps.restore-bdb.outputs.cache-hit != 'true'
run: |
curl -L https://download.oracle.com/berkeley-db/%MINGW_BDB_VERS%.tar.gz -o %MINGW_BDB_VERS%.tar.gz
curl -L https://raw.githubusercontent.com/msys2/MINGW-packages/refs/heads/master/mingw-w64-db/0001-db-tls-m4-fix-pthread.patch -o db-tls-m4-fix-pthread.patch
curl -L https://raw.githubusercontent.com/msys2/MINGW-packages/refs/heads/master/mingw-w64-db/mingw.patch -o mingw.patch
curl -L https://raw.githubusercontent.com/msys2/MINGW-packages/refs/heads/master/mingw-w64-db/cclang_cxx_11.patch -o cx11.patch
tar -xvf %MINGW_BDB_VERS%.tar.gz
sed -i 's/_tcsclen/_mbslen/' %MINGW_BDB_VERS%\src\os_windows\os_stat.c
bash -lc "cd %MINGW_BDB_VERS% && patch -p1 -i ../db-tls-m4-fix-pthread.patch"
bash -lc "cd %MINGW_BDB_VERS% && patch -p1 -i ../mingw.patch"
bash -lc "cd %MINGW_BDB_VERS% && patch -p1 -i ../cx11.patch"
bash -lc "cd %MINGW_BDB_VERS%/build_unix && ../dist/configure --prefix=/mingw --enable-mingw --enable-debug --disable-static --disable-replication --disable-tcl --without-cryptography LIBCSO_LIBS=-lwsock32 && make --jobs=$(($(nproc)+1))"
- name: Install BDB
run: |
bash -lc "make -C %MINGW_BDB_VERS%/build_unix install"
- name: Save BDB cache
if: steps.restore-bdb.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
key: cache-msys-bdb
path: ${{ env.MINGW_BDB_VERS }}
- name: Restore PDCursesMod cache
id: restore-pdcm
uses: actions/cache/restore@v4
with:
key: cache-msys-pdcm
path: PDCursesMod-${{ env.MINGW_PDCM_VERS }}
- name: Build PDCursesMod
if: steps.restore-pdcm.outputs.cache-hit != 'true'
run: |
curl -L https://github.com/Bill-Gray/PDCursesMod/archive/refs/tags/v%MINGW_PDCM_VERS%.tar.gz -o "PDCursesMod-%MINGW_PDCM_VERS%.tar.xz"
tar -xvf PDCursesMod-%MINGW_PDCM_VERS%.tar.xz
bash -lc "cd PDCursesMod-%MINGW_PDCM_VERS% && make -C wincon --jobs=$(($(nproc)+1)) INFOEX=N CHTYPE_64=Y DEBUG=Y DLL=Y DLLNAME=libpdcurses LIBNAME=libpdcurses.dll"
bash -lc "cd PDCursesMod-%MINGW_PDCM_VERS% && make -C wingui --jobs=$(($(nproc)+1)) CHTYPE_64=Y DEBUG=Y DLL=Y DLLNAME=libpdcurses LIBNAME=libpdcurses.dll"
bash -lc "cd PDCursesMod-%MINGW_PDCM_VERS% && make -C vt --jobs=$(($(nproc)+1)) CHTYPE_64=Y DEBUG=Y DLL=Y DLLNAME=libpdcurses LIBNAME=libpdcurses.dll CFLAGS=\"-Wall -Wextra -pedantic -g -DPDCDEBUG -fPIC -DPDC_DLLbuild\""
echo #define CHTYPE_64 > PDCursesMod-%MINGW_PDCM_VERS%\pdcurses.h
echo #define PDC_DLLbuild >> PDCursesMod-%MINGW_PDCM_VERS%\pdcurses.h
echo #include "pdcurses/curses.h" >> PDCursesMod-%MINGW_PDCM_VERS%\pdcurses.h
- name: Install PDCursesMod
run: |
bash -lc "cd PDCursesMod-%MINGW_PDCM_VERS% && install wincon/libpdcurses.dll.a /mingw/lib/"
bash -lc "cd PDCursesMod-%MINGW_PDCM_VERS% && install wincon/libpdcurses.dll /mingw/bin/"
bash -lc "cd PDCursesMod-%MINGW_PDCM_VERS% && install wincon/libpdcurses.dll /mingw/bin/libpdcurses-wincon.dll"
bash -lc "cd PDCursesMod-%MINGW_PDCM_VERS% && install wingui/libpdcurses.dll /mingw/bin/libpdcurses-wingui.dll"
bash -lc "cd PDCursesMod-%MINGW_PDCM_VERS% && install vt/libpdcurses.dll /mingw/bin/libpdcurses-vt.dll"
bash -lc "install -d /mingw/include/pdcurses"
bash -lc "cd PDCursesMod-%MINGW_PDCM_VERS% && install -m 0644 curses.h panel.h term.h /mingw/include/pdcurses/"
bash -lc "cd PDCursesMod-%MINGW_PDCM_VERS% && install -m 0644 pdcurses.h /mingw/include/"
- name: Save PDCursesMod cache
if: steps.restore-pdcm.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
key: cache-msys-pdcm
path: PDCursesMod-${{ env.MINGW_PDCM_VERS }}
- name: Restore LibXML2 cache
id: restore-xml2
uses: actions/cache/restore@v4
with:
key: cache-msys-xml2
path: libxml2-${{ env.MINGW_XML2_VERS }}
- name: Build LibXML2
if: steps.restore-xml2.outputs.cache-hit != 'true'
run: |
curl -L https://github.com/GNOME/libxml2/archive/refs/tags/v%MINGW_XML2_VERS%.tar.gz -o libxml2-%MINGW_XML2_VERS%.tar.xz
tar -xvf libxml2-%MINGW_XML2_VERS%.tar.xz
bash -lc "cd libxml2-%MINGW_XML2_VERS% && ./autogen.sh"
bash -lc "cd libxml2-%MINGW_XML2_VERS% && ./configure --prefix=/mingw --enable-debug && make --jobs=$(($(nproc)+1))"
- name: Install LibXML2
run: |
bash -lc "make -C libxml2-%MINGW_XML2_VERS% install"
- name: Save LibXML2 cache
if: steps.restore-xml2.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
key: cache-msys-xml2
path: libxml2-${{ env.MINGW_XML2_VERS }}
- name: get cJSON
run: |
curl -L https://raw.githubusercontent.com/DaveGamble/cJSON/v%MINGW_CJSON_VERS%/cJSON.c -o .\libcob\cJSON.c
curl -L https://raw.githubusercontent.com/DaveGamble/cJSON/v%MINGW_CJSON_VERS%/cJSON.h -o .\libcob\cJSON.h
# - name: Bootstrap GnuCOBOL
# run: |
# sed -i 's/AM_PROG_AR/m4_ifdef\(\[AM_PROG_AR\], \[AM_PROG_AR\]\)/g' .\configure.ac
# sed -i 's/po extras doc tests/po extras tests/g' .\Makefile.am
# bash -lc "./autogen.sh"
- name: Configure GnuCOBOL
run: |
rem mkdir build
rem sed -i 'N;s/else/else :;/g' .\configure
rem sed -i 's/\} else \:;/} else/g' .\configure
rem sed -i 's/#else \:;/#else/g' .\configure
rem extra setting CPPFLAGS as " are wrong here
bash -lc "cd build && ../configure CPPFLAGS=\"-I../libcob\" %CFGOPT% --with-db --with-xml2 --with-json=local --with-curses=pdcurses --prefix=/mingw"
- name: Build GnuCOBOL
run: |
rem Note: the extra CPATH below is only required in debug builds (otherwise gcc invoked from cobc does not find libcob.h [pre-inst-env]), for some reason...
bash -lc "CPATH=$(pwd) make -C build --jobs=$(($(nproc)+1))"
# Note: the extra CPATH above is only required in debug builds (otherwise "extras" does not build), for some reason...
- name: Upload config-${{ matrix.target }}.log
uses: actions/upload-artifact@v4
if: failure()
with:
name: config-${{ matrix.target }}.log
path: ${{ env.GITHUB_WORKSPACE }}/build/config.log
- name: Run testsuite
run: |
rem skip test as it sometimes works and sometimes not...
rem instead of
rem sed -i '/AT_SETUP(\[temporary path invalid\])/a AT_SKIP_IF(\[true\])' tests/testsuite.src/used_binaries.at
rem use (same name can only be used one time!)
sed -i '/^ "temporary path invalid"/a at_fn_check_skip 77 workflow:1' testsuite
rem change to expected fail if there's an error specific to the CI that we don't want to change
rem in the testsuite for expected result (should normally only be a temporary thing)
rem instead of
rem sed -i '/AT_SETUP(\[Compare FLOAT-LONG with floating-point literal\])/a AT_XFAIL_IF(\[true\])' tests/testsuite.src/run_fundamental.at
rem use
rem sed -i '/run_fundamental.at/{N;/Compare FLOAT-LONG with floating-point literal/{N;s/at_xfail=no/at_xfail=yes/;}}' testsuite
rem Note: the extra CPATH below is only required in debug builds (otherwise gcc invoked from cobc does not find libcob.h [atlocal]), for some reason...
bash -lc "CPATH=$(pwd) make -C build/tests check TESTSUITEFLAGS=\"--jobs=$(($(nproc)+1))\" || CPATH=$(pwd) make -C build/tests check TESTSUITEFLAGS=\"--recheck --verbose\""
- name: Upload testsuite-${{ matrix.target }}.log
uses: actions/upload-artifact@v4
# if: failure() -> always upload as build result documentation
with:
name: testsuite-${{ matrix.target }}.log
path: ${{ env.GITHUB_WORKSPACE }}/build/tests/testsuite.log
- name: Cache newcob.val
uses: actions/cache@v4
with:
path: build/tests/cobol85/newcob.val
key: newcob-val
save-always: true
enableCrossOsArchive: true
- name: Run NIST85 testsuite
run: |
rem FIXME: The NIST testsuite hangs forever in IF106A
rem perl -pi -e 's/^# OBNC1M/\$skip{IF106A} = 1; # OBNC1M/' tests/cobol85/report.pl
rem Note: the extra CPATH below is only required in debug builds (otherwise gcc invoked from cobc does not find libcob.h [atlocal]), for some reason...
bash -lc "CPATH=$(pwd) make -C build/tests test --jobs=$(($(nproc)+1)) || echo \"WARNING: NIST85 did not pass!\""
- name: Upload NIST85 Test Suite results
uses: actions/upload-artifact@v4
with:
name: NIST85 results on ${{ matrix.target }}
path: |
build/tests/cobol85/summary.*
build/tests/cobol85/**/*.log
build/tests/cobol85/**/*.out
build/tests/cobol85/**/duration.txt
- name: Package GnuCOBOL
run: |
bash -lc "make -C build distmingw"
- name: Upload GnuCOBOL_mingw-${{ matrix.target }}
uses: actions/upload-artifact@v4
with:
name: GnuCOBOL_mingw-${{ matrix.target }}
path: ${{ env.GITHUB_WORKSPACE }}/build/${{ env.DISTDIR }}