[win32] @INC construction on win32 cleaned up
[p5sagit/p5-mst-13.2.git] / win32 / makefile.mk
index 7e14546..bb4fb40 100644 (file)
 # Set these to wherever you want "nmake install" to put your
 # newly built perl.
 INST_DRV       *= c:
-INST_TOP       *= $(INST_DRV)\perl5004.5x
+INST_TOP       *= $(INST_DRV)\perl
+
+# Comment this out if you DON'T want your perl installation to be versioned.
+# This means that the new installation will overwrite any files from the
+# old installation at the same INST_TOP location.  Leaving it enabled is
+# the safest route, as perl adds the extra version directory to all the
+# locations it installs files to.  If you disable it, an alternative
+# versioned installation can be obtained by setting INST_TOP above to a
+# path that includes an arbitrary version string.
+INST_VER       *= \5.00466
 
 #
 # uncomment to enable threads-capabilities
@@ -28,7 +37,8 @@ CCTYPE                *= BORLAND
 
 #
 # uncomment next line if you want to use the perl object
-OBJECT         *= -DPERL_OBJECT
+# Currently, this cannot be enabled if you ask for threads above
+#OBJECT                *= -DPERL_OBJECT
 
 #
 # uncomment next line if you want debug version of perl (big,slow)
@@ -36,23 +46,27 @@ OBJECT              *= -DPERL_OBJECT
 
 #
 # if you have the source for des_fcrypt(), uncomment this and make sure the
-# file exists (see README.win32)
+# file exists (see README.win32).  File should be located at the perl
+# top level directory.
 #CRYPT_SRC     *= des_fcrypt.c
 
 #
 # if you didn't set CRYPT_SRC and if you have des_fcrypt() available in a
 # library, uncomment this, and make sure the library exists (see README.win32)
+# Specify the full pathname of the library.
 #CRYPT_LIB     *= des_fcrypt.lib
 
 #
 # set this if you wish to use perl's malloc
 # WARNING: Turning this on/off WILL break binary compatibility with extensions
 # you may have compiled with/without it.  Be prepared to recompile all extensions
-# if you change the default.
+# if you change the default.  Currently, this cannot be enabled if you ask for
+# PERL_OBJECT above.
 #PERL_MALLOC   *= define
 
 #
 # set the install locations of the compiler include/libraries
+#
 #CCHOME                *= f:\msdev\vc
 CCHOME         *= C:\bc5
 #CCHOME                *= D:\packages\mingw32
@@ -114,7 +128,7 @@ AUTODIR             = ..\lib\auto
 
 CC             = bcc32
 LINK32         = tlink32
-LIB32          = tlib
+LIB32          = tlib /P128
 IMPLIB         = implib -c
 
 #
@@ -135,7 +149,7 @@ LIBFILES    = $(CRYPT_LIB) import32.lib $(LIBC) odbc32.lib odbccp32.lib
 OPTIMIZE       = -v $(RUNTIME) -DDEBUGGING
 LINK_DBG       = -v
 .ELSE
-OPTIMIZE       = -5 -O2 $(RUNTIME)
+OPTIMIZE       = -O2 $(RUNTIME)
 LINK_DBG       = 
 .ENDIF
 
@@ -144,12 +158,13 @@ CFLAGS            = -w -d -tWM -tWD $(INCLUDES) $(DEFINES) $(LOCDEFS) \
 LINK_FLAGS     = $(LINK_DBG) -L$(CCLIBDIR)
 OBJOUT_FLAG    = -o
 EXEOUT_FLAG    = -e
+LIBOUT_FLAG    = 
 
 .ELIF "$(CCTYPE)" == "GCC"
 
 CC             = gcc -pipe
 LINK32         = gcc -pipe
-LIB32          = ar
+LIB32          = ar rc
 IMPLIB         = dlltool
 
 o = .o
@@ -165,8 +180,8 @@ SUBSYS              = console
 CXX_FLAG       = -xc++
 
 LIBC           = -lcrtdll
