Windows MSYS1 (build only) #286
Workflow file for this run
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: 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 }} |