appstream-generator/snapcraft.yaml
2022-02-22 18:11:38 +01:00

246 lines
6.9 KiB
YAML

#
# Copyright (C) 2020 Matthias Klumpp <matthias@tenstral.net>
# Copyright (C) 2020 Canonical Ltd
# Author: Iain Lane <iain@orangesquash.org.uk>
#
# SPDX-License-Identifier: FSFAP
#
# This Snapcraft file and the resulting Snap is NOT OFFICIALLY SUPPORTED.
# If you can, please use a provided native build for your distribution.
# Patches to improve this file are very welcome though, and so is testing the Snap!
#
# This snap is strict, but it has an important limitation:
# - it needs read/write access to wherever the user puts the workspace
# definition (could be anywhere, but most commonly it's in /srv, in /home or
# in /var), access to a local archive mount (can be in /mnt), and that should
# be it (unless optipng and ffprobe have extra requirements).
#
# Until that is overcome, this snap should be installed using `--devmode` to
# effectively disable the confinement.
#
# This Snap is autobuilt, you can check its status at https://build.snapcraft.io/user/ximion/appstream-generator
name: appstream-generator
license: LGPL-3.0
base: core20
adopt-info: appstream-generator
confinement: strict
grade: stable
architectures:
- build-on: [amd64]
run-on: [amd64]
apps:
appstream-generator:
command: usr/bin/appstream-generator
common-id: org.freedesktop.appstream.generator
plugs:
- network
- home
environment:
GSETTINGS_SCHEMA_DIR: "$SNAP/usr/share/glib-2.0/schemas"
GIO_EXTRA_MODULES: "$SNAP/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/gio/modules"
layout:
/usr/share/appstream:
bind: $SNAP/usr/share/appstream
/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/gdk-pixbuf-2.0:
bind: $SNAP/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/gdk-pixbuf-2.0
/usr/share/i18n:
bind: $SNAP/usr/share/i18n
/usr/share/mime:
bind: $SNAP/usr/share/mime
parts:
appstream-generator:
source: .
source-type: git
parse-info: [usr/share/metainfo/org.freedesktop.appstream.generator.metainfo.xml]
override-pull: |
snapcraftctl pull
# set version from Git
snapcraftctl set-version "$(git describe --always | sed -e 's/v//;s/-/+git/;y/-/./')"
# adjust to an absolute path to help finding the GIR file from the AppStream part
sed -i 's|AppStream-1.0.gir|$SNAPCRAFT_STAGE/usr/share/gir-1.0/AppStream-1.0.gir|g' ${SNAPCRAFT_PART_SRC}/contrib/girwrap/APILookupAppStream.txt
sed -i 's|AppStreamCompose-1.0.gir|$SNAPCRAFT_STAGE/usr/share/gir-1.0/AppStreamCompose-1.0.gir|g' ${SNAPCRAFT_PART_SRC}/contrib/girwrap/APILookupAppStreamCompose.txt
plugin: meson
build-environment:
- LD_LIBRARY_PATH: $SNAPCRAFT_STAGE/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/
override-build: |
# install yarn
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
apt-get update && apt-get install --no-install-recommends -y yarn nodejs
# actually build asgen - we need to run everything manually here,
# because snapcraft will kill the build if run with maximum amount of ninja jobs,
# and I found no way to limit the amount of permitted ninja jobs other than overriding everything
meson --prefix=/usr --buildtype=debugoptimized -Ddownload-js=true ${SNAPCRAFT_PART_BUILD} ${SNAPCRAFT_PART_SRC}
ninja -C "${SNAPCRAFT_PART_BUILD}" -j4
meson test -C "${SNAPCRAFT_PART_BUILD}" --verbose
DESTDIR=${SNAPCRAFT_PART_INSTALL} ninja -C "${SNAPCRAFT_PART_BUILD}" install
override-prime: |
set -eux
snapcraftctl prime
for dir in usr/lib/*/gdk-pixbuf-2.0; do
if [ -d "${dir}" ]; then
for subdir in "${dir}"/*; do
if [ -d "${subdir}" ] && [ -d "${subdir}/loaders" ]; then
GDK_PIXBUF_MODULEDIR="$(pwd)/${subdir}/loaders" "${dir}/gdk-pixbuf-query-loaders" > "${subdir}/loaders.cache"
sed -i "s,$(pwd),," "${subdir}/loaders.cache"
fi
done
fi
done
update-mime-database -V usr/share/mime/
usr/lib/${SNAPCRAFT_ARCH_TRIPLET}/glib-2.0/glib-compile-schemas usr/share/glib-2.0/schemas
build-packages:
- curl
- meson
- docbook-xsl
- docbook-xml
- xsltproc
- ffmpeg
- libgdk-pixbuf2.0-dev
- libarchive-dev
- librsvg2-dev
- liblmdb-dev
- libglib2.0-dev
- libcurl4-gnutls-dev
- libcairo2-dev
- libfreetype6-dev
- libfontconfig1-dev
- libpango1.0-dev
stage-packages:
- gdb
- glib-networking
- ffmpeg
- optipng
- libc-bin
- libglu1-mesa
- freeglut3
- libslang2
- libarchive13
- libcairo2
- libcroco3
- libdatrie1
- libfontconfig1
- libfreetype6
- libgdk-pixbuf2.0-0
- libglib2.0-0
- libglib2.0-bin
- libgraphite2-3
- libharfbuzz0b
- libpango-1.0-0
- libpangocairo-1.0-0
- libpangoft2-1.0-0
- libpixman-1-0
- libpng16-16
- librsvg2-2
- librsvg2-common
- libcurl3-gnutls
- libthai0
- libx11-6
- libxau6
- libxcb-render0
- libxcb-shm0
- libxcb1
- libxdmcp6
- libxext6
- libxrender1
- locales
- locales-all
- shared-mime-info
after:
- appstream
- ldc
- gir-to-d
- glibd
appstream:
source: https://github.com/ximion/appstream.git
source-type: git
source-tag: v0.15.2
plugin: meson
meson-parameters:
- --prefix=/usr
- --buildtype=debugoptimized
- -Dcompose=true
- -Dapidocs=false
build-packages:
- build-essential
- docbook-xsl
- docbook-xml
- gettext
- gobject-introspection
- gperf
- itstool
- libgirepository1.0-dev
- libglib2.0-dev
- libxmlb-dev
- liblzma-dev
- libcurl4-gnutls-dev
- libstemmer-dev
- libxml2-dev
- libyaml-dev
- meson
- xsltproc
stage-packages:
- libicu66
- liblmdb0
- libcurl3-gnutls
- libstemmer0d
- libxml2
gir-to-d:
source: https://github.com/gtkd-developers/gir-to-d.git
source-type: git
source-tag: v0.22.0
plugin: meson
meson-parameters:
- --prefix=/usr
- --buildtype=release
build-packages:
- meson
after:
- ldc
glibd:
source: https://github.com/gtkd-developers/GlibD.git
source-type: git
source-tag: v2.3.0
plugin: meson
meson-parameters:
- --prefix=/usr
- --buildtype=release
build-packages:
- meson
- gobject-introspection
- libgirepository1.0-dev
- libglib2.0-dev
after:
- gir-to-d
- ldc
ldc:
plugin: dump
source: https://github.com/ldc-developers/ldc/releases/download/v1.28.0/ldc2-1.28.0-linux-x86_64.tar.xz
override-build: |
# link shared by default
sed -i '/\sswitches =/a \ "-link-defaultlib-shared",' etc/ldc2.conf
# remove unneeded libs
rm -rf lib32
snapcraftctl build