-LIBFILES       = $(CRYPT_LIB) -ladvapi32 -luser32 -lwsock32 -lmingw32 -lgcc \
-               -lmoldname $(LIBC) -lkernel32
+LIBFILES       = $(CRYPT_LIB) -ladvapi32 -luser32 -lnetapi32 -lwsock32 -lmingw32 \
+               -lgcc -lmoldname $(LIBC) -lkernel32
 
 .IF  "$(CFG)" == "Debug"
 OPTIMIZE       = -g -O2 $(RUNTIME) -DDEBUGGING
@@ -180,6 +195,7 @@ CFLAGS              = $(INCLUDES) $(DEFINES) $(LOCDEFS) $(OPTIMIZE)
 LINK_FLAGS     = $(LINK_DBG) -L$(CCLIBDIR)
 OBJOUT_FLAG    = -o
 EXEOUT_FLAG    = -o
+LIBOUT_FLAG    = 
 
 .ELSE
 
@@ -190,16 +206,9 @@ LIB32              = $(LINK32) -lib
 #
 # Options
 #
-.IF "$(OBJECT)" == "-DPERL_OBJECT"
-RUNTIME                = -MT
-# XXX building with -MD fails many tests, but cannot investigate
-# because building with debug crashes compiler :-( GSAR )-:
-#RUNTIME       = -MD
-.ELSE
-RUNTIME                = -MD
-.ENDIF
 
-INCLUDES       = -I.\include -I. -I.. 
+RUNTIME                = -MD
+INCLUDES       = -I.\include -I. -I..
 #PCHFLAGS      = -Fpc:\temp\vcmoduls.pch -YX 
 DEFINES                = -DWIN32 -D_CONSOLE $(BUILDOPT) $(CRYPT_FLAG)
 LOCDEFS                = -DPERLDLL -DPERL_CORE
@@ -216,7 +225,7 @@ LIBC                = libcmt.lib
 .IF "$(CCTYPE)" == "MSVC20"
 OPTIMIZE       = -Od $(RUNTIME) -Z7 -D_DEBUG -DDEBUGGING
 .ELSE
-OPTIMIZE       = -Od $(RUNTIME)d -Z7 -D_DEBUG -DDEBUGGING
+OPTIMIZE       = -Od $(RUNTIME)d -Zi -D_DEBUG -DDEBUGGING
 .ENDIF
 LINK_DBG       = -debug -pdb:none
 .ELSE
@@ -239,6 +248,7 @@ CFLAGS              = -nologo -Gf -W3 $(INCLUDES) $(DEFINES) $(LOCDEFS) \
 LINK_FLAGS     = -nologo $(LINK_DBG) -machine:$(PROCESSOR_ARCHITECTURE)
 OBJOUT_FLAG    = -Fo
 EXEOUT_FLAG    = -Fe
+LIBOUT_FLAG    = /out:
 
 .ENDIF
 
@@ -281,8 +291,9 @@ $(o).dll:
 .ENDIF
 
 #
-INST_BIN       = $(INST_TOP)\bin
-INST_LIB       = $(INST_TOP)\lib
+INST_BIN       = $(INST_TOP)$(INST_VER)\bin\$(ARCHNAME)
+INST_SCRIPT    = $(INST_TOP)$(INST_VER)\bin
+INST_LIB       = $(INST_TOP)$(INST_VER)\lib
 INST_POD       = $(INST_LIB)\pod
 INST_HTML      = $(INST_POD)\html
 LIBDIR         = ..\lib
@@ -295,9 +306,11 @@ EXTUTILSDIR        = $(LIBDIR)\extutils
 .IF "$(OBJECT)" == "-DPERL_OBJECT"
 PERLIMPLIB     = ..\perlcore.lib
 PERLDLL                = ..\perlcore.dll
