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