#!/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". #
-###############################################################################
-
-require "importenv.pl";
+##############
+#
+# Name : generate_aliases
+# Author : Chris Koeritz
+# Rights : Copyright (C) 1996-$now by Author
+#
+# Purpose:
+#
+# This script generates feisty meow script 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";
+
+use Env qw(BINDIR BUILD_TOP FEISTY_MEOW_DIR FEISTY_MEOW_GENERATED FEISTY_MEOW_SCRIPTS SHELL_DEBUG );
# given a possible aliasable filename, this will decide whether to create a perl
# or bash alias for it. it needs the filename of the possible alias and the
##############
+# 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("$GENERADIR") ) {
+if ( ! length("$FEISTY_MEOW_GENERATED") ) {
print "\
-The GENERADIR variable is not defined. This must point to the location where\n\
+The FEISTY_MEOW_GENERATED variable is not defined. This must point to the location where\n\
the generated scripts are stored. Perhaps you still need to run\n\
bootstrap_shells.sh and set up some environment variables. Please see\n\
-http://yeticode.org for more details.\n";
+http://feistymeow.org for more details.\n";
exit 1;
#really need to use better exit codes.
}
-$GENERADIR =~ s/\\/\//g;
-$SHELLDIR =~ s/\\/\//g;
-$YETI_DIR =~ s/\\/\//g;
+$FEISTY_MEOW_GENERATED =~ s/\\/\//g;
+$FEISTY_MEOW_SCRIPTS =~ s/\\/\//g;
+$FEISTY_MEOW_DIR =~ s/\\/\//g;
# create our generated shells directory if it's not already there.
-if (! -d $GENERADIR) {
- mkdir $GENERADIR;
+if (! -d $FEISTY_MEOW_GENERATED) {
+ mkdir $FEISTY_MEOW_GENERATED;
}
##############
-# set the executable bit for yeti binaries for just this current user.
+# set the executable bit for binaries for just this current user.
if (-d $BINDIR) {
system("chmod -R u+x \"$BINDIR\"/*");
}
-##############
-
-system("bash \"$SHELLDIR\"/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 YETI_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("$GENERADIR/p_alias.sh");
+unlink("$FEISTY_MEOW_GENERATED/fmc_aliases_for_scripts.sh");
-printf "writing $GENERADIR/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, ">> $GENERADIR/p_alias.sh");
-
-#print "os is $OS\n";
+open(she, ">> $FEISTY_MEOW_GENERATED/fmc_aliases_for_scripts.sh");
# find the list of files in the scripts directory.
-#opendir(scripts, "$SHELLDIR");
+#opendir(scripts, "$FEISTY_MEOW_SCRIPTS");
#@shell_files = sort(readdir(scripts));
-#print "yeti scripts: @shell_files\n";
+#print "scripts: @shell_files\n";
-@shell_files = &load_file_names("$SHELLDIR");
+@shell_files = &load_file_names("$FEISTY_MEOW_SCRIPTS");
# construct aliases for items in the scripts directory.
foreach $file (@shell_files) {
if ($file =~ '^\.$'
|| $file =~ '^\.\.$'
|| $file =~ '^.svn$'
+ || $file =~ '^.git$'
|| $file =~ /\/\.$/
|| $file =~ /\/\.\.$/
- || $file =~ /\/\.svn$/) {
+ || $file =~ /\/\.svn$/
+ || $file =~ /\/\.git$/
+ ) {
# just skip this item; it's a special directory.
- } elsif (-d "$SHELLDIR/$file") {
+ } elsif (-d "$FEISTY_MEOW_SCRIPTS/$file") {
# if we see a subdirectory in the scripts folder, we add all the
# scripts in it as aliases. we recurse only one level.
- opendir(subdir, "$SHELLDIR/$file");
+ opendir(subdir, "$FEISTY_MEOW_SCRIPTS/$file");
@subdir_files = sort(readdir(subdir));
foreach $subfile (@subdir_files) {
push(@shell_files, "$file/$subfile");
} else {
# if it's a regular file, we'll try to make an alias for it. the function
# will only fire if the ending is appropriate for the script languages we use.
- &make_alias($file, "$SHELLDIR");
+ &make_alias($file, "$FEISTY_MEOW_SCRIPTS");
}
}