Merge pull request #184 from OCamlPro/ci-minimal-build #234
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: | |
pull_request: | |
branches: [ gcos4gnucobol-3.x ] | |
push: | |
# manual run in actions tab - for all branches | |
workflow_dispatch: | |
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 | |
MINGW_BISON_VERS: bison-3.0.1 | |
MINGW_GMP_VERS: gmp-6.3.0 | |
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: | |
os: | |
- windows-latest | |
arch: | |
- x86 | |
target: | |
- debug | |
- release | |
runs-on: ${{ matrix.os }} | |
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: 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-${{ matrix.target }} | |
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 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: Install Bison 3.0 | |
if: steps.restore-msys.outputs.cache-hit != 'true' | |
run: | | |
curl -L https://mirror.ibcp.fr/pub/gnu/bison/%MINGW_BISON_VERS%.tar.xz -o %MINGW_BISON_VERS%.tar.xz | |
tar -xvf %MINGW_BISON_VERS%.tar.xz | |
bash -lc "cd %MINGW_BISON_VERS% && ./configure --prefix=/mingw && make" | |
bash -lc "cd %MINGW_BISON_VERS% && make install" | |
# Note: actually unavailable, so skip (works with the GMP alredy provided) | |
# - name: Install GMP | |
# if: steps.restore-msys.outputs.cache-hit != 'true' | |
# run: | | |
# curl -L https://gmplib.org/download/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" | |
# bash -lc "cd %MINGW_GMP_VERS% && make install" | |
- name: Install BDB | |
if: steps.restore-msys.outputs.cache-hit != 'true' | |
run: | | |
curl -L https://download.oracle.com/berkeley-db/%MINGW_BDB_VERS%.tar.gz -o %MINGW_BDB_VERS%.tar.gz | |
tar -xvf %MINGW_BDB_VERS%.tar.gz | |
sed -i 's/_tcsclen/strlen/' %MINGW_BDB_VERS%\src\os_windows\os_stat.c | |
bash -lc "cd %MINGW_BDB_VERS%/build_unix && ../dist/configure --prefix=/mingw --enable-mingw --enable-debug --disable-static --disable-replication --disable-tcl LIBCSO_LIBS=-lwsock32 && make || make" | |
bash -lc "cd %MINGW_BDB_VERS%/build_unix && make install" | |
- name: Install PDCurses | |
if: steps.restore-msys.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%\wincon && make INFOEX=N CHTYPE_64=Y DEBUG=Y DLL=Y DLLNAME=libpdcurses LIBNAME=libpdcurses.dll" | |
bash -lc "cd PDCursesMod-%MINGW_PDCM_VERS%\wingui && make CHTYPE_64=Y DEBUG=Y DLL=Y DLLNAME=libpdcurses LIBNAME=libpdcurses.dll" | |
bash -lc "cd PDCursesMod-%MINGW_PDCM_VERS%\vt && make CHTYPE_64=Y DEBUG=Y DLL=Y DLLNAME=libpdcurses LIBNAME=libpdcurses.dll CFLAGS=\"-Wall -Wextra -pedantic -g -DPDCDEBUG -fPIC -DPDC_DLL_BUILD\"" | |
echo #define CHTYPE_64 > PDCursesMod-%MINGW_PDCM_VERS%\pdcurses.h | |
echo #define PDC_DLL_BUILD >> PDCursesMod-%MINGW_PDCM_VERS%\pdcurses.h | |
echo #include "pdcurses/curses.h" >> PDCursesMod-%MINGW_PDCM_VERS%\pdcurses.h | |
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: Install LibXML2 | |
if: steps.restore-msys.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 && make" | |
bash -lc "cd libxml2-%MINGW_XML2_VERS% && make install" | |
- 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-${{ matrix.target }} | |
path: ${{ env.MSYS_ROOT }} | |
- name: Download CJSON sources | |
run: | | |
curl -L https://github.com/DaveGamble/cJSON/archive/refs/tags/v%MINGW_CJSON_VERS%.tar.gz -o cjson-%MINGW_CJSON_VERS%.tar.xz | |
tar -xvf cjson-%MINGW_CJSON_VERS%.tar.xz | |
copy cjson-%MINGW_CJSON_VERS%\cJSON.* .\libcob | |
- 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: | | |
mkdir _build | |
sed -i 'N;s/else/else :;/g' .\configure | |
sed -i 's/\} else \:;/} else/g' .\configure | |
sed -i 's/#else \:;/#else/g' .\configure | |
bash -lc "cd _build && CFLAGS=\"-I ../libcob\" ../configure %CFGOPT% --with-db --prefix=/opt/cobol/gnucobol" | |
- 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: Build GnuCOBOL | |
run: | | |
bash -lc "cd _build && CPATH=$(pwd)/.. make --jobs=$(($(nproc)+1))" | |
# Note: the extra CPATH above is only required in debug builds, for some reason... | |
- name: Install GnuCOBOL | |
run: | | |
bash -lc "cd _build && make install" | |
bash -lc "cd _build && find /opt/cobol > install.log" | |
- name: Upload install-${{ matrix.target }}.log | |
uses: actions/upload-artifact@v4 | |
with: | |
name: install-${{ matrix.target }}.log | |
path: ${{ env.GITHUB_WORKSPACE }}/_build/install.log | |
- name: Run testsuite | |
run: | | |
sed -i '/AT_SETUP(\[temporary path invalid\])/a AT_SKIP_IF(\[true\])' tests/testsuite.src/used_binaries.at | |
sed -i '/AT_SETUP(\[Compare FLOAT-LONG with floating-point literal\])/a AT_SKIP_IF(\[true\])' tests/testsuite.src/run_fundamental.at | |
sed -i '/AT_SETUP(\[Numeric operations (3) PACKED-DECIMAL\])/a AT_SKIP_IF(\[true\])' tests/testsuite.src/run_fundamental.at | |
sed -i '/AT_SETUP(\[Numeric operations (7)\])/a AT_SKIP_IF(\[true\])' tests/testsuite.src/run_fundamental.at | |
sed -i '/AT_SETUP(\[integer arithmetic on floating-point var\])/a AT_SKIP_IF(\[true\])' tests/testsuite.src/run_fundamental.at | |
sed -i '/AT_SETUP(\[FLOAT-DECIMAL w\/o SIZE ERROR\])/a AT_SKIP_IF(\[true\])' tests/testsuite.src/run_misc.at | |
sed -i '/AT_SETUP(\[FLOAT-SHORT \/ FLOAT-LONG w\/o SIZE ERROR\])/a AT_SKIP_IF(\[true\])' tests/testsuite.src/run_misc.at | |
sed -i '/AT_SETUP(\[FLOAT-LONG with SIZE ERROR\])/a AT_SKIP_IF(\[true\])' tests/testsuite.src/run_misc.at | |
sed -i '/AT_SETUP(\[FUNCTION ANNUITY\])/a AT_SKIP_IF(\[true\])' tests/testsuite.src/run_functions.at | |
sed -i '/AT_SETUP(\[FUNCTION INTEGER\])/a AT_SKIP_IF(\[true\])' tests/testsuite.src/run_functions.at | |
sed -i '/AT_SETUP(\[FUNCTION MOD (valid)\])/a AT_SKIP_IF(\[true\])' tests/testsuite.src/run_functions.at | |
sed -i '/AT_SETUP(\[FUNCTION SECONDS-FROM-FORMATTED-TIME\])/a AT_SKIP_IF(\[true\])' tests/testsuite.src/run_functions.at | |
sed -i '/AT_SETUP(\[GCOS floating-point usages\])/a AT_SKIP_IF(\[true\])' tests/testsuite.src/run_extensions.at | |
sed -i '/AT_SETUP(\[BINARY: 64bit unsigned arithmetic notrunc\])/a AT_SKIP_IF(\[true\])' tests/testsuite.src/data_binary.at | |
sed -i '/AT_SETUP(\[DISPLAY: ADD and SUBTRACT w\/o SIZE ERROR\])/a AT_SKIP_IF(\[true\])' tests/testsuite.src/data_display.at | |
sed -i '/AT_SETUP(\[DISPLAY: ADD and SUBTRACT, all ROUNDED MODEs\])/a AT_SKIP_IF(\[true\])' tests/testsuite.src/data_display.at | |
sed -i '/AT_SETUP(\[BCD ADD and SUBTRACT w\/o SIZE ERROR\])/a AT_SKIP_IF(\[true\])' tests/testsuite.src/data_packed.at | |
sed -i '/AT_SETUP(\[BCD ADD and SUBTRACT, all ROUNDED MODEs\])/a AT_SKIP_IF(\[true\])' tests/testsuite.src/data_packed.at | |
bash -lc "cd _build/tests && CPATH=/opt/cobol/gnucobol/include make check TESTSUITEFLAGS=\"--jobs=$(($(nproc)+1))\"" | |
# Note: the extra CPATH above is only required in debug builds, for some reason... | |
# The NIST testsuite hangs forever in IF | |
# bash -lc "CPATH=/opt/cobol/gnucobol/include make test" | |
- name: Upload testsuite-${{ matrix.target }}.log | |
uses: actions/upload-artifact@v4 | |
if: failure() | |
with: | |
name: testsuite-${{ matrix.target }}.log | |
path: ${{ env.GITHUB_WORKSPACE }}/_build/tests/testsuite.log | |
- name: Package GnuCOBOL | |
run: | | |
bash -lc "cd _build && make 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 }} |