/* $RCSfile: parse.c,v $ -- $Revision: 1.8 $ -- last change: $Author: ihi $ $Date: 2007-10-15 15:40:45 $ -- -- SYNOPSIS -- Parse the input, and perform semantic analysis -- -- DESCRIPTION -- This file contains the routines that parse the input makefile and -- call the appropriate routines to perform the semantic analysis and -- build the internal dag. -- -- AUTHOR -- Dennis Vadura, dvadura@dmake.wticorp.com -- -- WWW -- http://dmake.wticorp.com/ -- -- COPYRIGHT -- Copyright (c) 1996,1997 by WTI Corp. All rights reserved. -- -- This program is NOT free software; you can redistribute it and/or -- modify it under the terms of the Software License Agreement Provided -- in the file /readme/license.txt. -- -- LOG -- Use cvs log to obtain detailed change logs. */ #include "extern.h" PUBLIC void Parse( fil )/* ============== Parse the makefile input */ FILE *fil; { int rule = FALSE; /* have seen a recipe line */ char *p; /* termporary pointer into Buffer */ char *pTmpBuf; DB_ENTER( "Parse" ); State = NORMAL_SCAN; Group = FALSE; /* true if scanning a group rcpe */ while( TRUE ) { if( Get_line( Buffer, fil ) ) { if( Group ) Fatal( "Incomplete rule recipe group detected" ); /* If we are still in RULE_SCAN mode there might be unbound recipes. */ if( State == RULE_SCAN ) Bind_rules_to_targets( F_DEFAULT ); if( fil != NIL( FILE ) ) /* end of parsable input */ Closefile(); DB_VOID_RETURN; } else { #ifdef _MPW if ( Buffer[0] == 10 ) pTmpBuf = Buffer+1; else #endif pTmpBuf = Buffer; #ifdef _MPW p = pTmpBuf; while ( *p ) { if ( *p == 10 ) *p = '\t'; p++; } #endif switch( State ) { case RULE_SCAN: /* Check for the `[' that starts off a group recipe definition. * It must appear as the first non-white space * character in the line. */ p = DmStrSpn( Buffer, " \t\r\n" ); if( Set_group_attributes( p ) ) { if( Group ) Fatal( "New group recipe begin found within group recipe." ); else if( rule ) Fatal( "Cannot mix single and group recipe lines." ); else Group = TRUE; rule = TRUE; break; /* ignore the group start */ } if( Group ) { if( *p != ']' ) { Add_recipe_to_list( pTmpBuf, TRUE, TRUE ); rule = TRUE; } else State = NORMAL_SCAN; } else { if( *pTmpBuf == '\t' || (Notabs && *pTmpBuf == ' ') ) { Add_recipe_to_list( pTmpBuf, FALSE, FALSE ); rule = TRUE; } else if( *p == ']' ) Fatal( "Found unmatched ']'" ); else if( *pTmpBuf ) /* Something that was no recipe. */ State = NORMAL_SCAN; /* The only thing that was not handled was an empty line. */ } if( State == RULE_SCAN ) break; /* ie. keep going */ Bind_rules_to_targets( (Group) ? F_GROUP: F_DEFAULT ); rule = FALSE; if( Group ) { Group = FALSE; break; } /*FALLTRHOUGH*/ /* In this case we broke out of the rule scan because we do not * have a recipe line that begins with a , so lets * try to scan the thing as a macro or rule definition. */ case NORMAL_SCAN: if( !*pTmpBuf ) continue; /* we have null input line */ /* STUPID AUGMAKE uses "include" at the start of a line as * a signal to include a new file, so let's look for it. * if we see it replace it by .INCLUDE: and stick this back * into the buffer. */ if( !strncmp( "include", pTmpBuf, 7 ) && (pTmpBuf[7] == ' ' || pTmpBuf[7] == '\t') ) { char *tmp; tmp = DmStrJoin( ".INCLUDE:", pTmpBuf+7, -1, FALSE ); strcpy( pTmpBuf, tmp ); FREE( tmp ); } /* look for a macro definition, they all contain an = sign * if we fail to recognize it as a legal macro op then try to * parse the same line as a rule definition, it's one or the * other */ if( Parse_macro(pTmpBuf, M_DEFAULT) ) break;/* it's a macro def*/ if( Parse_rule_def( &State ) ) break;/* it's a rule def */ /* if it is an empty or blank line then ignore it */ if( !*Buffer || *DmStrSpn( Buffer, " \t\r\n" ) == '\0' ) break; /* otherwise assume it was a line of unrecognized input, or a * recipe line out of place so print a message */ Fatal( "Expecting macro or rule defn, found neither" ); break; default: Fatal( "Internal -- UNKNOWN Parser state %d", State ); } } } } abora/libreoffice-7-6+backports LibreOffice 核心代码仓库文档基金会
summaryrefslogtreecommitdiff
AgeCommit message (Expand)Author
2019-10-04find-unneeded-includes: ignore extra recommendationsGabor Kelemen
2019-07-29find-unneeded-includes: warn first time user nicely about missing fileGabor Kelemen
2019-07-15find-unneeded-includes: raise maximum output line lengthGabor Kelemen
2019-07-15find-unneeded-includes: don't propose to replace hpp with hdl...Gabor Kelemen
2019-06-17find-unneeded-includes: show command line in case of IWYU error messagesGabor Kelemen
2019-06-12find-unneeded-includes: don't propose to replace boost/functional/hash.hppGabor Kelemen
2019-06-03find-unneeded-includes: don't propose to remove <map>...Gabor Kelemen
2019-05-31find-unneded-includes: don't suggest removal of fwd declsMiklos Vajna
2019-05-31find-unneded-includes: avoid replacing includes with forward-declarationsMiklos Vajna
2019-05-09find-unneeded-includes: dont propose to replace cstdint with internal headerGabor Kelemen
2019-05-09find-unneeded-includes: filter out boost/unordered_map.hppGabor Kelemen
2019-05-08find-unneeded-includes: dont propose to replace ctime with internal headerGabor Kelemen
2019-05-06find-unneeded-includes: don't try to replace forward_list with debug headerGabor Kelemen
2019-04-09find-unneeded-includes: fix tuple default items in debugStlGabor Kelemen
2019-04-03find-unneeded-includes: filter out boost/variant.hppGabor Kelemen
2019-04-02find-unneeded-includes: use a better data structureGabor Kelemen
2019-03-22find-unneeded-includes: don't try to fw. declare o3tl/span.hxxGabor Kelemen
2019-03-18find-unneeded-includes: don't propose debug/set.h if multiset is usedGabor Kelemen
2019-02-11find-unneeded-includes: Skip headers used only for compile testGabor Kelemen
2019-01-24find-unneeeded-includes: don't propose to replace o3tl/deleter.hxxGabor Kelemen
2019-01-17find-unneeded-includes: don't propose debug/bitset eitherGabor Kelemen
2019-01-11find-unneeded-includes: don't propose cmath -> bits/std_abs.hGabor Kelemen
2018-12-11find-unneeded-includes: Avoid proposing o3tl fw declarationGabor Kelemen
2018-11-13find-unneeded-includes: sort the outputGabor Kelemen
2018-10-25sw: fix some IWYU warningsMiklos Vajna
2018-10-13find-unneeded-includes: do not propose css/uno .hxx to .h replacementsGabor Kelemen
2018-10-08find-unneeded-includes: warn about fw decls in namespaces tooGabor Kelemen
2018-09-21find-unneeded-includes: Don't propose functional -> bits/std_function.hGabor Kelemen
2018-09-12IWYU: ignore UNO include files, similar to how the clang loplugin doesMiklos Vajna
2018-07-05find-unneeded-includes: stop proposing internal libstdc++ headersGabor Kelemen
2018-05-23find-unneeded-includes: Make the output user friendlierGabor Kelemen
2018-04-25sw: fix remaining IWYU warnings in inc/*.hxxMiklos Vajna
2018-04-23Fix typo in variableAndrea Gelmini
2018-04-07Add IWYU wrapper script to find unused includesMiklos Vajna