#
# 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 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
require "filename_helper.pl";
-require "importenv.pl";
+use Env qw(FEISTY_MEOW_BINARIES BUILD_TOP FEISTY_MEOW_APEX FEISTY_MEOW_LOADING_DOCK FEISTY_MEOW_SCRIPTS DEBUG_FEISTY_MEOW );
# 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
sub make_bash_alias {
local($aliasname) = shift(@_);
local($full_alias) = $aliasname;
+#print "full alias is $full_alias\n";
$aliasname =~ s/^.*\/([^\/]*)/\1/;
#print "alias became $aliasname\n";
- local($source_dir) = shift(@_);
-#print "bash alias is $aliasname, dir is $source_dir\n";
- print she "alias $aliasname=\"bash $source_dir/$full_alias.sh\"\n";
+ print she "define_yeti_alias $aliasname=\"bash $full_alias.sh\"\n";
}
# makes an alias for a perl script given the alias name.
local($full_alias) = $aliasname;
$aliasname =~ s/^.*\/([^\/]*)/\1/;
#print "alias became $aliasname\n";
- local($source_dir) = shift(@_);
-#print "perl alias is $aliasname, dir is $source_dir\n";
- print she "alias $aliasname=\"perl $source_dir/$full_alias.pl\"\n";
-}
-
-# given a directory, this returns an array of all the filenames found therein.
-sub load_file_names {
- local($path) = shift(@_);
- opendir(that_dir, $path);
- local(@those_files) = sort(readdir(that_dir));
- return @those_files;
+ print she "define_yeti_alias $aliasname=\"perl $full_alias.pl\"\n";
}
##############
# 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
+# Any *.alias files found in the $FEISTY_MEOW_LOADING_DOCK/custom folder are
# loaded also.
sub rebuild_script_aliases {
- if (length($SHELL_DEBUG)) {
+ if (length($DEBUG_FEISTY_MEOW)) {
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";
+ if ( ! -d $FEISTY_MEOW_LOADING_DOCK ) {
+ mkdir $FEISTY_MEOW_LOADING_DOCK;
+ if (length($DEBUG_FEISTY_MEOW)) {
+ print "made FEISTY_MEOW_LOADING_DOCK at '$FEISTY_MEOW_LOADING_DOCK'\n";
}
}
# test if we can use color in ls...
- $test_color=` ls --help 2>&1 | grep -i color `;
+# $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")) {
+ foreach $i (&glob_list("$FEISTY_MEOW_LOADING_DOCK/custom/*.alias")) {
if (-f $i) { push(@ALIAS_DEFINITION_FILES, $i); }
}
- if (length($SHELL_DEBUG)) {
+ if (length($DEBUG_FEISTY_MEOW)) {
print "using these alias files:\n";
+print "HEY IS THIS PROBLEM CHILD?\n";
foreach $i (@ALIAS_DEFINITION_FILES) {
local $base_of_dir = &basename(&dirname($i));
local $basename = &basename($i);
print " $base_of_dir/$basename\n";
}
+print "WAS PROBLEM CHILD ABOVE HERE?\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)) {
+ local $GENERATED_ALIAS_FILE = "$FEISTY_MEOW_LOADING_DOCK/fmc_core_and_custom_aliases.sh";
+ if (length($DEBUG_FEISTY_MEOW)) {
print "writing generated aliases in $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";
- }
+# if (length($test_color)) {
+# print GENOUT "export color_add='--color=auto'\n";
+# } else {
+# print GENOUT "export color_add=\n";
+# }
# plow in the full set of aliases into the file.
foreach $i (@ALIAS_DEFINITION_FILES) {
close GENOUT;
- if (length($SHELL_DEBUG)) {
+ if (length($DEBUG_FEISTY_MEOW)) {
print("done rebuilding generated aliases file.\n");
}
}
##############
# make sure we know where to store the files we're creating.
-if ( ! length("$FEISTY_MEOW_GENERATED") ) {
+if ( ! length("$FEISTY_MEOW_LOADING_DOCK") ) {
print "\
-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";
+The FEISTY_MEOW_LOADING_DOCK variable is not defined. This must point to\
+the location where the generated scripts are stored. You may still need to\
+configure the feisty meow script system with something like:\
+ bash /opt/feistymeow.org/feisty_meow/scripts/core/reconfigure_feisty_meow.sh\
+Please see http://feistymeow.org for more details.\n";
exit 1;
#really need to use better exit codes.
}
-$FEISTY_MEOW_GENERATED =~ s/\\/\//g;
+##############
+
+$FEISTY_MEOW_LOADING_DOCK =~ s/\\/\//g;
$FEISTY_MEOW_SCRIPTS =~ s/\\/\//g;
-$FEISTY_MEOW_DIR =~ s/\\/\//g;
+$FEISTY_MEOW_APEX =~ s/\\/\//g;
+
+##############
# create our generated shells directory if it's not already there.
-if (! -d $FEISTY_MEOW_GENERATED) {
- mkdir $FEISTY_MEOW_GENERATED;
+if (! -d $FEISTY_MEOW_LOADING_DOCK) {
+ mkdir $FEISTY_MEOW_LOADING_DOCK;
}
##############
-# set the executable bit for yeti binaries for just this current user.
-if (-d $BINDIR) {
- system("chmod -R u+x \"$BINDIR\"/*");
+# set the executable bit for binaries for just this current user.
+if (-d $FEISTY_MEOW_BINARIES) {
+ system("chmod -R u+x \"$FEISTY_MEOW_BINARIES\"/*");
}
+##############
+
# 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/fmc_aliases_for_scripts.sh");
+unlink("$FEISTY_MEOW_LOADING_DOCK/fmc_aliases_for_scripts.sh");
-if (length($SHELL_DEBUG)) {
- printf "writing $FEISTY_MEOW_GENERATED/fmc_aliases_for_scripts.sh...\n";
+if (length($DEBUG_FEISTY_MEOW)) {
+ printf "writing $FEISTY_MEOW_LOADING_DOCK/fmc_aliases_for_scripts.sh...\n";
}
-# open the alias files to be created.
-open(she, ">> $FEISTY_MEOW_GENERATED/fmc_aliases_for_scripts.sh");
+##############
-#print "os is $OS\n";
+# open the alias files to be created.
+open(she, ">> $FEISTY_MEOW_LOADING_DOCK/fmc_aliases_for_scripts.sh");
# find the list of files in the scripts directory.
-#opendir(scripts, "$FEISTY_MEOW_SCRIPTS");
-#@shell_files = sort(readdir(scripts));
-#print "yeti scripts: @shell_files\n";
+@shell_files = (find_files(recursive_find_directories("$FEISTY_MEOW_SCRIPTS")),
+ find_files(recursive_find_directories("$FEISTY_MEOW_LOADING_DOCK/custom/scripts")));
+
+# strip out the customization files, since they are added in on demand only.
+#print "before filtering list: @shell_files\n";
+@shell_files = grep ! /\/customize\//, @shell_files;
+#print "after filtering list: @shell_files\n";
-@shell_files = &load_file_names("$FEISTY_MEOW_SCRIPTS");
+#printf "found all these files in main script dirs:\n";
+#printf " @shell_files\n";
# construct aliases for items in the scripts directory.
foreach $file (@shell_files) {
|| $file =~ /\/\.\.$/
|| $file =~ /\/\.svn$/
|| $file =~ /\/\.git$/
+ || $file =~ /\/custom\/[a-zA-Z0-9_]+\/[a-zA-Z0-9_.]+$/
+#hmmm: would be nice to have this name in a symbol somewhere instead of having "customize" everywhere.
) {
- # just skip this item; it's a special directory.
- } 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, "$FEISTY_MEOW_SCRIPTS/$file");
- @subdir_files = sort(readdir(subdir));
- foreach $subfile (@subdir_files) {
- push(@shell_files, "$file/$subfile");
- }
+ # just skip this item; it's a special directory or a file we don't want to include.
+# print "skipping name: $file\n";
} 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, "$FEISTY_MEOW_SCRIPTS");
+ &make_alias($file, "");
}
}
-# open the source repository's script directory to find scripts in there.
-local($build_shell_path) = "$BUILD_TOP/scripts/generator";
-@build_shells = &load_file_names("$build_shell_path");
-#opendir(build_shells_dir, $build_shell_path);
-#@build_shell_files = sort(readdir(build_shells_dir));
-#if (scalar(@build_shell_files) > 0) {
-# print "build shell folders: @build_shell_files\n";
-#}
-foreach $file (@build_shells) {
- &make_alias($file, "$build_shell_path");
-}
+close(she);
+
+##############
+
+# prepare a finalizer chunk that is the last thing to load.
+
+open(she, ">> $FEISTY_MEOW_LOADING_DOCK/fmc_ending_sentinel.sh");
+
+# write in our sentinel alias that says alias loading was handled.
+print she "define_yeti_alias CORE_ALIASES_LOADED=true\n";
close(she);
+##############
+
+1;
+