Archived
4
2

5 Commits

Author SHA1 Message Date
0f57b99fbe Add instructions for the dependency check script 2024-09-08 09:30:40 -04:00
48b3c51bb3 Update instructions for installing modules via CPAN 2024-09-08 09:08:23 -04:00
4e9f1457d5 Fix typos in module names 2024-09-08 09:05:34 -04:00
4ae854f5e1 Remove unused module import
The dbi sqlite module is not directly used in the site-generator code.
The module is called by template files. Removing it allows the main
code to be database independent.
2024-09-08 09:01:17 -04:00
af810c88bc Add bash script to check Perl module dependencies 2024-09-07 16:51:55 -04:00
7 changed files with 103 additions and 28 deletions

View File

@@ -41,8 +41,9 @@ apt install libconfig-std-perl \
## Using CPAN to install the modules
A cross platform method to install the needed modules is the Perl CPAN application.
Make sure both the [make](https://www.gnu.org/software/make/manual/make.html)
command and the [cpan](https://perldoc.perl.org/CPAN) command are available.
Make sure that the [gcc](https://www.gnu.org/software/gcc/),
[make](https://www.gnu.org/software/make/manual/make.html),
and [cpan](https://perldoc.perl.org/CPAN) commands are available.
Install them using the operating system's package manager, or from source.
Run commands:
@@ -51,9 +52,21 @@ Run commands:
cpan Config::Std
cpan Template
cpan Template::Plugin::DBI
cpan Template::Plugin::HTML::Strip
cpan DBD::SQLite
cpan Date::Calc
cpan Tie::DBI
cpan Text:CSV_XS
```
## Testing for Perl module dependencies
A bash script is included in the utils directory that will list the Perl modules used by the site-generator and report whether the modules are installed on the current OS.
It can be run from any directory. To run from the utils directory:
```
./check-dependencies.sh
```
# Create the HPR database

View File

@@ -25,7 +25,7 @@ Static web page generator for the Hacker Public Radio website.
- ``GRANT SELECT ON hpr_hpr.* TO 'hpr-generator'@'localhost';``
- ``GRANT EXECUTE ON `hpr_hpr`.* TO 'hpr-generator'@'localhost';``
* Install the needed Perl modules using preferred method (distribution packages, CPAN, etc.)
* GetOpt
* Getopt::Long
* Pod::Usage
* Config::Std
* Template
@@ -35,7 +35,7 @@ Static web page generator for the Hacker Public Radio website.
* Template::Plugin::HTML::Strip
* DBI
* Tie::DBI
* DBD::SQLite or DBD:mysql
* DBD::SQLite or DBD::mysql
* Date::Calc
* Text::CSV_XS
* HTML::Entities

View File

@@ -122,7 +122,6 @@ use Text::CSV_XS;
use HTML::Entities qw(encode_entities);
use Date::Calc;
use DBI;
use DBD::SQLite;
use Tie::DBI;
use Template;
use Template::Plugin::Date;

View File

@@ -4,27 +4,27 @@
<!--% PERL %-->
$Template::Stash::PRIVATE = undef; # Allow . in tag
<!--% END %-->
<!--% USE String %-->
<!--% uniq_tag_count = 0 %-->
<!--% comma_re = '(?x)(?:^|,\s*)(?:"((?>[^"]*)(?:""[^"]*)*)"|([^",]*))'; %-->
<!--# 'Moka5,interview, "computer science"' -->
<!--% FOREACH episode IN DBI.query(query_tags);
ep_id = episode.id;
ep_tags = episode.tags;
FOREACH tag_str IN ep_tags.csv_parse;
FOREACH tag_str IN ep_tags.split(comma_re);
NEXT UNLESS tag_str;
NEXT IF tag_str == '';
tag = tag_str.lower;
tag_index = String.new(tag).push('_');
first_char = tag.substr(0,1);
IF first_char == '.';
first_char = '&#x0002E;'; # Unicode .
END;
IF all_tags.${first_char}.exists(tag_index);
all_tags.${first_char}.${tag_index}.count = all_tags.${first_char}.${tag_index}.count + 1;
all_tags.${first_char}.${tag_index}.urls.push(ep_id);
IF all_tags.${first_char}.exists(tag);
all_tags.${first_char}.${tag}.count = all_tags.${first_char}.${tag}.count + 1;
all_tags.${first_char}.${tag}.urls.push(ep_id);
ELSE;
all_tags.${first_char}.${tag_index}.count = 1;
all_tags.${first_char}.${tag}.count = 1;
uniq_tag_count = uniq_tag_count + 1;
all_tags.${first_char}.${tag_index}.urls = [ep_id];
all_tags.${first_char}.${tag}.urls = [ep_id];
END;
END;
END %-->
@@ -53,7 +53,7 @@ END %-->
<ul class="columns3">
<!--% FOREACH first_char IN all_first %-->
<!--% IF all_tags.${first_char} %-->
<li><a href="<!--% absolute_path(baseurl) %-->tags.html#<!--% tag_to_id(String.new(all_tags.${first_char}.keys.sort.first).chop) %-->"><strong><!--% first_char %--></strong></a></li>
<li><a href="<!--% absolute_path(baseurl) %-->tags.html#<!--% all_tags.${first_char}.keys.sort.first %-->"><strong><!--% first_char %--></strong></a></li>
<!--% END %-->
<!--% END %-->
</ul>
@@ -63,12 +63,11 @@ END %-->
<p class="ralign"><a href="<!--% absolute_path(baseurl) %-->tags.html#TOP">&UpArrow; Go to index</a></p>
<h3>Tags beginning with '<!--% first_char %-->'</h3>
<ul>
<!--% FOREACH tag_index IN all_tags.${first_char}.keys.sort %-->
<!--% tag = String.new(tag_index).chop; tag_id = String.new(tag_index).chop; %-->
<!--% FOREACH tag IN all_tags.${first_char}.keys.sort %-->
<li>
<a id="<!--% tag_to_id(tag_id) %-->"><strong><!--% tag %--></strong></a>:
<a id="<!--% tag %-->"><strong><!--% tag %--></strong></a>:
<!--% ep_links = [] %-->
<!--% FOREACH ep_id IN all_tags.${first_char}.${tag_index}.urls.nsort;
<!--% FOREACH ep_id IN all_tags.${first_char}.${tag}.urls.nsort;
ep_links.push("<a href=\"${absolute_path(baseurl)}eps/hpr" _ zero_pad_left(ep_id) _ '/index.html"'
' target="_blank" aria-label="' _ tag _
' - show ' _ ep_id _ '">' _ ep_id _ '</a>');

View File

@@ -14,7 +14,7 @@ from the series <em><a href="<!--% baseurl %-->series/<!--% zero_pad_left(series
<!--% MACRO display_tags(tags) BLOCK %-->
<span><label>Tags:</label> <em>
<!--% FOREACH tag IN tags.csv_parse %-->
<a href="<!--% absolute_path(baseurl) %-->tags.html#<!--% tag_to_id(tag) %-->"><!--% tag %--></a><!--% IF loop.count == loop.size %-->.<!--% ELSE %-->,<!--% END %-->
<a href="<!--% absolute_path(baseurl) %-->tags.html#<!--% tag.lower %-->"><!--% tag %--></a><!--% IF loop.count == loop.size %-->.<!--% ELSE %-->,<!--% END %-->
<!--% END %--></em>
</span>
<!--% END %-->

View File

@@ -49,15 +49,6 @@
<!--% iso8601_date.format(date_to_format) %-->
<!--% END %-->
<!--% MACRO tag_to_id(tag, is_index) BLOCK %-->
<!--% tag = tag.replace('\s+','_') %-->
<!--% IF is_index %-->
<!--% tag.upper %-->
<!--% ELSE %-->
<!--% tag.lower %-->
<!--% END %-->
<!--% END %-->
<!--% MACRO absolute_url(base, path) BLOCK %-->
<!--% UNLESS base.empty %-->
<!--% UNLESS base.substr(-1) == '/' %-->

73
utils/check-dependencies.sh Executable file
View File

@@ -0,0 +1,73 @@
#!/bin/bash -
#===============================================================================
#
# FILE: check-dependencies.sh
#
# USAGE: ./check-dependencies.sh
#
# DESCRIPTION: Check that Perl module dependencies for the hpr_generator
# are installed.
#
# OPTIONS: ---
# REQUIREMENTS: ---
# BUGS: ---
# NOTES: ---
# AUTHOR: Roan "Rho`n" Horning (roan.horning@gmail.com)
# ORGANIZATION:
# CREATED: 09/05/2024 09:55:00 PM
# REVISION: ---
#===============================================================================
set -o nounset # Treat unset variables as an error
#--- FUNCTION ----------------------------------------------------------------
# NAME: is_module_installed
# DESCRIPTION: Tests if the supplied module is found on the system
# PARAMETERS: Name of the denpendent Perl module
# RETURNS: 0 if not found, 1 if found
#-------------------------------------------------------------------------------
function is_module_installed {
HR="----------------------"
perl -e "use ${1} "
if [ $? -ne 0 ]
then
echo ${HR}
else
echo "Found module ${1}"
echo ${HR}
fi
}
MODULES=( \
"Getopt::Long" \
"Pod::Usage" \
"Config::Std" \
"Template" \
"Template::Plugin::File" \
"Template::Plugin::DBI" \
"Template::Plugin::HTML::Strip" \
"DBI" \
"Tie::DBI" \
"DBD::SQLite" \
"DBD::mysql" \
"Date::Calc" \
"Text::CSV_XS" \
)
echo "The following modules must be installed for the site-generator to function: "
for module in "${MODULES[@]}"
do
echo "* ${module}"
done
echo "When MySQL is used, the DBD:mysql module is required (otherwise it is optional)"
echo "When SQLite is used, then the DBD:SQLite module is required (otherwise it is optional)"
echo "Scanning for modules ..."
echo "----------------------"
for module in "${MODULES[@]}"
do
is_module_installed "${module}"
done
echo "Finished scanning."