Commit | Line | Data |
---|---|---|
76e3520e GS |
1 | #include "EXTERN.h" |
2 | #include "perl.h" | |
3 | ||
80252599 GS |
4 | #ifdef PERL_OBJECT |
5 | ||
565764a8 | 6 | #define NO_XSLOCKS |
76e3520e | 7 | #include "XSUB.H" |
0f4eea8f | 8 | #include "win32iop.h" |
c69f6586 GS |
9 | |
10 | #include <fcntl.h> | |
0f4eea8f | 11 | #include "perlhost.h" |
c69f6586 | 12 | |
c69f6586 | 13 | |
0f4eea8f DL |
14 | char *staticlinkmodules[] = { |
15 | "DynaLoader", | |
16 | NULL, | |
c69f6586 | 17 | }; |
76e3520e | 18 | |
0f4eea8f | 19 | EXTERN_C void boot_DynaLoader _((CV* cv _CPERLarg)); |
76e3520e | 20 | |
0f4eea8f DL |
21 | static void |
22 | xs_init(CPERLarg) | |
76e3520e | 23 | { |
0f4eea8f DL |
24 | char *file = __FILE__; |
25 | dXSUB_SYS; | |
26 | newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file); | |
27 | } | |
76e3520e | 28 | |
0f4eea8f | 29 | CPerlObj *pPerl; |
76e3520e GS |
30 | |
31 | #undef PERL_SYS_INIT | |
32 | #define PERL_SYS_INIT(a, c) | |
33 | ||
34 | int | |
35 | main(int argc, char **argv, char **env) | |
36 | { | |
c69f6586 GS |
37 | CPerlHost host; |
38 | int exitstatus = 1; | |
80252599 GS |
39 | #ifndef __BORLANDC__ |
40 | /* XXX this _may_ be a problem on some compilers (e.g. Borland) that | |
41 | * want to free() argv after main() returns. As luck would have it, | |
42 | * Borland's CRT does the right thing to argv[0] already. */ | |
43 | char szModuleName[MAX_PATH]; | |
b5ce6607 | 44 | char *ptr; |
80252599 GS |
45 | |
46 | GetModuleFileName(NULL, szModuleName, sizeof(szModuleName)); | |
8ac9c18d | 47 | (void)win32_longpath(szModuleName); |
80252599 GS |
48 | argv[0] = szModuleName; |
49 | #endif | |
76e3520e | 50 | |
80252599 | 51 | if (!host.PerlCreate()) |
c69f6586 | 52 | exit(exitstatus); |
76e3520e | 53 | |
0f4eea8f | 54 | exitstatus = host.PerlParse(xs_init, argc, argv, NULL); |
76e3520e | 55 | |
c69f6586 | 56 | if (!exitstatus) |
c69f6586 | 57 | exitstatus = host.PerlRun(); |
76e3520e | 58 | |
c69f6586 | 59 | host.PerlDestroy(); |
76e3520e GS |
60 | |
61 | return exitstatus; | |
62 | } | |
63 | ||
76e3520e GS |
64 | #else /* PERL_OBJECT */ |
65 | ||
a835ef8a | 66 | #ifdef __GNUC__ |
5b0d9cbe NIS |
67 | /* |
68 | * GNU C does not do __declspec() | |
69 | */ | |
a835ef8a | 70 | #define __declspec(foo) |
5b0d9cbe NIS |
71 | |
72 | /* Mingw32 defaults to globing command line | |
73 | * This is inconsistent with other Win32 ports and | |
74 | * seems to cause trouble with passing -DXSVERSION=\"1.6\" | |
75 | * So we turn it off like this: | |
76 | */ | |
77 | int _CRT_glob = 0; | |
78 | ||
a835ef8a | 79 | #endif |
0a753a76 | 80 | |
5b0d9cbe | 81 | |
390b85e7 | 82 | __declspec(dllimport) int RunPerl(int argc, char **argv, char **env, void *ios); |
0a753a76 | 83 | |
137443ea | 84 | int |
0a753a76 | 85 | main(int argc, char **argv, char **env) |
86 | { | |
80252599 GS |
87 | #ifndef __BORLANDC__ |
88 | /* XXX this _may_ be a problem on some compilers (e.g. Borland) that | |
89 | * want to free() argv after main() returns. As luck would have it, | |
90 | * Borland's CRT does the right thing to argv[0] already. */ | |
91 | char szModuleName[MAX_PATH]; | |
b5ce6607 GS |
92 | char *ptr; |
93 | ||
80252599 | 94 | GetModuleFileName(NULL, szModuleName, sizeof(szModuleName)); |
8ac9c18d | 95 | (void)win32_longpath(szModuleName); |
80252599 GS |
96 | argv[0] = szModuleName; |
97 | #endif | |
390b85e7 | 98 | return RunPerl(argc, argv, env, (void*)0); |
0a753a76 | 99 | } |
76e3520e GS |
100 | |
101 | #endif /* PERL_OBJECT */ |