$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r75639 - trunk/tools/build/v2/engine
From: steven_at_[hidden]
Date: 2011-11-23 10:32:16
Author: steven_watanabe
Date: 2011-11-23 10:32:14 EST (Wed, 23 Nov 2011)
New Revision: 75639
URL: http://svn.boost.org/trac/boost/changeset/75639
Log:
Remov MAC, VMS, and OS2 support.  These were already broken with little chance of being fixed.
Removed:
   trunk/tools/build/v2/engine/build_vms.com
   trunk/tools/build/v2/engine/execmac.c
   trunk/tools/build/v2/engine/execvms.c
   trunk/tools/build/v2/engine/filemac.c
   trunk/tools/build/v2/engine/fileos2.c
   trunk/tools/build/v2/engine/filevms.c
   trunk/tools/build/v2/engine/pathmac.c
   trunk/tools/build/v2/engine/pathvms.c
Text files modified: 
   trunk/tools/build/v2/engine/build.jam |    82 ++++----------------------------------- 
   trunk/tools/build/v2/engine/build.sh  |     2                                         
   trunk/tools/build/v2/engine/jam.c     |     1                                         
   trunk/tools/build/v2/engine/jam.h     |    83 ----------------------------------------
   trunk/tools/build/v2/engine/pathsys.h |     6 --                                      
   5 files changed, 10 insertions(+), 164 deletions(-)
Modified: trunk/tools/build/v2/engine/build.jam
==============================================================================
--- trunk/tools/build/v2/engine/build.jam	(original)
+++ trunk/tools/build/v2/engine/build.jam	2011-11-23 10:32:14 EST (Wed, 23 Nov 2011)
@@ -18,12 +18,9 @@
 
 # Platform related specifics.
 if $(OS) = NT { rule .path { return "$(<:J=\\)" ; } ./ = "/" ; }
-else if $(OS) = OS2 { rule .path { return "$(<:J=\\)" ; } ./ = "/" ; }
-else if $(OS) = VMS { rule .path { return "[.$(<:J=/)]" ; } }
-else if $(OS) = MAC { rule .path { return ":$(<:J=\:)" ; } }
 else { rule .path { return "$(<:J=/)" ; } }
-if $(OS) = VMS { . = "_" ; }
-else { . = "." ; }
+
+. = "." ;
 ./ ?= "" ;
 
 # Info about what we are building.
@@ -373,17 +370,6 @@
     [ opt --debug : /MTd /DEBUG /Z7 /Od /Ob0 /wd4996 ]
     -I$(--python-include) -I$(--extra-include)
     : kernel32.lib advapi32.lib user32.lib $(--python-lib[1]) ;
-## VMS/OpenVMS DEC C
-toolset vmsdecc cc : /OBJECT= : "/DEFINES=(" "," ")"
-    : /STANDARD=VAXC /PREFIX_LIBRARY_ENTRIES=ALL_ENTRIES
-    [ opt --release : /OPTIMIZE /NODEBUG ]
-    [ opt --debug : /NOOPTIMIZE /DEBUG ]
-    ;
-toolset vmsdecc link .link : /EXECUTABLE= :
-    : /NOMAP
-    [ opt --release : /NODEBUG ]
-    [ opt --debug : /DEBUG ]
-    ;
 
 # First set the build commands and options according to the
 # preset toolset.
@@ -455,17 +441,7 @@
 
 # Put executables in platform-specific subdirectory.
 locate-target = $(LOCATE_TARGET) ;
-if $(OS) = VMS
-{
-    locate-target ?= bin$(.)vms ;
-    platform = vms ;
-}
-else if $(OS) = MAC
-{
-    locate-target ?= bin$(.)$(OS:L)$(OSPLAT:L) ;
-    platform = $(OS:L)$(OSPLAT:L) ;
-}
-else if $(OSPLAT)
+if $(OSPLAT)
 {
     locate-target ?= bin$(.)$(OS:L)$(OSPLAT:L) ;
     platform = $(OS:L)$(OSPLAT:L) ;
@@ -493,7 +469,7 @@
   ECHO $(locate-target) ;
 }
 
-# We have some different files for UNIX, VMS, and NT.
+# We have some different files for UNIX, and NT.
 jam.source =
     command.c compile.c constants.c debug.c expand.c glob.c
     hash.c hcache.c headers.c hdrmacro.c
@@ -510,18 +486,6 @@
 {
     jam.source += execnt.c filent.c pathunix.c ;
 }
