132 lines
5.3 KiB
Bash
132 lines
5.3 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
packager=${1:?packager must be deb or rpm}
|
|
version=${2:?version is required}
|
|
release_root=${3:?release target directory is required}
|
|
dist_dir=${4:-dist}
|
|
mkdir -p "$dist_dir"
|
|
|
|
if [[ "$packager" == "deb" ]]; then
|
|
architecture=amd64
|
|
engine_dependency="convertis (= ${version}-1)"
|
|
system_dependencies=("libc6" "libgcc-s1")
|
|
ffmpeg_dependencies=("ffmpeg")
|
|
imagemagick_dependencies=("imagemagick")
|
|
graphicsmagick_dependencies=("graphicsmagick")
|
|
else
|
|
architecture=amd64
|
|
engine_dependency="convertis = ${version}-1"
|
|
system_dependencies=("glibc" "libgcc")
|
|
ffmpeg_dependencies=("/usr/bin/ffmpeg" "/usr/bin/ffprobe")
|
|
imagemagick_dependencies=("/usr/bin/magick")
|
|
graphicsmagick_dependencies=("/usr/bin/gm")
|
|
fi
|
|
|
|
make_package() {
|
|
local name=$1 description=$2
|
|
shift 2
|
|
local config
|
|
config=$(mktemp)
|
|
local contents=()
|
|
while [[ $# -gt 0 && "$1" == content:* ]]; do
|
|
contents+=("${1#content:}")
|
|
shift
|
|
done
|
|
local dependencies=("$@")
|
|
{
|
|
echo "name: $name"
|
|
echo "arch: $architecture"
|
|
echo "platform: linux"
|
|
echo "version: $version"
|
|
echo "release: 1"
|
|
echo "section: utils"
|
|
echo "priority: optional"
|
|
echo "maintainer: Elias Wendland <eliaswendland@pm.me>"
|
|
echo "description: $description"
|
|
echo "license: GPL-3.0-only"
|
|
echo "homepage: https://git.ewenlau.net/ewenlau/convertis"
|
|
if [[ ${#contents[@]} -gt 0 ]]; then
|
|
echo "contents:"
|
|
for mapping in "${contents[@]}"; do
|
|
destination=${mapping#*::}
|
|
echo " - src: ${mapping%%::*}"
|
|
echo " dst: $destination"
|
|
echo " file_info:"
|
|
if [[ "$destination" == /usr/bin/* || "$destination" == *.so ]]; then
|
|
echo " mode: 0755"
|
|
else
|
|
echo " mode: 0644"
|
|
fi
|
|
done
|
|
fi
|
|
if [[ ${#dependencies[@]} -gt 0 ]]; then
|
|
echo "depends:"
|
|
for dependency in "${dependencies[@]}"; do
|
|
echo " - $dependency"
|
|
done
|
|
fi
|
|
} > "$config"
|
|
nfpm package --config "$config" --packager "$packager" --target "$dist_dir/"
|
|
rm -f "$config"
|
|
}
|
|
|
|
exact_dependency() {
|
|
if [[ "$packager" == "deb" ]]; then
|
|
printf '%s (= %s-1)' "$1" "$version"
|
|
else
|
|
printf '%s = %s-1' "$1" "$version"
|
|
fi
|
|
}
|
|
|
|
make_package convertis "Plugin-based universal file converter" \
|
|
"content:${release_root}/convertis::/usr/bin/convertis" \
|
|
"content:target/man/convertis.1::/usr/share/man/man1/convertis.1" \
|
|
"content:README.md::/usr/share/doc/convertis/README.md" \
|
|
"content:LICENSE::/usr/share/doc/convertis/LICENSE" \
|
|
"content:packaging/plugin-catalog.json::/usr/share/convertis/plugin-catalog.json" \
|
|
"${system_dependencies[@]}"
|
|
|
|
plugin_package() {
|
|
local package=$1 library=$2 description=$3 dependency_group=${4:-none}
|
|
local dependencies=("$engine_dependency")
|
|
case "$dependency_group" in
|
|
ffmpeg) dependencies+=("${ffmpeg_dependencies[@]}") ;;
|
|
imagemagick) dependencies+=("${imagemagick_dependencies[@]}") ;;
|
|
graphicsmagick) dependencies+=("${graphicsmagick_dependencies[@]}") ;;
|
|
esac
|
|
make_package "$package" "$description" \
|
|
"content:${release_root}/${library}::/usr/lib/convertis/plugins/${library}" \
|
|
"${dependencies[@]}"
|
|
}
|
|
|
|
plugin_package convertis-ffmpeg-audio libconvertis_ffmpeg_audio.so "FFmpeg audio plugin for Convertis" ffmpeg
|
|
plugin_package convertis-ffmpeg-video libconvertis_ffmpeg_video.so "FFmpeg video plugin for Convertis" ffmpeg
|
|
plugin_package convertis-ffmpeg-video-to-frames libconvertis_ffmpeg_video_to_frames.so "FFmpeg video-to-frames plugin for Convertis" ffmpeg
|
|
plugin_package convertis-ffmpeg-frames-to-video libconvertis_ffmpeg_frames_to_video.so "FFmpeg frames-to-video plugin for Convertis" ffmpeg
|
|
plugin_package convertis-native-image libconvertis_native_image.so "Native common-image plugin for Convertis"
|
|
plugin_package convertis-image-ascii libconvertis_image_ascii.so "Image-to-ASCII plugin for Convertis"
|
|
plugin_package convertis-html libconvertis_html.so "Self-contained HTML plugin for Convertis"
|
|
plugin_package convertis-imagemagick libconvertis_imagemagick.so "ImageMagick plugin for Convertis" imagemagick
|
|
plugin_package convertis-graphicsmagick libconvertis_graphicsmagick.so "GraphicsMagick plugin for Convertis" graphicsmagick
|
|
|
|
make_package convertis-ffmpeg "All official FFmpeg plugins for Convertis" \
|
|
"$engine_dependency" \
|
|
"$(exact_dependency convertis-ffmpeg-audio)" \
|
|
"$(exact_dependency convertis-ffmpeg-video)" \
|
|
"$(exact_dependency convertis-ffmpeg-video-to-frames)" \
|
|
"$(exact_dependency convertis-ffmpeg-frames-to-video)"
|
|
|
|
make_package convertis-image "All official image plugins for Convertis" \
|
|
"$engine_dependency" \
|
|
"$(exact_dependency convertis-native-image)" \
|
|
"$(exact_dependency convertis-image-ascii)" \
|
|
"$(exact_dependency convertis-imagemagick)" \
|
|
"$(exact_dependency convertis-graphicsmagick)"
|
|
|
|
make_package convertis-plugins-all "Every official Convertis plugin" \
|
|
"$engine_dependency" \
|
|
"$(exact_dependency convertis-ffmpeg)" \
|
|
"$(exact_dependency convertis-image)" \
|
|
"$(exact_dependency convertis-html)"
|