build.log中的is not a subdirectory of和ScanSourceDirectories函数的关系
ScanSourceDirectories
第一部分:
E:\srv03rtm\sdktools\build>grep "is not a subdirectory of" -nr *.c
buildsrc.c:2222: "%s found in %s, is not a subdirectory of %s\r\n",
第二部分:
//+---------------------------------------------------------------------------
//
// Function: MarkDirNames
//
// Synopsis: Parses a DIRS= or OPTIONAL_DIRS line and marks the directories
// appropriately.
//
// Arguments: [DirDB] -- Directory containing DIRS file
// [TextLine] -- DIRS= or OPTIONAL_DIRS= line
// [Required] -- Indicates if directories are optional or not.
//
//----------------------------------------------------------------------------
VOID
MarkDirNames(PDIRREC DirDB, LPSTR TextLine, BOOL Required)
{
if (FileDB == NULL) {
BuildError(
"%s found in %s, is not a subdirectory of %s\r\n",
dirbuf,
FormatPathName(DirDB->Name, *ppCurrentDirsFileName),
DirDB->Name);
}
第三部分:例子
BUILD: fontsub found in windows\core\ntgdi\dirs, is not a subdirectory of d:\srv03rtm\windows\core\ntgdi
BUILD: otfd found in windows\core\ntgdi\fondrv\dirs, is not a subdirectory of d:\srv03rtm\windows\core\ntgdi\fondrv
BUILD: trmn found in windows\core\ntgdi\fonts\dirs, is not a subdirectory of d:\srv03rtm\windows\core\ntgdi\fonts
BUILD: chs found in windows\core\ntgdi\fonts\dirs, is not a subdirectory of d:\srv03rtm\windows\core\ntgdi\fonts
BUILD: kor found in windows\core\ntgdi\fonts\dirs, is not a subdirectory of d:\srv03rtm\windows\core\ntgdi\fonts
BUILD: jpn found in windows\core\ntgdi\fonts\dirs, is not a subdirectory of d:\srv03rtm\windows\core\ntgdi\fonts
BUILD: t2embed found in windows\core\ntgdi\mstypeo\dirs, is not a subdirectory of d:\srv03rtm\windows\core\ntgdi\mstypeo
BUILD: src found in windows\feime\jpn\dirs, is not a subdirectory of d:\srv03rtm\windows\feime\jpn
BUILD: ime2k_source found in windows\feime\chs\dirs, is not a subdirectory of d:\srv03rtm\windows\feime\chs
BUILD: ime2002a found in windows\feime\cht\dirs, is not a subdirectory of d:\srv03rtm\windows\feime\cht
BUILD: ime98b found in windows\feime\cht\dirs, is not a subdirectory of d:\srv03rtm\windows\feime\cht
BUILD: lnk found in base\fs\hsm\dirs, is not a subdirectory of d:\srv03rtm\base\fs\hsm
BUILD: test found in base\fs\hsm\dirs, is not a subdirectory of d:\srv03rtm\base\fs\hsm
BUILD: dfrg found in base\fs\utils\dirs, is not a subdirectory of d:\srv03rtm\base\fs\utils
BUILD: ntback50 found in base\fs\utils\dirs, is not a subdirectory of d:\srv03rtm\base\fs\utils
BUILD: cht found in base\win32\winnls\dirs, is not a subdirectory of d:\srv03rtm\base\win32\winnls
BUILD: d:\srv03rtm\base\ntsetup: ignoring bad subdirectory: {x86}
BUILD: chscht found in base\ntsetup\migdlls\dirs, is not a subdirectory of d:\srv03rtm\base\ntsetup\migdlls
BUILD: cjime98 found in base\ntsetup\migdlls\dirs, is not a subdirectory of d:\srv03rtm\base\ntsetup\migdlls
BUILD: mapi found in base\ntsetup\migdlls\dirs, is not a subdirectory of d:\srv03rtm\base\ntsetup\migdlls
BUILD: msp found in base\ntsetup\migdlls\dirs, is not a subdirectory of d:\srv03rtm\base\ntsetup\migdlls
BUILD: eastman found in base\ntsetup\migdlls\dirs, is not a subdirectory of d:\srv03rtm\base\ntsetup\migdlls
BUILD: acrobat found in base\ntsetup\migdlls\dirs, is not a subdirectory of d:\srv03rtm\base\ntsetup\migdlls
BUILD: octopus found in base\ntsetup\migdlls\dirs, is not a subdirectory of d:\srv03rtm\base\ntsetup\migdlls
BUILD: hptools found in base\ntsetup\migdlls\dirs, is not a subdirectory of d:\srv03rtm\base\ntsetup\migdlls
BUILD: ibmav found in base\ntsetup\migdlls\dirs, is not a subdirectory of d:\srv03rtm\base\ntsetup\migdlls
BUILD: rumba found in base\ntsetup\migdlls\dirs, is not a subdirectory of d:\srv03rtm\base\ntsetup\migdlls
BUILD: necwps found in base\ntsetup\migdlls\dirs, is not a subdirectory of d:\srv03rtm\base\ntsetup\migdlls
BUILD: necpa found in base\ntsetup\migdlls\dirs, is not a subdirectory of d:\srv03rtm\base\ntsetup\migdlls
BUILD: neckbd found in base\ntsetup\migdlls\dirs, is not a subdirectory of d:\srv03rtm\base\ntsetup\migdlls
BUILD: dmicall found in base\ntsetup\migdlls\dirs, is not a subdirectory of d:\srv03rtm\base\ntsetup\migdlls
BUILD: sisagp found in base\busdrv\agp\dirs, is not a subdirectory of d:\srv03rtm\base\busdrv\agp
BUILD: amdagp found in base\busdrv\agp\dirs, is not a subdirectory of d:\srv03rtm\base\busdrv\agp
解释:
BUILD: chs found in windows\core\ntgdi\fonts\dirs, is not a subdirectory of d:\srv03rtm\windows\core\ntgdi\fonts
BUILD: kor found in windows\core\ntgdi\fonts\dirs, is not a subdirectory of d:\srv03rtm\windows\core\ntgdi\fonts
BUILD: jpn found in windows\core\ntgdi\fonts\dirs, is not a subdirectory of d:\srv03rtm\windows\core\ntgdi\fonts
chs
kor
jpn
三个目录不存在,但出现在了windows\core\ntgdi\fonts\dirs文件中:
DIRS= \
trmn \
binplace \
chs \
cht \
kor \
jpn \
meti \
embedded
第四部分:
E:\srv03rtm\sdktools\build>grep "MarkDirNames" -nr *.c
buildsrc.c:156:MarkDirNames(PDIRREC DirDB, LPSTR TextLine, BOOL Required);
buildsrc.c:1945: MarkDirNames(DirDB, pValue, TRUE);
buildsrc.c:1948: MarkDirNames(DirDB, pValue, BuildAllOptionalDirs);
buildsrc.c:2108:// Function: MarkDirNames
buildsrc.c:2120:MarkDirNames(PDIRREC DirDB, LPSTR TextLine, BOOL Required)
//+---------------------------------------------------------------------------
//
// Function: ReadDirsFile
//
// Synopsis: Parse the DIRS file
//
// Arguments: [DirDB] -- Directory to look in
//
// Returns: TRUE if parsed
//
// Notes: The existence of a file named 'mydirs' or the name of the
// target specific dirs will override the normal 'dirs' file.
//
//----------------------------------------------------------------------------
BOOL
ReadDirsFile(
PDIRREC DirDB
)
{
if ((pValue = FindMacro("DIRS")) != NULL) {
MarkDirNames(DirDB, pValue, TRUE);
}
if ((pValue = FindMacro("OPTIONAL_DIRS")) != NULL) {
MarkDirNames(DirDB, pValue, BuildAllOptionalDirs);
}
第五部分:
E:\srv03rtm\sdktools\build>grep "ReadDirsFile" -nr *.c
buildmak.c:1348: DirsPresent = ReadDirsFile(DirDB);
buildsrc.c:1884:// Function: ReadDirsFile
buildsrc.c:1898:ReadDirsFile(
第六部分:
//+---------------------------------------------------------------------------
//
// Function: ScanSourceDirectories
//
// Synopsis: Scan a source directory to determine what files it
// contains, whether it should be compiled or linked, and
// whether it has subdirectories that we should process.
//
// Arguments: [DirName] -- Directory to scan
//
//----------------------------------------------------------------------------
VOID
ScanSourceDirectories(LPSTR DirName)
{
if (DirDB->DirFlags & DIRDB_SOURCES) {
} else
if (DirDB->DirFlags & DIRDB_DIRS) {
//
// This directory contains a DIRS or MYDIRS file
//
DirsPresent = ReadDirsFile(DirDB);
第七部分:
E:\srv03rtm\sdktools\build>grep "ScanSourceDirectories" -nr *.c
build.c:959: ScanSourceDirectories( CurrentDirectory );
build.c:1052: ScanSourceDirectories( CurrentDirectory );
buildmak.c:1200:// Function: ScanSourceDirectories
buildmak.c:1211:ScanSourceDirectories(LPSTR DirName)
buildmak.c:1223: "ScanSourceDirectories(%s) level = %d\r\n",
buildmak.c:1284: BuildMsgRaw("ScanSourceDirectories(%s) SOURCES\r\n", DirName);
buildmak.c:1351: BuildMsgRaw("ScanSourceDirectories(%s) DIRS\r\n", DirName);
buildmak.c:1497: ScanSourceDirectories(path);
第八部分:
//+---------------------------------------------------------------------------
//
// Function: main
//
//----------------------------------------------------------------------------
int
__cdecl main(
int argc,
LPSTR argv[]
)
{
fFirstScan = TRUE;
fPassZero = FALSE;
ScanSourceDirectories( CurrentDirectory );
if ( !fLinkOnly && CountPassZeroDirs && !bBaselineFailure) {
。。。
if ((CountPassZeroDirs > 0) && (c == '\n') && !bBaselineFailure) {
DWORD dwStartTime = GetTickCount();
。。。
// This will compile directories if fQuicky is TRUE
if (!fStopAfterPassZero) {
ScanSourceDirectories( CurrentDirectory );
}