Marpa-R2
view release on metacpan or search on metacpan
engine/read_only/win32/do_config_h.pl view on Meta::CPAN
#!env perl
# Copyright 2022 Jeffrey Kegler
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.
# This script will generate config.h
#
# It is assumed that current working directory is a build directory, i.e.
# the target directory specified on the command-line when you
# execute: cp_libmarpa.sh target_directory
#
use feature 'say';
use English qw/-no_match_vars/;
use Config;
use File::Slurp qw/read_file/;
use IPC::Cmd qw/run/;
use Module::Load qw/load/;
use POSIX qw/EXIT_SUCCESS EXIT_FAILURE/;
use Getopt::Long;
our %PERL_AUTOCONF_OS = map { $_ => 1 } qw( MSWin32 openbsd solaris sunos midnightbsd );
my $MARPA_DEBUG = $ENV{MARPA_DEBUG} || 0;
my $USE_PERL_AUTOCONF = $ENV{MARPA_USE_PERL_AUTOCONF} || ( $PERL_AUTOCONF_OS{$^O} // 0 );
my $CC = $ENV{CC} || $Config{cc} || 'cc';
my $CCFLAGS = $ENV{CCFLAGS} || $Config{ccflags} || '';
my $SH = $ENV{SH} || $Config{sh} || '';
my $OBJ_EXT = $ENV{OBJ_EXT} || $Config{obj_ext} || '.o';
GetOptions ('marpa_debug!' => \$MARPA_DEBUG,
'use_perl_autoconf!' => \$USE_PERL_AUTOCONF,
'cc=s' => \$CC,
'ccflags=s' => \$CCFLAGS,
'sh=s' => \$SH,
'obj_ext=s' => \$OBJ_EXT,
'help!' => \$help) ||
die "Error in command-line arguments";
if ($help) {
usage();
exit(EXIT_SUCCESS);
}
if ($USE_PERL_AUTOCONF) {
load Config::AutoConf || die "Please install Config::AutoConf module";
}
my $rc = do_config_h();
exit($rc ? EXIT_SUCCESS : EXIT_FAILURE);
sub do_config_h {
$ENV{CC} = $CC;
$ENV{CCFLAGS} = $CCFLAGS;
$ENV{OBJ_EXT} = $OBJ_EXT;
# If current directory exists and contains a stamp file more recent than an eventual config.h
# we are done.
if (-e 'config.h' && -e 'stamp-h1' && up_to_date( 'config.h', 'stamp-h1' )) {
printf "%s is up-to-date v.s. %s. Remove one of them to force a new %s generation\n", 'config.h', 'stamp-h1', 'config.h';
return 1;
}
unlink('config.h');
unlink('stamp-h1');
# Otherwise, redo config.h
if (! $USE_PERL_AUTOCONF) {
# This is only necessary for GNU autoconf, which is aggressive
# about looking for things to update
# Some files should NEVER be updated in this directory, by
# make or anything else. If for some reason they are
# out of date, stamp them up to date
my @m4_files = glob('m4/*.m4');
my $configure_script = 'configure';
if (not up_to_date( [ 'configure.ac', @m4_files ], 'aclocal.m4' ) )
{
utime time(), time(), 'aclocal.m4';
}
if (not up_to_date(
[ 'configure.ac', 'Makefile.am', 'aclocal.m4' ],
'Makefile.in'
)
)
{
utime time(), time(), 'Makefile.in';
} ## end if ( not up_to_date( [ 'configure.ac', 'Makefile.am'...]))
if (not up_to_date(
[ 'configure.ac', 'aclocal.m4' ],
[ $configure_script, 'config.h.in' ]
)
)
{
utime time(), time(), $configure_script;
utime time(), time(), 'config.h.in';
} ## end if ( not up_to_date( [ 'configure.ac', 'aclocal.m4'...]))
say join q{ }, "Doing config.h with configure"
or die "print failed: $ERRNO";
my $shell = $SH;
##no critic(ValuesAndExpressions::RequireInterpolationOfMetachars)
$shell or die q{No Bourne shell available says $SH};
##use critic
}
my $original_cflags = $ENV{CFLAGS};
local $ENV{CFLAGS};
$ENV{CFLAGS} = $original_cflags if defined $original_cflags;
( run in 2.290 seconds using v1.01-cache-2.11-cpan-5a3173703d6 )