Skip to content

Build Windows installer with meson #610

Build Windows installer with meson

Build Windows installer with meson #610

Workflow file for this run

name: CI
on:
schedule:
- cron: '0 2 * * 0'
push:
branches:
- master
pull_request:
branches:
- master
jobs:
# visual-studio:
# timeout-minutes: 60
# runs-on: windows-latest
# strategy:
# fail-fast: false
# matrix:
# python-version: ['3.9', '3.10', '3.11', '3.12']
# compiler:
# - cl
# - clang-cl
# name: Visual Studio with ${{matrix.compiler}} and Python ${{ matrix.python-version }}
# steps:
# - uses: actions/checkout@v4
# - uses: actions/setup-python@v5
# with:
# python-version: ${{ matrix.python-version }}
# - name: Install meson, ninja, numpy and cython
# run: |
# python -m pip install -U numpy pip
# python -m pip install meson ninja cython
# - uses: ilammy/msvc-dev-cmd@v1
# - name: Build with meson
# run: |
# meson setup meson-build --buildtype=release -Dpython-bindings=enabled -Dpython-numpy-bindings=enabled
# meson compile -C meson-build
# meson test -C meson-build || (cat meson-build\meson-logs\testlog.txt)
# # ninja -v -C meson-build dist
# env:
# CC: ${{ matrix.compiler }}
# CXX: ${{ matrix.compiler }}
msys2:
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
buildsystem:
# - autotools
- meson
cc:
- clang
- gcc
include:
- cc: clang
cxx: clang++
- cc: gcc
cxx: g++
runs-on: windows-latest
defaults:
run:
shell: msys2 {0}
steps:
- uses: crazy-max/ghaction-chocolatey@v3
with:
args: install innosetup
# required for the lib command
- uses: ilammy/[email protected]
with:
arch: x64
- uses: msys2/setup-msys2@v2
with:
path-type: inherit
update: true
install: >
base-devel
git
mingw-w64-x86_64-gcc
mingw-w64-x86_64-gcc-fortran
mingw-w64-x86_64-libxml2
mingw-w64-x86_64-clang
mingw-w64-x86_64-openmp
mingw-w64-x86_64-lld
mingw-w64-x86_64-pkg-config
mingw-w64-x86_64-curl
mingw-w64-x86_64-cython
mingw-w64-x86_64-python3-numpy
mingw-w64-x86_64-meson
mingw-w64-x86_64-swig
- uses: actions/checkout@v4
- name: Primary build and test with Meson
if: matrix.buildsystem == 'meson'
run: |
set -ex
meson setup meson-build -Dpython-bindings=enabled -Dpython-numpy-bindings=enabled -Dwindows-installer=enabled
meson compile -C meson-build
ls -l meson-build/src
ls -l meson-build/windows
find . -name '*.lib'
meson test -C meson-build || (cat meson-build/meson-logs/testlog.txt && exit 1)
set +ex
env:
CC: ${{matrix.cc}}
CXX: ${{matrix.cxx}}
- name: Primary build and test with Autotools
if: matrix.buildsystem == 'autotools'
run: |
set -ex
autoreconf -fi
./configure --disable-all-bindings --disable-shared --enable-static
make -j$(nproc)
make check
make distclean
./configure --disable-python --disable-python-numpy --enable-fortran2003 --disable-ruby
make -j$(nproc)
make check
make distclean
./configure --enable-python --enable-python-numpy PYTHON=python3 --disable-ruby
make -j$(nproc)
find . -name '*pyd' -print0 | xargs -0 ls -l
find . -name 'xraylib.py' -print0 | xargs -0 ls -l
make check || (cat python/tests/test-suite.log && exit 1)
make distclean
./configure --disable-all-bindings CFLAGS="-std=c89 -pedantic" || (cat config.log && exit 1)
make -j$(nproc)
make check
make windows
set +ex
env:
CC: ${{matrix.cc}}
CXX: ${{matrix.cxx}}
- name: Upload Windows installer
if: matrix.buildsystem == 'meson' && matrix.cc == 'gcc'
uses: actions/upload-artifact@v4
with:
name: windows-installer
path: meson-build\windows\xraylib-*-win64.exe
retention-days: 1
# macos:
# timeout-minutes: 60
# runs-on: macos-latest
# strategy:
# fail-fast: false
# matrix:
# buildsystem:
# # - autotools
# - meson
# compiler:
# - llvm
# - gcc@13
# include:
# - ldflags: "-Wl,-ld_classic"
# - compiler: llvm
# cc: /opt/homebrew/opt/llvm/bin/clang
# cxx: /opt/homebrew/opt/llvm/bin/clang++
# # ldflags: -L/opt/homebrew/opt/llvm/lib
# enable_ruby: enable
# - compiler: gcc@13
# cc: gcc-13
# cxx: g++-13
# # -fdeclspec is only supported by llvm's clang!
# enable_ruby: disable
# steps:
# - uses: actions/checkout@v4
# - name: Install Homebrew dependencies
# run: |
# set -ex
# rm -f /opt/homebrew/bin/2to3
# brew uninstall -f bazel bazelisk mongodb-community
# brew update
# brew upgrade
# brew install git autoconf automake libtool pkg-config ${{ matrix.compiler }} swig ruby fpc lua bash numpy meson ninja cython
# brew link --overwrite python
# brew unlink python && brew link --overwrite python
# ls -l /opt/homebrew/bin/python3
# echo "/opt/homebrew/opt/cython/bin" >> "${GITHUB_PATH}"
# set +ex
# env:
# HOMEBREW_CURL_RETRIES: 5
# - name: Primary Build and test with Meson
# if: matrix.buildsystem == 'meson'
# run: |
# set -ex
# meson setup meson-build -Dpython-bindings=enabled -Dpython-numpy-bindings=enabled
# meson compile -C meson-build
# meson test -C meson-build
# meson dist -C meson-build
# set +ex
# env:
# CC: ${{matrix.cc}}
# CXX: ${{matrix.cxx}}
# LDFLAGS: ${{matrix.ldflags}}
# - name: Secondary build with Autotools
# if: matrix.buildsystem == 'meson'
# run: |
# set -ex
# export SHELL="$(which bash)"
# cd meson-build/meson-dist/
# TARBALL=$(ls *.tar.xz)
# tar xfJ $TARBALL
# cd ${TARBALL%.tar.xz}
# autoreconf -fi
# ./configure --enable-python SHELL=${SHELL} PYTHON=/opt/homebrew/bin/python3
# make -j$(nproc)
# make check
# set +ex
# env:
# CC: ${{matrix.cc}}
# CXX: ${{matrix.cxx}}
# LDFLAGS: ${{matrix.ldflags}}
# - name: Build with Autotools
# if: matrix.buildsystem == 'autotools'
# run: |
# set -ex
# export SHELL="$(which bash)"
# autoreconf -fi
# # Build without python
# ./configure --disable-python --disable-python-numpy --disable-perl --enable-lua --enable-pascal --disable-java --disable-php --${{matrix.enable_ruby}}-ruby SHELL=${SHELL} RUBY=/opt/homebrew/opt/ruby/bin/ruby
# make -j$(nproc)
# make check
# make distclean
# # Build without bindings in ANSI-C
# ./configure --disable-all-bindings CFLAGS="-std=c89 -pedantic" SHELL=${SHELL}
# make -j$(nproc)
# make check
# make distclean
# # Build with Python3 bindings
# ./configure --disable-ruby --disable-perl --disable-lua --enable-python-numpy --enable-python PYTHON=${XRL_PYTHON3} SHELL=${SHELL}
# make -j$(nproc)
# make check
# make distclean
# # Build static library
# ./configure --disable-all-bindings --disable-shared --enable-static SHELL=${SHELL}
# make -j$(nproc)
# make check
# make distclean
# # Run make distcheck
# ./configure
# make distcheck SHELL=${SHELL} PYTHON=${XRL_PYTHON3} DISTCHECK_CONFIGURE_FLAGS="--${{matrix.enable_ruby}}-ruby" RUBY=/opt/homebrew/opt/ruby/bin/ruby
# set +ex
# env:
# CC: ${{matrix.cc}}
# CXX: ${{matrix.cxx}}
# LDFLAGS: ${{matrix.ldflags}}
# XRL_PYTHON3: /opt/homebrew/bin/python3
# - name: Secondary build with Meson
# if: matrix.buildsystem == 'autotools'
# run: |
# set -ex
# export PATH=${HOME}/.local/bin:${PATH}
# TARBALL=$(ls *.tar.gz)
# tar xfz $TARBALL
# cd ${TARBALL%.tar.gz}
# meson setup meson-build -Dpython-bindings=enabled -Dpython-numpy-bindings=enabled
# meson compile -C meson-build
# set +ex
# env:
# CC: ${{matrix.cc}}
# CXX: ${{matrix.cxx}}
# LDFLAGS: ${{matrix.ldflags}}
# linux:
# timeout-minutes: 60
# strategy:
# fail-fast: false
# matrix:
# image:
# - ubuntu:jammy
# - debian:bookworm
# - rockylinux:9
# - fedora:latest
# cc:
# - clang
# - gcc
# buildsystem:
# - autotools
# - meson
# exclude:
# # there's some weird segfault
# - image: rockylinux:8
# buildsystem: autotools
# cc: clang
# include:
# - cc: gcc
# cxx: g++
# - cc: clang
# cxx: clang++
# - fpc: enable
# fortran: enable
# python: enable
# # - cc: clang
# # image: rockylinux:8
# # libs: -stdlib=libstdc++
# # fortran: disable
# # clang_cflags: -Qunused-arguments
# # python: enable
# - cc: clang
# image: fedora:latest
# python: disable
# clang_cflags: -Qunused-arguments
# - image: rockylinux:8
# lua: /usr/bin/lua
# - image: fedora:latest
# lua: /usr/bin/lua
# runs-on: ubuntu-latest
# container:
# image: ${{ matrix.image }}
# steps:
# - name: Install Git
# if: startsWith(matrix.image, 'ubuntu') || startsWith(matrix.image, 'debian')
# run: |
# set -ex
# apt-get --yes --force-yes update
# apt-get --yes --force-yes install git
# set +ex
# env:
# DEBIAN_FRONTEND: noninteractive
# - name: Install Git
# if: startsWith(matrix.image, 'rockylinux') || startsWith(matrix.image, 'fedora')
# run: |
# set -ex
# yum install -y git
# set +ex
# - uses: actions/checkout@v4
# - name: Install ubuntu dependencies
# if: startsWith(matrix.image, 'ubuntu') || startsWith(matrix.image, 'debian')
# run: |
# set -ex
# apt-get --yes --force-yes update
# apt-get --yes --force-yes install autoconf automake libtool python3-pip python3-all-dev python3-numpy cython3 fpc gfortran gcc swig lua5.3 liblua5.3-dev ruby-dev default-jdk clang
# set +ex
# env:
# DEBIAN_FRONTEND: noninteractive
# - name: Install ubuntu dependencies Meson and Ninja
# if: matrix.buildsystem == 'meson' && (startsWith(matrix.image, 'ubuntu') || startsWith(matrix.image, 'debian'))
# run: |
# set -ex
# apt-get --yes --force-yes install meson ninja-build
# set +ex
# env:
# DEBIAN_FRONTEND: noninteractive
# - name: Activate RockyLinux 8 PowerTools and EPEL repo
# if: matrix.image == 'rockylinux:8'
# run: |
# set -ex
# dnf install -y 'dnf-command(config-manager)'
# dnf config-manager --set-enabled powertools
# dnf install -y epel-release
# set +ex
# - name: Activate RockyLinux 9 PowerTools and EPEL repo
# if: matrix.image == 'rockylinux:9'
# run: |
# set -ex
# dnf install -y 'dnf-command(config-manager)'
# dnf config-manager --set-enabled crb
# dnf install -y epel-release
# set +ex
# - name: Install RHEL dependencies
# if: startsWith(matrix.image, 'centos') || startsWith(matrix.image, 'fedora') || startsWith(matrix.image, 'rockylinux')
# run: |
# set -ex
# yum update -y
# yum install -y make autoconf automake libtool python3-setuptools python3-devel python3-numpy python3-Cython fpc gcc-gfortran gcc swig lua lua-devel ruby ruby-devel rubygem-minitest rubygem-test-unit java-1.8.0-openjdk java-1.8.0-openjdk-devel clang libstdc++-devel gcc-c++ which
# java -version
# which java
# javac -version
# which javac
# set +ex
# - name: Install RHEL dependencies Meson and Ninja
# if: matrix.buildsystem == 'meson' && (startsWith(matrix.image, 'centos') || startsWith(matrix.image, 'fedora') || startsWith(matrix.image, 'rockylinux'))
# run: |
# set -ex
# yum install -y meson ninja-build
# set +ex
# - name: Build and test with Meson
# if: matrix.buildsystem == 'meson'
# run: |
# set -ex
# git config --global --add safe.directory /__w/xraylib/xraylib
# meson setup meson-build -Dpython-bindings=enabled -Dpython-numpy-bindings=enabled
# meson compile -C meson-build
# meson test -C meson-build
# meson dist -C meson-build
# set +ex
# env:
# CC: ${{matrix.cc}}
# CXX: ${{matrix.cxx}}
# # LIBS: ${{matrix.libs}}
# - name: Build and test with Autotools
# if: matrix.buildsystem == 'autotools'
# run: |
# set -ex
# autoreconf -fi
# # disable java for now
# ./configure --disable-python --disable-python-numpy --disable-perl --enable-lua --${FPC_ENABLE}-pascal --disable-java --disable-php --enable-ruby --${FORTRAN_ENABLE}-fortran2003 || (cat config.log && exit 1)
# make -j$(nproc)
# make check || (cat example/xrlexample12.sh.log && exit 1)
# make distclean
# ./configure --disable-all-bindings CFLAGS="-std=c89 -pedantic $CFLAGS"
# make -j$(nproc)
# make check
# make distclean
# ./configure --disable-ruby --disable-perl --disable-lua --disable-fortran2003 --${PYTHON_ENABLE}-python-numpy --${PYTHON_ENABLE}-python PYTHON=${XRL_PYTHON3}
# make -j$(nproc)
# make check || (cat example/xrlexample13.sh.log && exit 1)
# make distclean
# ./configure --disable-all-bindings --disable-shared --enable-static
# make -j$(nproc)
# make check
# make distclean
# ./configure --disable-all-bindings
# make distcheck PYTHON=${XRL_PYTHON3}
# set +ex
# env:
# CC: ${{matrix.cc}}
# CXX: ${{matrix.cxx}}
# CXXFLAGS: -std=c++11
# # LIBS: ${{matrix.libs}}
# XRL_PYTHON3: /usr/bin/python3
# LUA: ${{matrix.lua}}
# JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8
# PYTHON_ENABLE: ${{matrix.python}}
# FORTRAN_ENABLE: ${{matrix.fortran}}
# FPC_ENABLE: ${{matrix.fpc}}
# DISTCHECK_CONFIGURE_FLAGS: --${{matrix.fpc}}-pascal --enable-java --disable-perl --enable-lua --${{matrix.python}}-python --${{matrix.python}}-python-numpy --disable-php --enable-ruby --${{matrix.fortran}}-fortran2003
# CFLAGS: ${{matrix.clang_cflags}}