[ Avaa Bypassed ]




Upload:

Command:

www-data@18.118.140.120: ~ $
#! /usr/bin/perl -w

=head1 NAME

dh_girepository - compute dependencies for GObject introspection packages

=cut

use strict;
use File::Find;
use Dpkg::Deps;
use Dpkg::Control;
use Debian::Debhelper::Dh_Lib;

=head1 SYNOPSIS

B<dh_girepository> [I<debhelper options>] [-lI<directory>] [-pI<directory>] [-XI<item>] [I<private [...]>]

=head1 DESCRIPTION

dh_girepository is a debhelper program to compute dependencies for packages
shipping GObject introspection data.

The dependencies are generated in the ${gir:Depends} substitution variable.

The minimal version of the generated dependencies is calculated by looking
first at the version of the packages declared in the build-dependencies of the
building package. If a package is not declared in the build-dependencies, the
minimal version of that package is calculated by looking at the version of the
package containing the corresponding .gir file defined in the
build-dependencies.

Note that dh_girepository will not be executed automatically by dh; you
need to use C<dh $@ --with gir> for C<dh> to include it.

=head1 OPTIONS

=over 4

=item B<-l>I<directory>

Specify a directory (or a colon-separated list of directories) where to look
for the .gir XML files that were used to generate the .typelib files that
are scanned. This option is only necessary if those files are not shipped in
another, architecture-dependent package.

=item B<-p>I<directory>

Specify a directory (or a colon-separated list of directories) where to look
for the dependencies. This is useful when a dependency ships the .typelib
in a private directory.

=item B<-X>I<item>

Exclude files that contain I<item> anywhere in their filename from being
analyzed.

=item I<private [...]>
List of directories where to look for typelibs and the corresponding .gir
files. Useful when the package installs its typelibs in a private
directory, such as /usr/lib/<package>. Library dependencies are also looked
there, in case your typelib depends on a library that you ship on a private
directory.

=back

=head1 CONFORMS TO

GObject introspection mini policy as of 2011-03-30.

=cut

# Initialisation code
init(options => {
    "l=s", => \$dh{L_PARAMS},
    "p=s", => \$dh{P_PARAMS},
});
my @paths_first = ();
my @privdirs = ();
if ($dh{L_PARAMS}) {
    push @paths_first, split /:/, $dh{L_PARAMS};
}
if ($dh{P_PARAMS}) {
    push @privdirs, split /:/, $dh{P_PARAMS};
}
isnative($dh{MAINPACKAGE}); # Necessary to have $dh{VERSION}
my $bin_version = $dh{VERSION};
my @archpackages = getpackages("arch");

my $triplet = `dpkg-architecture -qDEB_HOST_MULTIARCH`;
chomp $triplet;
my $typelib_multiarch_path = "/usr/lib/$triplet/girepository-1.0";
my $typelib_path = "/usr/lib/girepository-1.0";

my @typelibdirs = (@ARGV, $typelib_path, $typelib_multiarch_path);
my $gir_path = "/usr/share/gir-1.0";
my @girdirs = (@ARGV, $gir_path);
my $arch_triplet = `dpkg-architecture -qDEB_HOST_MULTIARCH`;
chomp $arch_triplet;
my @privlibdirs = (@ARGV);
my @libdirs = ("/lib/$arch_triplet", "/lib", "/usr/lib/$arch_triplet", "/usr/lib", @privlibdirs);
my $format;

# Get Build-Depends in an array
my @bdeps;

my $ctrl = Dpkg::Control->new(type => CTRL_INFO_SRC);
$ctrl->load('debian/control');
foreach my $field (qw(Build-Depends Build-Depends-Arch Build-Depends-Indep)) {
    if (defined $ctrl->{$field}) {
        my $value = deps_parse($ctrl->{$field}, build_dep => 1);
        push @bdeps, split ', ', $value->output;
    }
}

# We can’t parse .typelib files, so we need the corresponding .gir
# somewhere in the same source package (or with -l).

sub find_gir {
    my $req = shift;
    $req =~ s/\.typelib$//;
    my $f;
    foreach my $path (@paths_first) {
        $f = "$path/$req.gir";
        if (-f $f) {
            verbose_print ("Found $req.gir in $path");
            return $f;
        }
    }
    foreach my $otherpkg (@archpackages) {
        foreach my $girdir (@girdirs) {
            $f = tmpdir($otherpkg)."$girdir/$req.gir";
            if (-f $f) {
                verbose_print ("Found $req.gir in $otherpkg package");
                return $f;
            }
        }
    }
    error("Could not find gir file for $req.typelib");
}


# Function used for dependencies on other .typelib files

