# Project name
name: webkit-sdk

# The minimum base BuildStream format
format-version: 17

# Where elements are stored
element-path: elements

fatal-warnings:
- overlaps

# Options to specify for the project, these provide
# command line switches which control the behavior of
# conditional directives in the element.bst files.
#
options:
  arch:
    type: arch
    description: Machine architecture
    variable: arch
    values:
    - aarch64
    - x86_64

  bootstrap_build_arch:
    type: arch
    description: Bootstrap build machine architecture
    variable: bootstrap_build_arch
    values:
    - aarch64
    - x86_64

# Source aliases.
#
# These are used in the individual element.bst files in
# place of specifying full uris.
# 
# The location from where source code is downloaded can
# be changed without triggering a rebuild.
#
aliases:
  gitlab_freedesktop_org: https://gitlab.freedesktop.org/
  github_com: https://github.com/
  gitlab_com: https://gitlab.com/
  gitlab_gnome_org: https://gitlab.gnome.org/
  raw_githubusercontent_com: https://raw.githubusercontent.com/
  gnome_downloads: https://download.gnome.org/sources/
  gst_downloads: https://gstreamer.freedesktop.org/src/
  ruby_gems: https://rubygems.org/downloads/

# Some overrides to the default sandbox execution environment
#
environment:
  LC_ALL: en_US.UTF-8
  LD_LIBRARY_PATH: '%{libdir}'
  PATH: /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
  PKG_CONFIG_PATH: /usr/local/lib/pkgconfig:%{libdir}/pkgconfig
  (?):
  - arch == "x86_64":
      CFLAGS: "%{flags_x86_64}"
      CXXFLAGS: "%{flags_x86_64}"
      LDFLAGS: "%{ldflags_defaults}"
  - arch == "aarch64":
      CFLAGS: "%{flags_aarch64}"
      CXXFLAGS: "%{flags_aarch64}"
      LDFLAGS: "%{ldflags_defaults}"

# Some overrides to element configuration based on type
#
# Here we can set a project wide options for various build systems,
# e.g. we can add --disable-gtk-doc to every `./configure` line.
elements:
  autotools:
    variables:
      conf-global: --disable-static --disable-Werror --host=%{triplet} --build=%{triplet}

      # Temporary workaround to avoid regenerating existing
      # configure scripts when building tarballs.
      #
      # We can remove this after addressing the upstream issue:
      #
      #    https://gitlab.com/BuildStream/buildstream/issues/256
      #
      # XXX: updating config.{sub,guess} would be still useful in that case
      # to fix compilation on recent architectures such as aarch64.
      autogen: |
        export NOCONFIGURE=1
        if [ -x %{conf-cmd} ]; then cp -f /usr/share/automake*/config.{sub,guess} %{conf-aux}
        elif [ -x autogen ]; then ./autogen
        elif [ -x autogen.sh ]; then ./autogen.sh
        elif [ -x bootstrap ]; then ./bootstrap
        elif [ -x bootstrap.sh ]; then ./bootstrap.sh
        else autoreconf -ivf
        fi
      # the directory where config.sub and config.guess are stored
      conf-aux: .

  cmake:
    variables:
      cmake-global: -DCMAKE_BUILD_TYPE=RelWithDebInfo
      generator: Ninja
  distutils:
    variables:
      prefix: /usr/local
      python-install: '%{python} setup.py install --root "%{install-root}"'
      fix-pyc-timestamps: ''
    config:
      install-commands:
        (>):
          # There's no way to get the setup.py to install this in the right place.
        - |
          if [ -d '%{install-root}/usr/lib/pkgconfig/' ]; then
            mkdir -p %{install-root}/usr/%{lib}/
            mv -f %{install-root}/usr/lib/pkgconfig/ %{install-root}/usr/%{lib}/
          fi
  meson:
    variables:
      meson-global: --buildtype=plain --auto-features=enabled
  pip:
    variables:
      pip: pip3
      fix-pyc-timestamps: "true"
    config:
      install-commands:
        - |
          %{pip} install --no-build-isolation --no-deps --root=%{install-root} --prefix=%{prefix} .
  filter:
    config:
      include-orphans: true

sources:
  git_tag:
    config:
      checkout-submodules: false
      track-tags: false

split-rules:
  devel:
    (>):
    - '%{libdir}/cmake'
    - '%{libdir}/cmake/**'
    - '%{libdir}/cmake/**'
    - '%{datadir}/gir-1.0/**'
  vm:
  - '%{datadir}/dbus-1/**'