+CAPILIB                = $(COREDIR)\PerlCAPI.lib
 .ELSE
 PERLIMPLIB     = ..\perl.lib
 PERLDLL                = ..\perl.dll
+CAPILIB                =
 .ENDIF
 
 MINIPERL       = ..\miniperl.exe
@@ -333,6 +346,7 @@ XCOPY               = xcopy /f /r /i /d
 RCOPY          = xcopy /f /r /i /e /d
 NOOP           = @echo
 
+#
 # filenames given to xsubpp must have forward slashes (since it puts
 # full pathnames in #line strings)
 XSUBPP         = ..\$(MINIPERL) -I..\..\lib ..\$(EXTUTILSDIR)\xsubpp \
@@ -366,7 +380,9 @@ CORE_SRC    =               \
                ..\universal.c  \
                ..\util.c
 
-CORE_SRC       += $(CRYPT_SRC)
+.IF "$(CRYPT_SRC)" != ""
+CORE_SRC       += ..\$(CRYPT_SRC)
+.ENDIF
 
 .IF "$(PERL_MALLOC)" == "define"
 CORE_SRC       += ..\malloc.c
@@ -380,8 +396,8 @@ WIN32_SRC   =               \
                .\win32.c       \
                .\win32sck.c
 
-.IF "$(USE_THREADS)" == "define" || "$(OBJECT)" == ""
-WIN32_SRC      += .\win32thread.c
+.IF "$(USE_THREADS)" == "define"
+WIN32_SRC      += .\win32thread.c 
 .ENDIF
 
 PERL95_SRC     =               \
@@ -389,6 +405,10 @@ PERL95_SRC =               \
                win32mt.c       \
                win32sckmt.c
 
+.IF "$(CRYPT_SRC)" != ""
+PERL95_SRC     += ..\$(CRYPT_SRC)
+.ENDIF
+
 DLL_SRC                = $(DYNALOADER).c
 
 
@@ -445,13 +465,17 @@ CORE_H            =               \
 
 CORE_OBJ       = $(CORE_SRC:db:+$(o))
 WIN32_OBJ      = $(WIN32_SRC:db:+$(o))
-MINICORE_OBJ   = $(MINIDIR)\{$(CORE_OBJ:f) perlio$(o) miniperlmain$(o)}
+MINICORE_OBJ   = $(MINIDIR)\{$(CORE_OBJ:f) miniperlmain$(o)}
 MINIWIN32_OBJ  = $(MINIDIR)\{$(WIN32_OBJ:f)}
 MINI_OBJ       = $(MINICORE_OBJ) $(MINIWIN32_OBJ)
-PERL95_OBJ     = $(PERL95_SRC:db:+$(o)) DynaLoadmt$(o)
+PERL95_OBJ     = $(PERL95_SRC:db:+$(o))
 DLL_OBJ                = $(DLL_SRC:db:+$(o))
 X2P_OBJ                = $(X2P_SRC:db:+$(o))
 
+.IF "$(OBJECT)" != ""
+MINICORE_OBJ   += $(MINIDIR)\perlio$(o)
+.ENDIF
+
 PERLDLL_OBJ    = $(CORE_OBJ)
 PERLEXE_OBJ    = perlmain$(o)
 
@@ -459,9 +483,10 @@ PERLEXE_OBJ        = perlmain$(o)
 PERLDLL_OBJ    += $(WIN32_OBJ) $(DLL_OBJ)
 .ELSE
 PERLEXE_OBJ    += $(WIN32_OBJ) $(DLL_OBJ)
+PERL95_OBJ     += DynaLoadmt$(o)
 .ENDIF
 
-DYNAMIC_EXT    = Socket IO Fcntl Opcode SDBM_File attrs Thread B
+DYNAMIC_EXT    = Socket IO Fcntl Opcode SDBM_File POSIX attrs Thread B
 STATIC_EXT     = DynaLoader
 
 DYNALOADER     = $(EXTDIR)\DynaLoader\DynaLoader
