|  | @@ -542,6 +542,7 @@ struct cmListFileLexer_s
 | 
	
		
			
				|  |  |    int column;
 | 
	
		
			
				|  |  |    int size;
 | 
	
		
			
				|  |  |    FILE* file;
 | 
	
		
			
				|  |  | +  size_t cr;
 | 
	
		
			
				|  |  |    char* string_buffer;
 | 
	
		
			
				|  |  |    char* string_position;
 | 
	
		
			
				|  |  |    int string_left;
 | 
	
	
		
			
				|  | @@ -564,7 +565,7 @@ static void cmListFileLexerDestroy(cmListFileLexer* lexer);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /*--------------------------------------------------------------------------*/
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -#line 570 "cmListFileLexer.c"
 | 
	
		
			
				|  |  | +#line 571 "cmListFileLexer.c"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #define INITIAL 0
 | 
	
		
			
				|  |  |  #define STRING 1
 | 
	
	
		
			
				|  | @@ -793,10 +794,10 @@ YY_DECL
 | 
	
		
			
				|  |  |          int yy_act;
 | 
	
		
			
				|  |  |      struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -#line 82 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  | +#line 83 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -#line 804 "cmListFileLexer.c"
 | 
	
		
			
				|  |  | +#line 805 "cmListFileLexer.c"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if ( !yyg->yy_init )
 | 
	
		
			
				|  |  |                  {
 | 
	
	
		
			
				|  | @@ -894,7 +895,7 @@ do_action:      /* This label is used only to access EOF actions. */
 | 
	
		
			
				|  |  |  case 1:
 | 
	
		
			
				|  |  |  /* rule 1 can match eol */
 | 
	
		
			
				|  |  |  YY_RULE_SETUP
 | 
	
		
			
				|  |  | -#line 84 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  | +#line 85 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    lexer->token.type = cmListFileLexer_Token_Newline;
 | 
	
		
			
				|  |  |    cmListFileLexerSetToken(lexer, yytext, yyleng);
 | 
	
	
		
			
				|  | @@ -904,14 +905,14 @@ YY_RULE_SETUP
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  case 2:
 | 
	
		
			
				|  |  |  YY_RULE_SETUP
 | 
	
		
			
				|  |  | -#line 92 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  | +#line 93 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    lexer->column += yyleng;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |          YY_BREAK
 | 
	
		
			
				|  |  |  case 3:
 | 
	
		
			
				|  |  |  YY_RULE_SETUP
 | 
	
		
			
				|  |  | -#line 96 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  | +#line 97 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    lexer->token.type = cmListFileLexer_Token_ParenLeft;
 | 
	
		
			
				|  |  |    cmListFileLexerSetToken(lexer, yytext, yyleng);
 | 
	
	
		
			
				|  | @@ -920,7 +921,7 @@ YY_RULE_SETUP
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  case 4:
 | 
	
		
			
				|  |  |  YY_RULE_SETUP
 | 
	
		
			
				|  |  | -#line 103 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  | +#line 104 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    lexer->token.type = cmListFileLexer_Token_ParenRight;
 | 
	
		
			
				|  |  |    cmListFileLexerSetToken(lexer, yytext, yyleng);
 | 
	
	
		
			
				|  | @@ -929,7 +930,7 @@ YY_RULE_SETUP
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  case 5:
 | 
	
		
			
				|  |  |  YY_RULE_SETUP
 | 
	
		
			
				|  |  | -#line 110 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  | +#line 111 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    lexer->token.type = cmListFileLexer_Token_Identifier;
 | 
	
		
			
				|  |  |    cmListFileLexerSetToken(lexer, yytext, yyleng);
 | 
	
	
		
			
				|  | @@ -938,7 +939,7 @@ YY_RULE_SETUP
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  case 6:
 | 
	
		
			
				|  |  |  YY_RULE_SETUP
 | 
	
		
			
				|  |  | -#line 117 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  | +#line 118 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    lexer->token.type = cmListFileLexer_Token_ArgumentUnquoted;
 | 
	
		
			
				|  |  |    cmListFileLexerSetToken(lexer, yytext, yyleng);
 | 
	
	
		
			
				|  | @@ -947,7 +948,7 @@ YY_RULE_SETUP
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  case 7:
 | 
	
		
			
				|  |  |  YY_RULE_SETUP
 | 
	
		
			
				|  |  | -#line 124 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  | +#line 125 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    lexer->token.type = cmListFileLexer_Token_ArgumentUnquoted;
 | 
	
		
			
				|  |  |    cmListFileLexerSetToken(lexer, yytext, yyleng);
 | 
	
	
		
			
				|  | @@ -956,7 +957,7 @@ YY_RULE_SETUP
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  case 8:
 | 
	
		
			
				|  |  |  YY_RULE_SETUP
 | 
	
		
			
				|  |  | -#line 131 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  | +#line 132 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    lexer->token.type = cmListFileLexer_Token_ArgumentQuoted;
 | 
	
		
			
				|  |  |    cmListFileLexerSetToken(lexer, "", 0);
 | 
	
	
		
			
				|  | @@ -966,7 +967,7 @@ YY_RULE_SETUP
 | 
	
		
			
				|  |  |          YY_BREAK
 | 
	
		
			
				|  |  |  case 9:
 | 
	
		
			
				|  |  |  YY_RULE_SETUP
 | 
	
		
			
				|  |  | -#line 138 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  | +#line 139 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    cmListFileLexerAppend(lexer, yytext, yyleng);
 | 
	
		
			
				|  |  |    lexer->column += yyleng;
 | 
	
	
		
			
				|  | @@ -975,7 +976,7 @@ YY_RULE_SETUP
 | 
	
		
			
				|  |  |  case 10:
 | 
	
		
			
				|  |  |  /* rule 10 can match eol */
 | 
	
		
			
				|  |  |  YY_RULE_SETUP
 | 
	
		
			
				|  |  | -#line 143 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  | +#line 144 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    cmListFileLexerAppend(lexer, yytext, yyleng);
 | 
	
		
			
				|  |  |    ++lexer->line;
 | 
	
	
		
			
				|  | @@ -985,7 +986,7 @@ YY_RULE_SETUP
 | 
	
		
			
				|  |  |  case 11:
 | 
	
		
			
				|  |  |  /* rule 11 can match eol */
 | 
	
		
			
				|  |  |  YY_RULE_SETUP
 | 
	
		
			
				|  |  | -#line 149 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  | +#line 150 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    cmListFileLexerAppend(lexer, yytext, yyleng);
 | 
	
		
			
				|  |  |    ++lexer->line;
 | 
	
	
		
			
				|  | @@ -994,7 +995,7 @@ YY_RULE_SETUP
 | 
	
		
			
				|  |  |          YY_BREAK
 | 
	
		
			
				|  |  |  case 12:
 | 
	
		
			
				|  |  |  YY_RULE_SETUP
 | 
	
		
			
				|  |  | -#line 155 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  | +#line 156 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    lexer->column += yyleng;
 | 
	
		
			
				|  |  |    BEGIN(INITIAL);
 | 
	
	
		
			
				|  | @@ -1002,14 +1003,14 @@ YY_RULE_SETUP
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  case 13:
 | 
	
		
			
				|  |  |  YY_RULE_SETUP
 | 
	
		
			
				|  |  | -#line 161 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  | +#line 162 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    cmListFileLexerAppend(lexer, yytext, yyleng);
 | 
	
		
			
				|  |  |    lexer->column += yyleng;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |          YY_BREAK
 | 
	
		
			
				|  |  |  case YY_STATE_EOF(STRING):
 | 
	
		
			
				|  |  | -#line 166 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  | +#line 167 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    lexer->token.type = cmListFileLexer_Token_BadString;
 | 
	
		
			
				|  |  |    BEGIN(INITIAL);
 | 
	
	
		
			
				|  | @@ -1017,7 +1018,7 @@ case YY_STATE_EOF(STRING):
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  case 14:
 | 
	
		
			
				|  |  |  YY_RULE_SETUP
 | 
	
		
			
				|  |  | -#line 172 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  | +#line 173 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    lexer->token.type = cmListFileLexer_Token_Space;
 | 
	
		
			
				|  |  |    cmListFileLexerSetToken(lexer, yytext, yyleng);
 | 
	
	
		
			
				|  | @@ -1026,7 +1027,7 @@ YY_RULE_SETUP
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  case 15:
 | 
	
		
			
				|  |  |  YY_RULE_SETUP
 | 
	
		
			
				|  |  | -#line 179 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  | +#line 180 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    lexer->token.type = cmListFileLexer_Token_BadCharacter;
 | 
	
		
			
				|  |  |    cmListFileLexerSetToken(lexer, yytext, yyleng);
 | 
	
	
		
			
				|  | @@ -1034,7 +1035,7 @@ YY_RULE_SETUP
 | 
	
		
			
				|  |  |    return 1;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  case YY_STATE_EOF(INITIAL):
 | 
	
		
			
				|  |  | -#line 186 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  | +#line 187 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    lexer->token.type = cmListFileLexer_Token_None;
 | 
	
		
			
				|  |  |    cmListFileLexerSetToken(lexer, 0, 0);
 | 
	
	
		
			
				|  | @@ -1042,10 +1043,10 @@ case YY_STATE_EOF(INITIAL):
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  case 16:
 | 
	
		
			
				|  |  |  YY_RULE_SETUP
 | 
	
		
			
				|  |  | -#line 192 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  | +#line 193 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  |  ECHO;
 | 
	
		
			
				|  |  |          YY_BREAK
 | 
	
		
			
				|  |  | -#line 1064 "cmListFileLexer.c"
 | 
	
		
			
				|  |  | +#line 1065 "cmListFileLexer.c"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          case YY_END_OF_BUFFER:
 | 
	
		
			
				|  |  |                  {
 | 
	
	
		
			
				|  | @@ -2166,7 +2167,7 @@ void cmListFileLexer_yyfree (void * ptr , yyscan_t yyscanner)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #define YYTABLES_NAME "yytables"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -#line 192 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  | +#line 193 "cmListFileLexer.in.l"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -2243,7 +2244,38 @@ static int cmListFileLexerInput(cmListFileLexer* lexer, char* buffer,
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  |      if(lexer->file)
 | 
	
		
			
				|  |  |        {
 | 
	
		
			
				|  |  | -      return (int)fread(buffer, 1, bufferSize, lexer->file);
 | 
	
		
			
				|  |  | +      /* Convert CRLF -> LF explicitly.  The C FILE "t"ext mode
 | 
	
		
			
				|  |  | +         does not convert newlines on all platforms.  Move any
 | 
	
		
			
				|  |  | +         trailing CR to the start of the buffer for the next read. */
 | 
	
		
			
				|  |  | +      size_t cr = lexer->cr;
 | 
	
		
			
				|  |  | +      size_t n;
 | 
	
		
			
				|  |  | +      buffer[0] = '\r';
 | 
	
		
			
				|  |  | +      n = fread(buffer+cr, 1, bufferSize-cr, lexer->file);
 | 
	
		
			
				|  |  | +      if(n)
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +        char* o = buffer;
 | 
	
		
			
				|  |  | +        const char* i = buffer;
 | 
	
		
			
				|  |  | +        const char* e;
 | 
	
		
			
				|  |  | +        n += cr;
 | 
	
		
			
				|  |  | +        cr = (buffer[n-1] == '\r')? 1:0;
 | 
	
		
			
				|  |  | +        e = buffer + n - cr;
 | 
	
		
			
				|  |  | +        while(i != e)
 | 
	
		
			
				|  |  | +          {
 | 
	
		
			
				|  |  | +          if(i[0] == '\r' && i[1] == '\n')
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +            ++i;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          *o++ = *i++;
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        n = o - buffer;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      else
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +        n = cr;
 | 
	
		
			
				|  |  | +        cr = 0;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      lexer->cr = cr;
 | 
	
		
			
				|  |  | +      return n;
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      else if(lexer->string_left)
 | 
	
		
			
				|  |  |        {
 | 
	
	
		
			
				|  | @@ -2360,7 +2392,7 @@ int cmListFileLexer_SetFileName(cmListFileLexer* lexer, const char* name,
 | 
	
		
			
				|  |  |    cmListFileLexerDestroy(lexer);
 | 
	
		
			
				|  |  |    if(name)
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  | -    lexer->file = fopen(name, "r");
 | 
	
		
			
				|  |  | +    lexer->file = fopen(name, "rb");
 | 
	
		
			
				|  |  |      if(lexer->file)
 | 
	
		
			
				|  |  |        {
 | 
	
		
			
				|  |  |        if(bom)
 |