X-Git-Url: https://feistymeow.org/gitweb/?a=blobdiff_plain;f=scripts%2Fcore%2Fgenerate_aliases.pl;h=b590ca3d5749ec24dd00b4fada725666b250c1eb;hb=cf3d63de321ae4a18860c4be8a968eb906ddd2fe;hp=40f555e90a26d14581835c492063d6b904b2915c;hpb=4d7f9a2b66436582743d72baf3071825b910dd23;p=feisty_meow.git diff --git a/scripts/core/generate_aliases.pl b/scripts/core/generate_aliases.pl index 40f555e9..b590ca3d 100644 --- a/scripts/core/generate_aliases.pl +++ b/scripts/core/generate_aliases.pl @@ -23,19 +23,22 @@ require "filename_helper.pl"; -use Env qw(BINDIR BUILD_TOP FEISTY_MEOW_DIR FEISTY_MEOW_GENERATED FEISTY_MEOW_SCRIPTS SHELL_DEBUG ); +use Env qw(FEISTY_MEOW_BINARIES BUILD_TOP FEISTY_MEOW_APEX FEISTY_MEOW_LOADING_DOCK FEISTY_MEOW_SCRIPTS DEBUG_FEISTY_MEOW HOME ); # 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 # directory where that file resides. sub make_alias { local($file, $dir) = @_; - if ($file =~ /\.[pP][lL]$/) { - local($aliasname) = $file; $aliasname =~ s/\.[Pp][lL]$//; - &make_perl_alias($aliasname, "$dir"); + if ($file =~ /\.[pP][yY]$/) { + local($aliasname) = $file; $aliasname =~ s/\.[Pp][yY]$//; + &make_python_alias($aliasname, "$dir"); } elsif ($file =~ /\.[sS][hH]$/) { local($aliasname) = $file; $aliasname =~ s/\.[Ss][Hh]$//; &make_bash_alias($aliasname, "$dir"); + } elsif ($file =~ /\.[pP][lL]$/) { + local($aliasname) = $file; $aliasname =~ s/\.[Pp][lL]$//; + &make_perl_alias($aliasname, "$dir"); } } @@ -43,30 +46,29 @@ sub make_alias { 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. -sub make_perl_alias { +# makes an alias for a python script given the alias name. +#hmmm: don't love that we're hardcoding python3 in here, but apparently some systems don't have a 'python' command despite having python installed. +sub make_python_alias { local($aliasname) = shift(@_); 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"; + print she "define_yeti_alias $aliasname=\"python3 $full_alias.py\"\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; +# makes an alias for a perl script given the alias name. +sub make_perl_alias { + local($aliasname) = shift(@_); + local($full_alias) = $aliasname; + $aliasname =~ s/^.*\/([^\/]*)/\1/; +#print "alias became $aliasname\n"; + print she "define_yeti_alias $aliasname=\"perl $full_alias.pl\"\n"; } ############## @@ -74,33 +76,34 @@ 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 +# 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")) { +#hmmm: would be nice to have this name in a symbol somewhere instead of having "custom" or "customize" everywhere. + 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"; foreach $i (@ALIAS_DEFINITION_FILES) { local $base_of_dir = &basename(&dirname($i)); @@ -110,9 +113,8 @@ sub rebuild_script_aliases { } # 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"; } @@ -126,11 +128,11 @@ sub rebuild_script_aliases { print GENOUT "## please do not edit.\n"; print GENOUT "##\n"; - if (length($test_color)) { - print GENOUT "export color_add=--color=auto\n"; - } else { - print GENOUT "export 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) { @@ -142,7 +144,7 @@ sub rebuild_script_aliases { close GENOUT; - if (length($SHELL_DEBUG)) { + if (length($DEBUG_FEISTY_MEOW)) { print("done rebuilding generated aliases file.\n"); } } @@ -150,53 +152,69 @@ sub rebuild_script_aliases { ############## # 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://feistymeow.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 binaries for just this current user. -if (-d $BINDIR) { - system("chmod -R u+x \"$BINDIR\"/*"); +if (-d $FEISTY_MEOW_BINARIES) { + system("find \"$FEISTY_MEOW_BINARIES\" -type f -exec chmod u+x \"{}\" ';'"); } +############## + # 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"); +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 "scripts: @shell_files\n"; +@shell_files = (find_files(recursive_find_directories("$FEISTY_MEOW_SCRIPTS")), + find_files("$FEISTY_MEOW_LOADING_DOCK/custom/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"), - &load_file_names("$FEISTY_MEOW_GENERATED/custom/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) { @@ -210,38 +228,27 @@ foreach $file (@shell_files) { || $file =~ /\/\.svn$/ || $file =~ /\/\.git$/ ) { - # 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"); - } - } elsif (-f "$FEISTY_MEOW_GENERATED/custom/scripts/$file") { - # if we see a file in the auto-generated area that comes from the - # customized scripts folder, we add it as an alias. - make_alias($file, "$FEISTY_MEOW_GENERATED/custom/scripts/"); - #print "added custom script file: $FEISTY_MEOW_GENERATED/custom/scripts/$file\n"; + # 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; +