-else if $(OS) = OS2
-{
-    jam.source += execunix.c fileos2.c pathunix.c ;
-}
-else if $(OS) = VMS
-{
-    jam.source += execvms.c filevms.c pathvms.c ;
-}
-else if $(OS) = MAC
-{
-    jam.source += execmac.c filemac.c pathmac.c ;
-}
 else
 {
     jam.source += execunix.c fileunix.c pathunix.c ;
@@ -566,10 +530,6 @@
 {
     --defs += NT ;
 }
-if $(OS) = VMS
-{
-    --defs += VMS ;
-}
 --defs += YYSTACKSIZE=5000 ;
 
 if $(with-python)
@@ -598,18 +558,12 @@
 if $(UNIX) = true { actions piecemeal together existing [DELETE] {
     rm -f "$(>)"
 } }
-if $(OS) = VMS { actions piecemeal together existing [DELETE] {
-    DELETE $(>[--2]:J=";*, ") $(>[-1]);*
-} }
 if $(OS) = NT {
     --chmod+w = "attrib -r " ;
 }
 if $(UNIX) = true {
     --chmod+w = "chmod +w " ;
 }
-if $(OS) = VMS {
-    --chmod+w = "SET FILE/PROT=(S:RWED) " ;
-}
 
 rule .mkdir
 {
@@ -623,14 +577,11 @@
 if $(UNIX) = true { actions [MKDIR] {
     mkdir "$(<)"
 } }
-if $(OS) = VMS { actions [MKDIR] {
-    CREATE/DIR $(<J=", ")
-} }
 
 rule .exe
 {
     local exe = $(<) ;
-    if $(OS) = NT || ( $(UNIX) = true && $(OS) = CYGWIN ) || $(OS) = VMS { exe = $(exe:S=.exe) ; }
+    if $(OS) = NT || ( $(UNIX) = true && $(OS) = CYGWIN ) { exe = $(exe:S=.exe) ; }
     LOCATE on $(exe) = $(locate-target) ;
     DEPENDS all : $(exe) ;
     .mkdir $(locate-target) ;
@@ -671,12 +622,10 @@
 else { actions [COMPILE] {
     "$(--cc)" "$(--bin)$(<:D=)" "$(--dir)$(<:D)$(./)" $(--out)$(<) "$(--def[1])$(--defs:J=$(--def[2]))$(--def[3])" "$(--flags)"  "$(>)" "$(--libs)"
 } }
-if $(OS) = VMS { actions [COMPILE.LINK] {
-    "$(--link)" $(--link-bin)$(<:D=) $(--link-dir)$(<:D)$(./) $(--link-out)$(<) $(--link-def)$(--link-defs) $(--link-flags) $(>J=", ") "$(--link-libs)"
-} }
-else { actions [COMPILE.LINK] {
+
+actions [COMPILE.LINK] {
     "$(--link)" "$(--link-bin)$(<:D=)" "$(--link-dir)$(<:D)$(./)" "$(--link-out)$(<)" "$(--link-def)$(--link-defs)" "$(--link-flags)"  "$(>)" "$(--link-libs)"
-} }
+}
 
 rule .link
 {
@@ -691,9 +640,6 @@
 if $(UNIX) = true { actions [LINK] {
     ln -fs "$(>)" "$(<)"
 } }
-if $(OS) = VMS { actions [LINK] {
-    COPY/REPLACE $(>) $(<)
-} }
 
 rule .copy
 {
@@ -721,9 +667,6 @@
 if $(UNIX) = true { actions [MOVE] {
     mv -f "$(>)" "$(<)"
 } }
-if $(OS) = VMS { actions [MOVE] {
-    RENAME "$(>)" "$(<)"
-} }
 
 # Generate the grammar tokens table, and the real yacc grammar.
 rule .yyacc
@@ -797,13 +740,6 @@
         exit 1
     fi
 } }
-if $(OS) = VMS { actions [YACC] {
-    IF "$(yacc)" $(>)
-    THEN
-        RENAME y_tab$(<[1]:S) $(<[1])
-        RENAME y_tab$(<[2]:S) $(<[2])
-    ENDIF
-} }
 if $(grammar) && ! $(yacc)
 {
     EXIT "Could not find the 'yacc' tool, and therefore can not build the grammar." ;
@@ -889,7 +825,7 @@
 dist.source = $(dist.source:D=)
     $(dist.license[1])
     $(dist.docs)
-    build.jam build.bat build.sh build_vms.com
+    build.jam build.bat build.sh
     Jambase
     jamgram.y jamgram.yy
     [ .path modules set.c ]
Modified: trunk/tools/build/v2/engine/build.sh
==============================================================================
--- trunk/tools/build/v2/engine/build.sh	(original)
+++ trunk/tools/build/v2/engine/build.sh	2011-11-23 10:32:14 EST (Wed, 23 Nov 2011)
@@ -247,7 +247,7 @@
 BJAM_SOURCES="\
  command.c compile.c constants.c debug.c expand.c glob.c hash.c\
  hdrmacro.c headers.c jam.c jambase.c jamgram.c lists.c make.c make1.c\
- object.c option.c output.c parse.c pathunix.c pathvms.c regexp.c\
+ object.c option.c output.c parse.c pathunix.c regexp.c\
  rules.c scan.c search.c subst.c timestamp.c variable.c modules.c\
  strings.c filesys.c builtins.c pwd.c class.c native.c md5.c w32_getreg.c\
  modules/set.c modules/path.c modules/regex.c modules/property-set.c\
Deleted: trunk/tools/build/v2/engine/build_vms.com
==============================================================================
--- trunk/tools/build/v2/engine/build_vms.com	2011-11-23 10:32:14 EST (Wed, 23 Nov 2011)
+++ (empty file)
@@ -1,107 +0,0 @@
-$ ! Copyright 2002-2003 Rene Rivera, Johan Nilsson.
-$ ! Distributed under the Boost Software License, Version 1.0.
-$ ! (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
-$ !
-$ ! bootstrap build script for Jam
-$ !
-$ SAY :== WRITE SYS$OUTPUT
-$ !
-$ ON WARNING THEN CONTINUE
-$ !
-$ IF "" .NES. F$SEARCH("[.bootstrap_vms]*.*")
-$ THEN
-$   SAY "Cleaning previous boostrap files..."
-$ !
-$   SET FILE/PROTECTION=(S:RWED) [.bootstrap_vms]*.*;*
-$   DELETE [.bootstrap_vms]*.*;*
-$ ENDIF
-$ !
-$ IF "" .NES. F$SEARCH("bootstrap_vms.dir")
-$ THEN
-$   SAY "Removing previous boostrap directory..."
-$ !
-$   SET FILE/PROT=(S:RWED) bootstrap_vms.dir
-$   DELETE bootstrap_vms.dir;
-$ ENDIF
-$ !
-$ SAY "Creating boostrap directory..."
-$ !
-$ CREATE/DIR [.bootstrap_vms]
-$ !
-$ SAY "Building bootstrap jam..."
-$ !
-$ CC_FLAGS = "/DEFINE=VMS /STANDARD=VAXC /PREFIX_LIBRARY_ENTRIES=ALL_ENTRIES "
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]builtins.obj builtins.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]command.obj command.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]compile.obj compile.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]constants.obj constants.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]execvms.obj execvms.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]expand.obj expand.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]filesys.obj filesys.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]filevms.obj filevms.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]glob.obj glob.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]hash.obj hash.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]hdrmacro.obj hdrmacro.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]headers.obj headers.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]jam.obj jam.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]jambase.obj jambase.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]jamgram.obj jamgram.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]lists.obj lists.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]make.obj make.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]make1.obj make1.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]modules.obj modules.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]object.obj object.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]option.obj option.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]parse.obj parse.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]pathvms.obj pathvms.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]pwd.obj pwd.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]regexp.obj regexp.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]rules.obj rules.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]scan.obj scan.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]search.obj search.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]strings.obj strings.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]subst.obj subst.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]timestamp.obj timestamp.c
-$ cc 'CC_FLAGS /OBJECT=[.bootstrap_vms]variable.obj variable.c
-$ link -
- /EXECUTABLE=[.bootstrap_vms]jam0.exe -
- [.bootstrap_vms]builtins.obj, -
- [.bootstrap_vms]command.obj, -
- [.bootstrap_vms]compile.obj, -
- [.bootstrap_vms]constants.obj, -
- [.bootstrap_vms]execvms.obj, -
- [.bootstrap_vms]expand.obj, -
- [.bootstrap_vms]filesys.obj, -
- [.bootstrap_vms]filevms.obj, -
- [.bootstrap_vms]glob.obj, -
- [.bootstrap_vms]hash.obj, -
- [.bootstrap_vms]hdrmacro.obj, -
- [.bootstrap_vms]headers.obj, -
- [.bootstrap_vms]jam.obj, -
- [.bootstrap_vms]jambase.obj, -
- [.bootstrap_vms]jamgram.obj, -
- [.bootstrap_vms]lists.obj, -
- [.bootstrap_vms]make.obj, -
- [.bootstrap_vms]make1.obj, -
- [.bootstrap_vms]modules.obj, -
- [.bootstrap_vms]object.obj, -
- [.bootstrap_vms]option.obj, -
- [.bootstrap_vms]parse.obj, -
- [.bootstrap_vms]pathvms.obj, -
- [.bootstrap_vms]pwd.obj, -
- [.bootstrap_vms]regexp.obj, -
- [.bootstrap_vms]rules.obj, -
- [.bootstrap_vms]scan.obj, -
- [.bootstrap_vms]search.obj, -
- [.bootstrap_vms]strings.obj, -
- [.bootstrap_vms]subst.obj, -
- [.bootstrap_vms]timestamp.obj, -
- [.bootstrap_vms]variable.obj
-$ !
-$ SAY "Cleaning any previous build..."
-$ !
-$ MCR [.bootstrap_vms]jam0.exe -f build.jam --toolset=vmsdecc clean
-$ !
-$ SAY "Building Boost.Jam..."
-$ !
-$ MCR [.bootstrap_vms]jam0.exe -f build.jam --toolset=vmsdecc
Deleted: trunk/tools/build/v2/engine/execmac.c
==============================================================================
--- trunk/tools/build/v2/engine/execmac.c	2011-11-23 10:32:14 EST (Wed, 23 Nov 2011)
+++ (empty file)
@@ -1,69 +0,0 @@
-/*
- * Copyright 1993, 1995 Christopher Seiwald.
- *
- * This file is part of Jam - see jam.c for Copyright information.
- */
-
-#include "jam.h"
-#include "lists.h"
-#include "execcmd.h"
-#include <errno.h>
-
-#ifdef OS_MAC
-
-/*
- * execunix.c - execute a shell script on UNIX
- *
- * If $(JAMSHELL) is defined, uses that to formulate execvp().
- * The default is:
- *
- *  /bin/sh -c %
- *
- * Each word must be an individual element in a jam variable value.
- *
- * In $(JAMSHELL), % expands to the command string and ! expands to
- * the slot number (starting at 1) for multiprocess (-j) invocations.
- * If $(JAMSHELL) doesn't include a %, it is tacked on as the last
- * argument.
- *
- * Don't just set JAMSHELL to /bin/sh - it won't work!
- *
- * External routines:
- *  exec_cmd()  - launch an async command execution.
- *  exec_wait() - wait and drive at most one execution completion.
- *
- * Internal routines:
- *  onintr() - bump intr to note command interruption.
- *
- * 04/08/94 (seiwald) - Coherent/386 support added.
- * 05/04/94 (seiwald) - async multiprocess interface
- * 01/22/95 (seiwald) - $(JAMSHELL) support
- */
-
-
-/*
- * exec_cmd() - launch an async command execution.
- */
-
-void exec_cmd
-(
-    char * string,
-    void (* func)( void * closure, int status, timing_info *, char *, char * ),
-    void * closure,
-    LIST * shell
-)
-{
-    printf( "%s", string );
-    (*func)( closure, EXEC_CMD_OK );
-}
-
-/*
- * exec_wait() - wait and drive at most one execution completion.
- */
-
-int exec_wait()
-{
-    return 0;
-}
-
-#endif /* OS_MAC */
Deleted: trunk/tools/build/v2/engine/execvms.c
==============================================================================
--- trunk/tools/build/v2/engine/execvms.c	2011-11-23 10:32:14 EST (Wed, 23 Nov 2011)
+++ (empty file)
@@ -1,182 +0,0 @@
-/*
- * Copyright 1993, 1995 Christopher Seiwald.
- *
- * This file is part of Jam - see jam.c for Copyright information.
- */
-
-#include "jam.h"
-#include "lists.h"
-#include "execcmd.h"
-
-#ifdef OS_VMS
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <iodef.h>
-#include <ssdef.h>
-#include <descrip.h>
-#include <dvidef.h>
-#include <clidef.h>
-
-/*
- * execvms.c - execute a shell script, ala VMS.
- *
- * The approach is this:
- *
- * If the command is a single line, and shorter than WRTLEN (what we believe to
- * be the maximum line length), we just system() it.
- *
- * If the command is multi-line, or longer than WRTLEN, we write the command
- * block to a temp file, splitting long lines (using "-" at the end of the line
- * to indicate continuation), and then source that temp file. We use special
- * logic to make sure we do not continue in the middle of a quoted string.
- *
- * 05/04/94 (seiwald) - async multiprocess interface; noop on VMS
- * 12/20/96 (seiwald) - rewritten to handle multi-line commands well
- * 01/14/96 (seiwald) - do not put -'s between "'s
- */
-
-#define WRTLEN 240
-
-#define MIN( a, b ) ((a) < (b) ? (a) : (b))
-
-/* 1 for the @ and 4 for the .com */
-
-char tempnambuf[ L_tmpnam + 1 + 4 ] = { 0 };
-
-
-void exec_cmd
-(
-    const char * string,
-    void (* func)( void * closure, int status, timing_info *, const char *, const char * ),
-    void * closure,
-    LIST * shell,
-    const char * rule_name,
-    const char * target
-)
-{
-    const char * s;
-    const char * e;
-    const char * p;
-    int rstat = EXEC_CMD_OK;
-    int status;
-    timing_info timing;
-
-    timing.system = 0;
-    timing.user = 0;
-    timing.start = time( 0 );
-
-    /* See if string is more than one line discounting leading/trailing white
-     * space.
-     */
-    for ( s = string; *s && isspace( *s ); ++s );
-
-    e = p = strchr( s, '\n' );
-
-    while ( p && isspace( *p ) )
-        ++p;
-
-    /* If multi line or long, write to com file. Otherwise, exec directly. */
-    if ( ( p && *p ) || ( e - s > WRTLEN ) )
-    {
-        FILE * f;
-
-        /* Create temp file invocation "@sys$scratch:tempfile.com". */
-        if ( !*tempnambuf )
-        {
-            tempnambuf[0] = '@';
-            (void)tmpnam( tempnambuf + 1 );
-            strcat( tempnambuf, ".com" );
-        }
-
-        /* Open tempfile. */
-        if ( !( f = fopen( tempnambuf + 1, "w" ) ) )
-        {
-            printf( "can't open command file\n" );
-            timing.end = time( 0 );
-            (*func)( closure, EXEC_CMD_FAIL, &timing, "", "" );
-            return;
-        }
-
-        /* For each line of the string. */
-        while ( *string )
-        {
-            char * s = strchr( string, '\n' );
-            int len = s ? s + 1 - string : strlen( string );
-
-            fputc( '$', f );
-
-            /* For each chunk of a line that needs to be split. */
-            while ( len > 0 )
-            {
-                const char * q = string;
-                const char * qe = string + MIN( len, WRTLEN );
-                const char * qq = q;
-                int quote = 0;
-
-                /* Look for matching "s. */
-                for ( ; q < qe; ++q )
-                    if ( ( *q == '"' ) && ( quote = !quote ) )
-                        qq = q;
-
-                /* Back up to opening quote, if in one. */
-                if ( quote )
-                    q = qq;
-
-                fwrite( string, ( q - string ), 1, f );
-
-                len -= ( q - string );
-                string = q;
-
-                if ( len )
-                {
-                    fputc( '-', f );
-                    fputc( '\n', f );
-                }
-            }
-        }
-
-        fclose( f );
-
-        status = system( tempnambuf ) & 0x07;
-
-        unlink( tempnambuf + 1 );
-    }
-    else
-    {
-        /* Execute single line command. Strip trailing newline before execing.
-         */
-        if ( e )
-        {
-            s = strdup( s );
-            e = strchr( s, '\n' );
-            *(char *)e = 0;
-        }
-        status = system( s ) & 0x07;
-        if ( e )
-        {
-            free( (void *)s );
-        }
-    }
-
-    /* Fail for error or fatal error. OK on OK, warning or info exit. */
-    if ( ( status == 2 ) || ( status == 4 ) )
-        rstat = EXEC_CMD_FAIL;
-    
-    timing.end = time( 0 );
-    (*func)( closure, rstat, &timing, "", "" );
-}
-
-
-int exec_wait()
-{
-    return 0;
-}
-
-
-void exec_done( void )
-{
-}
-
-# endif /* VMS */
Deleted: trunk/tools/build/v2/engine/filemac.c
==============================================================================
--- trunk/tools/build/v2/engine/filemac.c	2011-11-23 10:32:14 EST (Wed, 23 Nov 2011)
+++ (empty file)
@@ -1,175 +0,0 @@
-/*
- * Copyright 1993-2002 Christopher Seiwald and Perforce Software, Inc.
- *
- * This file is part of Jam - see jam.c for Copyright information.
- */
-
-/*  This file is ALSO:
- *  Copyright 2001-2004 David Abrahams.
- *  Distributed under the Boost Software License, Version 1.0.
- *  (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
- */
-
-# include "jam.h"
-# include "filesys.h"
-# include "pathsys.h"
-
-# ifdef OS_MAC
-
-#include <Files.h>
-#include <Folders.h>
-
-# include <:sys:stat.h>
-
-/*
- * filemac.c - manipulate file names and scan directories on macintosh
- *
- * External routines:
- *
- *  file_dirscan() - scan a directory for files
- *  file_time() - get timestamp of file, if not done by file_dirscan()
- *  file_archscan() - scan an archive for files
- *
- * File_dirscan() and file_archscan() call back a caller provided function
- * for each file found.  A flag to this callback function lets file_dirscan()
- * and file_archscan() indicate that a timestamp is being provided with the
- * file.   If file_dirscan() or file_archscan() do not provide the file's
- * timestamp, interested parties may later call file_time().
- *
- * 04/08/94 (seiwald) - Coherent/386 support added.
- * 12/19/94 (mikem) - solaris string table insanity support
- * 02/14/95 (seiwald) - parse and build /xxx properly
- * 05/03/96 (seiwald) - split into pathunix.c
- * 11/21/96 (peterk) - BEOS does not have Unix-style archives
- */
-
-
-void CopyC2PStr( char const * cstr, StringPtr pstr )
-{
-    int len;
-    for ( len = 0; *cstr && ( len < 255 ); pstr[ ++len ] = *cstr++ );
-    pstr[ 0 ] = len;
-}
-
-
-/*
- * file_dirscan() - scan a directory for files.
- */
-
-void file_dirscan( char * dir, scanback func, void * closure )
-{
-    PATHNAME f;
-    string filename[ 1 ];
-    unsigned char fullPath[ 512 ];
-
-    FSSpec spec;
-    WDPBRec vol;
-    Str63 volName;
-    CInfoPBRec lastInfo;
-    int index = 1;
-
-    /* First enter directory itself. */
-
-    memset( (char *)&f, '\0', sizeof( f ) );
-
-    f.f_dir.ptr = dir;
-    f.f_dir.len = strlen(dir);
-
-    if ( DEBUG_BINDSCAN )
-        printf( "scan directory %s\n", dir );
-
-    /* Special case ":" - enter it */
-
-    if ( ( f.f_dir.len == 1 ) && ( f.f_dir.ptr[0] == ':' ) )
-        (*func)( closure, dir, 0 /* not stat()'ed */, (time_t)0 );
-
-    /* Now enter contents of directory */
-
-    vol.ioNamePtr = volName;
-
-    if ( PBHGetVolSync( &vol ) )
-        return;
-
-    CopyC2PStr( dir, fullPath );
-
-    if ( FSMakeFSSpec( vol.ioWDVRefNum, vol.ioWDDirID, fullPath, &spec ) )
-        return;
-
-    lastInfo.dirInfo.ioVRefNum   = spec.vRefNum;
-    lastInfo.dirInfo.ioDrDirID   = spec.parID;
-    lastInfo.dirInfo.ioNamePtr   = spec.name;
-    lastInfo.dirInfo.ioFDirIndex = 0;
-    lastInfo.dirInfo.ioACUser    = 0;
-
-    if ( PBGetCatInfoSync( &lastInfo ) )
-        return;
-
-    if ( !( lastInfo.dirInfo.ioFlAttrib & 0x10 ) )
-        return;
-
-    /* ioDrDirID must be reset each time. */
-    spec.parID = lastInfo.dirInfo.ioDrDirID;
-
-    string_new( filename );
-    for ( ; ; )
-    {
-        lastInfo.dirInfo.ioVRefNum  = spec.vRefNum;
-        lastInfo.dirInfo.ioDrDirID  = spec.parID;
-        lastInfo.dirInfo.ioNamePtr  = fullPath;
-        lastInfo.dirInfo.ioFDirIndex = index++;
-
-        if ( PBGetCatInfoSync( &lastInfo ) )
-            return;
-
-        f.f_base.ptr = (char *)fullPath + 1;
-        f.f_base.len = *fullPath;
-
-        string_truncate( filename, 0 );
-        path_build( &f, filename, 0 );
-        (*func)( closure, filename->value, 0 /* not stat()'ed */, (time_t)0 );
-    }
-    string_free( filename );
-}
-
-
-/*
- * file_time() - get timestamp of file, if not done by file_dirscan().
- */
-
-int file_time( char * filename, time_t * time )
-{
-    struct stat statbuf;
-
-    if ( stat( filename, &statbuf ) < 0 )
-        return -1;
-
-    *time = statbuf.st_mtime;
-
-    return 0;
-}
-
-
-int file_is_file( char * filename )
-{
-    struct stat statbuf;
-    if ( stat( filename, &statbuf ) < 0 )
-        return -1;
-    return S_ISREG( statbuf.st_mode ) ? 1 : 0;
-}
-
-int file_mkdir(char *pathname)
-{
-    return mkdir(pathname, 0766);
-}
-
-
-/*
- * file_archscan() - scan an archive for files.
- */
-
-void file_archscan( char * archive, scanback func, void * closure )
-{
-}
-
-
-# endif /* macintosh */
Deleted: trunk/tools/build/v2/engine/fileos2.c
==============================================================================
--- trunk/tools/build/v2/engine/fileos2.c	2011-11-23 10:32:14 EST (Wed, 23 Nov 2011)
+++ (empty file)
@@ -1,138 +0,0 @@
-/*
- * Copyright 1993-2002 Christopher Seiwald and Perforce Software, Inc.
- *
- * This file is part of Jam - see jam.c for Copyright information.
- */
-
-/*  This file is ALSO:
- *  Copyright 2001-2004 David Abrahams.
- *  Distributed under the Boost Software License, Version 1.0.
- *  (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
- */
-
-# include "jam.h"
-# include "filesys.h"
-# include "pathsys.h"
-
-/* note that we use "fileunix.c" when compiling with EMX on OS/2 */
-# if defined(OS_OS2) && !defined(__EMX__)
-
-# include <io.h>
-# include <dos.h>
-
-/*
- * fileos2.c - scan directories and archives on NT
- *
- * External routines:
- *
- *  file_dirscan() - scan a directory for files
- *  file_time() - get timestamp of file, if not done by file_dirscan()
- *  file_archscan() - scan an archive for files
- *
- * File_dirscan() and file_archscan() call back a caller provided function
- * for each file found.  A flag to this callback function lets file_dirscan()
- * and file_archscan() indicate that a timestamp is being provided with the
- * file.   If file_dirscan() or file_archscan() do not provide the file's
- * timestamp, interested parties may later call file_time().
- *
- * 07/10/95 (taylor)  Findfirst() returns the first file on NT.
- * 05/03/96 (seiwald) split apart into pathnt.c
- * 09/22/00 (seiwald) handle \ and c:\ specially: don't add extra /
- */
-
-/*
- * file_dirscan() - scan a directory for files
- */
-
-void
-file_dirscan(
-    char *dir,
-    scanback func,
-    void    *closure )
-{
-    PATHNAME f;
-    string filespec[1];
-    long handle;
-    int ret;
-    struct _find_t finfo[1];
-
-    /* First enter directory itself */
-
-    memset( (char *)&f, '\0', sizeof( f ) );
-
-    f.f_dir.ptr = dir;
-    f.f_dir.len = strlen(dir);
-
-    dir = *dir ? dir : ".";
-
-    /* Special case \ or d:\ : enter it */
-    string_copy( filespec, dir );
-
-    if ( f.f_dir.len == 1 && f.f_dir.ptr[0] == '\\' )
-        (*func)( closure, dir, 0 /* not stat()'ed */, (time_t)0 );
-    else if ( f.f_dir.len == 3 && f.f_dir.ptr[1] == ':' )
-        (*func)( closure, dir, 0 /* not stat()'ed */, (time_t)0 );
-    else
-        string_push_back( filespec, '/' );
-
-    string_push_back( filespec, '*' );
-
-    /* Now enter contents of directory */
-
-    if ( DEBUG_BINDSCAN )
-        printf( "scan directory %s\n", filespec->value );
-
-    /* Time info in dos find_t is not very useful.  It consists */
-    /* of a separate date and time, and putting them together is */
-    /* not easy.  So we leave that to a later stat() call. */
-
-    if ( !_dos_findfirst( filespec->value, _A_NORMAL|_A_RDONLY|_A_SUBDIR, finfo ) )
-    {
-        string filename[1];
-        string_new( filename );
-        do
-        {
-            f.f_base.ptr = finfo->name;
-            f.f_base.len = strlen( finfo->name );
-
-            string_truncate( filename, 0 );
-            path_build( &f, filename, 0 );
-            (*func)( closure, filename->value, 0 /* not stat()'ed */, (time_t)0 );
-        }
-        while ( !_dos_findnext( finfo ) );
-        string_free( filename );
-    }
-}
-
-/*
- * file_time() - get timestamp of file, if not done by file_dirscan()
- */
-
-int
-file_time(
-    char    *filename,
-    time_t  *time )
-{
-    /* This is called on OS2, not NT.  */
-    /* NT fills in the time in the dirscan. */
-
-    struct stat statbuf;
-
-    if ( stat( filename, &statbuf ) < 0 )
-        return -1;
-
-    *time = statbuf.st_mtime;
-
-    return 0;
-}
-
-void
-file_archscan(
-    char *archive,
-    scanback func,
-    void    *closure )
-{
-}
-
-# endif /* OS2 && !__EMX__ */
-
Deleted: trunk/tools/build/v2/engine/filevms.c
==============================================================================
--- trunk/tools/build/v2/engine/filevms.c	2011-11-23 10:32:14 EST (Wed, 23 Nov 2011)
+++ (empty file)
@@ -1,336 +0,0 @@
-/*
- * Copyright 1993-2002 Christopher Seiwald and Perforce Software, Inc.
- *
- * This file is part of Jam - see jam.c for Copyright information.
- */
-
-/*  This file is ALSO:
- *  Copyright 2001-2004 David Abrahams.
- *  Distributed under the Boost Software License, Version 1.0.
- *  (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
- */
-
-# include "jam.h"
-# include "filesys.h"
-# include "pathsys.h"
-
-# ifdef OS_VMS
-
-/*
- * filevms.c - scan directories and libaries on VMS
- *
- * External routines:
- *
- *  file_dirscan() - scan a directory for files
- *  file_time() - get timestamp of file, if not done by file_dirscan()
- *  file_archscan() - scan an archive for files
- *
- * File_dirscan() and file_archscan() call back a caller provided function
- * for each file found.  A flag to this callback function lets file_dirscan()
- * and file_archscan() indicate that a timestamp is being provided with the
- * file.   If file_dirscan() or file_archscan() do not provide the file's
- * timestamp, interested parties may later call file_time().
- *
- * 02/09/95 (seiwald) - bungled R=[xxx] - was using directory length!
- * 05/03/96 (seiwald) - split into pathvms.c
- */
-
-# include <rms.h>
-# include <iodef.h>
-# include <ssdef.h>*/
-# include <string.h>
-# include <stdlib.h>
-# include <stdio.h>
-# include <descrip.h>
-
-#include <lbrdef.h>
-#include <credef.h>
-#include <mhddef.h>
-#include <lhidef.h>
-#include <lib$routines.h>
-#include <starlet.h>
-
-/* Supply missing prototypes for lbr$-routines*/
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-int lbr$set_module(
-    void **,
-    unsigned long *,
-    struct dsc$descriptor_s *,
-    unsigned short *,
-    void * );
-
-int lbr$open( void **,
-    struct dsc$descriptor_s *,
-    void *,
-    void *,
-    void *,
-    void *,
-    void * );
-
-int lbr$ini_control(
-    void **,
-    unsigned long *,
-    unsigned long *,
-    void * );
-
-int lbr$get_index(
-    void **,
-    unsigned long *,
-    int (*func)( struct dsc$descriptor_s *, unsigned long *),
-    void * );
-
-int lbr$close(
-    void ** );
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-static void
-file_cvttime(
-    unsigned int *curtime,
-    time_t *unixtime )
-{
-    static const size_t divisor = 10000000;
-    static unsigned int bastim[2] = { 0x4BEB4000, 0x007C9567 }; /* 1/1/1970 */
-    int delta[2], remainder;
-
-    lib$subx( curtime, bastim, delta );
-    lib$ediv( &divisor, delta, unixtime, &remainder );
-}
-
-# define DEFAULT_FILE_SPECIFICATION "[]*.*;0"
-
-# define min( a,b ) ((a)<(b)?(a):(b))
-
-void
-file_dirscan(
-    OBJECT * dir,
-    scanback func,
-    void   * closure )
-{
-
-    struct FAB xfab;
-    struct NAM xnam;
-    struct XABDAT xab;
-    char esa[256];
-    char filename[256];
-    string filename2[1];
-    char dirname[256];
-    register int status;
-    PATHNAME f;
-
-    memset( (char *)&f, '\0', sizeof( f ) );
-
-    f.f_root.ptr = object_str( dir );
-    f.f_root.len = strlen( object_str( dir ) );
-
-    /* get the input file specification
-     */
-    xnam = cc$rms_nam;
-    xnam.nam$l_esa = esa;
-    xnam.nam$b_ess = sizeof( esa ) - 1;
-    xnam.nam$l_rsa = filename;
-    xnam.nam$b_rss = min( sizeof( filename ) - 1, NAM$C_MAXRSS );
-
-    xab = cc$rms_xabdat;                /* initialize extended attributes */
-    xab.xab$b_cod = XAB$C_DAT;      /* ask for date */
-    xab.xab$l_nxt = NULL;               /* terminate XAB chain      */
-
-    xfab = cc$rms_fab;
-    xfab.fab$l_dna = DEFAULT_FILE_SPECIFICATION;
-    xfab.fab$b_dns = sizeof( DEFAULT_FILE_SPECIFICATION ) - 1;
-    xfab.fab$l_fop = FAB$M_NAM;
-    xfab.fab$l_fna = object_str( dir );           /* address of file name     */
-    xfab.fab$b_fns = strlen( object_str( dir ) );     /* length of file name      */
-    xfab.fab$l_nam = &xnam;         /* address of NAB block     */
-    xfab.fab$l_xab = (char *)&xab;       /* address of XAB block     */
-
-
-    status = sys$parse( &xfab );
-
-    if ( DEBUG_BINDSCAN )
-    printf( "scan directory %s\n", object_str( dir ) );
-
-    if ( !( status & 1 ) )
-    return;
-
-
-
-    /* Add bogus directory for [000000] */
-
-    if ( !strcmp( object_str( dir ), "[000000]" ) )
-    {
-        (*func)( closure, dir, 1 /* time valid */, 1 /* old but true */ );
-    }
-
-    /* Add bogus directory for [] */
-
-    if ( !strcmp( object_str( dir ), "[]" ) )
-    {
-        OBJECT * dir2 = object_new( "[-]" );
-        (*func)( closure, dir, 1 /* time valid */, 1 /* old but true */ );
-        (*func)( closure, dir2, 1 /* time valid */, 1 /* old but true */ );
-        object_free( dir2 );
-    }
-
-    string_new( filename2 );
-    while ( (status = sys$search( &xfab )) & 1 )
-    {
-        char *s;
-        time_t time;
-        OBJECT * filename2_obj;
-
-        /* "I think that might work" - eml */
-
-        sys$open( &xfab );
-        sys$close( &xfab );
-
-        file_cvttime( (unsigned int *)&xab.xab$q_rdt, &time );
-
-        filename[xnam.nam$b_rsl] = '\0';
-
-        /* What we do with the name depends on the suffix: */
-        /* .dir is a directory */
-        /* .xxx is a file with a suffix */
-        /* . is no suffix at all */
-
-        if ( xnam.nam$b_type == 4 && !strncmp( xnam.nam$l_type, ".DIR", 4 ) )
-        {
-            /* directory */
-            sprintf( dirname, "[.%.*s]", xnam.nam$b_name, xnam.nam$l_name );
-            f.f_dir.ptr = dirname;
-            f.f_dir.len = strlen( dirname );
-            f.f_base.ptr = 0;
-            f.f_base.len = 0;
-            f.f_suffix.ptr = 0;
-            f.f_suffix.len = 0;
-        }
-        else
-        {
-            /* normal file with a suffix */
-            f.f_dir.ptr = 0;
-            f.f_dir.len = 0;
-            f.f_base.ptr = xnam.nam$l_name;
-            f.f_base.len = xnam.nam$b_name;
-            f.f_suffix.ptr = xnam.nam$l_type;
-            f.f_suffix.len = xnam.nam$b_type;
-        }
-
-        string_truncate( filename2, 0 );
-        path_build( &f, filename2, 0 );
-
-        /*
-        if ( DEBUG_SEARCH )
-            printf("root '%s' base %.*s suf %.*s = %s\n",
-                object_str( dir ),
-                xnam.nam$b_name, xnam.nam$l_name,
-                xnam.nam$b_type, xnam.nam$l_type,
-                filename2->value );
-        */
-
-        filename2_obj = object_new( filename2->value );
-        (*func)( closure, filename2_obj, 1 /* time valid */, time );
-        object_free( filename2_obj );
-    }
-    string_free( filename2 );
-}
-
-int
-file_time(
-    OBJECT  *filename,
-    time_t  *time )
-{
-    /* This should never be called, as all files are */
-    /* timestampped in file_dirscan() and file_archscan() */
-    return -1;
-}
-
-static const char *VMS_archive = 0;
-static scanback VMS_func;
-static void *VMS_closure;
-static void *context;
-
-static int
-file_archmember(
-    struct dsc$descriptor_s *module,
-    unsigned long *rfa )
-{
-    static struct dsc$descriptor_s bufdsc =
-          {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, NULL};
-
-    struct mhddef *mhd;
-    char filename[128];
-    char buf[ MAXJPATH ];
-
-    int status;
-    time_t library_date;
-
-    register int i;
-    register char *p;
-
-    OBJECT * member;
-
-    bufdsc.dsc$a_pointer = filename;
-    bufdsc.dsc$w_length = sizeof( filename );
-    status = lbr$set_module( &context, rfa, &bufdsc,
-                 &bufdsc.dsc$w_length, NULL );
-
-    if ( !(status & 1) )
-    return ( 1 );
-
-    mhd = (struct mhddef *)filename;
-
-    file_cvttime( &mhd->mhd$l_datim, &library_date );
-
-    for ( i = 0, p = module->dsc$a_pointer; i < module->dsc$w_length; ++i, ++p )
-    filename[ i ] = *p;
-
-    filename[ i ] = '\0';
-
-    sprintf( buf, "%s(%s.obj)", VMS_archive, filename );
-
-    member = object_new( buf );
-    (*VMS_func)( VMS_closure, member, 1 /* time valid */, (time_t)library_date );
-    object_free( member );
-
-    return ( 1 );
-}
-
-
-void file_archscan( const char * archive, scanback func, void * closure )
-{
-    static struct dsc$descriptor_s library =
-          {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, NULL};
-
-    unsigned long lfunc = LBR$C_READ;
-    unsigned long typ = LBR$C_TYP_UNK;
-    unsigned long index = 1;
-
-    register int status;
-
-    VMS_archive = archive;
-    VMS_func = func;
-    VMS_closure = closure;
-
-    status = lbr$ini_control( &context, &lfunc, &typ, NULL );
-    if ( !( status & 1 ) )
-        return;
-
-    library.dsc$a_pointer = archive;
-    library.dsc$w_length = strlen( archive );
-
-    status = lbr$open( &context, &library, NULL, NULL, NULL, NULL, NULL );
-    if ( !( status & 1 ) )
-        return;
-
-    (void) lbr$get_index( &context, &index, file_archmember, NULL );
-
-    (void) lbr$close( &context );
-}
-
-# endif /* VMS */
Modified: trunk/tools/build/v2/engine/jam.c
==============================================================================
--- trunk/tools/build/v2/engine/jam.c	(original)
+++ trunk/tools/build/v2/engine/jam.c	2011-11-23 10:32:14 EST (Wed, 23 Nov 2011)
@@ -73,7 +73,6 @@
  *  command.c - maintain lists of commands
  *  compile.c - compile parsed jam statements
  *  execunix.c - execute a shell script on UNIX