@@ -470,6 +495,7 @@ 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
@@ -479,6 +505,7 @@ 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
@@ -489,6 +516,7 @@ EXTENSION_C =               \
                $(OPCODE).c     \
                $(SDBM_FILE).c  \
                $(IO).c         \
+               $(POSIX).c      \
                $(ATTRS).c      \
                $(THREAD).c     \
                $(B).c
@@ -499,9 +527,14 @@ EXTENSION_DLL      =               \
                $(OPCODE_DLL)   \
                $(SDBM_FILE_DLL)\
                $(IO_DLL)       \
+               $(POSIX_DLL)    \
                $(ATTRS_DLL)
-#              $(THREAD_DLL)   \
-#              $(B_DLL)
+
+.IF "$(OBJECT)" == ""
+EXTENSION_DLL  +=              \
+               $(THREAD_DLL)   \
+               $(B_DLL)
+.ENDIF
 
 POD2HTML       = $(PODDIR)\pod2html
 POD2MAN                = $(PODDIR)\pod2man
@@ -511,6 +544,7 @@ POD2TEXT    = $(PODDIR)\pod2text
 CFG_VARS       =                                       \
                "INST_DRV=$(INST_DRV)"                  \
                "INST_TOP=$(INST_TOP)"                  \
+               "INST_VER=$(INST_VER)"                  \
                "archname=$(ARCHNAME)"                  \
                "cc=$(CC)"                              \
                "ccflags=$(OPTIMIZE) $(DEFINES) $(OBJECT)"      \
@@ -533,7 +567,7 @@ CFG_VARS    =                                       \
 # Top targets
 #
 
-all : $(GLOBEXE) $(MINIMOD) $(CONFIGPM) $(PERLEXE) $(PERL95EXE) $(X2P) \
+all : $(GLOBEXE) $(MINIMOD) $(CONFIGPM) $(PERLEXE) $(PERL95EXE) $(CAPILIB) $(X2P) \
        $(EXTENSION_DLL)
 
 $(DYNALOADER)$(o) : $(DYNALOADER).c $(CORE_H) $(EXTDIR)\DynaLoader\dlutils.c
@@ -573,7 +607,7 @@ regen_config_h:
        cd .. && perl configpm
        -del /f $(CFGH_TMPL)
        -mkdir ..\lib\CORE
-       -perl -I..\lib config_h.PL
+       -perl -I..\lib config_h.PL "INST_VER=$(INST_VER)"
        rename config.h $(CFGH_TMPL)
 
 $(CONFIGPM) : $(MINIPERL) ..\config.sh config_h.PL ..\minimod.pl
@@ -582,7 +616,8 @@ $(CONFIGPM) : $(MINIPERL) ..\config.sh config_h.PL ..\minimod.pl
        $(XCOPY) ..\*.h $(COREDIR)\*.*
        $(XCOPY) *.h $(COREDIR)\*.*
        $(RCOPY) include $(COREDIR)\*.*
-       $(MINIPERL) -I..\lib config_h.PL || $(MAKE) $(MAKEMACROS) $(CONFIGPM)
+       $(MINIPERL) -I..\lib config_h.PL "INST_VER=$(INST_VER)" \
+           || $(MAKE) $(MAKEMACROS) $(CONFIGPM)
 
 $(MINIPERL) : $(MINIDIR) $(MINI_OBJ)
 .IF "$(CCTYPE)" == "BORLAND"
@@ -680,13 +715,13 @@ perlmain.c : runperl.c
        copy runperl.c perlmain.c
 
 perlmain$(o) : perlmain.c
-       $(CC) $(CFLAGS_O) -UPERLDLL $(EXEOUT_FLAG)$@ -c perlmain.c
+       $(CC) $(CFLAGS_O) -UPERLDLL $(OBJOUT_FLAG)$@ -c perlmain.c
 
 $(PERLEXE): $(PERLDLL) $(CONFIGPM) $(PERLEXE_OBJ)
 .IF "$(CCTYPE)" == "BORLAND"
        $(LINK32) -Tpe -ap $(LINK_FLAGS) \