# Define some behavior for `bst shell`
#
shell:

  # Default command for `bst shell`, we prefer bash, and disable
  # parsing of profile and rc files so that the prompt BuildStream
  # sets is not overwritten.
  command: ['bash', '--noprofile', '--norc', '-i']

  # Some environment variables to inherit from the host environment
  environment:
    LANG: '$LANG'
    DISPLAY: '$DISPLAY'
    DBUS_SESSION_BUS_ADDRESS: '$DBUS_SESSION_BUS_ADDRESS'
    XDG_RUNTIME_DIR: '$XDG_RUNTIME_DIR'

    # Inform applications which use pulseaudio of the server socket
    PULSE_SERVER: 'unix:${XDG_RUNTIME_DIR}/pulse/native'

  # Some things to mount into the sandbox
  host-files:
  # Understand user inherited uid/gid
  - '/etc/passwd'
  - '/etc/group'
  # Allow network resolution
  - '/etc/resolv.conf'

  # Allow access to plausible video devices,
  # declare these optional to avoid meaningless warnings
  - path: '/dev/dri'
    optional: true
  - path: '/dev/mali'
    optional: true
  - path: '/dev/mali0'
    optional: true
  - path: '/dev/umplock'
    optional: true
  - path: '/dev/nvidiactl'
    optional: true
  - path: '/dev/nvidia0'
    optional: true
  - path: '/dev/nvidia-modeset'
    optional: true

  # Allow access to sysfs, needed for local device discovery
  - '/sys'

  # Allow access to the user runtime directory, this
  # will include the pulseaudio socket along with some
  # other things.
  - '${XDG_RUNTIME_DIR}'

variables:
  sdk-branch: "0.2"
  gcc_arch: "%{arch}"
  abi: "gnu"
  gcc_triplet: "%{gcc_arch}-linux-%{abi}"
  triplet: "%{arch}-unknown-linux-%{abi}"
  lib: "lib/%{gcc_triplet}"
  sbindir: "%{bindir}"
  sysconfdir: "/etc"
  localstatedir: "/var"
  indep-libdir: "%{prefix}/lib"
  debugdir: "%{indep-libdir}/debug"
  common_flags: "-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions\
    \ -fstack-protector-strong -grecord-gcc-switches"
  flags_x86_64: "-march=x86-64 -mtune=generic %{common_flags} -fasynchronous-unwind-tables\
    \ -fstack-clash-protection -fcf-protection"
  flags_aarch64: "%{common_flags} -fasynchronous-unwind-tables -fstack-clash-protection"
  ldflags_defaults: "-Wl,-z,relro,-z,now -Wl,--as-needed -L%{libdir}"

  # This should eventually done with buildstream includes
  strip-binaries: |
    touch source-files
    find "%{install-root}" -type f \
      '(' -perm -111 -o -name '*.so*' \
          -o -name '*.cmxs' -o -name '*.node' ')' \
          -print0 | while read -r -d $'\0' file; do
      read -n4 hdr <"${file}" || continue # check for elf header
      if [ "$hdr" != "$(printf \\x7fELF)" ]; then
        continue
      fi
      if objdump -j .gnu_debuglink -s "${file}" &>/dev/null; then
        continue
      fi
      case "${file}" in
        "%{install-root}%{debugdir}/"*)
          continue
          ;;
        *)
          ;;
      esac
      realpath="$(realpath -s --relative-to="%{install-root}" "${file}")"
      debugfile="%{install-root}%{debugdir}/${realpath}.debug"
      mkdir -p "$(dirname "$debugfile")"
      debugedit -i --list-file=source-files.part --base-dir="%{build-root}" --dest-dir="%{debugdir}/source/%{element-name}" "${file}"
      cat source-files.part >>source-files
      objcopy %{objcopy-extract-args} "${file}" "$debugfile"
      chmod 644 "$debugfile"
      mode="$(stat -c 0%a "${file}")"
      [ -w "${file}" ] || chmod +w "${file}"
      strip %{strip-args} "${file}"
      objcopy %{objcopy-link-args} "$debugfile" "${file}"
      chmod "${mode}" "${file}"
    done
    sort -zu  <source-files | while read -r -d $'\0' source; do
      dst="%{install-root}%{debugdir}/source/%{element-name}/${source}"
      src="%{build-root}/${source}"
      if [ -d "${src}" ]; then
        install -m0755 -d "${dst}"
        continue
      fi
      [ -f "${src}" ] || continue
      install -m0644 -D "${src}" "${dst}"
    done

plugins:
- origin: pip
  package-name: buildstream-external
  elements:
    flatpak_image: 0
    flatpak_repo: 0
    collect_manifest: 0
  sources:
    cargo: 0
    git_tag: 1
