[Bio] / FigCommon / bootstrap.pl Repository:
ViewVC logotype

Diff of /FigCommon/bootstrap.pl

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.10, Thu Apr 1 12:59:40 2004 UTC revision 1.30, Tue Jan 16 22:07:49 2007 UTC
# Line 1  Line 1 
1  #  #
2    # Copyright (c) 2003-2006 University of Chicago and Fellowship
3    # for Interpretations of Genomes. All Rights Reserved.
4    #
5    # This file is part of the SEED Toolkit.
6    #
7    # The SEED Toolkit is free software. You can redistribute
8    # it and/or modify it under the terms of the SEED Toolkit
9    # Public License.
10    #
11    # You should have received a copy of the SEED Toolkit Public License
12    # along with this program; if not write to the University of Chicago
13    # at info@ci.uchicago.edu or the Fellowship for Interpretation of
14    # Genomes at veronika@thefig.info or download a copy from
15    # http://www.theseed.org/LICENSE.TXT.
16    #
17    
18    #
19  # FIG bootstrap script.  # FIG bootstrap script.
20  #  #
21  # Control is passed here from the toplevel configure (or dists/releases/install depending  # Control is passed here from the toplevel configure (or dists/releases/install depending
# Line 36  Line 53 
53    
54      print "Here in the perl bootstrap. inc is:\n" . join("\n", @INC), "\n";      print "Here in the perl bootstrap. inc is:\n" . join("\n", @INC), "\n";
55    
56      my $my_prefix, $prefix, $inc, @newInc;      my ($my_prefix, $prefix, $inc, @newInc);
57    
58      $my_prefix = $ENV{FIGCONFIG_ENV_DIR};      $my_prefix = $ENV{FIGCONFIG_ENV_DIR};
59      open(P, "<$my_prefix/PREFIX");      open(P, "<$my_prefix/PREFIX");
# Line 131  Line 148 
148    
149      my $fig = "$fig_disk/FIG";      my $fig = "$fig_disk/FIG";
150      my $data = "$fig/Data";      my $data = "$fig/Data";
151        my $sproutData = "$fig/SproutData";
152    
153      my $hostname = `hostname`;      my $hostname = `hostname`;
154      chomp $hostname;      chomp $hostname;
# Line 140  Line 158 
158      push(@$Config, ["fig", $fig, 1]);      push(@$Config, ["fig", $fig, 1]);
159      push(@$Config, ["bin", $fig_bin, 1]);      push(@$Config, ["bin", $fig_bin, 1]);
160      push(@$Config, ["ext_bin", $env_bin, 1]);      push(@$Config, ["ext_bin", $env_bin, 1]);
161        push(@$Config, ["common_runtime", $env_dir, 1]);
162        push(@$Config, ["arch", $ENV{FIGCONFIG_ENV}, 1]);
163        push(@$Config, ["var", "$fig/var", 1]);
164      push(@$Config, ["data", $data, 1]);      push(@$Config, ["data", $data, 1]);
165      push(@$Config, ["global", "$data/Global", 1]);      push(@$Config, ["global", "$data/Global", 1]);
166      push(@$Config, ["organisms", "$data/Organisms", 1]);      push(@$Config, ["organisms", "$data/Organisms", 1]);
167      push(@$Config, ["RC", "$fig_disk/FIG/ResolutionCenter", 1]);      push(@$Config, ["RC", "$fig_disk/FIG/ResolutionCenter", 1]);
168      push(@$Config, ["NR", "$fig_disk/FIG/NR", 1]);      push(@$Config, ["NR", "$fig_disk/FIG/NR", 1]);
169      push(@$Config, ["temp", "$fig_disk/FIG/Tmp", 1]);      push(@$Config, ["temp", "$fig_disk/FIG/Tmp", 1]);
170      push(@$Config, ["temp_url", "http://$hostname/FIG-Tmp", 1]);      push(@$Config, ["sproutData", $sproutData, 1]);
171      push(@$Config, ["cgi_url", "http://$hostname/FIG", 1]);  
172        my $sandbox;
173        if ($ENV{FIGCONFIG_SANDBOX})
174        {
175            $sandbox = "/$ENV{FIGCONFIG_SANDBOX}";
176        }
177    
178        push(@$Config, ["temp_url", "http://$hostname$sandbox/FIG-Tmp", 1]);
179        push(@$Config, ["cgi_url", "http://$hostname$sandbox/FIG", 1]);
180    
181      #      #
182      # Add values for a relative base href of temp and CGI pages.  The latter      # Add values for a relative base href of temp and CGI pages.  The latter
# Line 155  Line 184 
184      # sense to derive the above 2 values from these.  -- GJO      # sense to derive the above 2 values from these.  -- GJO
185      #      #
186    
187      push(@$Config, ["temp_base", "/FIG-Tmp/", 1]);      push(@$Config, ["temp_base", "$sandbox/FIG-Tmp/", 1]);
188      push(@$Config, ["cgi_base", "/FIG/", 1]);      push(@$Config, ["cgi_base", "$sandbox/FIG/", 1]);
189    
190  }  }
191    
192  sub compute_environment  sub compute_environment
# Line 167  Line 197 
197    
198      push(@$Env, ["RTROOT", $ENV{FIG_HOME}, 0]);      push(@$Env, ["RTROOT", $ENV{FIG_HOME}, 0]);
199      push(@$Env, ["RTDIST", "\$RTROOT/dist", 0]);      push(@$Env, ["RTDIST", "\$RTROOT/dist", 0]);
200        push(@$Env, ["RTSITECONFIGDIR", "\$RTROOT/config", 0]);
201      push(@$Env, ["RTARCH", $ENV{FIGCONFIG_ENV}, 0]);      push(@$Env, ["RTARCH", $ENV{FIGCONFIG_ENV}, 0]);
202      push(@$Env, ["RTCURRENT", "`cat \$RTROOT/CURRENT_RELEASE`", 0]);      push(@$Env, ["RTCURRENT", "`cat \$RTROOT/CURRENT_RELEASE`", 0]);
203      push(@$Env, ["FIG_HOME", $ENV{FIG_HOME}, 0]);      push(@$Env, ["FIG_HOME", $ENV{FIG_HOME}, 0]);
# Line 181  Line 212 
212      #      #
213    
214      my @path = ();      my @path = ();
     push(@path, $env_bin);  