- *  execvms.c - execute a shell script, ala VMS
  *  expand.c - expand a buffer, given variable values
  *  file*.c - scan directories and archives on *
  *  hash.c - simple in-memory hashing routines
Modified: trunk/tools/build/v2/engine/jam.h
==============================================================================
--- trunk/tools/build/v2/engine/jam.h	(original)
+++ trunk/tools/build/v2/engine/jam.h	2011-11-23 10:32:14 EST (Wed, 23 Nov 2011)
@@ -46,40 +46,6 @@
 #define HAVE_POPEN 1
 
 /*
- * VMS, OPENVMS
- */
-
-#ifdef VMS
-
-#include <types.h>
-#include <file.h>
-#include <stat.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <signal.h>
-#include <string.h>
-#include <time.h>
-#include <unistd.h>
-#include <unixlib.h>
-
-#define OSMINOR "OS=VMS"
-#define OSMAJOR "VMS=true"
-#define OS_VMS
-#define MAXLINE 1024 /* longest 'together' actions */
-#define SPLITPATH ','
-#define EXITOK 1
-#define EXITBAD 0
-#define DOWNSHIFT_PATHS
-
-/* This may be inaccurate. */
-#ifndef __DECC
-#define OSPLAT "OSPLAT=VAX"
-#endif
-
-#endif
-
-/*
  * Windows NT
  */
 
