Windows MSYS1 (build only) #273
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: Build environment setup | |
run: | | |
tar -xvf gnucobol*.tar.* --strip-components=1 | |
mkdir build | |
# sed -i 'N;s/else/else :;/g' .\configure | |
# sed -i 's/\} else \:;/} else/g' .\configure | |
# 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: 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 | |
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: Run testsuite | |
run: | | |
sed -i '/AT_SETUP(\[temporary path invalid\])/a AT_XFAIL_IF(\[true\])' tests/testsuite.src/used_binaries.at | |
sed -i '/AT_SETUP(\[Compare FLOAT-LONG with floating-point literal\])/a AT_XFAIL_IF(\[true\])' tests/testsuite.src/run_fundamental.at | |
sed -i '/AT_SETUP(\[Numeric operations (3) PACKED-DECIMAL\])/a AT_XFAIL_IF(\[true\])' tests/testsuite.src/run_fundamental.at | |
sed -i '/AT_SETUP(\[Numeric operations (7)\])/a AT_XFAIL_IF(\[true\])' tests/testsuite.src/run_fundamental.at | |
sed -i '/AT_SETUP(\[integer arithmetic on floating-point var\])/a AT_XFAIL_IF(\[true\])' tests/testsuite.src/run_fundamental.at | |
sed -i '/AT_SETUP(\[FLOAT-DECIMAL w\/o SIZE ERROR\])/a AT_XFAIL_IF(\[true\])' tests/testsuite.src/run_misc.at | |
sed -i '/AT_SETUP(\[FLOAT-SHORT \/ FLOAT-LONG w\/o SIZE ERROR\])/a AT_XFAIL_IF(\[true\])' tests/testsuite.src/run_misc.at | |
sed -i '/AT_SETUP(\[FLOAT-LONG with SIZE ERROR\])/a AT_XFAIL_IF(\[true\])' tests/testsuite.src/run_misc.at | |
sed -i '/AT_SETUP(\[FUNCTION ANNUITY\])/a AT_XFAIL_IF(\[true\])' tests/testsuite.src/run_functions.at | |
sed -i '/AT_SETUP(\[FUNCTION INTEGER\])/a AT_XFAIL_IF(\[true\])' tests/testsuite.src/run_functions.at | |
sed -i '/AT_SETUP(\[FUNCTION MOD (valid)\])/a AT_XFAIL_IF(\[true\])' tests/testsuite.src/run_functions.at | |
sed -i '/AT_SETUP(\[FUNCTION SECONDS-FROM-FORMATTED-TIME\])/a AT_XFAIL_IF(\[true\])' tests/testsuite.src/run_functions.at | |
sed -i '/AT_SETUP(\[GCOS floating-point usages\])/a AT_XFAIL_IF(\[true\])' tests/testsuite.src/run_extensions.at | |
sed -i '/AT_SETUP(\[BINARY: 64bit unsigned arithmetic notrunc\])/a AT_XFAIL_IF(\[true\])' tests/testsuite.src/data_binary.at | |
sed -i '/AT_SETUP(\[DISPLAY: ADD and SUBTRACT w\/o SIZE ERROR\])/a AT_XFAIL_IF(\[true\])' tests/testsuite.src/data_display.at | |
sed -i '/AT_SETUP(\[DISPLAY: ADD and SUBTRACT, all ROUNDED MODEs\])/a AT_XFAIL_IF(\[true\])' tests/testsuite.src/data_display.at | |
sed -i '/AT_SETUP(\[BCD ADD and SUBTRACT w\/o SIZE ERROR\])/a AT_XFAIL_IF(\[true\])' tests/testsuite.src/data_packed.at | |
sed -i '/AT_SETUP(\[BCD ADD and SUBTRACT, all ROUNDED MODEs\])/a AT_XFAIL_IF(\[true\])' tests/testsuite.src/data_packed.at | |
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))\"" | |
- 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: 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 }} |