[win32] @INC construction on win32 cleaned up
[p5sagit/p5-mst-13.2.git] / win32 / makefile.mk
index d747645..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)
@@ -50,13 +60,12 @@ OBJECT              *= -DPERL_OBJECT
 # 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
-# (you'll need to quote the value if it contains spaces: i.e.
-#     CCHOME    *= "f:\Program Files\vc"
 #
 #CCHOME                *= f:\msdev\vc
 CCHOME         *= C:\bc5
@@ -119,7 +128,7 @@ AUTODIR             = ..\lib\auto
 
 CC             = bcc32
 LINK32         = tlink32
-LIB32          = tlib
+LIB32          = tlib /P128
 IMPLIB         = implib -c
 
 #
@@ -149,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
@@ -185,6 +195,7 @@ CFLAGS              = $(INCLUDES) $(DEFINES) $(LOCDEFS) $(OPTIMIZE)
 LINK_FLAGS     = $(LINK_DBG) -L$(CCLIBDIR)
 OBJOUT_FLAG    = -o
 EXEOUT_FLAG    = -o
+LIBOUT_FLAG    = 
 
 .ELSE
 
@@ -195,15 +206,8 @@ 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
 
+RUNTIME                = -MD
 INCLUDES       = -I.\include -I. -I..
 #PCHFLAGS      = -Fpc:\temp\vcmoduls.pch -YX 
 DEFINES                = -DWIN32 -D_CONSOLE $(BUILDOPT) $(CRYPT_FLAG)
@@ -244,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
 
@@ -286,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
@@ -300,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
@@ -338,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 \
@@ -371,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
@@ -385,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     =               \
@@ -394,6 +405,10 @@ PERL95_SRC =               \
                win32mt.c       \
                win32sckmt.c
 
+.IF "$(CRYPT_SRC)" != ""
+PERL95_SRC     += ..\$(CRYPT_SRC)
+.ENDIF
+
 DLL_SRC                = $(DYNALOADER).c
 
 
@@ -450,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)
 
@@ -464,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
@@ -475,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
@@ -484,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
@@ -494,6 +516,7 @@ EXTENSION_C =               \
                $(OPCODE).c     \
                $(SDBM_FILE).c  \
                $(IO).c         \
+               $(POSIX).c      \
                $(ATTRS).c      \
                $(THREAD).c     \
                $(B).c
@@ -504,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
@@ -516,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)"      \
@@ -538,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
@@ -578,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
@@ -587,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"
@@ -685,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)  \
@@ -733,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
 
@@ -795,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\*.*
@@ -807,13 +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
@@ -821,7 +885,8 @@ 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 installbare installutils installhtml
 
 installbare :
        $(PERLEXE) ..\installperl
@@ -831,8 +896,8 @@ installbare :
 
 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)\*.*
@@ -881,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)