sub require_typelib {
    my $req = shift;
    my $package = shift;
    my $fullpath = "";
    foreach my $typelibdir (@typelibdirs) {
        $fullpath = "$typelibdir/$req";

        verbose_print ("Dependency: $req");
        foreach my $typelibdir (@typelibdirs) {
            if (-f tmpdir($package)."$typelibdir/$req") {
                verbose_print("  found in the same package");
                return;
            }
        }
        foreach my $otherpkg (@archpackages) {
            if (-f tmpdir($otherpkg)."$fullpath") {
                error("Dependency on $otherpkg with a different format than $format") unless $otherpkg =~ /^gir$format/;
                addsubstvar ($package, "gir:Depends", $otherpkg, "= $bin_version");
                return;
            }
        }
        foreach my $privpath (@privdirs) {
            if (-f "$privpath/$req") {
                verbose_print ("  found in $privpath");
                $fullpath = "$privpath/$req";
                last;
            }
        }

        if (-f "$fullpath") {
            my @output = (split ':', `dpkg -S $fullpath 2>/dev/null`);
            error("$fullpath does not belong to any package") unless @output;
            my $deppkg = $output[0];
            error("Dependency on $deppkg with a different format than $format") unless $deppkg =~ /^gir$format/;
            # Look for version information in build-dependencies
            my $found = 0;
            foreach my $bdep (@bdeps) {
                if ($bdep =~ /^\s*([a-z0-9\._\-\+]+)\s*\((.*)\)/) {
                    if ($1 eq $deppkg) {
                        addsubstvar ($package, "gir:Depends", $1, $2);
                        $found = 1;
                    }
                }
            }
            if (! $found) {
                my $fullpath_gir = "";
                (my $req_gir = $req) =~ s/\.typelib$/\.gir/;
                foreach my $girdir (@girdirs) {
                    if (-f "$girdir/$req_gir") {
                        $fullpath_gir = "$gir_path/$req_gir";
                        my @output_gir = (split ':', `dpkg -S $fullpath_gir 2>/dev/null`);
                        error("$fullpath_gir does not belong to any package") unless @output_gir;
                        my $deppkg_gir = $output_gir[0];
                        foreach my $bdep (@bdeps) {
                            if ($bdep =~ /^\s*([a-z0-9\._\-\+]+)\s*\((.*)\)/) {
                                if ($1 eq $deppkg_gir) {
                                    addsubstvar ($package, "gir:Depends", $deppkg, $2);
                                    $found = 1;
                                }
                            }
                        }
                    }
                }
            }
            if (! $found) {
                addsubstvar ($package, "gir:Depends", $deppkg);
            }
            return;
        }
    }
    error("Could not find $req dependency");
}


sub find_library_in_package {
    my $req = shift;
    my $package = shift;
    my $tmp = "";
    if ($package) {
        $tmp = tmpdir ($package);
    }
    my @loclibdirs = grep -d, map "$tmp$_", @libdirs;
    foreach my $libdir (@loclibdirs) {
        if (-f "$libdir/$req" or -l "$libdir/$req") {
            return "$libdir/$req";
        }
    }
}

sub find_library {
    my $req = shift;
    my $package = shift;

    my $file = find_library_in_package ($req, $package);
    if ($file) {
        verbose_print ("    found in the same package");
    } else {
        foreach my $otherpkg (@archpackages) {
            $file = find_library_in_package ($req, $otherpkg);
            if ($file) {
                verbose_print ("    found in $otherpkg");
                last;
            }
        }
    }
    if (!$file) {
        $file = find_library_in_package ($req);
        if ($file) {
            verbose_print ("    found on filesystem");
        } else {
            error ("Could not find library $req");
        }
    }

    if (-l $file and not -f $file) {
        # We have a symbolic link that points to another package
        verbose_print ("    ... it's a symlink ...");
        return find_library (readlink ($file), $package);
    }
    return $file;
}

