Work in progress - determine win32 extensions to build via script.
Nick Ing-Simmons [Thu, 29 Mar 2001 14:59:11 +0000 (14:59 +0000)]
p4raw-id: //depot/perlio@9442

MANIFEST
win32/buildext.pl [new file with mode: 0644]
win32/makefile.mk

index 3bbab1a..6688a1a 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -1863,6 +1863,7 @@ win32/bin/perlglob.pl     Win32 globbing
 win32/bin/pl2bat.pl    wrap perl scripts into batch files
 win32/bin/runperl.pl   run perl script via batch file namesake
 win32/bin/search.pl    Win32 port
+win32/buildext.pl      Build extensions once miniperl is built
 win32/config.bc                Win32 base line config.sh (Borland C++ build)
 win32/config.gc                Win32 base line config.sh (mingw32/gcc build)
 win32/config.vc                Win32 base line config.sh (Visual C++ build)
diff --git a/win32/buildext.pl b/win32/buildext.pl
new file mode 100644 (file)
index 0000000..6e64b91
--- /dev/null
@@ -0,0 +1,63 @@
+use File::Find;
+use File::Basename;
+use Cwd;
+my $here = getcwd();
+my $perl = $^X;
+$here =~ s,/,\\,g;
+if ($perl =~ m#^\.\.#)
+ {
+  $perl = "$here\\$perl";
+ }
+my $make = shift;
+my $dep  = shift;
+my $dmod = -M $dep;
+my $dir  = shift;
+chdir($dir) || die "Cannot cd to $dir\n";
+(my $ext = getcwd()) =~ s,/,\\,g;
+my $no = join('|',qw(DynaLoader GDBM_File ODBM_File NDBM_File DB_File Syslog Sysv));
+$no = qr/^(?:$no)$/i;
+my %ext;
+find(\&find_xs,'.');
+
+foreach my $dir (sort keys %ext)
+ {
+  if (chdir("$ext\\$dir"))
+   {
+    my $mmod = -M 'Makefile';
+    if (!(-f 'Makefile') || $mmod > $dmod)
+     {
+      print "\nMakefile.PL in $dir ($mmod > $dmod)\n";
+      my $code = system($perl,"-I$here\\..\lib",'Makefile.PL','INSTALLDIRS=perl');
+      warn "$code from $dir's Makefile.PL" if $code;
+      $mmod = -M 'Makefile';
+      if ($mmod > $dmod)
+       {
+        warn "Makefile $mmod > $dmod ($dep)\n";
+       }
+     }  
+    print "\nMaking $dir\n";
+    system($make);
+    chdir($here) || die "Cannot cd to $here:$!";
+   }
+  else
+   {
+    warn "Cannot cd to $ext\\$dir:$!";
+   }
+ }
+
+sub find_xs
+{
+ if (/^(.*)\.pm$/i)
+  {
+   my $name = $1;
+   return if $name =~ $no; 
+   my $dir = $File::Find::dir; 
+   $dir =~ s,./,,;
+   return if exists $ext{$dir};
+   return unless -f "$ext/$dir/Makefile.PL";
+   if ($dir =~ /$name$/i)
+    {
+     $ext{$dir} = $name; 
+    }
+  }
+}
\ No newline at end of file
index 03166a8..46ab123 100644 (file)
@@ -748,7 +748,6 @@ WIN32_OBJ   = $(WIN32_SRC:db:+$(o))
 MINICORE_OBJ   = $(MINIDIR)\{$(MICROCORE_OBJ:f) miniperlmain$(o) perlio$(o)}
 MINIWIN32_OBJ  = $(MINIDIR)\{$(WIN32_OBJ:f)}
 MINI_OBJ       = $(MINICORE_OBJ) $(MINIWIN32_OBJ)
-DLL_OBJ                = $(DLL_SRC:db:+$(o))
 X2P_OBJ                = $(X2P_SRC:db:+$(o))
 
 PERLDLL_OBJ    = $(CORE_OBJ)
@@ -767,107 +766,6 @@ DYNAMIC_EXT       = Socket IO Fcntl Opcode SDBM_File POSIX attrs Thread B re \
 STATIC_EXT     = DynaLoader
 NONXS_EXT      = Errno
 
-DYNALOADER     = $(EXTDIR)\DynaLoader\DynaLoader
-SOCKET         = $(EXTDIR)\Socket\Socket
-FCNTL          = $(EXTDIR)\Fcntl\Fcntl
-OPCODE         = $(EXTDIR)\Opcode\Opcode
-SDBM_FILE      = $(EXTDIR)\SDBM_File\SDBM_File
-IO             = $(EXTDIR)\IO\IO
-POSIX          = $(EXTDIR)\POSIX\POSIX
-ATTRS          = $(EXTDIR)\attrs\attrs
-THREAD         = $(EXTDIR)\Thread\Thread
-B              = $(EXTDIR)\B\B
-RE             = $(EXTDIR)\re\re
-DUMPER         = $(EXTDIR)\Data\Dumper\Dumper
-SCALAR         = $(EXTDIR)\PerlIO\Scalar\Scalar
-ERRNO          = $(EXTDIR)\Errno\Errno
-PEEK           = $(EXTDIR)\Devel\Peek\Peek
-BYTELOADER     = $(EXTDIR)\ByteLoader\ByteLoader
-DPROF          = $(EXTDIR)\Devel\DProf\DProf
-GLOB           = $(EXTDIR)\File\Glob\Glob
-HOSTNAME       = $(EXTDIR)\Sys\Hostname\Hostname
-STORABLE       = $(EXTDIR)\Storable\Storable
-FILTER         = $(EXTDIR)\Filter\Util\Call\Call
-ENCODE          = $(EXTDIR)\Encode\Encode
-MD5            = $(EXTDIR)\Digest\MD5\MD5
-MIMEBASE64     = $(EXTDIR)\MIME\Base64\Base64
-
-SOCKET_DLL     = $(AUTODIR)\Socket\Socket.dll
-FCNTL_DLL      = $(AUTODIR)\Fcntl\Fcntl.dll
-OPCODE_DLL     = $(AUTODIR)\Opcode\Opcode.dll
-SDBM_FILE_DLL  = $(AUTODIR)\SDBM_File\SDBM_File.dll
-IO_DLL         = $(AUTODIR)\IO\IO.dll
-POSIX_DLL      = $(AUTODIR)\POSIX\POSIX.dll
-ATTRS_DLL      = $(AUTODIR)\attrs\attrs.dll
-THREAD_DLL     = $(AUTODIR)\Thread\Thread.dll
-B_DLL          = $(AUTODIR)\B\B.dll
-DUMPER_DLL     = $(AUTODIR)\Data\Dumper\Dumper.dll
-SCALAR_DLL     = $(AUTODIR)\PerlIO\Scalar\Scalar.dll
-PEEK_DLL       = $(AUTODIR)\Devel\Peek\Peek.dll
-RE_DLL         = $(AUTODIR)\re\re.dll
-BYTELOADER_DLL = $(AUTODIR)\ByteLoader\ByteLoader.dll
-DPROF_DLL      = $(AUTODIR)\Devel\DProf\DProf.dll
-GLOB_DLL       = $(AUTODIR)\File\Glob\Glob.dll
-HOSTNAME_DLL   = $(AUTODIR)\Sys\Hostname\Hostname.dll
-STORABLE_DLL   = $(AUTODIR)\Storable\Storable.dll
-FILTER_DLL     = $(AUTODIR)\Filter\Util\Call\Call.dll
-ENCODE_DLL     = $(AUTODIR)\Encode\Encode.dll
-MD5_DLL                = $(AUTODIR)\Digest\MD5\MD5.dll
-MIMEBASE64_DLL = $(AUTODIR)\MIME\Base64\Base64.dll
-
-ERRNO_PM       = $(LIBDIR)\Errno.pm
-
-EXTENSION_C    =               \
-               $(SOCKET).c     \
-               $(FCNTL).c      \
-               $(OPCODE).c     \
-               $(SDBM_FILE).c  \
-               $(IO).c         \
-               $(POSIX).c      \
-               $(ATTRS).c      \
-               $(THREAD).c     \
-               $(RE).c         \
-               $(DUMPER).c     \
-               $(SCALAR).c     \
-               $(PEEK).c       \
-               $(B).c          \
-               $(BYTELOADER).c \
-               $(DPROF).c      \
-               $(GLOB).c       \
-               $(HOSTNAME).c   \
-               $(STORABLE).c   \
-               $(FILTER).c     \
-               $(ENCODE).c     \
-               $(MD5).c        \
-               $(MIMEBASE64).c
-
-EXTENSION_DLL  =               \
-               $(SOCKET_DLL)   \
-               $(FCNTL_DLL)    \
-               $(OPCODE_DLL)   \
-               $(SDBM_FILE_DLL)\
-               $(IO_DLL)       \
-               $(POSIX_DLL)    \
-               $(ATTRS_DLL)    \
-               $(DUMPER_DLL)   \
-               $(SCALAR_DLL)   \
-               $(PEEK_DLL)     \
-               $(B_DLL)        \
-               $(RE_DLL)       \
-               $(THREAD_DLL)   \
-               $(BYTELOADER_DLL)       \
-               $(DPROF_DLL)    \
-               $(GLOB_DLL)     \
-               $(HOSTNAME_DLL) \
-               $(STORABLE_DLL) \
-               $(FILTER_DLL)   \
-               $(ENCODE_DLL)   \
-               $(MD5_DLL)      \
-               $(MIMEBASE64_DLL)
-
-EXTENSION_PM   =               \
-               $(ERRNO_PM)
-
 POD2HTML       = $(PODDIR)\pod2html
 POD2MAN                = $(PODDIR)\pod2man
 POD2LATEX      = $(PODDIR)\pod2latex
@@ -927,7 +825,7 @@ RIGHTMAKE   =
 
 all : .\config.h $(GLOBEXE) $(MINIPERL) $(MK2)         \
        $(RIGHTMAKE) $(MINIMOD) $(CONFIGPM) $(PERLEXE)  \
-       $(X2P) $(EXTENSION_DLL) $(EXTENSION_PM)
+       $(X2P) Extensions 
 
 $(DYNALOADER)$(o) : $(DYNALOADER).c $(CORE_H) $(EXTDIR)\DynaLoader\dlutils.c
 
@@ -1066,7 +964,6 @@ $(MINI_OBJ)        : $(CORE_NOCFG_H)
 
 $(WIN32_OBJ)   : $(CORE_H)
 $(CORE_OBJ)    : $(CORE_H)
-$(DLL_OBJ)     : $(CORE_H)
 $(X2P_OBJ)     : $(CORE_H)
 
 perldll.def : $(MINIPERL) $(CONFIGPM) ..\global.sym ..\pp.sym ..\makedef.pl
@@ -1167,120 +1064,12 @@ $(DYNALOADER).c: $(MINIPERL) $(EXTDIR)\DynaLoader\dl_win32.xs $(CONFIGPM)
 $(EXTDIR)\DynaLoader\dl_win32.xs: dl_win32.xs
        copy dl_win32.xs $(EXTDIR)\DynaLoader\dl_win32.xs
 
-$(DUMPER_DLL): $(PERLDEP) $(DUMPER).xs
-       cd $(EXTDIR)\Data\$(*B) && \
-       ..\..\..\miniperl -I..\..\..\lib Makefile.PL INSTALLDIRS=perl
-       cd $(EXTDIR)\Data\$(*B) && $(MAKE)
-
-$(SCALAR_DLL): $(PERLDEP) $(SCALAR).xs
-       cd $(EXTDIR)\PerlIO\$(*B) && \
-       ..\..\..\miniperl -I..\..\..\lib Makefile.PL INSTALLDIRS=perl
-       cd $(EXTDIR)\PerlIO\$(*B) && $(MAKE)
-
-$(DPROF_DLL): $(PERLDEP) $(DPROF).xs
-       cd $(EXTDIR)\Devel\$(*B) && \
-       ..\..\..\miniperl -I..\..\..\lib Makefile.PL INSTALLDIRS=perl
-       cd $(EXTDIR)\Devel\$(*B) && $(MAKE)
-
-$(GLOB_DLL): $(PERLDEP) $(GLOB).xs
-       cd $(EXTDIR)\File\$(*B) && \
-       ..\..\..\miniperl -I..\..\..\lib Makefile.PL INSTALLDIRS=perl
-       cd $(EXTDIR)\File\$(*B) && $(MAKE)
-
-$(PEEK_DLL): $(PERLDEP) $(PEEK).xs
-       cd $(EXTDIR)\Devel\$(*B) && \
-       ..\..\..\miniperl -I..\..\..\lib Makefile.PL INSTALLDIRS=perl
-       cd $(EXTDIR)\Devel\$(*B) && $(MAKE)
-
-$(RE_DLL): $(PERLDEP) $(RE).xs
-       cd $(EXTDIR)\$(*B) && \
-       ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
-       cd $(EXTDIR)\$(*B) && $(MAKE)
-
-$(B_DLL): $(PERLDEP) $(B).xs
-       cd $(EXTDIR)\$(*B) && \
-       ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
-       cd $(EXTDIR)\$(*B) && $(MAKE)
-
-$(THREAD_DLL): $(PERLDEP) $(THREAD).xs
-       cd $(EXTDIR)\$(*B) && \
-       ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
-       cd $(EXTDIR)\$(*B) && $(MAKE)
-
-$(ATTRS_DLL): $(PERLDEP) $(ATTRS).xs
-       cd $(EXTDIR)\$(*B) && \
-       ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
-       cd $(EXTDIR)\$(*B) && $(MAKE)
-
-$(POSIX_DLL): $(PERLDEP) $(POSIX).xs
-       cd $(EXTDIR)\$(*B) && \
-       ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
-       cd $(EXTDIR)\$(*B) && $(MAKE)
-
-$(IO_DLL): $(PERLDEP) $(IO).xs
-       cd $(EXTDIR)\$(*B) && \
-       ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
-       cd $(EXTDIR)\$(*B) && $(MAKE)
-
-$(SDBM_FILE_DLL) : $(PERLDEP) $(SDBM_FILE).xs
-       cd $(EXTDIR)\$(*B) && \
-       ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
-       cd $(EXTDIR)\$(*B) && $(MAKE)
-
-$(FCNTL_DLL): $(PERLDEP) $(FCNTL).xs
-       cd $(EXTDIR)\$(*B) && \
-       ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
-       cd $(EXTDIR)\$(*B) && $(MAKE)
-
-$(OPCODE_DLL): $(PERLDEP) $(OPCODE).xs
-       cd $(EXTDIR)\$(*B) && \
-       ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
-       cd $(EXTDIR)\$(*B) && $(MAKE)
-
-$(SOCKET_DLL): $(PERLDEP) $(SOCKET).xs
-       cd $(EXTDIR)\$(*B) && \
-       ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
-       cd $(EXTDIR)\$(*B) && $(MAKE)
-
-$(HOSTNAME_DLL): $(PERLDEP) $(HOSTNAME).xs
-       cd $(EXTDIR)\Sys\$(*B) && \
-       ..\..\..\miniperl -I..\..\..\lib Makefile.PL INSTALLDIRS=perl
-       cd $(EXTDIR)\Sys\$(*B) && $(MAKE)
-
-$(BYTELOADER_DLL): $(PERLDEP) $(BYTELOADER).xs
-       cd $(EXTDIR)\$(*B) && \
-       ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
-       cd $(EXTDIR)\$(*B) && $(MAKE)
-
-$(ENCODE_DLL): $(PERLDEP) $(ENCODE).xs
-       cd $(EXTDIR)\$(*B) && \
-       ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
-       cd $(EXTDIR)\$(*B) && $(MAKE)
-
-$(STORABLE_DLL): $(PERLDEP) $(STORABLE).xs
-       cd $(EXTDIR)\$(*B) && \
-       ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
-       cd $(EXTDIR)\$(*B) && $(MAKE)
-
-$(FILTER_DLL): $(PERLDEP) $(FILTER).xs
-       cd $(EXTDIR)\Filter\Util\Call && \
-       ..\..\..\..\miniperl -I..\..\..\..\lib Makefile.PL INSTALLDIRS=perl
-       cd $(EXTDIR)\Filter\Util\Call && $(MAKE)
-
-$(MD5_DLL): $(PERLDEP) $(MD5).xs
-       cd $(EXTDIR)\Digest\MD5 && \
-       ..\..\..\miniperl -I..\..\..\lib Makefile.PL INSTALLDIRS=perl
-       cd $(EXTDIR)\Digest\MD5 && $(MAKE)
-
-$(MIMEBASE64_DLL): $(PERLDEP) $(MIMEBASE64).xs
-       cd $(EXTDIR)\MIME\Base64 && \
-       ..\..\..\miniperl -I..\..\..\lib Makefile.PL INSTALLDIRS=perl
-       cd $(EXTDIR)\MIME\Base64 && $(MAKE)
-
-$(ERRNO_PM): $(PERLDEP) $(ERRNO)_pm.PL
-       cd $(EXTDIR)\$(*B) && \
-       ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
-       cd $(EXTDIR)\$(*B) && $(MAKE)
+#----------------------------------------------------------------------------------
+Extensions : buildext.pl $(PERLDEP) $(CONFIGPM) 
+       $(MINIPERL) -I..\lib buildext.pl $(MAKE) $(PERLDEP) $(EXTDIR)
+
+#----------------------------------------------------------------------------------
+
 
 doc: $(PERLEXE)
        $(PERLEXE) -I..\lib ..\installhtml --podroot=.. --htmldir=./html \
@@ -1312,8 +1101,6 @@ distclean: clean
        -del /f $(MINIPERL) $(PERLEXE) $(PERLDLL) $(GLOBEXE) \
                $(PERLIMPLIB) ..\miniperl$(a) $(MINIMOD)
        -del /f *.def *.map
-       -del /f $(EXTENSION_DLL) $(EXTENSION_PM)
-       -del /f $(EXTENSION_C) $(DYNALOADER).c $(ERRNO).pm
        -del /f $(EXTDIR)\DynaLoader\dl_win32.xs
        -del /f $(LIBDIR)\.exists $(LIBDIR)\attrs.pm $(LIBDIR)\DynaLoader.pm
        -del /f $(LIBDIR)\XSLoader.pm