#!/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 " 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)"