home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / perl-5.003-base.tgz / perl-5.003-base.tar / fsf / perl / makeaperl.SH < prev    next >
Text File  |  1996-01-22  |  4KB  |  130 lines

  1. case $CONFIG in
  2. '')
  3.     if test -f config.sh; then TOP=.;
  4.     elif test -f ../config.sh; then TOP=..;
  5.     elif test -f ../../config.sh; then TOP=../..;
  6.     elif test -f ../../../config.sh; then TOP=../../..;
  7.     elif test -f ../../../../config.sh; then TOP=../../../..;
  8.     else
  9.         echo "Can't find config.sh."; exit 1
  10.     fi
  11.     . $TOP/config.sh
  12.     ;;
  13. esac
  14. : This forces SH files to create target in same directory as SH file.
  15. : This is so that make depend always knows where to find SH derivatives.
  16. case "$0" in
  17. */*) cd `expr X$0 : 'X\(.*\)/'` ;;
  18. esac
  19. echo "Extracting makeaperl (with variable substitutions)"
  20. $spitshell >makeaperl <<!GROK!THIS!
  21. $startperl
  22.     eval 'exec perl -S \$0 "\$@"'
  23.     if 0;
  24. !GROK!THIS!
  25.  
  26. $spitshell >>makeaperl <<'!NO!SUBS!'
  27.  
  28. =head1 NAME
  29.  
  30. makeaperl - create a new perl binary from static extensions
  31.  
  32. =head1 SYNOPSIS
  33.  
  34. C<makeaperl -l library -m makefile -o target -t tempdir [object_files] [static_extensions] [search_directories]>
  35.  
  36. =head1 DESCRIPTION
  37.  
  38. This utility is designed to build new perl binaries from existing
  39. extensions on the fly. Called without any arguments it produces a new
  40. binary with the name C<perl> in the current directory. Intermediate
  41. files are produced in C</tmp>, if that is writeable, else in the
  42. current directory. The most important intermediate file is a Makefile,
  43. that is used internally to call C<make>. The new perl binary will consist
  44.  
  45. The C<-l> switch lets you specify the name of a perl library to be
  46. linked into the new binary. If you do not specify a library, makeaperl
  47. writes targets for any C<libperl*.a> it finds in the search path. The
  48. topmost target will be the one related to C<libperl.a>.
  49.  
  50. With the C<-m> switch you can provide a name for the Makefile that
  51. will be written (default C</tmp/Makefile.$$>). Likewise specifies the
  52. C<-o> switch a name for the perl binary (default C<perl>). The C<-t>
  53. switch lets you determine, in which directory the intermediate files
  54. should be stored.
  55.  
  56. All object files and static extensions following on the command line
  57. will be linked into the target file. If there are any directories
  58. specified on the command line, these directories are searched for
  59. C<*.a> files, and all of the found ones will be linked in, too. If
  60. there is no directory named, then the contents of $INC[0] are
  61. searched.
  62.  
  63. If the command fails, there is currently no other mechanism to adjust
  64. the behaviour of the program than to alter the generated Makefile and
  65. run C<make> by hand.
  66.  
  67. =head1 AUTHORS
  68. Tim Bunce <Tim.Bunce@ig.co.uk>, Andreas Koenig
  69. <koenig@franz.ww.TU-Berlin.DE>; 
  70.  
  71. =head2 STATUS
  72. First version, written 5 Feb 1995, is considered alpha.
  73.  
  74. =cut
  75.  
  76. use ExtUtils::MakeMaker;
  77. use Getopt::Long;
  78. use strict qw(subs refs);
  79.  
  80. $Version = 1.0;
  81. $Verbose = 0;
  82.  
  83. sub usage{
  84.     warn <<END;
  85. $0 version $Version
  86.  
  87. $0: [options] [object_files] [static_extensions ...] [directories to search through]
  88.  -l perllibrary     perl library to link from (the first libperl.a found)
  89.  -m makefilename    name of the makefile to be written (/tmp/Makefile.\$\$)
  90.  -o name            name for perl executable (perl)
  91.  -t directory       directory where intermediate files reside (/tmp)
  92. END
  93.     exit 1;
  94. }
  95.  
  96. if (-w "/tmp") {
  97.     $opt_t = "/tmp";
  98. } else {
  99.     $opt_t = ".";
  100. }
  101. $opt_l = '';
  102. $opt_m = "$opt_t/Makefile.$$";
  103. $opt_o = 'perl';
  104.  
  105. $Getopt::Long::ignorecase=0;
  106.  
  107. GetOptions('t=s', 'l=s', 'm=s', 'o=s') || die &usage;
  108.  
  109. @dirs = grep -d $_, @ARGV;
  110. @fils = grep -f $_, @ARGV;
  111.  
  112. @dirs = $INC[0] unless @dirs;
  113.  
  114. open MAKE, ">$opt_m";
  115. MM->init_main();
  116. MM->init_others();
  117. print MAKE MM->makeaperl('MAKE'    => $opt_m,
  118.              'TARGET'  => $opt_o,
  119.              'TMP'     => $opt_t,
  120.              'LIBPERL' => $opt_l,
  121.              'DIRS'    => [@dirs], 
  122.              'STAT'    => [@fils], 
  123.              'INCL'    => [@dirs]
  124. );
  125. close MAKE;
  126. (system "make -f $opt_m") == 0 or die "$0 failed: Please check file $opt_m and run make -f $opt_m\n";
  127. !NO!SUBS!
  128. chmod 755 makeaperl
  129. $eunicefix makeaperl
  130.