+
+############################################################
+# This subroutine corrects relative paths to ensure they
+# will work within the SM space. If the path falls within
+# the SM directory tree, the SM_PATH variable will be
+# prepended to the path, if not, then the path will be
+# converted to an absolute path.
+############################################################
+sub change_to_SM_path() {
+ my ($old_path) = @_;
+ my $new_path = '';
+ my @rel_path;
+ my @abs_path;
+ my $subdir;
+
+ # If the path is absolute, don't bother.
+ return "\'" . $old_path . "\'" if ( $old_path eq '');
+ return "\'" . $old_path . "\'" if ( $old_path =~ /^\// );
+ return $old_path if ( $old_path =~ /^SM_PATH/ );
+
+ # For relative paths, split on '../'
+ @rel_path = split(/\.\.\//, $old_path);
+
+ if ( $#rel_path > 1 ) {
+ # more than two levels away. Make it absolute.
+ @abs_path = split(/\//, $dir);
+ foreach $subdir (@rel_path) {
+ if ($subdir eq '') {
+ pop @abs_path;
+ } else {
+ push @abs_path, $subdir;
+ }
+ }
+ foreach $subdir (@abs_path) {
+ $new_path .= $subdir . '/';
+ }
+ } elsif ( $#rel_path > 0 ) {
+ # it's within the SM tree, prepend SM_PATH
+ $new_path = $old_path;
+ $new_path =~ s/^\.\.\//SM_PATH . \'/;
+ $new_path .= '\'';
+ } else {
+ # Last, it's a relative path without any leading '.'
+ # Prepend SM_PATH (no substitution required)
+ $new_path = "SM_PATH . \'" . $old_path . "\'";
+ }
+
+ return $new_path;
+}
+
+sub change_to_rel_path() {
+ my ($old_path) = @_;
+ my $new_path = '';
+
+ return $old_path if ( $old_path eq '');
+ return $old_path if ( $old_path =~ /^\// );
+ return $old_path if ( $old_path =~ /^\.\./ );
+
+ if ( $old_path =~ /^SM_PATH/ ) {
+ $new_path = $old_path;
+ $new_path =~ s/^SM_PATH . \'/\.\.\//;
+ }
+
+ return $new_path;
+}