#! /usr/bin/perl -w =head1 NAME dh_kodiaddon_depends - Provides substvars for Kodi addons =cut use strict; use Debian::Debhelper::Dh_Lib; =head1 SYNOPSIS B [S>] =head1 DESCRIPTION dh_kodiaddon_depends is a debhelper program, that is responsible for setting substvars providing the Kodi addon-API dependencies. Kodi provides a virtual package for each API which might be used by an addon. The following substvars will be set to a dependency clause which can be used directly in the "Depends"-line of the addons debian/control: ${kodi:AUDIODECODERAPI} (ADDON_INSTANCE_VERSION_AUDIODECODER) ${kodi:AUDIOENCODERAPI} (ADDON_INSTANCE_VERSION_AUDIOENCODER) ${kodi:AUDIOENGINEAPI} (ADDON_GLOBAL_VERSION_AUDIOENGINE) ${kodi:FILESYSTEMAPI} (ADDON_GLOBAL_VERSION_FILESYSTEM) ${kodi:GAMEAPI} (ADDON_INSTANCE_VERSION_GAME) ${kodi:GENERALAPI} (ADDON_GLOBAL_VERSION_GENERAL) ${kodi:GUIAPI} (ADDON_GLOBAL_VERSION_GUI) ${kodi:IMAGEDECODERAPI} (ADDON_INSTANCE_VERSION_IMAGEDECODER) ${kodi:INPUTSTREAMAPI} (ADDON_INSTANCE_VERSION_INPUTSTREAM) ${kodi:MAINAPI} (ADDON_GLOBAL_VERSION_MAIN) ${kodi:NETWORKAPI} (ADDON_GLOBAL_VERSION_NETWORK) ${kodi:PERIPHERALAPI} (ADDON_INSTANCE_VERSION_PERIPHERAL) ${kodi:PVRAPI} (ADDON_INSTANCE_VERSION_PVR) ${kodi:SCREENSAVERAPI} (ADDON_INSTANCE_VERSION_SCREENSAVER) ${kodi:VFSAPI} (ADDON_INSTANCE_VERSION_VFS) ${kodi:VIDEOCODECAPI} (ADDON_INSTANCE_VERSION_VIDEOCODEC) ${kodi:VISUALIZATIONAPI} (ADDON_INSTANCE_VERSION_VISUALIZATION) =head1 EXAMPLES dh_kodiaddon_depends is usually called indirectly in a rules file via the dh command. %: dh $@ --with kodiaddon It can also be called directly, prior to calling dh_gencontrol. =head1 CONFORMS TO Debian policy, version 3.8.1 =cut init (); no locale; sub get_api_version { my $headerFileName = $_[0]; my $defineName = $_[1]; my $apiVersion; my $apiVersionMin; my $apiVersionMax; open(HEADERFILE, "<$headerFileName") or die "$!"; while () { if ($_ =~ /^#define $defineName\s+"(.*)"/) { $apiVersion = $1; } if ($_ =~ /^#define ${defineName}_MIN\s+"(.*)"/) { $apiVersionMin = $1; } if ($apiVersion && $apiVersionMin) { last; } } close(HEADERFILE); if ($apiVersion =~ qr/(?:(\d+)\.(\d+)\.(\d+)|(\d+)\.(\d+)|(\d+))?(?:\.\*)?/) { $apiVersionMax = int($2) + 1; $apiVersionMax = "$1.$apiVersionMax.0"; } $apiVersion or die "Could not find '$defineName' in $headerFileName"; $apiVersionMin or die "Could not find '${defineName}_MIN' in $headerFileName"; $apiVersionMax or die "Could not derive maximum API version from '$defineName' in $headerFileName"; ($apiVersion, $apiVersionMin, $apiVersionMax) } sub create_substvar { my $substvarName = $_[0]; my $substvarValue = $_[1]; foreach my $package (@{$dh{DOPACKAGES}}) { delsubstvar($package, $substvarName); addsubstvar($package, $substvarName, $substvarValue); } } my $baseDir = "debian/kodi-addons-dev-common"; if (! -d "$baseDir/usr/include/kodi") { $baseDir = "debian/tmp"; if (! -d "$baseDir/usr/include/kodi") { $baseDir = "" } } my @apis = ( ["kodi-api-audiodecoder", "kodi:AUDIODECODERAPI", "$baseDir/usr/include/kodi/versions.h", "ADDON_INSTANCE_VERSION_AUDIODECODER"], ["kodi-api-audioencoder", "kodi:AUDIOENCODERAPI", "$baseDir/usr/include/kodi/versions.h", "ADDON_INSTANCE_VERSION_AUDIOENCODER"], ["kodi-api-audioengine", "kodi:AUDIOENGINEAPI", "$baseDir/usr/include/kodi/versions.h", "ADDON_GLOBAL_VERSION_AUDIOENGINE"], ["kodi-api-filesystem", "kodi:FILESYSTEMAPI", "$baseDir/usr/include/kodi/versions.h", "ADDON_GLOBAL_VERSION_FILESYSTEM"], ["kodi-api-game", "kodi:GAMEAPI", "$baseDir/usr/include/kodi/versions.h", "ADDON_INSTANCE_VERSION_GAME"], ["kodi-api-general", "kodi:GENERALAPI", "$baseDir/usr/include/kodi/versions.h", "ADDON_GLOBAL_VERSION_GENERAL"], ["kodi-api-gui", "kodi:GUIAPI", "$baseDir/usr/include/kodi/versions.h", "ADDON_GLOBAL_VERSION_GUI"], ["kodi-api-imagedecoder", "kodi:IMAGEDECODERAPI", "$baseDir/usr/include/kodi/versions.h", "ADDON_INSTANCE_VERSION_IMAGEDECODER"], ["kodi-api-inputstream", "kodi:INPUTSTREAMAPI", "$baseDir/usr/include/kodi/versions.h", "ADDON_INSTANCE_VERSION_INPUTSTREAM"], ["kodi-api-main", "kodi:MAINAPI", "$baseDir/usr/include/kodi/versions.h", "ADDON_GLOBAL_VERSION_MAIN"], ["kodi-api-network", "kodi:NETWORKAPI", "$baseDir/usr/include/kodi/versions.h", "ADDON_GLOBAL_VERSION_NETWORK"], ["kodi-api-peripheral", "kodi:PERIPHERALAPI", "$baseDir/usr/include/kodi/versions.h", "ADDON_INSTANCE_VERSION_PERIPHERAL"], ["kodi-api-pvr", "kodi:PVRAPI", "$baseDir/usr/include/kodi/versions.h", "ADDON_INSTANCE_VERSION_PVR"], ["kodi-api-screensaver", "kodi:SCREENSAVERAPI", "$baseDir/usr/include/kodi/versions.h", "ADDON_INSTANCE_VERSION_SCREENSAVER"], ["kodi-api-vfs", "kodi:VFSAPI", "$baseDir/usr/include/kodi/versions.h", "ADDON_INSTANCE_VERSION_VFS"], ["kodi-api-videocodec", "kodi:VIDEOCODECAPI", "$baseDir/usr/include/kodi/versions.h", "ADDON_INSTANCE_VERSION_VIDEOCODEC"], ["kodi-api-visualization", "kodi:VISUALIZATIONAPI", "$baseDir/usr/include/kodi/versions.h", "ADDON_INSTANCE_VERSION_VISUALIZATION"] ); my @provides; foreach my $api (@apis) { my ($apiName, $apiSubstvar, $apiHeader, $apiDefine) = @$api; my ($apiVersion, $apiVersionMin, $apiVersionMax) = get_api_version($apiHeader, $apiDefine); create_substvar($apiSubstvar, "$apiName (>= $apiVersionMin), $apiName (<< $apiVersionMax)"); push @provides, "$apiName (= $apiVersion)"; } create_substvar("kodi:APIPROVIDES", join(", ", @provides)); =head1 SEE ALSO L This program is not a part of debhelper. =head1 AUTHOR Tobias Grimm =cut