215      push(@path, $fig_bin);      push(@path, $fig_bin);
216        push(@path, $env_bin);
217      push(@path, "$fig_disk/bin");      push(@path, "$fig_disk/bin");
218    
219      push(@$Env, ["PATH", join(":", @path), 1]);      push(@$Env, ["PATH", join(":", @path), 1]);
220    
221      push(@$Env, ["LD_LIBRARY_PATH", "${env_lib}", 1]);      #
222        # Compute  LD_LIBRARY_PATH.
223        #
224        # Some packages, like mysql, place their shared libs in subdirectories
225        # of the libdir.
226        #
227    
228        my @ld_path = ($env_lib);
229    
230        my $dh;
231        if (!opendir($dh, $env_lib))
232        {
233            warn "Could not opendir $env_lib: $!";
234        }
235    
236        while ($_ = readdir($dh))
237        {
238            next if /^\./;
239    
240            my $path = "$env_lib/$_";
241            next unless -d $path;
242    
243            #
244            # See if there are any .so's in here.
245            #
246    
247            my @solist = <$path/*.so*>;
248            if (@solist > 0)
249            {
250                push(@ld_path, $path);
251            }
252        }
253        closedir($dh);
254    
255        #
256        # And if perl is dynamically linked, we need to add the perl core directory
257        # to the path too.
258        #
259    
260        my @coredir = <$env_lib/perl5/*/*/CORE>;
261        if (@coredir)
262        {
263            if ( -f "$coredir[0]/libperl.so" )
264            {
265                print "Found libperl in $coredir[0]\n";
266                push(@ld_path, $coredir[0]);
267            }
268        }
269    
270        my $ld_path = join(":", @ld_path);
271        $OtherConfig->{ld_library_path} = $ld_path;
272    
273        push(@$Env, ["LD_LIBRARY_PATH", $ld_path, 1]);
274    
275        my @perllib = grep({ $_ ne "." } @INC,
276                           $release_lib,
277                           "$release_lib/FigKernelPackages",
278                           "$release_lib/WebApplication",
279                           "$release_lib/FortyEight",
280                           "$release_lib/PPO",
281                           "$fig_disk/config");
282    
283        push(@$Env, ["PERL5LIB", join(":", @perllib), 1]);
284  }  }
285    
286  sub configure_python  sub configure_python
# Line 210  Line 303 
303      chomp $py_version;      chomp $py_version;
304      print "Python version $py_version\n";      print "Python version $py_version\n";
305    
306      $OtherConfig->{python_site_path} = "$ENV{FIGCONFIG_ENV_DIR}/lib/python$py_version/site-packages";      #
307        # Python figures this out for us.
308        #$OtherConfig->{python_site_path} = "$ENV{FIGCONFIG_ENV_DIR}/lib/python$py_version/site-packages";
309    
310      my @path = ();      my @path = ();
311      push(@path, $OtherConfig->{python_site_path});      #push(@path, $OtherConfig->{python_site_path});
312      push(@path, "$release_lib");      push(@path, "$release_lib");
313      push(@path, "$fig_disk/config");      push(@path, "$fig_disk/config");
314      push(@$Env, ["PYTHONPATH", join(":", @path), 1]);      push(@$Env, ["PYTHONPATH", join(":", @path), 1]);
# Line 247  Line 342 
342      #      #
343      # Special case for the mac.      # Special case for the mac.
344      #      #
345        # RDO 20040603 - don't do this any more; we want to pick up
346        # the python we ship.
347        #
348    
349      if ($ENV{FIGCONFIG_ENV} eq "mac")      if (0 && $ENV{FIGCONFIG_ENV} eq "mac")
350      {      {
351          #          #
352          # We'd like to use the MacPython that is installed          # We'd like to use the MacPython that is installed
# Line 272  Line 370 
370      $python = "$ENV{FIGCONFIG_ENV_DIR}/bin/python";      $python = "$ENV{FIGCONFIG_ENV_DIR}/bin/python";
371      if (-x $python)      if (-x $python)
372      {      {
373            #
374            # The mac doesn't seem to like the long #! lines, so we'll use poundbang env.
375            #
376            if ($ENV{FIGCONFIG_ENV} =~ /^mac/)
377            {
378                $OtherConfig->{python_require_poundbang_env} = 1;
379            }
380          return $python;          return $python;
381      }      }
382    
# Line 324  Line 429 
429              print $fh "export $name\n";              print $fh "export $name\n";
430          }          }
431      }      }
432        print $fh "alias rtpath='source \$RTDIST/releases/\$RTCURRENT/ReleaseTools/RTPath.sh'\n";
433  }  }
434    
435  sub write_csh_init  sub write_csh_init
# Line 354  Line 460 
460          }          }
461      }      }
462    
463        #
464        # Alias for RT stuff.
465        #
466        print $fh "alias rtpath 'source \$RTDIST/releases/\$RTCURRENT/ReleaseTools/RTPath.csh'\n";
467  }  }
468    
469  sub run_script  sub run_script
# Line 534  Line 644 
644    
645      print $fh "use FIG_Config;\n";      print $fh "use FIG_Config;\n";
646      print $fh "\n";      print $fh "\n";
647        print $fh "#### END tool_hdr ####\n\n"
648  }  }
649    
650  sub write_tool_hdr_python  sub write_tool_hdr_python
# Line 552  Line 663 
663      }      }
664      print $fh "\n";      print $fh "\n";
665    
666      print $fh "import sys\n";      print $fh "import sys, os\n";
667    
668    
669      print $fh "sys.path.append('$OtherConfig->{python_site_path}')\n";      print $fh "sys.path.append('$OtherConfig->{python_site_path}')\n";
670    
671        #
672        # Append the perl path to the environment, for use later with CallPerl.
673        #
674    
675        my $perlpath = join(":", @INC, $release_lib, "$release_lib/FigKernelPackages", "$fig_disk/config");
676        print $fh <<END;
677    if os.getenv("PERL5LIB", "") != "":
678        _delim = ":"
679    else:
680        _delim = ""
681    os.environ["PERL5LIB"] = "$perlpath" + _delim + os.getenv("PERL5LIB", "")
682    
683    END
684    
685      print $fh "# Following block is expanded by switch_to_release to add use lib directives\n";      print $fh "# Following block is expanded by switch_to_release to add use lib directives\n";
686      print $fh "# to point at the correct locations in the release directory.\n";      print $fh "# to point at the correct locations in the release directory.\n";
687      print $fh "#BEGIN switch_to_release generated code\n";      print $fh "#BEGIN switch_to_release generated code\n";
# Line 567  Line 692 
692    
693      print $fh "import FIG_Config\n";      print $fh "import FIG_Config\n";
694      print $fh "\n";      print $fh "\n";
695        print $fh "#### END tool_hdr_py ####\n\n"
696    }
697    
698    sub write_rtconfig
699    {
700        my($fh) = @_;
701    
702        my $python = find_python();
703        my $perl = find_perl();
704    
705        print $fh "RTPYTHON=$python\n";
706        print $fh "RTPERL=$perl\n";
707        print $fh "RTPYTHONPATH=$OtherConfig->{pythonpath}\n";
708    
709        my %seen;
710        my @perlpath;
711        for (@INC, "$fig_disk/config")
712        {
713            next if $seen{$_};
714            push(@perlpath, $_);
715            $seen{$_}++;
716        }
717        my $perlpath = join(":", @perlpath);
718    
719        print $fh "RTPERL5LIB=$perlpath\n";
720    
721        print $fh "RTPYTHONIMPORTS=FIG_Config\n";
722        print $fh "RTPERLIMPORTS=FIG_Config\n";
723        print $fh "RTSETENV=BLASTMAT=$fig_disk/BLASTMAT\n";
724        print $fh "RTSETENV=FIG_HOME=$fig_disk\n";
725        print $fh "#RTLD_LDPATH=$OtherConfig->{ld_library_path}\n";
726  }  }
727    
728  setup_directories("$fig_disk/bin",  setup_directories("$fig_disk/bin",
# Line 581  Line 737 
737  configure_std_fig_environment();  configure_std_fig_environment();
738  configure_python();  configure_python();
739  configure_environment_specific();  configure_environment_specific();
740    # configure_database();
741    
742  finalize_server_scripts();  finalize_server_scripts();
743    
# Line 619  Line 776 
776  write_tool_hdr_python(\*FH);  write_tool_hdr_python(\*FH);
777  close(FH);  close(FH);
778    
779    open(FH, ">$fig_disk/config/RTConfig") or die "Cannot write $fig_disk/config/RTConfig: $!";
780    write_rtconfig(\*FH);
781    close(FH);
782    
783  unshift(@INC, "$ENV{FIGCONFIG_RELEASE_DIR}");  unshift(@INC, "$ENV{FIGCONFIG_RELEASE_DIR}");
784    
785  require FigCommon::SwitchRelease;  require FigCommon::SwitchRelease;
786    
787    #
788    # We need to tweak the current path and PERL5LIB environment to get bootstrapping to
789    # work correctly.
790    #
791    
792    $ENV{PATH} = "$ENV{FIGCONFIG_ENVDIR}/bin:$ENV{PATH}";
793    
794    $ENV{PERL5LIB} = (map { $_->[1] } grep { $_->[0] eq "PERL5LIB"} @$Env)[0];
795    
796  &FigCommon::SwitchRelease::switch_to_release($fig_disk, $ENV{FIGCONFIG_ENV}, $ENV{FIGCONFIG_RELEASE});  &FigCommon::SwitchRelease::switch_to_release($fig_disk, $ENV{FIGCONFIG_ENV}, $ENV{FIGCONFIG_RELEASE});

Legend:
Removed from v.1.10  
changed lines
  Added in v.1.30

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3