#! /usr/bin/env perl # -*- mode: perl; -*- use strict; # Syntax: ReplaceValuesprefTest.pl [= [= ...]] [[ctest parameters]] my $bindir = "@CMAKE_BINARY_DIR@"; my $userdir = "$bindir/Testing/.lyx"; my %allowedKeys = ( "use_converter_needauth_forbidden" => ["true", "false"], "use_converter_needauth" => ["true", "false"], ); # Bindings used by some tests # used file is "$userdir/bind/user.bind" my %bindings = ( # Empty for now, example below # "A-h" => ["dialog-hide", "findreplaceadv"], ); chdir($bindir); # Parse Arguments for strings to substitute my %Subst = (); my $ctestparams = 0; my @ctestpars = (); for my $arg (@ARGV) { if ($ctestparams) { push(@ctestpars, $arg); } else { if ($arg =~ /^([^=]+)=(.*)$/) { my $key = $1; my $value = $2; my $valid = 0; if (defined($allowedKeys{$key})) { for my $val (@{$allowedKeys{$key}}) { if ($val eq $value) { $valid = 1; last; } } } if ($valid) { $Subst{$key} = [$value, 0]; } else { die("invalid key or value specified in \"$arg\""); } } else { $ctestparams = 1; push(@ctestpars, $arg); } } } if (%Subst) { # Try to do something only if a substitute is requested if (open(FO, '>', "$userdir/preferences.tmp")) { if (open(FI, "$userdir/preferences")) { while (my $l = ) { for my $k (keys %Subst) { if ($l =~ /^\\$k\b/) { $l = "\\$k $Subst{$k}->[0]\n"; $Subst{$k}->[1] = 1; } } print FO $l; } } for my $k (keys %Subst) { if ($Subst{$k}->[1] == 0) { print FO "\\$k $Subst{$k}->[0]\n"; } } rename("$userdir/preferences.tmp", "$userdir/preferences"); } } if (open(FO, '>', "$userdir/userbind.tmp")) { my %used = (); if (open(FI, "$userdir/bind/user.bind")) { while (my $l = ) { my $found = 0; for my $k (keys %bindings) { if ($l =~ /^\s*\\bind\s+\"$k\"/) { $found = 1; if (! defined($used{$k})) { $used{$k} = 1; $l = "\\bind \"$k\" \"" . join(' ', @{$bindings{$k}}) . "\"\n"; print FO $l; last; } } print FO $l if (! $found); } } close(FI); } else { print FO "## This file is automatically generated by lyx\n"; print FO "## All modifications will be lost\n"; print FO "\n\n"; print FO "Format 4\n\n"; } for my $k (keys %bindings) { if (! defined($used{$k})) { $used{$k} = 1; my $l = "\\bind \"$k\" \"" . join(' ', @{$bindings{$k}}) . "\"\n"; print FO $l; } } close(FO); rename("$userdir/userbind.tmp", "$userdir/bind/user.bind"); } my $res = 0; if (@ctestpars) { $res = system("ctest", @ctestpars); } exit($res);