mirror of
https://github.com/pgbackrest/pgbackrest.git
synced 2024-12-14 10:13:05 +02:00
4e8d469f4d
The unit test Makefile generation was a hodge-podge of constants and rules based on distros/versions that easily got out of date and did not work on an unknown system. All of this dates from the mixed Perl/C unit test implementation. Instead use configure to generate most of the important Makefile variables, which allows the unit tests to run on multiple platforms, e.g. MacOS and FreeBSD. There is plenty of work to be done here and not all the unit tests work on MacOS and FreeBSD for various reasons. As a POC update the MacOS and FreeBSD tests on Cirrus-CI to run a few command unit tests.
100 lines
3.6 KiB
Perl
100 lines
3.6 KiB
Perl
####################################################################################################################################
|
|
# Build Binaries and Auto-Generate Code
|
|
####################################################################################################################################
|
|
package pgBackRestTest::Common::BuildTest;
|
|
|
|
####################################################################################################################################
|
|
# Perl includes
|
|
####################################################################################################################################
|
|
use strict;
|
|
use warnings FATAL => qw(all);
|
|
use Carp qw(confess);
|
|
use English '-no_match_vars';
|
|
|
|
# use Cwd qw(abs_path);
|
|
use Exporter qw(import);
|
|
our @EXPORT = qw();
|
|
|
|
use pgBackRestDoc::Common::Log;
|
|
use pgBackRestDoc::Common::String;
|
|
|
|
####################################################################################################################################
|
|
# VM hash keywords
|
|
####################################################################################################################################
|
|
use constant BUILD_AUTO_H => 'build.auto.h';
|
|
push @EXPORT, qw(BUILD_AUTO_H);
|
|
|
|
####################################################################################################################################
|
|
# Save contents to a file if the file is missing or the contents are different. This saves write IO and prevents the timestamp from
|
|
# changing.
|
|
####################################################################################################################################
|
|
sub buildPutDiffers
|
|
{
|
|
my $oStorage = shift;
|
|
my $strFile = shift;
|
|
my $strContentNew = shift;
|
|
|
|
# Attempt to load the file
|
|
my $bSave = true;
|
|
my $oFile = $oStorage->openRead($strFile, {bIgnoreMissing => true});
|
|
|
|
# If file was found see if the content is the same
|
|
if (defined($oFile))
|
|
{
|
|
my $strContentFile = ${$oStorage->get($oFile)};
|
|
|
|
if ((defined($strContentFile) ? $strContentFile : '') eq (defined($strContentNew) ? $strContentNew : ''))
|
|
{
|
|
$bSave = false;
|
|
}
|
|
}
|
|
|
|
# Save if the contents are different or missing
|
|
if ($bSave)
|
|
{
|
|
$oStorage->put($oStorage->openWrite($strFile, {bPathCreate => true}), $strContentNew);
|
|
}
|
|
|
|
# Was the file saved?
|
|
return $bSave;
|
|
}
|
|
|
|
push @EXPORT, qw(buildPutDiffers);
|
|
|
|
####################################################################################################################################
|
|
# Find last modification time in a list of directories, with optional filters
|
|
####################################################################################################################################
|
|
sub buildLastModTime
|
|
{
|
|
my $oStorage = shift;
|
|
my $strBasePath = shift;
|
|
my $rstrySubPath = shift;
|
|
my $strPattern = shift;
|
|
|
|
my $lTimestampLast = 0;
|
|
|
|
foreach my $strSubPath (defined($rstrySubPath) ? @{$rstrySubPath} : (''))
|
|
{
|
|
my $hManifest = $oStorage->manifest($strBasePath . ($strSubPath eq '' ? '' : "/${strSubPath}"));
|
|
|
|
foreach my $strFile (sort(keys(%{$hManifest})))
|
|
{
|
|
next if (defined($strPattern) && $strFile !~ /$strPattern/);
|
|
|
|
if ($hManifest->{$strFile}{type} eq 'f' && $hManifest->{$strFile}{modification_time} > $lTimestampLast)
|
|
{
|
|
$lTimestampLast = $hManifest->{$strFile}{modification_time};
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($lTimestampLast == 0)
|
|
{
|
|
confess &log(ERROR, "no files found");
|
|
}
|
|
|
|
return $lTimestampLast;
|
|
}
|
|
|
|
push @EXPORT, qw(buildLastModTime);
|