Sponsoring The Perl Toolchain Summit 2025: Help make this important event another success Learn more

# [[[ HEADER ]]]
package # hide from PAUSE indexing
rperloptions; ## no critic qw(Capitalization ProhibitMultiplePackages ProhibitReusedNames) # SYSTEM DEFAULT 3: allow multiple & lower case package names
use strict;
#use RPerl::Config;
our $VERSION = 0.003_000;
# [[[ PRE-DECLARED TYPES ]]]
package # hide from PAUSE indexing
boolean;
package # hide from PAUSE indexing
unsigned_integer;
package # hide from PAUSE indexing
integer;
package # hide from PAUSE indexing
number;
package # hide from PAUSE indexing
character;
package # hide from PAUSE indexing
string;
package # hide from PAUSE indexing
string_arrayref;
package # hide from PAUSE indexing
string_hashref;
package # hide from PAUSE indexing
hashref;
package # hide from PAUSE indexing
arrayref_hashref;
package # hide from PAUSE indexing
hashref_arrayref;
package main;
# this array must be instantiated here, because GetOptions' diamond '<>' operator does not allow passing arguments or receiving return values
our $input_file_names_unlabeled = my string_arrayref $TYPED_input_file_names_unlabeled = [];
our $help_flag = my integer $TYPED_help_flag = 0;
our $version_flag = my integer $TYPED_version_flag = 0;
our $vversions_flag = my integer $TYPED_vversions_flag = 0;
our $dependencies_flag = my integer $TYPED_dependencies_flag = undef;
our $magic_low_flag = my integer $TYPED_magic_low_flag = undef;
our $magic_medium_flag = my integer $TYPED_magic_medium_flag = undef;
our $magic_high_flag = my integer $TYPED_magic_high_flag = undef;
our $uncompile_flag = my integer $TYPED_uncompile_flag = undef;
our $uncompile_source_flag = my integer $TYPED_uncompile_source_flag = undef;
our $uncompile_source_binary_flag = my integer $TYPED_uncompile_source_binary_flag = undef;
our $uncompile_source_binary_inline_flag = my integer $TYPED_uncompile_source_binary_inline_flag = undef;
our $compile_flag = my integer $TYPED_compile_flag = undef;
our $subcompile_assemble_flag = my integer $TYPED_subcompile_assemble_flag = undef;
our $subcompile_archive_flag = my integer $TYPED_subcompile_archive_flag = undef;
our $subcompile_shared_flag = my integer $TYPED_subcompile_shared_flag = undef;
our $subcompile_static_flag = my integer $TYPED_subcompile_static_flag = undef;
our $subcompile_CXX = my string $TYPED_subcompile_CXX = undef;
our $parallel_flag = my integer $TYPED_parallel_flag = undef;
our $num_cores = my integer $TYPED_num_cores = undef;
our $execute_flag = my integer $TYPED_execute_flag = undef;
our $test_flag = my integer $TYPED_test_flag = undef;
our $input_file_names = my string_arrayref $TYPED_input_file_names = [];
our $output_file_name_prefixes = my string_arrayref $TYPED_output_file_name_prefixes = [];
our $output_file_name_groups = my hashref_arrayref $TYPED_output_file_name_groups = [];
our $modes = my string_hashref $TYPED_modes = {}; # can't store defaults here, erased by GetOptions()
our $modes_default = my string_hashref $TYPED_modes_default = { # default to CPPCODE_CPPOPS_CPPTYPES_CHECKTRACE_SUBCOMPILE_EXECUTE_LABEL in C++ output code
dependencies => 'ON',
magic => 'LOW',
code => 'CPP',
ops => 'CPP',
types => 'CPP',
type_integer => 'LONG',
type_number => 'DOUBLE',
check => 'TRACE',
uncompile => 'OFF',
compile => 'SUBCOMPILE',
subcompile => 'DYNAMIC',
parallel => 'OFF',
num_cores => 4,
execute => 'ON',
label => 'ON',
};
our $modes_supported = my arrayref_hashref $TYPED_modes_supported = {
arguments => undef, # accept any value
dependencies => [ 'OFF', 'ON' ],
magic => [ 'LOW', 'MEDIUM', 'HIGH' ],
code => [ 'PERL', 'CPP' ],
ops => [ 'PERL', 'CPP' ],
types => [ 'PERL', 'CPP', 'DUAL' ],
type_integer => [ 'LONG', 'LONG__LONG' ],
type_number => [ 'DOUBLE', 'LONG__DOUBLE' ],
check => [ 'OFF', 'ON', 'TRACE' ],
uncompile => [ 'OFF', 'SOURCE', 'BINARY', 'INLINE', 'SOURCE_BINARY', 'SOURCE_BINARY_INLINE' ],
compile => [ 'OFF', 'PARSE', 'GENERATE', 'SAVE', 'SUBCOMPILE' ],
subcompile => [ 'OFF', 'ASSEMBLE', 'ARCHIVE', 'SHARED', 'STATIC', 'DYNAMIC' ],
CXX => undef, # accept any value
parallel => [ 'OFF', 'OPENMP' ],
num_cores => undef, # accept any value
execute => [ 'OFF', 'ON' ],
label => [ 'OFF', 'ON' ],
};
our $rperl_options = my hashref $TYPED_rperl_options = {
'h' => \$help_flag, # allow -h to be unambiguous shorthand for --help (not --high)
'help|?' => \$help_flag,
'v' => \$version_flag,
'version' => \$version_flag,
'vversion' => \$vversions_flag,
'dependencies!' => \$dependencies_flag,
'low' => \$magic_low_flag,
'medium' => \$magic_medium_flag,
'high' => \$magic_high_flag,
'Verbose!' => \$RPerl::VERBOSE,
'Debug!' => \$RPerl::DEBUG,
'Warnings!' => \$RPerl::WARNINGS,
'u!' => \$uncompile_source_flag,
'uncompile!' => \$uncompile_source_flag,
'uu!' => \$uncompile_source_binary_flag,
'uuncompile!' => \$uncompile_source_binary_flag,
'uuuncompile!' => \$uncompile_source_binary_inline_flag,
'compile!' => \$compile_flag,
'assemble' => \$subcompile_assemble_flag,
'archive' => \$subcompile_archive_flag,
'shared' => \$subcompile_shared_flag,
'static!' => \$subcompile_static_flag,
'CXX=s' => \$subcompile_CXX,
'parallel!' => \$parallel_flag,
'num_cores=i' => \$num_cores,
'execute!' => \$execute_flag,
'test' => \$test_flag,
'infile=s{1,}' => \@{$input_file_names},
'outfile=s{1,}' => \@{$output_file_name_prefixes},
'm=s%' => \$modes, # allow -m to be unambiguous shorthand for --mode (not --medium)
'mode=s%' => \$modes,
'<>' => \&store_unlabeled_arguments # DEV NOTE: amazingly, this coderef works correctly and calls to the subroutine stored in the file script/rperl
};
use RPerl::Exporter 'import';
#our @ISA = qw(RPerl::Exporter);
our @EXPORT
= qw( $input_file_names_unlabeled $help_flag $version_flag $vversions_flag $dependencies_flag $magic_low_flag $magic_medium_flag $magic_high_flag $uncompile_flag $uncompile_source_flag $uncompile_source_binary_flag $uncompile_source_binary_inline_flag $compile_flag $subcompile_assemble_flag $subcompile_archive_flag $subcompile_shared_flag $subcompile_static_flag $subcompile_CXX $parallel_flag $num_cores $execute_flag $test_flag $input_file_names $output_file_name_prefixes $output_file_name_groups $modes $modes_default $modes_supported $rperl_options );
1;