@@ -157,55 +123,6 @@
 #endif
 
 /*
- * OS2
- */
-
-#ifdef __OS2__
-
-#include <fcntl.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <malloc.h>
-#include <signal.h>
-#include <string.h>
-#include <time.h>
-
-#define OSMAJOR "OS2=true"
-#define OSMINOR "OS=OS2"
-#define OS_OS2
-#define SPLITPATH ';'
-#define MAXLINE 996    /* longest 'together' actions */
-#define USE_EXECUNIX
-#define USE_PATHUNIX
-#define PATH_DELIM '\\'
-#define DOWNSHIFT_PATHS
-
-#ifdef __EMX__
-    #define USE_FILEUNIX
-#endif
-
-#endif
-
-/*
- * Macintosh MPW
- */
-
-#ifdef macintosh
-
-#include <time.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-
-#define OSMAJOR "MAC=true"
-#define OSMINOR "OS=MAC"
-#define OS_MAC
-#define SPLITPATH ','
-
-#endif
-
-/*
  * God fearing UNIX.
  */
 
Deleted: trunk/tools/build/v2/engine/pathmac.c
==============================================================================
--- trunk/tools/build/v2/engine/pathmac.c	2011-11-23 10:32:14 EST (Wed, 23 Nov 2011)
+++ (empty file)
@@ -1,252 +0,0 @@
-/*
- * Copyright 1993-2002 Christopher Seiwald and Perforce Software, Inc.
- *
- * This file is part of Jam - see jam.c for Copyright information.
- */
-
-/*  This file is ALSO:
- *  Copyright 2001-2004 David Abrahams.
- *  Distributed under the Boost Software License, Version 1.0.
- *  (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
- */
-
-# include "jam.h"
-# include "pathsys.h"
-
-# ifdef OS_MAC
-
-# define DELIM ':'
-
-/*
- * pathunix.c - manipulate file names on UNIX, NT, OS2
- *
- * External routines:
- *
- *  path_parse() - split a file name into dir/base/suffix/member
- *  path_build() - build a filename given dir/base/suffix/member
- *  path_parent() - make a PATHNAME point to its parent dir
- *
- * File_parse() and path_build() just manipuate a string and a structure;
- * they do not make system calls.
- *
- * 04/08/94 (seiwald) - Coherent/386 support added.
- * 12/26/93 (seiwald) - handle dir/.suffix properly in path_build()
- * 12/19/94 (mikem) - solaris string table insanity support
- * 12/21/94 (wingerd) Use backslashes for pathnames - the NT way.
- * 02/14/95 (seiwald) - parse and build /xxx properly
- * 02/23/95 (wingerd) Compilers on NT can handle "/" in pathnames, so we
- *                    should expect hdr searches to come up with strings
- *                    like "thing/thing.h". So we need to test for "/" as
- *                    well as "\" when parsing pathnames.
- * 03/16/95 (seiwald) - fixed accursed typo on line 69.
- * 05/03/96 (seiwald) - split from filent.c, fileunix.c
- * 12/20/96 (seiwald) - when looking for the rightmost . in a file name,
- *            don't include the archive member name.
- * 01/10/01 (seiwald) - path_parse now strips the trailing : from the
- *          directory name, unless the directory name is all
- *          :'s, so that $(d:P) works.
- */
-
-/*
- * path_parse() - split a file name into dir/base/suffix/member
- */
-
-void
-path_parse(
-    char    *file,
-    PATHNAME *f )
-{
-    char *p, *q;
-    char *end;
-
-    memset( (char *)f, 0, sizeof( *f ) );
-
-    /* Look for <grist> */
-
-    if ( file[0] == '<' && ( p = strchr( file, '>' ) ) )
-    {
-        f->f_grist.ptr = file;
-        f->f_grist.len = p - file;
-        file = p + 1;
-    }
-
-    /* Look for dir: */
-
-    if ( p = strrchr( file, DELIM ) )
-    {
-        f->f_dir.ptr = file;
-        f->f_dir.len = p - file;
-        file = p + 1;
-
-        /* All :'s? Include last : as part of directory name */
-
-        while ( ( p > f->f_dir.ptr ) && ( *--p == DELIM ) );
-
-        if ( p == f->f_dir.ptr )
-            ++f->f_dir.len;
-    }
-
-    end = file + strlen( file );
-
-    /* Look for (member). */
-
-    if ( ( p = strchr( file, '(' ) ) && ( end[-1] == ')' ) )
-    {
-        f->f_member.ptr = p + 1;
-        f->f_member.len = end - p - 2;
-        end = p;
-    }
-
-    /* Look for .suffix */
-    /* This would be memrchr() */
-
-    p = 0;
-    q = file;
-
-    while ( q = memchr( q, '.', end - q ) )
-        p = q++;
-
-    if ( p )
-    {
-        f->f_suffix.ptr = p;
-        f->f_suffix.len = end - p;
-        end = p;
-    }
-
-    /* Leaves base */
-
-    f->f_base.ptr = file;
-    f->f_base.len = end - file;
-}
-
-/*
- * path_build() - build a filename given dir/base/suffix/member.
- */
-
-# define DIR_EMPTY  0   /* "" */
-# define DIR_DOT    1   /* : */
-# define DIR_DOTDOT 2   /* :: */
-# define DIR_ABS    3   /* dira:dirb: */
-# define DIR_REL    4   /* :dira:dirb: */
-
-# define G_DIR      0   /* take dir */
-# define G_ROOT     1   /* take root */
-# define G_CAT      2   /* prepend root to dir */
-# define G_DTDR     3   /* :: of rel dir */
-# define G_DDDD     4   /* make it ::: (../..) */
-# define G_MT       5   /* leave it empty */
-
-char grid[5][5] = {
-/*      EMPTY   DOT DOTDOT  ABS REL */
-/* EMPTY */   { G_MT,   G_DIR,  G_DIR,  G_DIR,  G_DIR },
-/* DOT */     { G_ROOT, G_DIR,  G_DIR,  G_DIR,  G_DIR },
-/* DOTDOT */  { G_ROOT, G_ROOT, G_DDDD, G_DIR,  G_DTDR },
-/* ABS */     { G_ROOT, G_ROOT, G_ROOT, G_DIR,  G_CAT },
-/* REL */     { G_ROOT, G_ROOT, G_ROOT, G_DIR,  G_CAT }
-};
-
-static int file_flags( char * ptr, int len )
-{
-    if ( !len )
-        return DIR_EMPTY;
-    if ( ( len == 1 ) && ( ptr[0] == DELIM ) )
-        return DIR_DOT;
-    if ( ( len == 2 ) && ( ptr[0] == DELIM ) && ( ptr[1] == DELIM ) )
-        return DIR_DOTDOT;
-    if ( ptr[0] == DELIM )
-        return DIR_REL;
-    return DIR_ABS;
-}
-
-
-void path_build( PATHNAME * f, string * file, int binding )
-{
-    int dflag;
-    int rflag;
-    int act;
-
-    file_build1( f, file );
-
-    /* Combine root & directory, according to the grid. */
-
-    dflag = file_flags( f->f_dir.ptr, f->f_dir.len );
-    rflag = file_flags( f->f_root.ptr, f->f_root.len );
-
-    switch ( act = grid[ rflag ][ dflag ] )
-    {
-    case G_DTDR:
-        {
-            /* :: of rel dir */
-            string_push_back( file, DELIM );
-        }
-        /* fall through */
-
-    case G_DIR:
-        /* take dir */
-        string_append_range( file, f->f_dir.ptr, f->f_dir.ptr + f->f_dir.len  );
-        break;
-
-    case G_ROOT:
-        /* take root */
-        string_append_range( file, f->f_root.ptr, f->f_root.ptr + f->f_root.len  );
-        break;
-
-    case G_CAT:
-        /* prepend root to dir */
-        string_append_range( file, f->f_root.ptr, f->f_root.ptr + f->f_root.len  );
-        if ( file->value[ file->size - 1 ] == DELIM )
-            string_pop_back( file );
-        string_append_range( file, f->f_dir.ptr, f->f_dir.ptr + f->f_dir.len  );
-        break;
-
-    case G_DDDD:
-        /* make it ::: (../..) */
-        string_append( file, ":::" );
-        break;
-    }
-
-    /* Put : between dir and file (if none already). */
-
-    if ( ( act != G_MT ) &&
-        ( file->value[ file->size - 1 ] != DELIM ) &&
-        ( f->f_base.len || f->f_suffix.len ) )
-    {
-        string_push_back( file, DELIM );
-    }
-
-    if ( f->f_base.len )
-        string_append_range( file, f->f_base.ptr, f->f_base.ptr + f->f_base.len  );
-
-    if ( f->f_suffix.len )
-        string_append_range( file, f->f_suffix.ptr, f->f_suffix.ptr + f->f_suffix.len  );
-
-    if ( f->f_member.len )
-    {
-        string_push_back( file, '(' );
-        string_append_range( file, f->f_member.ptr, f->f_member.ptr + f->f_member.len  );
-        string_push_back( file, ')' );
-    }
-
-    if ( DEBUG_SEARCH )
-        printf( " -> '%s'\n", file->value );
-}
-
-
-/*
- *  path_parent() - make a PATHNAME point to its parent dir
- */
-
-void path_parent( PATHNAME * f )
-{
-    /* Just set everything else to nothing. */
-
-    f->f_base.ptr =
-    f->f_suffix.ptr =
-    f->f_member.ptr = "";
-
-    f->f_base.len =
-    f->f_suffix.len =
-    f->f_member.len = 0;
-}
-
-# endif /* OS_MAC */
Modified: trunk/tools/build/v2/engine/pathsys.h
==============================================================================
--- trunk/tools/build/v2/engine/pathsys.h	(original)
+++ trunk/tools/build/v2/engine/pathsys.h	2011-11-23 10:32:14 EST (Wed, 23 Nov 2011)
@@ -15,9 +15,6 @@
  * have the same name:  it never appears in the bound name of a target.
  * (member) is an archive member name: the syntax is arbitrary, but must
  * agree in path_parse(), path_build() and the Jambase.
- *
- * On VMS, we keep track of whether the original path was a directory
- * (without a file), so that $(VAR:D) can climb to the parent.
  */
 
 #ifndef PATHSYS_VP_20020211_H
@@ -38,9 +35,6 @@
 struct _pathname
 {
     PATHPART    part[6];
-#ifdef OS_VMS
-    int     parent;
-#endif
 
 #define f_grist    part[0]
 #define f_root     part[1]
Deleted: trunk/tools/build/v2/engine/pathvms.c
==============================================================================
--- trunk/tools/build/v2/engine/pathvms.c	2011-11-23 10:32:14 EST (Wed, 23 Nov 2011)
+++ (empty file)
@@ -1,406 +0,0 @@
-/*
- * Copyright 1993-2002 Christopher Seiwald and Perforce Software, Inc.
- *
- * This file is part of Jam - see jam.c for Copyright information.
- */
-
-/*  This file is ALSO:
- *  Copyright 2001-2004 David Abrahams.
- *  Distributed under the Boost Software License, Version 1.0.
- *  (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
- */
-
-# include "jam.h"
-# include "pathsys.h"
-
-# ifdef OS_VMS
-
-# define DEBUG
-
-/*
- * pathvms.c - manipulate file names on VMS
- *
- * External routines:
- *
- *  path_parse() - split a file name into dir/base/suffix/member
- *  path_build() - build a filename given dir/base/suffix/member
- *  path_parent() - make a PATHNAME point to its parent dir
- *
- * File_parse() and path_build() just manipuate a string and a structure;
- * they do not make system calls.
- *
- * WARNING!  This file contains voodoo logic, as black magic is
- * necessary for wrangling with VMS file name.  Woe be to people
- * who mess with this code.
- *
- * 02/09/95 (seiwald) - bungled R=[xxx] - was using directory length!
- * 05/03/96 (seiwald) - split from filevms.c
- */
-
-/*
- * path_parse() - split a file name into dir/base/suffix/member.
- */
-
-void path_parse( const char * file, PATHNAME * f )
-{
-    const char * p;
-    const char * q;
-    const char * end;
-
-    memset( (char *)f, 0, sizeof( *f ) );
-
-    /* Look for <grist> */
-
-    if ( ( file[0] == '<' ) && ( p = strchr( file, '>' ) ) )
-    {
-        f->f_grist.ptr = file;
-        f->f_grist.len = p - file;
-        file = p + 1;
-    }
-
-    /* Look for dev:[dir] or dev: */
-
-    if ( ( p = strchr( file, ']' ) ) || ( p = strchr( file, ':' ) ) )
-    {
-        f->f_dir.ptr = file;
-        f->f_dir.len = p + 1 - file;
-        file = p + 1;
-    }
-
-    end = file + strlen( file );
-
-    /* Look for (member). */
-
-    if ( ( p = strchr( file, '(' ) ) && ( end[ -1 ] == ')' ) )
-    {
-        f->f_member.ptr = p + 1;
-        f->f_member.len = end - p - 2;
-        end = p;
-    }
-
-    /* Look for .suffix */
-    /* This would be memrchr(). */
-
-    p = 0;
-    q = file;
-
-    while ( q = (char *)memchr( q, '.', end - q ) )
-        p = q++;
-
-    if ( p )
-    {
-        f->f_suffix.ptr = p;
-        f->f_suffix.len = end - p;
-        end = p;
-    }
-
-    /* Leaves base. */
-    f->f_base.ptr = file;
-    f->f_base.len = end - file;
-
-    /* Is this a directory without a file spec? */
-    f->parent = 0;
-}
-
-/*
- *  dir     mods        result
- *  ---     ---     ------
- * Rerooting:
- *
- *  (none)      :R=dev:     dev:
- *  devd:       :R=dev:     devd:
- *  devd:[dir]  :R=dev:     devd:[dir]
- *  [.dir]      :R=dev:     dev:[dir]   questionable
- *  [dir]       :R=dev:     dev:[dir]
- *
- *  (none)      :R=[rdir]   [rdir]      questionable
- *  devd:       :R=[rdir]   devd:
- *  devd:[dir]  :R=[rdir]   devd:[dir]
- *  [.dir]      :R=[rdir]   [rdir.dir]  questionable
- *  [dir]       :R=[rdir]   [rdir]
- *
- *  (none)      :R=dev:[root]   dev:[root]
- *  devd:       :R=dev:[root]   devd:
- *  devd:[dir]  :R=dev:[root]   devd:[dir]
- *  [.dir]      :R=dev:[root]   dev:[root.dir]
- *  [dir]       :R=dev:[root]   [dir]
- *
- * Climbing to parent:
- *
- */
-
-# define DIR_EMPTY  0   /* empty string */
-# define DIR_DEV    1   /* dev: */
-# define DIR_DEVDIR 2   /* dev:[dir] */
-# define DIR_DOTDIR 3   /* [.dir] */
-# define DIR_DASHDIR    4   /* [-] or [-.dir] */
-# define DIR_ABSDIR 5   /* [dir] */
-# define DIR_ROOT   6   /* [000000] or dev:[000000] */
-
-# define G_DIR      0   /* take just dir */
-# define G_ROOT     1   /* take just root */
-# define G_VAD      2   /* root's dev: + [abs] */
-# define G_DRD      3   /* root's dev:[dir] + [.rel] */
-# define G_VRD      4   /* root's dev: + [.rel] made [abs] */
-# define G_DDD      5   /* root's dev:[dir] + . + [dir] */
-
-static int grid[7][7] = {
-
-/* root/dir EMPTY   DEV DEVDIR  DOTDIR  DASH,   ABSDIR  ROOT */
-/* EMPTY */ G_DIR,  G_DIR,  G_DIR,  G_DIR,  G_DIR,  G_DIR,  G_DIR,
-/* DEV */   G_ROOT, G_DIR,  G_DIR,  G_VRD,  G_VAD,  G_VAD,  G_VAD,
-/* DEVDIR */    G_ROOT, G_DIR,  G_DIR,  G_DRD,  G_VAD,  G_VAD,  G_VAD,
-/* DOTDIR */    G_ROOT, G_DIR,  G_DIR,  G_DRD,  G_DIR,  G_DIR,  G_DIR,
-/* DASHDIR */   G_ROOT, G_DIR,  G_DIR,  G_DRD,  G_DDD,  G_DIR,  G_DIR,
-/* ABSDIR */    G_ROOT, G_DIR,  G_DIR,  G_DRD,  G_DIR,  G_DIR,  G_DIR,
-/* ROOT */  G_ROOT, G_DIR,  G_DIR,  G_VRD,  G_DIR,  G_DIR,  G_DIR,
-
-};
-
-struct dirinf
-{
-    int flags;
-
-    struct
-    {
-        const char * ptr;
-        int   len;
-    } dev, dir;
-};
-
-static const char * strnchr( const char * buf, int c, int len )
-{
-    while ( len-- )
-        if ( *buf && ( *buf++ == c ) )
-            return buf - 1;
-    return 0;
-}
-
-
-static void dir_flags( const char * buf, int len, struct dirinf * i )
-{
-    const char * p;
-
-    if ( !buf || !len )
-    {
-        i->flags = DIR_EMPTY;
-        i->dev.ptr =
-        i->dir.ptr = 0;
-        i->dev.len =
-        i->dir.len = 0;
-    }
-    else if ( p = strnchr( buf, ':', len ) )
-    {
-        i->dev.ptr = buf;
-        i->dev.len = p + 1 - buf;
-        i->dir.ptr = buf + i->dev.len;
-        i->dir.len = len - i->dev.len;
-        i->flags = i->dir.len && *i->dir.ptr == '[' ? DIR_DEVDIR : DIR_DEV;
-    }
-    else
-    {
-        i->dev.ptr = buf;
-        i->dev.len = 0;
-        i->dir.ptr = buf;
-        i->dir.len = len;
-
-        if ( ( *buf == '[' ) && ( buf[1] == ']' ) )
-            i->flags = DIR_EMPTY;
-        else if ( ( *buf == '[' ) && ( buf[1] == '.' ) )
-            i->flags = DIR_DOTDIR;
-        else if ( ( *buf == '[' ) && ( buf[1] == '-' ) )
-            i->flags = DIR_DASHDIR;
-        else
-            i->flags = DIR_ABSDIR;
-    }
-
-    /* But if its rooted in any way. */
-
-    if ( ( i->dir.len == 8 ) && !strncmp( i->dir.ptr, "[000000]", 8 ) )
-        i->flags = DIR_ROOT;
-}
-
-
-/*
- * path_build() - build a filename given dir/base/suffix/member
- */
-
-void path_build( PATHNAME * f, string * file, int binding )
-{
-    struct dirinf root;
-    struct dirinf dir;
-    int g;
-
-    file_build1( f, file );
-
-    /* Get info on root and dir for combining. */
-    dir_flags( f->f_root.ptr, f->f_root.len, &root );
-    dir_flags( f->f_dir.ptr, f->f_dir.len, &dir );
-
-    /* Combine. */
-    switch ( g = grid[ root.flags ][ dir.flags ] )
-    {
-    case G_DIR:
-        /* take dir */
-        string_append_range( file, f->f_dir.ptr, f->f_dir.ptr + f->f_dir.len  );
-        break;
-
-    case G_ROOT:
-        /* take root */
-        string_append_range( file, f->f_root.ptr, f->f_root.ptr + f->f_root.len  );
-        break;
-
-    case G_VAD:
-        /* root's dev + abs directory */
-        string_append_range( file, root.dev.ptr, root.dev.ptr + root.dev.len  );
-        string_append_range( file, dir.dir.ptr, dir.dir.ptr + dir.dir.len  );
-        break;
-
-    case G_DRD:
-    case G_DDD:
-        /* root's dev:[dir] + rel directory */
-        string_append_range( file, f->f_root.ptr, f->f_root.ptr + f->f_root.len  );
-
-        /* sanity checks: root ends with ] */
-
-        if ( file->value[file->size - 1] == ']' )
-            string_pop_back( file );
-
-        /* Add . if separating two -'s */
-
-        if ( g == G_DDD )
-            string_push_back( file, '.' );
-
-        /* skip [ of dir */
-        string_append_range( file, dir.dir.ptr + 1, dir.dir.ptr + 1 + dir.dir.len - 1  );
-        break;
-
-    case G_VRD:
-        /* root's dev + rel directory made abs */
-        string_append_range( file, root.dev.ptr, root.dev.ptr + root.dev.len  );
-        string_push_back( file, '[' );
-        /* skip [. of rel dir */
-        string_append_range( file, dir.dir.ptr + 2, dir.dir.ptr + 2 + dir.dir.len - 2  );
-        break;
-    }
-
-# ifdef DEBUG
-    if ( DEBUG_SEARCH && ( root.flags || dir.flags ) )
-        printf( "%d x %d = %d (%s)\n", root.flags, dir.flags,
-                grid[ root.flags ][ dir.flags ], file->value );
-# endif
-
-    /*
-     * Now do the special :P modifier when no file was present.
-     *  (none)      (none)
-     *  [dir1.dir2] [dir1]
-     *  [dir]       [000000]
-     *  [.dir]      (none)
-     *  []      []
-     */
-
-    if ( ( file->value[ file->size - 1 ] == ']' ) && f->parent )
-    {
-        char * p = file->value + file->size;
-        while ( p-- > file->value )
-        {
-            if ( *p == '.' )
-            {
-                /* If we've truncated everything and left with '[',
-                   return empty string. */
-                if ( p == file->value + 1 )
-                    string_truncate( file, 0 );
-                else
-                {
-                    string_truncate( file, p - file->value );
-                    string_push_back( file, ']' );
-                }
-                break;
-            }
-            
-            if ( *p == '-' )
-            {
-                /* handle .- or - */
-                if ( ( p > file->value ) && ( p[ -1 ] == '.' ) )
-                    --p;
-
-                *p++ = ']';
-                break;
-            }
-            
-            if ( *p == '[' )
-            {
-                if ( p[ 1 ] == ']' )
-                {
-                    /* CONSIDER: I don't see any use of this code. We immediately
-                       break, and 'p' is a local variable. */
-                    p += 2;
-                }
-                else
-                {
-                    string_truncate( file, p - file->value );
-                    string_append( file, "[000000]" );
-                }
-                break;
-            }
-        }
-    }
-
-    /* Now copy the file pieces. */
-    if ( f->f_base.len )
-    {
-        string_append_range( file, f->f_base.ptr, f->f_base.ptr + f->f_base.len  );
-    }
-
-    /* If there is no suffix, we append a "." onto all generated names. This
-     * keeps VMS from appending its own (wrong) idea of what the suffix should
-     * be.
-     */
-    if ( f->f_suffix.len )
-        string_append_range( file, f->f_suffix.ptr, f->f_suffix.ptr + f->f_suffix.len  );
-    else if ( binding && f->f_base.len )
-        string_push_back( file, '.' );
-
-    if ( f->f_member.len )
-    {
-        string_push_back( file, '(' );
-        string_append_range( file, f->f_member.ptr, f->f_member.ptr + f->f_member.len  );
-        string_push_back( file, ')' );
-    }
-
-# ifdef DEBUG
-    if ( DEBUG_SEARCH )
-        printf( "built %.*s + %.*s / %.*s suf %.*s mem %.*s -> %s\n",
-               f->f_root.len, f->f_root.ptr,
-               f->f_dir.len, f->f_dir.ptr,
-               f->f_base.len, f->f_base.ptr,
-               f->f_suffix.len, f->f_suffix.ptr,
-               f->f_member.len, f->f_member.ptr,
-               file->value );
-# endif
-}
-
-
-/*
- *  path_parent() - make a PATHNAME point to its parent dir
- */
-
-void path_parent( PATHNAME * f )
-{
-    if ( f->f_base.len )
-    {
-        f->f_base.ptr =
-        f->f_suffix.ptr =
-        f->f_member.ptr = "";
-
-        f->f_base.len =
-        f->f_suffix.len =
-        f->f_member.len = 0;
-    }
-    else
-    {
-        f->parent = 1;
-    }
-}
-
-# endif /* VMS */