In some cases the license-identification header was missing, so I added that as well. Replaced the remaining headers that specifically identified "Versions 3.13.7 and higher". Makefiles and the build system were deliberately excluded.
141 lines
3.4 KiB
Perl
141 lines
3.4 KiB
Perl
#!/usr/bin/env perl
|
|
#*************************************************************************
|
|
# Copyright (c) 2012 UChicago Argonne LLC, as Operator of Argonne
|
|
# National Laboratory.
|
|
# Copyright (c) 2002 The Regents of the University of California, as
|
|
# Operator of Los Alamos National Laboratory.
|
|
# SPDX-License-Identifier: EPICS
|
|
# EPICS BASE is distributed subject to a Software License Agreement found
|
|
# in file LICENSE that is included with this distribution.
|
|
#*************************************************************************
|
|
#
|
|
# Author: Kay-Uwe Kasemir
|
|
# Date: 1-30-97
|
|
|
|
use strict;
|
|
|
|
use FindBin qw($Bin);
|
|
use lib ("$Bin/../../lib/perl");
|
|
|
|
use Getopt::Std;
|
|
use File::Basename;
|
|
use EPICS::Path;
|
|
use EPICS::Release;
|
|
use Text::Wrap;
|
|
|
|
my $tool = basename($0);
|
|
|
|
our ($opt_h, $opt_q, $opt_t, $opt_s, $opt_c);
|
|
our $opt_o = 'envData.c';
|
|
|
|
$Getopt::Std::OUTPUT_HELP_VERSION = 1;
|
|
$Text::Wrap::columns = 75;
|
|
|
|
HELP_MESSAGE() unless getopts('ho:qt:s:c:') && @ARGV == 1;
|
|
HELP_MESSAGE() if $opt_h;
|
|
|
|
my $config = AbsPath(shift);
|
|
my $env_defs = AbsPath('../env/envDefs.h');
|
|
|
|
# Parse the ENV_PARAM declarations in envDefs.h
|
|
# to get the param names we are interested in
|
|
#
|
|
open SRC, '<', $env_defs
|
|
or die "$tool: Cannot open $env_defs: $!\n";
|
|
|
|
my @vars;
|
|
while (<SRC>) {
|
|
if (m/LIBCOM_API\s+extern\s+const\s+ENV_PARAM\s+([A-Za-z_]\w*)\s*;/) {
|
|
push @vars, $1;
|
|
}
|
|
}
|
|
close SRC;
|
|
|
|
# A list of configure/CONFIG_* files to read
|
|
#
|
|
my @configs = ("$config/CONFIG_ENV", "$config/CONFIG_SITE_ENV");
|
|
|
|
if ($opt_t) {
|
|
my $config_arch_env = "$config/os/CONFIG_SITE_ENV.$opt_t";
|
|
push @configs, $config_arch_env
|
|
if -f $config_arch_env;
|
|
}
|
|
|
|
my @sources = ($env_defs, @configs);
|
|
|
|
# Get values from the config files
|
|
#
|
|
my (%values, @dummy);
|
|
readRelease($_, \%values, \@dummy) foreach @configs;
|
|
expandRelease(\%values);
|
|
|
|
# Get values from the command-line
|
|
#
|
|
$values{EPICS_BUILD_COMPILER_CLASS} = $opt_c if $opt_c;
|
|
$values{EPICS_BUILD_OS_CLASS} = $opt_s if $opt_s;
|
|
$values{EPICS_BUILD_TARGET_ARCH} = $opt_t if $opt_t;
|
|
|
|
# Warn about vars with no configured value
|
|
#
|
|
my @undefs = grep {!exists $values{$_}} @vars;
|
|
warn "$tool: No value given for $_\n" foreach @undefs;
|
|
|
|
print "Generating $opt_o\n" unless $opt_q;
|
|
|
|
# Start creating the output
|
|
#
|
|
open OUT, '>', $opt_o
|
|
or die "$tool: Cannot create $opt_o: $!\n";
|
|
|
|
my $sources = join "\n", map {" * $_"} @sources;
|
|
|
|
print OUT << "END";
|
|
/* Generated file $opt_o
|
|
*
|
|
* Created from
|
|
$sources
|
|
*/
|
|
|
|
#include <stddef.h>
|
|
#define epicsExportSharedSymbols
|
|
#include "envDefs.h"
|
|
|
|
END
|
|
|
|
# Define a default value for each named parameter
|
|
#
|
|
foreach my $var (@vars) {
|
|
my $default = $values{$var};
|
|
if (defined $default) {
|
|
$default =~ s/^"//;
|
|
$default =~ s/"$//;
|
|
}
|
|
else {
|
|
$default = '';
|
|
}
|
|
|
|
print OUT "const ENV_PARAM $var =\n",
|
|
" {\"$var\", \"$default\"};\n";
|
|
}
|
|
|
|
# Also provide a list of all defined parameters
|
|
#
|
|
print OUT "\n",
|
|
"const ENV_PARAM* env_param_list[] = {\n",
|
|
wrap(' ', ' ', join(', ', map("&$_", @vars), 'NULL')),
|
|
"\n};\n";
|
|
close OUT;
|
|
|
|
sub HELP_MESSAGE {
|
|
print STDERR "Usage: $tool [options] configure\n",
|
|
" -h Help: Print this message\n",
|
|
" -q Quiet: Only print errors\n",
|
|
" -o file Output filename, default is $opt_o\n",
|
|
" -t arch Target architecture \$(T_A) name\n",
|
|
" -s os Operating system \$(OS_CLASS)\n",
|
|
" -c comp Compiler class \$(CMPLR_CLASS)\n",
|
|
"\n";
|
|
|
|
exit 1;
|
|
}
|