gnucash-on-flatpak master: Finance::Quote: Add the example scripts to /app/share
John Ralls
jralls at code.gnucash.org
Sun Jul 6 19:28:20 EDT 2025
Updated via https://github.com/Gnucash/gnucash-on-flatpak/commit/5bd17272 (commit)
from https://github.com/Gnucash/gnucash-on-flatpak/commit/cf50cd80 (commit)
commit 5bd17272165b662dfc5a6e051ff742a98af092a2
Author: John Ralls <jralls at ceridwen.us>
Date: Sun Jul 6 16:26:35 2025 -0700
Finance::Quote: Add the example scripts to /app/share
So that they're available to users.
While we're at it add the finance-quote module generator script
to git.
diff --git a/flatpak-cpan-generator.pl b/flatpak-cpan-generator.pl
new file mode 100755
index 0000000..3cb4651
--- /dev/null
+++ b/flatpak-cpan-generator.pl
@@ -0,0 +1,141 @@
+#!/usr/bin/env perl
+
+use v5.14;
+
+use strict;
+use warnings;
+
+use Digest::SHA;
+require File::Temp;
+use File::Temp ();
+
+use Getopt::Long::Descriptive;
+use JSON::MaybeXS;
+use LWP::UserAgent;
+use MetaCPAN::Client;
+use Capture::Tiny qw(tee);
+
+
+sub scan_deps {
+ my @deps = grep(/^Successfully installed/, @_);
+
+ for (@deps)
+ {
+ s/^Successfully installed (\S+).*/$1/;
+ }
+
+ @deps
+}
+
+sub get_url_sha256 {
+ my ($url) = @_;
+
+ my $state = Digest::SHA->new(256);
+ my $ua = LWP::UserAgent->new;
+ $ua->env_proxy;
+
+ my $resp = $ua->get($url, ':read_size_hint' => 1024,
+ ':content_cb' => sub {
+ my ($data) = @_;
+ $state->add($data);
+ });
+
+ die "Failed to get sha256 of $url: @{[$resp->status_line]}\n" if !$resp->is_success;
+ $state->hexdigest;
+
+}
+sub get_source_for_dep {
+ my ($cpan, $dep, $outdir) = @_;
+ my $release_set = $cpan->release({ name => $dep });
+
+ die "Unexpected @{[$release_set->total]} releases for $dep"
+ if $release_set->total != 1;
+ my $release = $release_set->next;
+
+ my $url = $release->download_url;
+ my $sha256 = get_url_sha256 $url;
+
+ {
+ type => 'archive',
+ url => $url,
+ sha256 => $sha256,
+ dest => "$outdir/@{[$release->distribution]}",
+ };
+}
+
+sub write_module_to_file {
+ my ($output, $root) = @_;
+
+ my $serializer = JSON::MaybeXS->new(indent => 1, space_after => 1, canonical => 1);
+ my $json = $serializer->encode($root);
+
+ open my $fh, '>', $output or die "Could not open $output for writing\n";
+ print $fh $json;
+ close $fh;
+}
+
+sub main {
+ my ($opts, $usage) = describe_options(
+ 'flatpak-cpan-generator %o <packages...>',
+ ['output|o=s', 'The generated sources file', { default => 'generated-sources.json' }],
+ ['dir|d=s', 'The output directory used inside the sources file', { default => 'perl-libs' }],
+ ['help|h', 'Show this screen', { shortcircuit => 1, hidden => 1 }],
+ );
+
+ if ($opts->help) {
+ print $usage->text;
+ exit;
+ }
+
+ die "At least one package is required.\n" if @ARGV == 0;
+
+ my $cpan = MetaCPAN::Client->new;
+
+ say '** Installing dependencies with cpanm...';
+
+ my $tmpdir = File::Temp->newdir;
+ my ($stdout, $stderr, $exit) = tee {
+ system ('cpanm', '-n', '-L', $tmpdir, "--", @ARGV);
+ };
+ die "cpanm failed with exit status $exit\n" if $exit != 0;
+
+ say '** Scanning dependencies...';
+
+ my @stdout = split "\n", $stdout;
+ my @deps = scan_deps @stdout;
+ # my @deps = scan_deps 'lib';
+ my @sources = ();
+
+ foreach my $dep (@deps) {
+ say "** Processing: $dep";
+ my $source = get_source_for_dep $cpan, $dep, $opts->dir;
+ push @sources, $source;
+ }
+
+ push @sources, {
+ type => 'script',
+ dest => $opts->dir,
+ 'dest-filename' => 'install.sh',
+ commands => [
+ "set -e",
+ "function make_install {",
+ " mod_dir=\$1",
+ " cd \$mod_dir",
+ " if [ -f 'Makefile.PL' ]; then",
+ " perl Makefile.PL PREFIX=\${FLATPAK_DEST} && make install PREFIX=\${FLATPAK_DEST}",
+ " elif [ -f 'Build.PL' ]; then",
+ " perl Build.PL && ./Build && ./Build install",
+ " else",
+ " echo 'No Makefile.PL or Build.PL found. Do not know how to install this module'",
+ " exit 1",
+ " fi",
+ "}",
+ "cp -R perl-libs/Finance-Quote/Examples \${FLATPAK_DEST}/share/finance-quote",
+ map { "(make_install $_->{dest})" } @sources
+ ],
+ };
+
+ write_module_to_file $opts->output, \@sources;
+}
+
+main;
diff --git a/modules/finance-quote-sources.json b/modules/finance-quote-sources.json
index 9c9c55c..f03776e 100644
--- a/modules/finance-quote-sources.json
+++ b/modules/finance-quote-sources.json
@@ -14,92 +14,57 @@
" exit 1",
" fi",
"}",
+ "cp -R perl-libs/Finance-Quote/Examples ${FLATPAK_DEST}/share/finance-quote",
"(make_install perl-libs/JSON-Parse)",
- "(make_install perl-libs/ExtUtils-Helpers)",
- "(make_install perl-libs/ExtUtils-Config)",
- "(make_install perl-libs/ExtUtils-InstallPaths)",
- "(make_install perl-libs/Module-Build-Tiny)",
"(make_install perl-libs/MIME-Base32)",
"(make_install perl-libs/URI)",
- "(make_install perl-libs/UNIVERSAL-require)",
- "(make_install perl-libs/XML-XPathEngine)",
- "(make_install perl-libs/Module-Build)",
- "(make_install perl-libs/HTML-Tagset)",
- "(make_install perl-libs/Try-Tiny)",
- "(make_install perl-libs/Test-Fatal)",
- "(make_install perl-libs/IO-HTML)",
- "(make_install perl-libs/Clone)",
"(make_install perl-libs/Encode-Locale)",
+ "(make_install perl-libs/Net-HTTP)",
+ "(make_install perl-libs/Clone)",
+ "(make_install perl-libs/IO-HTML)",
+ "(make_install perl-libs/LWP-MediaTypes)",
"(make_install perl-libs/TimeDate)",
"(make_install perl-libs/HTTP-Date)",
- "(make_install perl-libs/LWP-MediaTypes)",
"(make_install perl-libs/HTTP-Message)",
+ "(make_install perl-libs/HTML-Tagset)",
"(make_install perl-libs/HTML-Parser)",
- "(make_install perl-libs/HTML-Tree)",
- "(make_install perl-libs/HTML-TreeBuilder-XPath)",
- "(make_install perl-libs/Test-Requires)",
- "(make_install perl-libs/HTTP-Cookies)",
- "(make_install perl-libs/WWW-RobotRules)",
"(make_install perl-libs/HTTP-Negotiate)",
- "(make_install perl-libs/Net-HTTP)",
+ "(make_install perl-libs/WWW-RobotRules)",
+ "(make_install perl-libs/Try-Tiny)",
+ "(make_install perl-libs/HTTP-Cookies)",
"(make_install perl-libs/File-Listing)",
"(make_install perl-libs/libwww-perl)",
- "(make_install perl-libs/YAML)",
- "(make_install perl-libs/Spiffy)",
- "(make_install perl-libs/Test-Base)",
- "(make_install perl-libs/HTML-Selector-XPath)",
- "(make_install perl-libs/Web-Scraper)",
- "(make_install perl-libs/Smart-Comments)",
- "(make_install perl-libs/HTML-TableExtract)",
- "(make_install perl-libs/Readonly)",
- "(make_install perl-libs/OLE-Storage_Lite)",
- "(make_install perl-libs/IO-Stringy)",
- "(make_install perl-libs/Crypt-RC4)",
- "(make_install perl-libs/Digest-Perl-MD5)",
- "(make_install perl-libs/Spreadsheet-ParseExcel)",
- "(make_install perl-libs/Archive-Zip)",
- "(make_install perl-libs/Spreadsheet-XLSX)",
- "(make_install perl-libs/IO-String)",
- "(make_install perl-libs/File-Which)",
- "(make_install perl-libs/Path-Tiny)",
- "(make_install perl-libs/File-chdir)",
- "(make_install perl-libs/FFI-CheckLib)",
- "(make_install perl-libs/Capture-Tiny)",
- "(make_install perl-libs/Alien-Build)",
- "(make_install perl-libs/Alien-Build-Plugin-Download-GitLab)",
- "(make_install perl-libs/Alien-Libxml2)",
- "(make_install perl-libs/XML-SAX-Base)",
- "(make_install perl-libs/XML-NamespaceSupport)",
- "(make_install perl-libs/XML-SAX)",
- "(make_install perl-libs/XML-LibXML)",
+ "(make_install perl-libs/JSON)",
"(make_install perl-libs/HTTP-CookieJar)",
- "(make_install perl-libs/Text-Template)",
+ "(make_install perl-libs/Mozilla-CA)",
"(make_install perl-libs/Net-SSLeay)",
+ "(make_install perl-libs/Smart-Comments)",
"(make_install perl-libs/IO-Socket-SSL)",
"(make_install perl-libs/LWP-Protocol-https)",
- "(make_install perl-libs/Mozilla-CA)",
- "(make_install perl-libs/File-ShareDir-Install)",
+ "(make_install perl-libs/Devel-Trace)",
+ "(make_install perl-libs/Role-Tiny)",
+ "(make_install perl-libs/Eval-Closure)",
+ "(make_install perl-libs/Test-Fatal)",
+ "(make_install perl-libs/Clone-Choose)",
"(make_install perl-libs/Module-Runtime)",
- "(make_install perl-libs/Dist-CheckConflicts)",
- "(make_install perl-libs/Class-Inspector)",
- "(make_install perl-libs/File-ShareDir)",
- "(make_install perl-libs/Variable-Magic)",
"(make_install perl-libs/Module-Implementation)",
+ "(make_install perl-libs/Sub-Quote)",
+ "(make_install perl-libs/Clone-PP)",
+ "(make_install perl-libs/MRO-Compat)",
+ "(make_install perl-libs/Devel-StackTrace)",
+ "(make_install perl-libs/XString)",
+ "(make_install perl-libs/Specio)",
+ "(make_install perl-libs/File-ShareDir-Install)",
+ "(make_install perl-libs/Dist-CheckConflicts)",
"(make_install perl-libs/Sub-Exporter-Progressive)",
+ "(make_install perl-libs/Variable-Magic)",
"(make_install perl-libs/B-Hooks-EndOfScope)",
"(make_install perl-libs/Package-Stash-XS)",
"(make_install perl-libs/Package-Stash)",
"(make_install perl-libs/namespace-clean)",
"(make_install perl-libs/namespace-autoclean)",
- "(make_install perl-libs/Clone-Choose)",
- "(make_install perl-libs/MRO-Compat)",
- "(make_install perl-libs/XString)",
- "(make_install perl-libs/Role-Tiny)",
- "(make_install perl-libs/Clone-PP)",
- "(make_install perl-libs/Devel-StackTrace)",
- "(make_install perl-libs/Sub-Quote)",
- "(make_install perl-libs/Eval-Closure)",
- "(make_install perl-libs/Specio)",
+ "(make_install perl-libs/Class-Inspector)",
+ "(make_install perl-libs/File-ShareDir)",
"(make_install perl-libs/Class-Data-Inheritable)",
"(make_install perl-libs/Exception-Class)",
"(make_install perl-libs/Params-ValidationCompiler)",
@@ -108,9 +73,45 @@
"(make_install perl-libs/DateTime-TimeZone)",
"(make_install perl-libs/DateTime)",
"(make_install perl-libs/DateTime-Format-Strptime)",
+ "(make_install perl-libs/HTML-TableExtract)",
+ "(make_install perl-libs/IO-String)",
+ "(make_install perl-libs/Module-Build)",
+ "(make_install perl-libs/HTML-Tree)",
+ "(make_install perl-libs/File-Which)",
+ "(make_install perl-libs/Path-Tiny)",
+ "(make_install perl-libs/Capture-Tiny)",
+ "(make_install perl-libs/FFI-CheckLib)",
+ "(make_install perl-libs/File-chdir)",
+ "(make_install perl-libs/Alien-Build)",
+ "(make_install perl-libs/Alien-Build-Plugin-Download-GitLab)",
+ "(make_install perl-libs/Alien-Libxml2)",
+ "(make_install perl-libs/XML-NamespaceSupport)",
+ "(make_install perl-libs/XML-SAX-Base)",
+ "(make_install perl-libs/XML-SAX)",
+ "(make_install perl-libs/XML-LibXML)",
+ "(make_install perl-libs/ExtUtils-Config)",
+ "(make_install perl-libs/ExtUtils-InstallPaths)",
+ "(make_install perl-libs/ExtUtils-Helpers)",
+ "(make_install perl-libs/Module-Build-Tiny)",
+ "(make_install perl-libs/Spiffy)",
+ "(make_install perl-libs/Test-Base)",
+ "(make_install perl-libs/UNIVERSAL-require)",
+ "(make_install perl-libs/HTML-Selector-XPath)",
+ "(make_install perl-libs/XML-XPathEngine)",
+ "(make_install perl-libs/HTML-TreeBuilder-XPath)",
+ "(make_install perl-libs/Test-Requires)",
+ "(make_install perl-libs/YAML)",
+ "(make_install perl-libs/Web-Scraper)",
+ "(make_install perl-libs/Archive-Zip)",
+ "(make_install perl-libs/OLE-Storage_Lite)",
+ "(make_install perl-libs/Digest-Perl-MD5)",
+ "(make_install perl-libs/IO-Stringy)",
+ "(make_install perl-libs/Crypt-RC4)",
+ "(make_install perl-libs/Spreadsheet-ParseExcel)",
+ "(make_install perl-libs/Spreadsheet-XLSX)",
+ "(make_install perl-libs/Readonly)",
+ "(make_install perl-libs/Text-Template)",
"(make_install perl-libs/String-Util)",
- "(make_install perl-libs/Devel-Trace)",
- "(make_install perl-libs/JSON)",
"(make_install perl-libs/Finance-Quote)"
],
"dest": "perl-libs",
@@ -319,7 +320,7 @@
"dest": "perl-libs/Finance-Quote",
"sha256": "18e91d708f8087a26fbcbfb3b0a61ed1471d2a4b3ce798de7304f30481a467e9",
"type": "archive",
- "url": "https://cpan.metacpan.org/authors/id/B/BP/BPSCHUCK/Finance-Quote-1.66.tar.gz"
+ "url": "https://cpan.metacpan.org/authors/id/B/BP/BPSCHUCK/Finance-Quote-1.66.tar.gz"
},
{
"dest": "perl-libs/HTML-Parser",
Summary of changes:
flatpak-cpan-generator.pl | 141 +++++++++++++++++++++++++++++++++++++
modules/finance-quote-sources.json | 133 +++++++++++++++++-----------------
2 files changed, 208 insertions(+), 66 deletions(-)
create mode 100755 flatpak-cpan-generator.pl
More information about the gnucash-changes
mailing list