foreach my $package (@{$dh{DOPACKAGES}}) {
    my $tmp = tmpdir($package);
    my $ext = pkgext($package);
    my @bin_files = ();
    my @c_files = ();
    my @typelib_deps = ();
    my $multiarch_required = 0;

    foreach my $dir (@typelibdirs) {
        my $typelibdir = "$tmp$dir";
        next unless -d $typelibdir;
        opendir(DIRHANDLE, $typelibdir);
        while (my $typelib = readdir(DIRHANDLE)) {
            next unless $typelib =~ /\.typelib$/;
            next if excludefile ($typelib);
            my $girfile = find_gir ($typelib);
            error("Unable to open $girfile") unless open (my $f, "<", $girfile);
            verbose_print ("$girfile...");
            my @libraries = ();
            my @symbols = ();
            my $infunction = 0;
            while (<$f>) {
                # "Parse" the XML file
                chomp;
                if (/<repository.+?version="(.*?)"/) {
                    # gir format version
                    $format="$1";
                } elsif (/<include\s+name="(.*?)"\s+version="(.*?)"\/>/) {
                    # Dependency on another typelib file
                    my $deptypelib="$1-$2.typelib";
                    verbose_print ("  Dependency: $deptypelib");
                    if (! grep { $_ eq $deptypelib } @typelib_deps) {
                        push @typelib_deps, $deptypelib;
                    }
                } elsif (/shared-library="(.*?)"/) {
                    # Dependency on a shared library
                    foreach my $shlibname (split ",", $1) {
                        if ($shlibname !~ /\.so/) {
                            $shlibname = "lib$shlibname.so"
                        }
                        verbose_print ("  Library: $shlibname");
                        push @libraries, find_library ($shlibname, $package);
                    }
                } elsif (/<(method|constructor|function)\s.*c:identifier="(.*?)"/) {
                    push @symbols, $2;
                } elsif (/<(method|constructor|function)/) {
                    $infunction = 1;
                } elsif ($infunction and /c:identifier="(.*?)"/) {
                    push @symbols, $1;
                }
                if (/>$/) {
                    $infunction = 0;
                }
            }
            close $f;
            error("Unable to determine gir format") unless $format;
            error("Package name $package doesn't match gir format $format")
                unless $package =~ /^gir$format/
                or not $typelibdir =~ /usr\/lib\/girepository/;
            verbose_print(sprintf("  %d symbols found", $#symbols+1));
            if (@libraries or @symbols) {
                my $c_file = "$typelibdir/$typelib.c";
                my $bin_file = "$typelibdir/$typelib.so";
                verbose_print ("  writing $c_file");
                if (!$dh{NO_ACT}){
                    error("Unable to open $girfile") unless open (F, ">", $c_file);
                    print F "void gir_dummy_function () {\n";
                    foreach my $symbol (@symbols) {
                        print F "$symbol ();\n";
                    }
                    print F "}";
                    close F;
                }
                push @c_files, $c_file;

                # Build a dummy binary using all referenced symbols and libraries
                # We use -shared so that gcc doesn’t try to resolve references
                verbose_print ("  building $bin_file");
                doit (("gcc", "-Wno-implicit-function-declaration", "-shared", "-fPIC", "-o", $bin_file, $c_file, @libraries));
                push @bin_files, $bin_file;
            }
            if ($typelibdir =~ $typelib_multiarch_path) {
                $multiarch_required = 1;
            }
        }
    }
    if (@bin_files) {
        # dpkg-shlibdeps expects this directory to exist
        if (! -d "$tmp/DEBIAN") {
            install_dir("$tmp/DEBIAN");
        }

        # Let dpkg-shlibdeps generate the corresponding dependencies
        # It must run first since otherwise it overwrites the variable
        push @privlibdirs, $ENV{"LD_LIBRARY_PATH"} if $ENV{"LD_LIBRARY_PATH"};
        my $llp = join (":", @privlibdirs);
        complex_doit ("LD_LIBRARY_PATH=$llp dpkg-shlibdeps -pgir -Tdebian/${ext}substvars -xlibc6 -xlibc0 @bin_files");
    }
    doit (("rm", "-f", @c_files, @bin_files));

    # Generate dependencies on other .typelib files
    foreach my $dep (@typelib_deps) {
        require_typelib ($dep, $package);
    }
}

=head1 SEE ALSO

L<debhelper(7)>

This program is a part of gobject-introspection but is made to work with 
debhelper.

=head1 AUTHOR

Josselin Mouette <joss@debian.org>

=cut

Filemanager

Name Type Size Permission Actions
X11 Folder 0755
File 0 B 0
appstream-compose File 26.3 KB 0755
appstream-util File 98.3 KB 0755
appstreamcli File 118.23 KB 0755
File 0 B 0
File 0 B 0
broadwayd File 130.21 KB 0755
bwrap File 70.47 KB 0755
File 0 B 0
c89-gcc File 428 B 0755
c99-gcc File 454 B 0755
cairo-trace File 2.95 KB 0755
canberra-gtk-play File 18.2 KB 0755
corelist File 15.01 KB 0755
cpan File 8.16 KB 0755
cpan5.34-x86_64-linux-gnu File 8.18 KB 0755
File 0 B 0
File 0 B 0
curl-config File 6.52 KB 0755
dazzle-list-counters File 14.13 KB 0755
derb File 26.88 KB 0755
desktop-file-edit File 96.44 KB 0755
desktop-file-install File 96.44 KB 0755
desktop-file-validate File 76.69 KB 0755
dh_girepository File 12.88 KB 0755
dumpsexp File 18.3 KB 0755
File 0 B 0
File 0 B 0
enc2xs File 40.84 KB 0755
encguess File 3.01 KB 0755
envsubst File 34.38 KB 0755
fc-cache File 22.23 KB 0755
fc-cat File 18.23 KB 0755
fc-conflist File 14.23 KB 0755
fc-list File 14.23 KB 0755
fc-match File 14.23 KB 0755
fc-pattern File 14.23 KB 0755
fc-query File 14.23 KB 0755
fc-scan File 14.23 KB 0755
fc-validate File 14.23 KB 0755
fribidi File 26.99 KB 0755
gapplication File 22.21 KB 0755
File 0 B 0
File 0 B 0
File 0 B 0
File 0 B 0
File 0 B 0
File 0 B 0
gdbus File 54.21 KB 0755
gdbus-codegen File 1.99 KB 0755
gdk-pixbuf-csource File 14.15 KB 0755
gdk-pixbuf-pixdata File 14.13 KB 0755
gdk-pixbuf-thumbnailer File 18.21 KB 0755
genbrk File 14.78 KB 0755
gencat File 26.37 KB 0755
gencfu File 14.73 KB 0755
gencnval File 26.61 KB 0755
gendict File 26.78 KB 0755
genrb File 147.91 KB 0755
getconf File 34.29 KB 0755
getent File 38.65 KB 0755
gettext File 34.38 KB 0755
gettext.sh File 5.07 KB 0755
gettextize File 41.28 KB 0755
gio File 102.23 KB 0755
gio-querymodules File 18.13 KB 0755
gjs File 26.7 KB 0755
gjs-console File 26.7 KB 0755
glib-compile-schemas File 66.21 KB 0755
File 0 B 0
gobject-query File 14.14 KB 0755
File 0 B 0
gpg-error-config File 2.04 KB 0755
gpgrt-config File 13.11 KB 0755
File 0 B 0
gresource File 26.13 KB 0755
gsettings File 30.21 KB 0755
gsound-play File 18.21 KB 0755
gtk-encode-symbolic-svg File 22.24 KB 0755
gtk-launch File 18.29 KB 0755
gtk-query-settings File 14.13 KB 0755
gtk-update-icon-cache File 38.57 KB 0755
gtk4-broadwayd File 150.22 KB 0755
gtk4-encode-symbolic-svg File 8.58 MB 0755
gtk4-launch File 18.29 KB 0755
gtk4-query-settings File 14.13 KB 0755
gtk4-rendernode-tool File 30.13 KB 0755
hb-info File 54.21 KB 0755
hb-ot-shape-closure File 46.21 KB 0755
hb-shape File 50.21 KB 0755
hb-subset File 46.18 KB 0755
hb-view File 82.35 KB 0755
hmac256 File 18.7 KB 0755
iconv File 66.41 KB 0755
icuexportdata File 30.98 KB 0755
icuinfo File 14.62 KB 0755
instmodsh File 4.27 KB 0755
ispell-wrapper File 7.05 KB 0755
itstool File 67.8 KB 0755
js102 File 28.97 MB 0755
js102-config File 2.03 KB 0755
json-glib-format File 18.38 KB 0755
json-glib-validate File 14.24 KB 0755
json_pp File 4.88 KB 0755
File 0 B 0
File 0 B 0
File 0 B 0
ldd File 5.32 KB 0755
libgcrypt-config File 4.52 KB 0755
libinput File 62.35 KB 0755
libnetcfg File 15.41 KB 0755
libpng-config File 2.41 KB 0755
libpng16-config File 2.41 KB 0755
libtool File 365.84 KB 0755
libtoolize File 133.57 KB 0755
libwacom-list-devices File 14.24 KB 0755
libwacom-list-local-devices File 18.29 KB 0755
libwacom-show-stylus File 5.99 KB 0755
libwacom-update-db File 8.99 KB 0755
locale File 57.56 KB 0755
localedef File 326.96 KB 0755
File 0 B 0
lzmainfo File 14.23 KB 0755
makeconv File 50.89 KB 0755
mako-render File 961 B 0755
markdown_py File 973 B 0755
mpicalc File 22.3 KB 0755
msgattrib File 26.38 KB 0755
msgcat File 26.38 KB 0755
msgcmp File 26.38 KB 0755
msgcomm File 26.38 KB 0755
msgconv File 22.38 KB 0755
msgen File 22.38 KB 0755
msgexec File 22.38 KB 0755
msgfilter File 34.38 KB 0755
msgfmt File 82.59 KB 0755
msggrep File 114.46 KB 0755
msginit File 66.39 KB 0755
msgmerge File 74.41 KB 0755
msgunfmt File 34.39 KB 0755
msguniq File 22.38 KB 0755
ngettext File 34.38 KB 0755
nspr-config File 2.58 KB 0755
nss-config File 2.31 KB 0755
p11-kit File 170.45 KB 0755
pango-list File 18.13 KB 0755
pango-segmentation File 18.21 KB 0755
pango-view File 66.42 KB 0755
pcre-config File 2.29 KB 0755
pcre2-config File 1.93 KB 0755
pdfattach File 22.21 KB 0755
pdfdetach File 26.32 KB 0755
pdffonts File 22.33 KB 0755
pdfimages File 42.33 KB 0755
pdfinfo File 62.33 KB 0755
pdfseparate File 22.21 KB 0755
pdfsig File 42.6 KB 0755
pdftocairo File 190.3 KB 0755
pdftohtml File 118.23 KB 0755
pdftoppm File 34.24 KB 0755
pdftops File 34.34 KB 0755
pdftotext File 50.34 KB 0755
pdfunite File 34.21 KB 0755
perl5.34-x86_64-linux-gnu File 14.3 KB 0755
perlbug File 44.12 KB 0755
perldoc File 125 B 0755
perlivp File 10.61 KB 0755
perlthanks File 44.12 KB 0755
piconv File 8.16 KB 0755
pip File 225 B 0755
pip3 File 225 B 0755
pip3.10 File 225 B 0755
pipewire File 14.38 KB 0755
pkgdata File 43.53 KB 0755
pldd File 22.37 KB 0755
pod2html File 4.04 KB 0755
pod2man File 14.68 KB 0755
pod2text File 10.55 KB 0755
pod2usage File 4.01 KB 0755
podchecker File 3.57 KB 0755
psl File 22.16 KB 0755
psl-make-dafsa File 22.21 KB 0755
ptar File 3.48 KB 0755
ptardiff File 2.58 KB 0755
ptargrep File 4.29 KB 0755
pw-cat File 138.38 KB 0755
pw-cli File 134.38 KB 0755
pw-dot File 34.38 KB 0755
pw-dsdplay File 138.38 KB 0755
pw-dump File 94.38 KB 0755
pw-link File 30.38 KB 0755
pw-loopback File 18.38 KB 0755
pw-metadata File 14.38 KB 0755
pw-mididump File 34.38 KB 0755
pw-midiplay File 138.38 KB 0755
pw-midirecord File 138.38 KB 0755
pw-mon File 90.42 KB 0755
pw-play File 138.38 KB 0755
pw-profiler File 26.38 KB 0755
pw-record File 138.38 KB 0755
pw-reserve File 26.38 KB 0755
pw-top File 30.38 KB 0755
pw-v4l2 File 1.95 KB 0755
py3compile File 12.88 KB 0755
py3versions File 11.63 KB 0755
python3.10 File 5.63 MB 0755
recode-sr-latin File 14.38 KB 0755
rsvg-convert File 5.53 MB 0755
secret-tool File 22.21 KB 0755
select-default-iwrap File 474 B 0755
session-migration File 22.15 KB 0755
shasum File 9.75 KB 0755
spa-acp-tool File 268.12 KB 0755
spa-inspect File 78.48 KB 0755
spa-json-dump File 14.3 KB 0755
spa-monitor File 14.48 KB 0755
spa-resample File 30.6 KB 0755
splain File 18.96 KB 0755
streamzip File 7.75 KB 0755
tzselect File 15.02 KB 0755
uconv File 54.83 KB 0755
unxz File 82.52 KB 0755
update-desktop-database File 22.38 KB 0755
update-mime-database File 58.23 KB 0755
xdg-dbus-proxy File 50.14 KB 0755
xdg-user-dir File 234 B 0755
xdg-user-dirs-update File 26.23 KB 0755
xml2-config File 1.44 KB 0755
xmlcatalog File 22.3 KB 0755
xmllint File 78.95 KB 0755
xz File 82.52 KB 0755
xzcat File 82.52 KB 0755
xzcmp File 6.86 KB 0755
xzdiff File 6.86 KB 0755
xzegrep File 5.87 KB 0755
xzfgrep File 5.87 KB 0755
xzgrep File 5.87 KB 0755
xzless File 1.76 KB 0755
xzmore File 2.11 KB 0755
zdump File 26.21 KB 0755
zipdetails File 58.66 KB 0755