summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/fonts/gfsdidot/installDidot.pl
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/fonts/gfsdidot/installDidot.pl')
-rw-r--r--Master/texmf-dist/doc/fonts/gfsdidot/installDidot.pl263
1 files changed, 263 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/fonts/gfsdidot/installDidot.pl b/Master/texmf-dist/doc/fonts/gfsdidot/installDidot.pl
new file mode 100644
index 00000000000..50c00483246
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/gfsdidot/installDidot.pl
@@ -0,0 +1,263 @@
+#!/usr/bin/perl
+#
+#This perl install all the mandatory files for the use
+#of GFS Didot fonts in a texmf directory.
+#
+#This program has 2 parameters:
+# 1) The name of the root directory containing the Didot
+# distribution.
+# 2) The name of the texmf tree root directory where the files should
+# be installed.
+use strict;
+use warnings;
+use File::Copy qw(copy);
+use File::Path qw(make_path remove_tree);
+use File::Spec::Functions;
+use constant false => 0;
+use constant true => 1;
+
+#If this variable is set to true, the output is a little more
+#verbose
+my $DEBUG=false;
+
+#Number of arguments to this program
+my $NB_ARGS=scalar @ARGV;
+
+#OS where the program runs
+#MSWin32 on Windows
+#linux on Linux
+my $OS = $^O;
+my $WINDOWS_OS="MSWin32";
+my $LINUX_OS="linux";
+
+#This constant is the name of placeholder for describing
+#the root of a TEXMF tree.
+my $ROOT_TEXMF="__ROOT_TEXMF__";
+#A similar constant but for the tree of the GFS Didot distribution
+my $ROOT_DISTRIB="__GFSDIDOT_DISTRIB__";
+#This array contain the list of the directories which should
+#be populated with the files of the GFS Didot distribution.
+#inside a TEXMF tree.
+my @TEXMF_DIDOT=(catfile($ROOT_TEXMF,"fonts","afm","GFS","Didot"),
+ catfile($ROOT_TEXMF,"doc","latex","GFS","Didot"),
+ catfile($ROOT_TEXMF,"fonts","enc","dvips","GFS","Didot"),
+ catfile($ROOT_TEXMF,"fonts","map","dvips","GFS","Didot"),
+ catfile($ROOT_TEXMF,"tex","latex","GFS","Didot"),
+ catfile($ROOT_TEXMF,"fonts","tfm","GFS","Didot"),
+ catfile($ROOT_TEXMF,"fonts","type1","GFS","Didot"),
+ catfile($ROOT_TEXMF,"fonts","source","public","GFS","Didot","vpl"),
+ catfile($ROOT_TEXMF,"fonts","vf","GFS","Didot"));
+#List of the directories which should be copied
+#from the GFSDidot distribution directory to the
+#TEXMF directory. This list should match
+#the list of the constant "@TEXMF_DIDOT".
+my @GFSDIDOT_DISTRIB=(catfile($ROOT_DISTRIB,"afm"),
+ catfile($ROOT_DISTRIB,"doc"),
+ catfile($ROOT_DISTRIB,"enc"),
+ catfile($ROOT_DISTRIB,"map"),
+ catfile($ROOT_DISTRIB,"tex"),
+ catfile($ROOT_DISTRIB,"tfm"),
+ catfile($ROOT_DISTRIB,"type1"),
+ catfile($ROOT_DISTRIB,"vpl"),
+ catfile($ROOT_DISTRIB,"vf"));
+#Here is the list of file names which should not be copied
+#from source dir to destination dir.
+#
+#The command readdir returns all the file names including
+#"." and ".." (current directory and upper directory) which
+#should be excluded to avoid infinite recursion.
+my @FILE_TO_EXCLUDE=("CVS",
+ ".",
+ "..");
+
+#
+#
+#------------------------Functions-----------------------------
+#Normally no change should be made beyond this line
+#
+#
+
+#The following function will detect if the TeX used is MikTeX
+#(the standrad TeX under Windows)
+#
+# The function has no parameter
+#
+# The function returns true if MikTeX is used under Windows
+# and false otherwise
+#
+sub isMikTeX{
+ if ($OS ne $WINDOWS_OS){
+ return false;
+ }
+
+ open(my $fh, '-|', 'tex --version') or die "Can not run the command 'tex --version' $!\n";
+ while (my $line = <$fh>) {
+ if ($line =~ /.*miktex.*/i){
+ return true;
+ }
+ }
+ return false;
+}
+
+#The following function modify a list of directories
+#to replace the variable part of the directory with
+#the actual path.
+#
+#This function has 3 parameters:
+# 1) A reference on an array containing the the list of directories
+# 2) The placeholder string used for the variable part
+# 3) Its actual value
+#
+#The function returns an array with all the diretory's name converted
+#to the actual names.
+sub realDirNames {
+ my ($dirList,$toBeReplaced,$value)=@_;
+
+ my @dirNames;
+
+ foreach my $line (@$dirList){
+ $line =~ s/$toBeReplaced/$value/;
+ #remove double slash (//) in directory names.
+ $line =~ s/\/\//\//g;
+ push(@dirNames,$line);
+ };
+
+ return @dirNames;
+}
+
+#The following function copy all the files from a directory
+#to a destination directory by copying all the subdirectories.
+#
+#The function has 2 parameters:
+# 1)The name of the source directory
+# 2)The name of destination directory
+sub copyDir {
+ my ($srcDir,$dstDir)=@_;
+
+ my $errMsg;
+ my $rc;
+
+ if ( ! -d $srcDir ){
+ die "The source directory '$srcDir' is not a directory.\n"
+ }
+ if ( ! -d $dstDir ){
+ die "The destination directory '$dstDir' is not a directory.\n"
+ }
+
+ opendir(my $dh, $srcDir) || die "Can't open $srcDir: $!";
+ while (my $currEntry=readdir $dh) {
+ $errMsg="";
+ my $fullCurrEntry=catfile($srcDir,$currEntry);
+ if ( ! -d $fullCurrEntry){
+ my $srcFile=$fullCurrEntry;
+ my $dstFile=catfile($dstDir,$currEntry);
+ $errMsg="The copy of '$srcFile' to '$dstFile'";
+ $rc=copy($srcFile,$dstFile) if ! grep {$_ eq $currEntry } @FILE_TO_EXCLUDE;
+ if ($rc){
+ print "$errMsg has suceeded.\n" if $DEBUG;
+ }
+ else{
+ print "$errMsg has failed (code: $!).\n";
+ }
+ }
+ else{
+ #Not a file, the subdirectory should be created and
+ #copied if it is not in the list of excluded files.
+ if ( ! grep {$_ eq $currEntry } @FILE_TO_EXCLUDE){
+ my $newSrcDir=$fullCurrEntry;
+ my $newDstDir=catfile($dstDir,$currEntry);
+
+ $errMsg="The creation of directory '$newDstDir'";
+ $rc=make_path($newDstDir);
+ if ($rc){
+ print "$errMsg has suceeded.\n";
+ }
+ else{
+ print "$errMsg has failed (code: $!).\n";
+ }
+ copyDir($newSrcDir,$newDstDir);
+ }
+ }
+ }
+ closedir($dh);
+}
+
+#
+#---------------------------------Main program----------------------------
+#
+
+if ( $NB_ARGS != 2 ) {
+ print "This script installs all the necessary files for the use of the GFS Didot fonts\n";
+ print "in a texmf tree.\n";
+ print "$0 has 2 arguments:\n";
+ print " 1) The name of the directory containing the GFS Didot distribution.\n";
+ print " 2) The name of the root directory of the texmf tree where the files\n";
+ print " should be installed\n";
+ exit 1
+}
+
+
+my $distribDir=$ARGV[0];
+my $texmfDir=$ARGV[1];
+
+my @dstDirs=realDirNames(\@TEXMF_DIDOT,$ROOT_TEXMF,$texmfDir);
+my @srcDirs=realDirNames(\@GFSDIDOT_DISTRIB,$ROOT_DISTRIB,$distribDir);
+my $i;
+my $errMsg;
+my $rc;
+
+if ((scalar @TEXMF_DIDOT) != (scalar @GFSDIDOT_DISTRIB)){
+ die "There are not the same number of source and destination directories.\n";
+}
+
+#Create directories in TEXMF tree
+foreach my $line (@dstDirs){
+ if (-e $line){
+ if (-d $line){
+ remove_tree($line) or die "The directory '$line' can not be removed $!\n";
+ }
+ else{
+ unlink($line) or die "The file '$line' can not be removed $!\n";
+ }
+ };
+ make_path($line);
+}
+#Now copy the different source directories.
+$i=0;
+foreach my $dir (@srcDirs){
+ my $dstDir=$dstDirs[$i];
+
+ copyDir($dir,$dstDir);
+ print "The source directory '$dir' has been copied to the directory '$dstDir'.\n";
+ $i += 1;
+}
+
+my $TeXcmd;
+#The TeX command to include the new file in TeXMF
+if (isMikTeX()){
+ #MikTeX does not allow the command "mktexlsr" with an argument
+ $TeXcmd="mktexlsr";
+}
+else {
+ $TeXcmd="mktexlsr $texmfDir";
+}
+$rc=system($TeXcmd) ;
+if ($rc != 0){
+ die "The command '$TeXcmd' has failed: $!\n";
+}
+
+if (isMikTeX()){
+ #MikTeX does not allow the command "updmap-sys" with an argument
+ #To configure the file 'updmap.cfg' on MikTeX one has to pass
+ #the command: initexmf --edit-config-file updmap
+ $TeXcmd="updmap --verbose";
+}
+else {
+ $TeXcmd="updmap-sys";
+}
+$rc=system($TeXcmd) ;
+if ($rc != 0){
+ die "The command '$TeXcmd' has failed: $!\n";
+}
+
+exit 0;