-           @$(mktmp c0x32$(o) $(PERLEXE_OBJ)\n \
-           $@,\n \
+           @$(mktmp c0x32$(o) $(PERLEXE_OBJ:s,\,\\)\n \
+           $(@:s,\,\\),\n \
            $(PERLIMPLIB) $(LIBFILES)\n)
 .ELIF "$(CCTYPE)" == "GCC"
        $(LINK32) -o $@ $(LINK_FLAGS)  \
@@ -728,10 +763,35 @@ $(PERL95EXE): $(PERLDLL) $(CONFIGPM) $(PERL95_OBJ)
 
 $(DYNALOADER).c: $(MINIPERL) $(EXTDIR)\DynaLoader\dl_win32.xs $(CONFIGPM)
        if not exist $(AUTODIR) mkdir $(AUTODIR)
+       cd $(EXTDIR)\$(*B) && ..\$(MINIPERL) -I..\..\lib $(*B).pm.PL
        $(XCOPY) $(EXTDIR)\$(*B)\$(*B).pm $(LIBDIR)\$(NULL)
        cd $(EXTDIR)\$(*B) && $(XSUBPP) dl_win32.xs > $(*B).c
        $(XCOPY) $(EXTDIR)\$(*B)\dlutils.c .
 
+.IF "$(OBJECT)" == "-DPERL_OBJECT"
+
+PerlCAPI.cpp : $(MINIPERL)
+       $(MINIPERL) GenCAPI.pl $(COREDIR)
+
+PerlCAPI$(o) : PerlCAPI.cpp
+.IF "$(CCTYPE)" == "BORLAND"
+       $(CC) $(CFLAGS_O) -c $(OBJOUT_FLAG)PerlCAPI$(o) PerlCAPI.cpp
+.ELIF "$(CCTYPE)" == "GCC"
+       $(CC) $(CFLAGS_O) -c $(OBJOUT_FLAG)PerlCAPI$(o) PerlCAPI.cpp
+.ELSE
+       $(CC) $(CFLAGS_O) -MT -UPERLDLL -DWIN95FIX -c \
+           $(OBJOUT_FLAG)PerlCAPI$(o) PerlCAPI.cpp
+.ENDIF
+
+$(CAPILIB) : PerlCAPI.cpp PerlCAPI$(o)
+.IF "$(CCTYPE)" == "BORLAND"
+       $(LIB32) $(LIBOUT_FLAG)$(CAPILIB) +PerlCAPI$(o)
+.ELSE
+       $(LIB32) $(LIBOUT_FLAG)$(CAPILIB) PerlCAPI$(o)
+.ENDIF
+
+.ENDIF
+
 $(EXTDIR)\DynaLoader\dl_win32.xs: dl_win32.xs
        copy dl_win32.xs $(EXTDIR)\DynaLoader\dl_win32.xs
 
@@ -750,6 +810,11 @@ $(ATTRS_DLL): $(PERLEXE) $(ATTRS).xs
        ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
        cd $(EXTDIR)\$(*B) && $(MAKE)
 
+$(POSIX_DLL): $(PERLEXE) $(POSIX).xs
+       cd $(EXTDIR)\$(*B) && \
+       ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
+       cd $(EXTDIR)\$(*B) && $(MAKE)
+
 $(IO_DLL): $(PERLEXE) $(IO).xs
        cd $(EXTDIR)\$(*B) && \
        ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
@@ -785,7 +850,7 @@ doc: $(PERLEXE)
            --libpod=perlfunc:perlguts:perlvar:perlrun:perlop --recurse
 
 utils: $(PERLEXE)
-       cd ..\utils && $(MAKE) PERL=$(PERLEXE)
+       cd ..\utils && $(MAKE) PERL=$(MINIPERL)
        cd ..\utils && $(PERLEXE) ..\win32\$(PL2BAT) h2ph splain perlbug \
                pl2pm c2ph h2xs perldoc pstruct
        $(XCOPY) ..\utils\*.bat bin\*.*
@@ -797,11 +862,22 @@ distclean: clean
                $(PERLIMPLIB) ..\miniperl.lib $(MINIMOD)
        -del /f *.def *.map
        -del /f $(EXTENSION_DLL)
-       -del /f $(EXTENSION_C)
+       -del /f $(EXTENSION_C) $(DYNALOADER).c
+       -del /f $(EXTDIR)\DynaLoader\dl_win32.xs
+       -del /f $(LIBDIR)\.exists $(LIBDIR)\attrs.pm $(LIBDIR)\DynaLoader.pm
+       -del /f $(LIBDIR)\Fcntl.pm $(LIBDIR)\IO.pm $(LIBDIR)\Opcode.pm
+       -del /f $(LIBDIR)\ops.pm $(LIBDIR)\Safe.pm $(LIBDIR)\Thread.pm
+       -del /f $(LIBDIR)\SDBM_File.pm $(LIBDIR)\Socket.pm $(LIBDIR)\POSIX.pm
+       -del /f $(LIBDIR)\B.pm $(LIBDIR)\O.pm
+       -rmdir /s /q $(LIBDIR)\IO || rmdir /s $(LIBDIR)\IO
+       -rmdir /s /q $(LIBDIR)\Thread || rmdir /s $(LIBDIR)\Thread
+       -rmdir /s /q $(LIBDIR)\B || rmdir /s $(LIBDIR)\B
        -del /f $(PODDIR)\*.html
        -del /f $(PODDIR)\*.bat
+       -cd ..\utils && del /f h2ph splain perlbug pl2pm c2ph h2xs perldoc pstruct *.bat
+       -cd ..\x2p && del /f find2perl s2p *.bat
        -del /f ..\config.sh ..\splittree.pl perlmain.c dlutils.c config.h.new
-       -del /f ..\lib\Config.pm
+       -del /f $(CONFIGPM)
 .IF "$(PERL95EXE)" != ""
        -del /f perl95.c
 .ENDIF
@@ -809,16 +885,21 @@ distclean: clean
        -cd $(EXTDIR) && del /s *.lib *.def *.map *.bs Makefile *$(o) pm_to_blib
        -rmdir /s /q $(AUTODIR) || rmdir /s $(AUTODIR)
        -rmdir /s /q $(COREDIR) || rmdir /s $(COREDIR)
-       -rmdir /s /q $(MINIDIR) || rmdir /s $(MINIDIR)
 
-install : all doc utils
+install : all installbare installutils installhtml
+
+installbare :
        $(PERLEXE) ..\installperl
 .IF "$(PERL95EXE)" != ""
        $(XCOPY) $(PERL95EXE) $(INST_BIN)\*.*
 .ENDIF
+
+installutils : utils
        $(XCOPY) $(GLOBEXE) $(INST_BIN)\*.*
-       $(XCOPY) bin\*.bat $(INST_BIN)\*.*
-       $(XCOPY) ..\pod\*.bat $(INST_BIN)\*.*
+       $(XCOPY) bin\*.bat $(INST_SCRIPT)\*.*
+       $(XCOPY) ..\pod\*.bat $(INST_SCRIPT)\*.*
+
+installhtml : doc
        $(RCOPY) html\*.* $(INST_HTML)\*.*
 
 inst_lib : $(CONFIGPM)
@@ -865,7 +946,7 @@ clean :
        -@erase $(PERLEXE)
        -@erase $(PERLDLL)
        -@erase $(CORE_OBJ)
-       -rmdir /s /q "$(MINIDIR)"
+       -rmdir /s /q $(MINIDIR) || rmdir /s $(MINIDIR)
        -@erase $(WIN32_OBJ)
        -@erase $(DLL_OBJ)
        -@erase $(X2P_OBJ)