# define HAS_UTIME
# define HAS_KILL
# define HAS_WAIT
+# define HAS_CHOWN
/*
* This provides a layer of functions and macros to ensure extensions will
* get to use the same RTL functions as the core.
my $e = $Config{'exe_ext'};
my $o = $Config{'obj_ext'};
my $exeout_flag = '-o ';
+my @extras = ();
if ($^O eq 'MSWin32') {
if ($Config{'cc'} =~ /^cl/i) {
$exeout_flag = '-Fe';
elsif ($Config{'cc'} =~ /^bcc/i) {
$exeout_flag = '-e';
}
+ # XXX this probably applies to everyone else
+ @extras = (
+ OBJECT => "B$o byterun$o",
+ depend => {
+ "B$o" => "B.c ../../bytecode.h ../../byterun.h",
+ "byterun$o" => "../../byterun.c ../../bytecode.h ../../byterun.h",
+ });
}
WriteMakefile(
NAME => "B",
VERSION => "a5",
+ @extras,
clean => {
FILES => "perl byteperl$e *$o B.c *~"
}
void
sv_usepvn_mg(register SV *sv, register char *ptr, register STRLEN len)
{
- sv_usepvn_mg(sv,ptr,len);
+ sv_usepvn(sv,ptr,len);
SvSETMAGIC(sv);
}
void
sv_catpv_mg(register SV *sv, register char *ptr)
{
- sv_catpv_mg(sv,ptr);
+ sv_catpv(sv,ptr);
SvSETMAGIC(sv);
}
.\include\sys\socket.h \
.\win32.h
-DYNAMIC_EXT=Socket IO Fcntl Opcode SDBM_File attrs Thread
+DYNAMIC_EXT=Socket IO Fcntl Opcode SDBM_File attrs Thread B
STATIC_EXT=DynaLoader
DYNALOADER=$(EXTDIR)\DynaLoader\DynaLoader
IO=$(EXTDIR)\IO\IO
ATTRS=$(EXTDIR)\attrs\attrs
THREAD=$(EXTDIR)\Thread\Thread
+B=$(EXTDIR)\B\B
SOCKET_DLL=..\lib\auto\Socket\Socket.dll
FCNTL_DLL=..\lib\auto\Fcntl\Fcntl.dll
IO_DLL=..\lib\auto\IO\IO.dll
ATTRS_DLL=..\lib\auto\attrs\attrs.dll
THREAD_DLL=..\lib\auto\Thread\Thread.dll
+B_DLL=..\lib\auto\B\B.dll
STATICLINKMODULES=DynaLoader
DYNALOADMODULES= \
$(SDBM_FILE_DLL)\
$(IO_DLL) \
$(ATTRS_DLL) \
- $(THREAD_DLL)
+ $(THREAD_DLL) \
+ $(B_DLL)
POD2HTML=$(PODDIR)\pod2html
POD2MAN=$(PODDIR)\pod2man
$(EXTDIR)\DynaLoader\dl_win32.xs: dl_win32.xs
copy dl_win32.xs $(EXTDIR)\DynaLoader\dl_win32.xs
-$(ATTRS_DLL): $(PERLEXE) $(ATTRS).xs
+$(B_DLL): $(PERLEXE) $(B).xs
cd $(EXTDIR)\$(*B)
..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
$(MAKE)
$(MAKE)
cd ..\..\win32
+$(ATTRS_DLL): $(PERLEXE) $(ATTRS).xs
+ cd $(EXTDIR)\$(*B)
+ ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
+ $(MAKE)
+ cd ..\..\win32
$(IO_DLL): $(PERLEXE) $(CONFIGPM) $(IO).xs
cd $(EXTDIR)\$(*B)
$(PERLIMPLIB) ..\miniperl.lib $(MINIMOD)
-del /f *.def *.map
-del /f $(SOCKET_DLL) $(IO_DLL) $(SDBM_FILE_DLL) $(FCNTL_DLL) \
- $(OPCODE_DLL) $(ATTRS_DLL) $(THREAD_DLL)
+ $(OPCODE_DLL) $(ATTRS_DLL) $(THREAD_DLL) $(B_DLL)
-del /f $(SOCKET).c $(IO).c $(SDBM_FILE).c $(FCNTL).c $(OPCODE).c \
- $(DYNALOADER).c $(ATTRS).c $(THREAD).c
+ $(DYNALOADER).c $(ATTRS).c $(THREAD).c $(B).c
-del /f $(PODDIR)\*.html
-del /f $(PODDIR)\*.bat
-del /f ..\config.sh ..\splittree.pl perlmain.c dlutils.c \
.\include\sys\socket.h \
.\win32.h
-DYNAMIC_EXT=Socket IO Fcntl Opcode SDBM_File attrs Thread
+DYNAMIC_EXT=Socket IO Fcntl Opcode SDBM_File attrs Thread B
STATIC_EXT=DynaLoader
DYNALOADER=$(EXTDIR)\DynaLoader\DynaLoader
IO=$(EXTDIR)\IO\IO
ATTRS=$(EXTDIR)\attrs\attrs
THREAD=$(EXTDIR)\Thread\Thread
+B=$(EXTDIR)\B\B
SOCKET_DLL=..\lib\auto\Socket\Socket.dll
FCNTL_DLL=..\lib\auto\Fcntl\Fcntl.dll
IO_DLL=..\lib\auto\IO\IO.dll
ATTRS_DLL=..\lib\auto\attrs\attrs.dll
THREAD_DLL=..\lib\auto\Thread\Thread.dll
+B_DLL=..\lib\auto\B\B.dll
STATICLINKMODULES=DynaLoader
DYNALOADMODULES= \
$(SDBM_FILE_DLL)\
$(IO_DLL) \
$(ATTRS_DLL) \
- $(THREAD_DLL)
+ $(THREAD_DLL) \
+ $(B_DLL)
POD2HTML=$(PODDIR)\pod2html
POD2MAN=$(PODDIR)\pod2man
$(EXTDIR)\DynaLoader\dl_win32.xs: dl_win32.xs
copy dl_win32.xs $(EXTDIR)\DynaLoader\dl_win32.xs
+$(B_DLL): $(PERLEXE) $(B).xs
+ cd $(EXTDIR)\$(*B) && \
+ ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
+ cd $(EXTDIR)\$(*B) && $(MAKE)
+
$(THREAD_DLL): $(PERLEXE) $(THREAD).xs
cd $(EXTDIR)\$(*B) && \
..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
$(PERLIMPLIB) ..\miniperl.lib $(MINIMOD)
-del /f *.def *.map
-del /f $(SOCKET_DLL) $(IO_DLL) $(SDBM_FILE_DLL) $(FCNTL_DLL) \
- $(OPCODE_DLL) $(ATTRS_DLL) $(THREAD_DLL)
+ $(OPCODE_DLL) $(ATTRS_DLL) $(THREAD_DLL) $(B_DLL)
-del /f $(SOCKET).c $(IO).c $(SDBM_FILE).c $(FCNTL).c $(OPCODE).c \
- $(DYNALOADER).c $(ATTRS).c $(THREAD).c
+ $(DYNALOADER).c $(ATTRS).c $(THREAD).c $(B).c
-del /f $(PODDIR)\*.html
-del /f $(PODDIR)\*.bat
-del /f ..\config.sh ..\splittree.pl perlmain.c dlutils.c config.h.new
return (char*)NULL;
}
-/*
- * pretended kill
- */
+int
+chown(const char *path, uid_t owner, gid_t group)
+{
+ /* XXX noop */
+}
+
int
kill(int pid, int sig)
{
extern int kill(int pid, int sig);
extern void *sbrk(int need);
extern char * getlogin(void);
+extern int chown(const char *p, uid_t o, gid_t g);
#undef Stat
#define Stat win32_stat
#define JOIN(t, avp) \
STMT_START { \
if ((WaitForSingleObject((t)->self,INFINITE) == WAIT_FAILED) \
- || (GetExitCodeThread((t)->self,(LPDWORD)(avp)) == 0)) \
+ || (GetExitCodeThread((t)->self,(LPDWORD)(avp)) == 0) \
+ || (CloseHandle((t)->self) == 0)) \
croak("panic: JOIN"); \
*avp = (AV *)((t)->i.retv); \
} STMT_END
#define JOIN(t, avp) \
STMT_START { \
if ((WaitForSingleObject((t)->self,INFINITE) == WAIT_FAILED) \
- || (GetExitCodeThread((t)->self,(LPDWORD)(avp)) == 0)) \
+ || (GetExitCodeThread((t)->self,(LPDWORD)(avp)) == 0) \
+ || (CloseHandle((t)->self) == 0)) \
croak("panic: JOIN"); \
} STMT_END
#endif /* !USE_RTL_THREAD_API || _MSC_VER */