nice doc
[feisty_meow.git] / scripts / core / generate_aliases.pl
index e8ef595f7b8916b4a4a3e0c762d7d0d105f4eb21..660fdd8d5a1b8a042647bf902af0e1b61b9a5f0d 100644 (file)
@@ -1,25 +1,27 @@
 #!/usr/bin/perl
 
-###############################################################################
-#                                                                             #
-#  Name   : generate_aliases                                                  #
-#  Author : Chris Koeritz                                                     #
-#  Rights : Copyright (C) 1996-$now by Author                                 #
-#                                                                             #
-#  Purpose:                                                                   #
-#                                                                             #
-#    This script generates YETI alias files.  Alias files contain a list of   #
-#  definitions for command aliases that are written in the specified shell    #
-#  dialect (such as bash or perl) and which are additionally tailored for the #
-#  operating system to be used.                                               #
-#                                                                             #
-###############################################################################
-#  This program is free software; you can redistribute it and/or modify it    #
-#  under the terms of the GNU General Public License as published by the Free #
-#  Software Foundation; either version 2 of the License or (at your option)   #
-#  any later version.  See: "http://www.gruntose.com/Info/GNU/GPL.html" for a #
-#  version of the License.  Please send any updates to "fred@gruntose.com".   #
-###############################################################################
+##############
+#
+#  Name   : generate_aliases
+#  Author : Chris Koeritz
+#  Rights : Copyright (C) 1996-$now by Author
+#
+#  Purpose:
+#
+#    This script generates YETI alias files.  Alias files contain a list of
+#  definitions for command aliases that are written in the specified shell
+#  dialect (such as bash or perl) and which are additionally tailored for the
+#  operating system to be used.
+#
+##############
+#  This program is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU General Public License as published by the Free
+#  Software Foundation; either version 2 of the License or (at your option)
+#  any later version.  See: "http://www.gruntose.com/Info/GNU/GPL.html" for a
+#  version of the License.  Please send any updates to "fred@gruntose.com".
+##############
+
+require "filename_helper.pl";
 
 require "importenv.pl";
 
@@ -69,6 +71,84 @@ sub load_file_names {
 
 ##############
 
+# The "common.alias" file is used in the generated aliases file as a base
+# set of generally useful aliases.  We also add aliases for any script files
+# (perl, bash, python, etc) that we find in the feisty meow script hierarchy.
+# Any *.alias files found in the $FEISTY_MEOW_GENERATED/custom folder are
+# loaded also.
+sub rebuild_script_aliases {
+
+  if (length($SHELL_DEBUG)) {
+    print "rebuilding generated aliases file...\n";
+  }
+
+  # create our generated shells directory if it's not already.
+  if ( ! -d $FEISTY_MEOW_GENERATED ) {
+    mkdir $FEISTY_MEOW_GENERATED;
+    if (length($SHELL_DEBUG)) {
+      print "made FEISTY_MEOW_GENERATED at '$FEISTY_MEOW_GENERATED'\n";
+    }
+  }
+
+  # test if we can use color in ls...
+  $test_color=` ls --help 2>&1 | grep -i color `;
+
+  # this is an array of files from which to draw alias definitions.
+  @ALIAS_DEFINITION_FILES = ("$FEISTY_MEOW_SCRIPTS/core/common.alias");
+
+  # if custom aliases files exist, add them to the list.
+  foreach $i (&glob_list("$FEISTY_MEOW_GENERATED/custom/*.alias")) {
+    if (-f $i) { push(@ALIAS_DEFINITION_FILES, $i); }
+  }
+  if (length($SHELL_DEBUG)) {
+    print "using these alias files:\n";
+    foreach $i (@ALIAS_DEFINITION_FILES) {
+      local $base_of_dir = &basename(&dirname($i));
+      local $basename = &basename($i);
+      print "  $base_of_dir/$basename\n";
+    }
+  }
+
+  # write the aliases for sh and bash scripts.
+
+  local $GENERATED_ALIAS_FILE = "$FEISTY_MEOW_GENERATED/fmc_core_and_custom_aliases.sh";
+  if (length($SHELL_DEBUG)) {
+    print "writing generated aliases in $GENERATED_ALIAS_FILE...\n";
+  }
+
+#hmmm: perhaps a good place for a function to create the header,
+#      given the appropriate comment code.
+
+  open GENOUT, ">$GENERATED_ALIAS_FILE" or die "cannot open $GENERATED_ALIAS_FILE";
+
+  print GENOUT "##\n";
+  print GENOUT "## generated file: $GENERATED_ALIAS_FILE\n";
+  print GENOUT "## please do not edit.\n";
+  print GENOUT "##\n";
+
+  if (length($test_color)) {
+    print GENOUT "color_add=--color=auto\n";
+  } else {
+    print GENOUT "color_add=\n";
+  }
+
+  # plow in the full set of aliases into the file.
+  foreach $i (@ALIAS_DEFINITION_FILES) {
+    open CURR_ALIASER, "<$i" or die "cannot open current alias file $i";
+    foreach $line (<CURR_ALIASER>) {
+      print GENOUT "$line";
+    }
+  }
+
+  close GENOUT;
+
+  if (length($SHELL_DEBUG)) {
+    print("done rebuilding generated aliases file.\n");
+  }
+}
+
+##############
+
 # make sure we know where to store the files we're creating.
 if ( ! length("$FEISTY_MEOW_GENERATED") ) {
   print "\
@@ -96,21 +176,19 @@ if (-d $BINDIR) {
   system("chmod -R u+x \"$BINDIR\"/*");
 }
 
-##############
-
-system("bash \"$FEISTY_MEOW_SCRIPTS\"/core/unter_alia.sh");
-  # generate the first set of alias files; these are the root files used
-  # by the shell.  each of them will be written to in turn invoke the
-  # p_alias files which are made from the set of scripts in FEISTY_MEOW_SCRIPTS
-  # (see below).
+# generate the first set of alias files that are defined in the core
+# and custom scripts directories.
+&rebuild_script_aliases;
 
 # trash the old versions.
-unlink("$FEISTY_MEOW_GENERATED/p_alias.sh");
+unlink("$FEISTY_MEOW_GENERATED/fmc_aliases_for_scripts.sh");
 
-printf "writing $FEISTY_MEOW_GENERATED/p_alias.sh...\n";
+if (length($SHELL_DEBUG)) {
+  printf "writing $FEISTY_MEOW_GENERATED/fmc_aliases_for_scripts.sh...\n";
+}
 
 # open the alias files to be created.
-open(she, ">> $FEISTY_MEOW_GENERATED/p_alias.sh");
+open(she, ">> $FEISTY_MEOW_GENERATED/fmc_aliases_for_scripts.sh");
 
 #print "os is $OS\n";