… | |
… | |
266 | } |
266 | } |
267 | |
267 | |
268 | ############################################################################# |
268 | ############################################################################# |
269 | |
269 | |
270 | sub cmd_boot { |
270 | sub cmd_boot { |
271 | $pm{"//boot"} = $_[0]; |
271 | $pm{"&&boot"} = $_[0]; |
272 | } |
272 | } |
273 | |
273 | |
274 | sub cmd_add { |
274 | sub cmd_add { |
275 | $_[0] =~ /^(.*)(?:\s+(\S+))$/ |
275 | $_[0] =~ /^(.*?)(?:\s+(\S+))?$/ |
276 | or die "$_[0]: cannot parse"; |
276 | or die "$_[0]: cannot parse"; |
277 | |
277 | |
278 | my $file = $1; |
278 | my $file = $1; |
279 | my $as = defined $2 ? $2 : "/$1"; |
279 | my $as = defined $2 ? $2 : "&$1"; |
|
|
280 | |
|
|
281 | warn "<$file,$as>\n";#d# |
280 | |
282 | |
281 | $pm{$as} = $file; |
283 | $pm{$as} = $file; |
282 | $pmbin{$as} = 1 if $_[1]; |
284 | $pmbin{$as} = 1 if $_[1]; |
283 | } |
285 | } |
284 | |
286 | |
… | |
… | |
729 | #include <XSUB.h> |
731 | #include <XSUB.h> |
730 | |
732 | |
731 | /* public API */ |
733 | /* public API */ |
732 | EXTERN_C PerlInterpreter *staticperl; |
734 | EXTERN_C PerlInterpreter *staticperl; |
733 | EXTERN_C void staticperl_xs_init (pTHX); |
735 | EXTERN_C void staticperl_xs_init (pTHX); |
734 | EXTERN_C void staticperl_init (void); |
736 | EXTERN_C void staticperl_init (XSINIT_t xs_init); /* argument can be 0 */ |
735 | EXTERN_C void staticperl_cleanup (void); |
737 | EXTERN_C void staticperl_cleanup (void); |
736 | |
738 | |
737 | EOF |
739 | EOF |
738 | } |
740 | } |
739 | |
741 | |
… | |
… | |
808 | $fh |
810 | $fh |
809 | }; |
811 | }; |
810 | } |
812 | } |
811 | '; |
813 | '; |
812 | |
814 | |
813 | $bootstrap .= "require '//boot';" |
815 | $bootstrap .= "require '&&boot';" |
814 | if exists $pm{"//boot"}; |
816 | if exists $pm{"&&boot"}; |
815 | |
817 | |
816 | $bootstrap =~ s/\s+/ /g; |
818 | $bootstrap =~ s/\s+/ /g; |
817 | $bootstrap =~ s/(\W) /$1/g; |
819 | $bootstrap =~ s/(\W) /$1/g; |
818 | $bootstrap =~ s/ (\W)/$1/g; |
820 | $bootstrap =~ s/ (\W)/$1/g; |
819 | |
821 | |
… | |
… | |
939 | print $fh " newXS (\"$pname\::$bootstrap\", boot_$cname, file);\n"; |
941 | print $fh " newXS (\"$pname\::$bootstrap\", boot_$cname, file);\n"; |
940 | } |
942 | } |
941 | |
943 | |
942 | print $fh <<EOF; |
944 | print $fh <<EOF; |
943 | Perl_av_create_and_unshift_one (&PL_preambleav, newSVpv (bootstrap, sizeof (bootstrap) - 1)); |
945 | Perl_av_create_and_unshift_one (&PL_preambleav, newSVpv (bootstrap, sizeof (bootstrap) - 1)); |
|
|
946 | |
|
|
947 | if (PL_oldname) |
|
|
948 | ((XSINIT_t)PL_oldname)(aTHX); |
944 | } |
949 | } |
945 | EOF |
950 | EOF |
946 | |
951 | |
947 | ############################################################################# |
952 | ############################################################################# |
948 | # optional perl_init/perl_destroy |
953 | # optional perl_init/perl_destroy |
… | |
… | |
1011 | EOF |
1016 | EOF |
1012 | } else { |
1017 | } else { |
1013 | print $fh <<EOF; |
1018 | print $fh <<EOF; |
1014 | |
1019 | |
1015 | EXTERN_C void |
1020 | EXTERN_C void |
1016 | staticperl_init (void) |
1021 | staticperl_init (XSINIT_t xs_init) |
1017 | { |
1022 | { |
1018 | static char *args[] = { |
1023 | static char *args[] = { |
1019 | "staticperl", |
1024 | "staticperl", |
1020 | "-e", |
1025 | "-e", |
1021 | "0" |
1026 | "0" |
… | |
… | |
1028 | PERL_SYS_INIT3 (&argc, &argv, &environ); |
1033 | PERL_SYS_INIT3 (&argc, &argv, &environ); |
1029 | staticperl = perl_alloc (); |
1034 | staticperl = perl_alloc (); |
1030 | perl_construct (staticperl); |
1035 | perl_construct (staticperl); |
1031 | PL_origalen = 1; |
1036 | PL_origalen = 1; |
1032 | PL_exit_flags |= PERL_EXIT_DESTRUCT_END; |
1037 | PL_exit_flags |= PERL_EXIT_DESTRUCT_END; |
|
|
1038 | PL_oldname = (char *)xs_init; |
1033 | perl_parse (staticperl, staticperl_xs_init, argc, argv, environ); |
1039 | perl_parse (staticperl, staticperl_xs_init, argc, argv, environ); |
1034 | |
1040 | |
1035 | perl_run (staticperl); |
1041 | perl_run (staticperl); |
1036 | } |
1042 | } |
1037 | |
1043 | |