ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/App-Staticperl/mkbundle
(Generate patch)

Comparing cvsroot/App-Staticperl/mkbundle (file contents):
Revision 1.16 by root, Thu Jan 20 21:32:47 2011 UTC vs.
Revision 1.23 by root, Thu Feb 10 12:02:09 2011 UTC

83 83
84 while (<$R_TRACER>) { 84 while (<$R_TRACER>) {
85 if (/use (.*)$/) { 85 if (/use (.*)$/) {
86 my $mod = $1; 86 my $mod = $1;
87 my $pkg = ++$pkg; 87 my $pkg = ++$pkg;
88 my $eval = $mod =~ /[^A-Za-z0-9_:]/
89 ? "require $mod"
88 eval "{ package $pkg; use $mod; }"; 90 : "{ package $pkg; use $mod; }";
91 eval $eval;
89 warn "ERROR: $@ (while loading '$mod')\n" 92 warn "ERROR: $@ (while loading '$mod')\n"
90 if $@; 93 if $@;
91 } elsif (/eval (.*)$/) { 94 } elsif (/eval (.*)$/) {
92 my $eval = $1; 95 my $eval = $1;
93 eval $eval; 96 eval $eval;
263} 266}
264 267
265############################################################################# 268#############################################################################
266 269
267sub cmd_boot { 270sub cmd_boot {
268 $pm{"//boot"} = $_[0]; 271 $pm{"&&boot"} = $_[0];
269} 272}
270 273
271sub cmd_add { 274sub cmd_add {
272 $_[0] =~ /^(.*)(?:\s+(\S+))$/ 275 $_[0] =~ /^(.*?)(?:\s+(\S+))?$/
273 or die "$_[0]: cannot parse"; 276 or die "$_[0]: cannot parse";
274 277
275 my $file = $1; 278 my $file = $1;
276 my $as = defined $2 ? $2 : "/$1"; 279 my $as = defined $2 ? $2 : "&$1";
277 280
278 $pm{$as} = $file; 281 $pm{$as} = $file;
279 $pmbin{$as} = 1 if $_[1]; 282 $pmbin{$as} = 1 if $_[1];
280} 283}
281 284
726#include <XSUB.h> 729#include <XSUB.h>
727 730
728/* public API */ 731/* public API */
729EXTERN_C PerlInterpreter *staticperl; 732EXTERN_C PerlInterpreter *staticperl;
730EXTERN_C void staticperl_xs_init (pTHX); 733EXTERN_C void staticperl_xs_init (pTHX);
731EXTERN_C void staticperl_init (void); 734EXTERN_C void staticperl_init (XSINIT_t xs_init); /* argument can be 0 */
732EXTERN_C void staticperl_cleanup (void); 735EXTERN_C void staticperl_cleanup (void);
733 736
734EOF 737EOF
735} 738}
736 739
805 $fh 808 $fh
806 }; 809 };
807} 810}
808'; 811';
809 812
810$bootstrap .= "require '//boot';" 813$bootstrap .= "require '&&boot';"
811 if exists $pm{"//boot"}; 814 if exists $pm{"&&boot"};
812 815
813$bootstrap =~ s/\s+/ /g; 816$bootstrap =~ s/\s+/ /g;
814$bootstrap =~ s/(\W) /$1/g; 817$bootstrap =~ s/(\W) /$1/g;
815$bootstrap =~ s/ (\W)/$1/g; 818$bootstrap =~ s/ (\W)/$1/g;
816 819
936 print $fh " newXS (\"$pname\::$bootstrap\", boot_$cname, file);\n"; 939 print $fh " newXS (\"$pname\::$bootstrap\", boot_$cname, file);\n";
937} 940}
938 941
939print $fh <<EOF; 942print $fh <<EOF;
940 Perl_av_create_and_unshift_one (&PL_preambleav, newSVpv (bootstrap, sizeof (bootstrap) - 1)); 943 Perl_av_create_and_unshift_one (&PL_preambleav, newSVpv (bootstrap, sizeof (bootstrap) - 1));
944
945 if (PL_oldname)
946 ((XSINIT_t)PL_oldname)(aTHX);
941} 947}
942EOF 948EOF
943 949
944############################################################################# 950#############################################################################
945# optional perl_init/perl_destroy 951# optional perl_init/perl_destroy
946 952
947if ($APP) { 953if ($APP) {
954 print $fh <<EOF;
955
956int
957main (int argc, char *argv [])
958{
959 extern char **environ;
960 int i, exitstatus;
961 char **args = malloc ((argc + 3) * sizeof (const char *));
962
963 args [0] = argv [0];
964 args [1] = "-e";
965 args [2] = "0";
966 args [3] = "--";
967
968 for (i = 1; i < argc; ++i)
969 args [i + 3] = argv [i];
970
971 PERL_SYS_INIT3 (&argc, &argv, &environ);
972 staticperl = perl_alloc ();
973 perl_construct (staticperl);
974
975 PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
976
977 exitstatus = perl_parse (staticperl, staticperl_xs_init, argc + 3, args, environ);
978 free (args);
979 if (!exitstatus)
980 perl_run (staticperl);
981
982 exitstatus = perl_destruct (staticperl);
983 perl_free (staticperl);
984 PERL_SYS_TERM ();
985
986 return exitstatus;
987}
988EOF
989} elsif ($PERL) {
948 print $fh <<EOF; 990 print $fh <<EOF;
949 991
950int 992int
951main (int argc, char *argv []) 993main (int argc, char *argv [])
952{ 994{
953 extern char **environ; 995 extern char **environ;
954 int exitstatus; 996 int exitstatus;
955 997
998 PERL_SYS_INIT3 (&argc, &argv, &environ);
999 staticperl = perl_alloc ();
1000 perl_construct (staticperl);
1001
1002 PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
1003
1004 exitstatus = perl_parse (staticperl, staticperl_xs_init, argc, argv, environ);
1005 if (!exitstatus)
1006 perl_run (staticperl);
1007
1008 exitstatus = perl_destruct (staticperl);
1009 perl_free (staticperl);
1010 PERL_SYS_TERM ();
1011
1012 return exitstatus;
1013}
1014EOF
1015} else {
1016 print $fh <<EOF;
1017
1018EXTERN_C void
1019staticperl_init (XSINIT_t xs_init)
1020{
956 static char *args[] = { 1021 static char *args[] = {
957 "staticperl", 1022 "staticperl",
958 "-e", 1023 "-e",
959 "0" 1024 "0"
960 }; 1025 };
961 1026
962 PERL_SYS_INIT3 (&argc, &argv, &environ);
963 staticperl = perl_alloc ();
964 perl_construct (staticperl);
965
966 PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
967
968 exitstatus = perl_parse (staticperl, staticperl_xs_init, sizeof (args) / sizeof (*args), args, environ);
969 if (!exitstatus)
970 perl_run (staticperl);
971
972 exitstatus = perl_destruct (staticperl);
973 perl_free (staticperl);
974 PERL_SYS_TERM ();
975
976 return exitstatus;
977}
978EOF
979} elsif ($PERL) {
980 print $fh <<EOF;
981
982int
983main (int argc, char *argv [])
984{
985 extern char **environ;
986 int exitstatus;
987
988 PERL_SYS_INIT3 (&argc, &argv, &environ);
989 staticperl = perl_alloc ();
990 perl_construct (staticperl);
991
992 PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
993
994 exitstatus = perl_parse (staticperl, staticperl_xs_init, argc, argv, environ);
995 if (!exitstatus)
996 perl_run (staticperl);
997
998 exitstatus = perl_destruct (staticperl);
999 perl_free (staticperl);
1000 PERL_SYS_TERM ();
1001
1002 return exitstatus;
1003}
1004EOF
1005} else {
1006 print $fh <<EOF;
1007
1008EXTERN_C void
1009staticperl_init (void)
1010{
1011 extern char **environ; 1027 extern char **environ;
1012 int argc = sizeof (args) / sizeof (args [0]); 1028 int argc = sizeof (args) / sizeof (args [0]);
1013 char **argv = args; 1029 char **argv = args;
1014
1015 static char *args[] = {
1016 "staticperl",
1017 "-e",
1018 "0"
1019 };
1020 1030
1021 PERL_SYS_INIT3 (&argc, &argv, &environ); 1031 PERL_SYS_INIT3 (&argc, &argv, &environ);
1022 staticperl = perl_alloc (); 1032 staticperl = perl_alloc ();
1023 perl_construct (staticperl); 1033 perl_construct (staticperl);
1024 PL_origalen = 1; 1034 PL_origalen = 1;
1025 PL_exit_flags |= PERL_EXIT_DESTRUCT_END; 1035 PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
1036 PL_oldname = (char *)xs_init;
1026 perl_parse (staticperl, staticperl_xs_init, argc, argv, environ); 1037 perl_parse (staticperl, staticperl_xs_init, argc, argv, environ);
1027 1038
1028 perl_run (staticperl); 1039 perl_run (staticperl);
1029} 1040}
1030 1041

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines