]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/distutils/dep_util.py
   3 Utility functions for simple, timestamp-based dependency of files 
   4 and groups of files; also, function based entirely on such 
   5 timestamp dependency analysis.""" 
   7 # This module should be kept compatible with Python 1.5.2. 
  12 from distutils
.errors 
import DistutilsFileError
 
  15 def newer (source
, target
): 
  16     """Return true if 'source' exists and is more recently modified than 
  17     'target', or if 'source' exists and 'target' doesn't.  Return false if 
  18     both exist and 'target' is the same age or younger than 'source'. 
  19     Raise DistutilsFileError if 'source' does not exist. 
  21     if not os
.path
.exists(source
): 
  22         raise DistutilsFileError
, "file '%s' does not exist" % source
 
  23     if not os
.path
.exists(target
): 
  26     from stat 
import ST_MTIME
 
  27     mtime1 
= os
.stat(source
)[ST_MTIME
] 
  28     mtime2 
= os
.stat(target
)[ST_MTIME
] 
  30     return mtime1 
> mtime2
 
  35 def newer_pairwise (sources
, targets
): 
  36     """Walk two filename lists in parallel, testing if each source is newer 
  37     than its corresponding target.  Return a pair of lists (sources, 
  38     targets) where source is newer than target, according to the semantics 
  41     if len(sources
) != len(targets
): 
  42         raise ValueError, "'sources' and 'targets' must be same length" 
  44     # build a pair of lists (sources, targets) where  source is newer 
  47     for i 
in range(len(sources
)): 
  48         if newer(sources
[i
], targets
[i
]): 
  49             n_sources
.append(sources
[i
]) 
  50             n_targets
.append(targets
[i
]) 
  52     return (n_sources
, n_targets
) 
  57 def newer_group (sources
, target
, missing
='error'): 
  58     """Return true if 'target' is out-of-date with respect to any file 
  59     listed in 'sources'.  In other words, if 'target' exists and is newer 
  60     than every file in 'sources', return false; otherwise return true. 
  61     'missing' controls what we do when a source file is missing; the 
  62     default ("error") is to blow up with an OSError from inside 'stat()'; 
  63     if it is "ignore", we silently drop any missing source files; if it is 
  64     "newer", any missing source files make us assume that 'target' is 
  65     out-of-date (this is handy in "dry-run" mode: it'll make you pretend to 
  66     carry out commands that wouldn't work because inputs are missing, but 
  67     that doesn't matter because you're not actually going to run the 
  70     # If the target doesn't even exist, then it's definitely out-of-date. 
  71     if not os
.path
.exists(target
): 
  74     # Otherwise we have to find out the hard way: if *any* source file 
  75     # is more recent than 'target', then 'target' is out-of-date and 
  76     # we can immediately return true.  If we fall through to the end 
  77     # of the loop, then 'target' is up-to-date and we return false. 
  78     from stat 
import ST_MTIME
 
  79     target_mtime 
= os
.stat(target
)[ST_MTIME
] 
  80     for source 
in sources
: 
  81         if not os
.path
.exists(source
): 
  82             if missing 
== 'error':      # blow up when we stat() the file 
  84             elif missing 
== 'ignore':   # missing source dropped from 
  85                 continue                #  target's dependency list 
  86             elif missing 
== 'newer':    # missing source means target is 
  87                 return 1                #  out-of-date 
  89         source_mtime 
= os
.stat(source
)[ST_MTIME
] 
  90         if source_mtime 
> target_mtime
: