#!perl use 5.10.1; use strict; use warnings; use File::Find; use File::Spec; use Data::Dumper; my $bin_in = 'tools/cobalt2-installer.in'; die "Input $bin_in not found" unless -f $bin_in; my $bin_out = shift; my $etcdir = 'etc'; die "$etcdir not a directory" unless -d $etcdir; ## Find example confs and langs in $etcdir my @valid_exts = qw/ conf cf yml yaml json /; my @paths_to_add; find( sub { my ($ext) = $_ =~ /\.(\S+)$/; return unless $ext ~~ @valid_exts; push(@paths_to_add, $File::Find::name); }, $etcdir ); ## Slurp etc/ files found above my $cfref = { }; for my $addable_path (@paths_to_add) { my $relative_path = File::Spec->abs2rel($addable_path, $etcdir); open my $c_fh, '<:encoding(UTF-8)', $addable_path or die "could not open $addable_path: $!"; my $slurped; { local $/; $slurped = <$c_fh>; } close($c_fh); $cfref->{$relative_path} = $slurped; } my $dump_cfs = Data::Dumper->new([$cfref])->Terse(1)->Purity(1)->Dump; ## Read cobalt2-installer.in my $installer_bin; open my $bin_in_fh, '<', $bin_in or die "could not open $bin_in: $!"; { local $/; $installer_bin = join '', <$bin_in_fh>; } close $bin_in_fh; die "empty installer_bin?" unless $installer_bin; my $compiled_installer = $installer_bin . $dump_cfs . "\n" ; open my $bin_out_fh, '>:encoding(UTF-8)', $bin_out or die "could not open $bin_out: $!"; print $bin_out_fh $compiled_installer; close $bin_out_fh; say "Created $bin_out";