distributable:
  url: https://download.gnome.org/sources/glib/{{ version.major }}.{{ version.minor }}/glib-{{ version }}.tar.xz
  strip-components: 1

versions:
  gitlab: gitlab.gnome.org:GNOME/glib

dependencies:
  gnu.org/gettext: ^0.21
  sourceware.org/libffi: 3
  # FIXME: this isn't great, but we need to bump to build new glibs.
  # versioned dependencies would be needed to fix this, which could break
  # any number of things in the version solver. However, this shouldn't be
  # too dangerous, since they produce different libraries (libpcre vs libpcre2)
  # glib bumped this in 2.73.2, after claiming for years they'd rather remove
  # GRegex than bump the version. :(
  # ref: https://gitlab.gnome.org/GNOME/glib/-/issues/1085
  pcre.org: 8
  pcre.org/v2: 10

companions:
  gnome.org/gsettings-desktop-schemas: '*'

runtime:
  env:
    PYTHONPATH: '{{prefix}}/lib/python{{deps.python.org.version.major}}/site-packages:$PYTHONPATH'

build:
  dependencies:
    mesonbuild.com: ^1.2
    ninja-build.org: 1
    freedesktop.org/pkg-config: ^0.29
    python.org: '>=3.5<3.12'
  script:
    # needs python packaging module
    - run: |
        python -m venv venv
        source venv/bin/activate
        python -m pip install packaging
        deactivate
        PYTHONPATH="$(pwd)/venv/lib/python{{deps.python.org.version.marketing}}/site-packages:$PYTHONPATH"

    - meson out $ARGS
    - cd out

    - ninja install

    - GT='${prefix}/../../../gnu.org/gettext/v{{ deps.gnu.org/gettext.version.major }}'

    - run: |
        sed -i -e \
          's|Libs: -L${libdir} -lglib-2.0 -lintl|Libs: -L${libdir} -lglib-2.0'\ -L$GT/lib\ -lintl\| \
          ./glib-2.0.pc
        sed -i -e \
          's|Cflags: -I${includedir}/glib-2.0 -I${libdir}/glib-2.0/include|Cflags: -I${includedir}/glib-2.0 -I${libdir}/glib-2.0/include'\ -I$GT/include\| \
          ./glib-2.0.pc
      working-directory: '{{prefix}}/lib/pkgconfig'

    - run: |
        mv glib-{{version.major}}.0/* .
        rmdir glib-{{version.major}}.0
        ln -s . glib-{{version.major}}.0

        mv gio-unix-{{version.major}}.0/gio/* gio/
        rmdir -p gio-unix-{{version.major}}.0/gio
        ln -s . gio-unix-{{version.major}}.0

        ln -s ../lib/glib-{{version.major}}.0/include/* .
      working-directory: '{{prefix}}/include'

    - cp -a ../venv/lib/python{{deps.python.org.version.marketing}} "{{prefix}}"/lib
    - run: ln -s python{{deps.python.org.version.marketing}} python{{deps.python.org.version.major}}
      working-directory: '{{prefix}}/lib'

  #REF https://github.com/Homebrew/homebrew-core/blob/d0e65698ccd502335bea68ce879ae02e1735db0d/Formula/glib.rb#L66-L67
  #FIXME hardcoded paths ^^
  env:
    ARGS:
      - --prefix={{prefix}}
      - --libdir={{prefix}}/lib
      - --wrap-mode=nofallback
      - --buildtype=release
      # tests fail to build with `error: target emulation unknown: -m or at least one .o file required`
      - -Dtests=false

test:
  dependencies:
    freedesktop.org/pkg-config: ^0.29
  script:
    # unset these since we only want to test via pkg-config
    - unset LIBRARY_PATH
    - unset CPATH
    - LD_LIBRARY_PATH_BAK=$LD_LIBRARY_PATH
    - unset LD_LIBRARY_PATH
    - DYLD_FALLBACK_LIBRARY_PATH_BAK=$DYLD_FALLBACK_LIBRARY_PATH
    - unset DYLD_FALLBACK_LIBRARY_PATH
    - cc $CFLAGS $LDFLAGS test.c

    - export LD_LIBRARY_PATH=$LD_LIBRARY_PATH_BAK
    - export DYLD_FALLBACK_LIBRARY_PATH=$DYLD_FALLBACK_LIBRARY_PATH_BAK
    - ./a.out
  env:
    # using pkg-config as pixman puts its headers in `include/pixman-1`
    LDFLAGS: $(pkg-config --libs glib-2.0)
    CFLAGS: $(pkg-config --cflags glib-2.0)

provides:
  - bin/gdbus
  - bin/gdbus-codegen
  - bin/gio
  - bin/gio-querymodules
  - bin/glib-compile-resources
  - bin/glib-compile-schemas
  - bin/glib-genmarshal
  - bin/glib-gettextize
  - bin/glib-mkenums
  - bin/gobject-query
  - bin/gresource
  - bin/gsettings
  - bin/gtester
  - bin/gtester-report
