#!/usr/bin/env perl use strict; use warnings; use FindBin qw( $Bin ); use Data::UUID; use File::Slurp qw( read_file write_file ); use Path::Iterator::Rule; sub main { my $rule = Path::Iterator::Rule->new; $rule->file->name(qr/_t.c$/); my $ug = Data::UUID->new; my $template = read_file("$Bin/../projects/test.vcxproj.template"); my @names; for my $file ( $rule->all("$Bin/../t/") ) { my ($name) = $file =~ /(\w*)_t.c$/; next unless $name; next if $name eq 'threads'; push @names, $name; my $project = $template; $project =~ s/%TESTNAME%/$name/g; my $uuid = $ug->to_string( $ug->create ); $project =~ s/%UUID%/$uuid/g; write_file( "$Bin/../projects/VS12-tests/$name.vcxproj", $project ); } _modify_yml(@names); } sub _modify_yml { my @names = @_; my $exe_block = join "\n", map { " - .\\projects\\VS12\\Debug\\test_${_}.exe" } @names; my $file = "$Bin/../appveyor.yml"; my $config = read_file($file); $config =~ s/(#EXES).*?(#ENDEXES)/$1\n$exe_block\n $2/s; write_file( $file, $config ); } main();