srcanamdw/appdep/src/appdep_cache.cpp
author noe\swadi
Sat, 09 Jan 2010 10:04:12 +0530
changeset 0 509e4801c378
permissions -rw-r--r--
1. Copyrights changed to EPL 2. Feature updates mentioned in release notes.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
     1
/*
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
     2
* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
     3
* All rights reserved.
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
     4
* This component and the accompanying materials are made available
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
     6
* which accompanies this distribution, and is available
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
     8
*
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
     9
* Initial Contributors:
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    11
*
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    12
* Contributors:
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    13
*
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    14
* Description:  Cache handling routines 
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    15
*
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    16
*/
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    17
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    18
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    19
#include "appdep.hpp"
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    20
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    21
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    22
// ----------------------------------------------------------------------------------------------------------
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    23
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    24
void ReadDataFromSymbolTablesCache(target& a_target)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    25
{
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    26
	string line;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    27
	
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    28
	ifstream symtabcachef(a_target.st_cache_path.c_str());
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    29
    if (!symtabcachef.is_open())
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    30
    {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    31
        cerr << "Warning: Regenerating corrupted cache of target " << a_target.name << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    32
        a_target.cache_files_valid = false;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    33
        _some_cache_needs_update = true;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    34
        return;    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    35
    }	
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    36
	
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    37
	getline(symtabcachef, line);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    38
	if (line != CACHE_ST_HEADER)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    39
    {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    40
        cerr << "Warning: Regenerating corrupted cache of target " << a_target.name  << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    41
        a_target.cache_files_valid = false;  
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    42
        _some_cache_needs_update = true;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    43
    }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    44
    else
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    45
    {     
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    46
        // loop through all lines in the file
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    47
        while(!symtabcachef.eof())
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    48
        {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    49
            getline(symtabcachef, line);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    50
            
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    51
            if (line.length() > 0 && line[0] != CACHE_COMMENT_CHAR)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    52
            {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    53
                // first entry is the directory|filename|modification_time|symbol_table_size , eg
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    54
                // x:\epoc32\release\armv5\urel\|avkon.dll|1160666488|178
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    55
                string::size_type delim1 = line.find(CACHE_SEP, 0);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    56
                string::size_type delim2 = line.find(CACHE_SEP, delim1+1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    57
                string::size_type delim3 = line.find(CACHE_SEP, delim2+1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    58
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    59
                import_library_info lib_info;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    60
                lib_info.directory = line.substr(0, delim1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    61
                lib_info.filename = line.substr(delim1+1, delim2-delim1-1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    62
                lib_info.mod_time = Str2Int( line.substr(delim2+1, delim3-delim2-1) );
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    63
                unsigned int symbol_table_size = Str2Int( line.substr(delim3+1, line.length()-delim3-1) );
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    64
                
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    65
                // get symbol table
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    66
                vector<string> symbol_table; 
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    67
                for (unsigned int j=0; j<symbol_table_size; j++)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    68
                {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    69
                    getline(symtabcachef, line);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    70
                    symbol_table.push_back( line );
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    71
                }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    72
                
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    73
                lib_info.symbol_table = symbol_table;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    74
                
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    75
                // append binary info to the vectory
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    76
                a_target.import_libraries.push_back( lib_info );
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    77
            }            
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    78
        }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    79
        
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    80
        // check that the last line of the file contains the footer of the cache
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    81
        if (line != CACHE_FOOTER)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    82
        {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    83
            cerr << "Warning: Regenerating corrupted cache of target " << a_target.name  << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    84
            a_target.import_libraries.clear();
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    85
            a_target.cache_files_valid = false;  
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    86
            _some_cache_needs_update = true;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    87
        }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    88
    }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    89
    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    90
    symtabcachef.close();  
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    91
}
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    92
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    93
// ----------------------------------------------------------------------------------------------------------
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    94
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    95
void ReadDataFromDependenciesCache(target& a_target)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    96
{
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    97
    string line;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    98
        	
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    99
    // read data from the dependencies cache file
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   100
	ifstream depcachef(a_target.dep_cache_path.c_str());
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   101
    if (!depcachef.is_open())
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   102
    {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   103
        cerr << "Warning: Regenerating corrupted cache of target " << a_target.name << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   104
        a_target.cache_files_valid = false;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   105
        _some_cache_needs_update = true;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   106
        return;    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   107
    }	
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   108
	
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   109
	getline(depcachef, line);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   110
	if (line != CACHE_DEP_HEADER)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   111
    {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   112
        cerr << "Warning: Regenerating corrupted cache of target " << a_target.name  << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   113
        a_target.cache_files_valid = false;  
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   114
        _some_cache_needs_update = true;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   115
    }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   116
    else
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   117
    {     
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   118
        // loop through all lines in the file
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   119
        while(!depcachef.eof())
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   120
        {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   121
            getline(depcachef, line);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   122
            
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   123
            if (line.length() > 0 && line[0] != CACHE_COMMENT_CHAR)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   124
            {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   125
                // first entry is the directory|filename|binary_format|uid1|uid2|uid3|secureid|vendorid|capabilities|min_heap_size|max_heap_size|stack_size|modification_time|number_of_dependencies , eg
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   126
                // x:\epoc32\release\armv5\urel\|about.exe|EPOC Exe for ARMV4 CPU|0x1000007a|0x100039ce|0x10005a22|0x10005a22|0x101fb657|782384|4096|1048576|8192|1160666488|11
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   127
                string::size_type delim1 = line.find(CACHE_SEP, 0);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   128
                string::size_type delim2 = line.find(CACHE_SEP, delim1+1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   129
                string::size_type delim3 = line.find(CACHE_SEP, delim2+1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   130
                string::size_type delim4 = line.find(CACHE_SEP, delim3+1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   131
                string::size_type delim5 = line.find(CACHE_SEP, delim4+1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   132
                string::size_type delim6 = line.find(CACHE_SEP, delim5+1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   133
                string::size_type delim7 = line.find(CACHE_SEP, delim6+1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   134
                string::size_type delim8 = line.find(CACHE_SEP, delim7+1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   135
                string::size_type delim9 = line.find(CACHE_SEP, delim8+1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   136
                string::size_type delim10 = line.find(CACHE_SEP, delim9+1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   137
                string::size_type delim11 = line.find(CACHE_SEP, delim10+1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   138
                string::size_type delim12 = line.find(CACHE_SEP, delim11+1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   139
                string::size_type delim13 = line.find(CACHE_SEP, delim12+1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   140
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   141
                binary_info b_info;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   142
                b_info.directory = line.substr(0, delim1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   143
                b_info.filename = line.substr(delim1+1, delim2-delim1-1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   144
                b_info.binary_format = line.substr(delim2+1, delim3-delim2-1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   145
                b_info.uid1 = line.substr(delim3+1, delim4-delim3-1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   146
                b_info.uid2 = line.substr(delim4+1, delim5-delim4-1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   147
                b_info.uid3 = line.substr(delim5+1, delim6-delim5-1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   148
                b_info.secureid = line.substr(delim6+1, delim7-delim6-1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   149
                b_info.vendorid = line.substr(delim7+1, delim8-delim7-1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   150
                b_info.capabilities = Str2Int( line.substr(delim8+1, delim9-delim8-1) );
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   151
                b_info.min_heap_size = Str2Int( line.substr(delim9+1, delim10-delim9-1) );
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   152
                b_info.max_heap_size = Str2Int( line.substr(delim10+1, delim11-delim10-1) );
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   153
                b_info.stack_size = Str2Int( line.substr(delim11+1, delim12-delim11-1) );
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   154
                b_info.mod_time = Str2Int( line.substr(delim12+1, delim13-delim12-1) );
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   155
                unsigned int number_of_deps = Str2Int( line.substr(delim13+1, line.length()-delim13-1) );
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   156
                
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   157
                vector<dependency> deps; 
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   158
                for (unsigned int j=0; j<number_of_deps; j++)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   159
                {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   160
                    getline(depcachef, line);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   161
                    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   162
                    // second type entry is filename|number_of_imports , eg
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   163
                    // APPARC.DLL|6
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   164
                    string::size_type delim1 = line.find(CACHE_SEP, 0);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   165
                    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   166
                    dependency dep;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   167
                    dep.filename = line.substr(0, delim1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   168
                    unsigned int number_of_imports = Str2Int( line.substr(delim1+1, line.length()-delim1-1) );
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   169
                    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   170
                    vector<import> imps;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   171
                    for (unsigned int k=0; k<number_of_imports; k++)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   172
                    {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   173
                        getline(depcachef, line);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   174
                        
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   175
                        // third type on entry is funcpos|funcname|is_vtable|vtable_offset, eg
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   176
                        // 121|CApaDocument::Capability() const|0|0
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   177
                        string::size_type delim1 = line.find(CACHE_SEP, 0);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   178
                        string::size_type delim2 = line.find(CACHE_SEP, delim1+1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   179
                        string::size_type delim3 = line.find(CACHE_SEP, delim2+1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   180
                        
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   181
                        import imp;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   182
                        imp.funcpos = Str2Int( line.substr(0, delim1) );
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   183
                        imp.funcname = line.substr(delim1+1, delim2-delim1-1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   184
                        imp.is_vtable = Str2Int( line.substr(delim2+1, delim3-delim2-1) );
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   185
                        imp.vtable_offset = Str2Int( line.substr(delim3+1, line.length()-delim3-1) );
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   186
                        
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   187
                        // append to the import info vector
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   188
                        imps.push_back( imp );
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   189
                    }                     
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   190
                    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   191
                    // now we have import info too
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   192
                    dep.imports = imps;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   193
                    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   194
                    // append to the deps info vector
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   195
                    deps.push_back( dep );
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   196
                                    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   197
                }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   198
                // now we have the dep info too
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   199
                b_info.dependencies = deps;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   200
                
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   201
                // apppend binary info to the vector
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   202
                a_target.binaries.push_back( b_info );
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   203
            }            
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   204
        }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   205
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   206
        // check that the last line of the file contains the footer of the cache
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   207
        if (line != CACHE_FOOTER)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   208
        {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   209
            cerr << "Warning: Regenerating corrupted cache of target " << a_target.name  << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   210
            a_target.binaries.clear();
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   211
            a_target.cache_files_valid = false;  
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   212
            _some_cache_needs_update = true;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   213
        }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   214
    }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   215
    depcachef.close();         
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   216
}
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   217
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   218
// ----------------------------------------------------------------------------------------------------------
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   219
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   220
void GetDataFromImportTables(target& a_target)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   221
{
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   222
    // read data from import libraries if needed
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   223
    for (unsigned int i=0; i<a_target.lib_files.size(); i++)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   224
    {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   225
        bool is_new_file = true;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   226
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   227
        vector<string> symbol_table;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   228
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   229
        if (_cl_print_debug)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   230
            cerr << "Processing " << a_target.release_lib_dir << a_target.lib_files.at(i) << "...";
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   231
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   232
        // if not generating a clean cache, check if this file was already in the cache 
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   233
        if (!_cl_generate_clean_cache)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   234
        {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   235
            // first try to find existing file
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   236
            bool update_file = false;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   237
            int position = 0;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   238
            
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   239
            for (unsigned int j=0; j<a_target.import_libraries.size(); j++)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   240
            {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   241
                // check if names match
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   242
                if (StringICmpFileNamesWithoutExtension(a_target.lib_files.at(i), a_target.import_libraries.at(j).filename) == 0)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   243
                {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   244
                    // the file was already found from the cache
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   245
                    is_new_file = false;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   246
                    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   247
                    // compare modification times
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   248
                    struct stat stat_p;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   249
                    stat((a_target.release_lib_dir + a_target.lib_files.at(i)).c_str(), &stat_p); // get new stats
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   250
                    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   251
                    if (!TimestampsMatches(a_target.import_libraries.at(j).mod_time, stat_p.st_mtime))
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   252
                    {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   253
                        // time stamps are different so needs to update the file
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   254
                        update_file = true;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   255
                        position = j;                         
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   256
                    }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   257
                    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   258
                    // there can't be anymore same names, so break the loop anyway
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   259
                    break;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   260
                }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   261
            }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   262
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   263
            // get the new data
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   264
            if (update_file)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   265
            {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   266
                a_target.cache_files_valid = false;  // cache files on disk must be rewritten
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   267
                
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   268
                import_library_info& lib_info = a_target.import_libraries.at(position);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   269
                lib_info.directory = a_target.release_lib_dir;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   270
                                 
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   271
                if (_cl_use_gcc)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   272
                {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   273
                    GetSymbolTableWithNM(_gcc_nm_location, a_target.release_lib_dir, a_target.lib_files.at(i), symbol_table);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   274
                }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   275
                else if (_cl_use_gcce)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   276
                {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   277
                    if (_cl_use_libs)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   278
                    {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   279
                        GetSymbolTableWithNM(_gcce_nm_location, a_target.release_lib_dir, a_target.lib_files.at(i), symbol_table);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   280
                    }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   281
                    else
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   282
                    {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   283
                        GetSymbolTableWithReadelf(_gcce_readelf_location, _gcce_cfilt_location, a_target.release_lib_dir, a_target.lib_files.at(i), symbol_table);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   284
                    }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   285
                }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   286
                else if (_cl_use_rvct)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   287
                {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   288
                    if (_cl_use_libs)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   289
                    {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   290
                        GetSymbolTableWithArmar(_rvct_armar_location, _rvct_cfilt_location, a_target.release_lib_dir, a_target.lib_files.at(i), symbol_table);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   291
                    }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   292
                    else
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   293
                    {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   294
                        GetSymbolTableWithFromelf(_rvct_fromelf_location, _rvct_cfilt_location, a_target.release_lib_dir, a_target.lib_files.at(i), symbol_table);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   295
                    }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   296
                }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   297
                
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   298
                lib_info.symbol_table = symbol_table;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   299
                
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   300
                // get statistics of the file and set the modification time
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   301
                struct stat stat_p;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   302
                stat((a_target.release_lib_dir + a_target.lib_files.at(i)).c_str(), &stat_p);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   303
                lib_info.mod_time = stat_p.st_mtime;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   304
                
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   305
                // record changed import libraries
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   306
                _changed_import_libraries.push_back( lib_info );
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   307
            }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   308
        }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   309
        
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   310
        // this is a new file, get info and append it to the vector
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   311
        if (is_new_file)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   312
        {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   313
            a_target.cache_files_valid = false;  // cache files on disk must be rewritten
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   314
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   315
            // get the symbol tables of the library
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   316
            if (_cl_use_gcc)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   317
            {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   318
                GetSymbolTableWithNM(_gcc_nm_location, a_target.release_lib_dir, a_target.lib_files.at(i), symbol_table);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   319
            }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   320
            else if (_cl_use_gcce)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   321
            {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   322
                if (_cl_use_libs)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   323
                {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   324
                    GetSymbolTableWithNM(_gcce_nm_location, a_target.release_lib_dir, a_target.lib_files.at(i), symbol_table);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   325
                }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   326
                else
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   327
                {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   328
                    GetSymbolTableWithReadelf(_gcce_readelf_location, _gcce_cfilt_location, a_target.release_lib_dir, a_target.lib_files.at(i), symbol_table);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   329
                }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   330
            }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   331
            else if (_cl_use_rvct)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   332
            {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   333
                if (_cl_use_libs)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   334
                {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   335
                    GetSymbolTableWithArmar(_rvct_armar_location, _rvct_cfilt_location, a_target.release_lib_dir, a_target.lib_files.at(i), symbol_table);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   336
                }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   337
                else
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   338
                {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   339
                    GetSymbolTableWithFromelf(_rvct_fromelf_location, _rvct_cfilt_location, a_target.release_lib_dir, a_target.lib_files.at(i), symbol_table);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   340
                }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   341
            }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   342
            
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   343
            // get statistics of the file
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   344
            struct stat stat_p;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   345
            stat((a_target.release_lib_dir + a_target.lib_files.at(i)).c_str(), &stat_p);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   346
            
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   347
            // create a new entry to list of all import libraries
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   348
            import_library_info lib_info;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   349
            lib_info.directory = a_target.release_lib_dir;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   350
            lib_info.filename = a_target.lib_files.at(i);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   351
            lib_info.mod_time = stat_p.st_mtime;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   352
            lib_info.symbol_table = symbol_table;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   353
            
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   354
            a_target.import_libraries.push_back( lib_info );
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   355
        }         
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   356
        if (_cl_print_debug)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   357
            cerr << "OK" << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   358
        else
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   359
            ShowProgressInfo(_current_progress_percentage, _current_progress, _max_progress, false);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   360
    }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   361
}
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   362
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   363
// ----------------------------------------------------------------------------------------------------------
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   364
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   365
void GetDataFromBinaries(target& a_target)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   366
{
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   367
    // read data from binaries
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   368
    for (unsigned int i=0; i<a_target.bin_files.size(); i++)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   369
    {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   370
        bool is_new_file = true;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   371
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   372
        if (_cl_print_debug)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   373
            cerr << "Processing " << a_target.release_bin_dir << a_target.bin_files.at(i) << "...";
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   374
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   375
        // if not generating a clean cache, check if this file was already in the cache 
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   376
        if (!_cl_generate_clean_cache)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   377
        {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   378
            // first try to find existing file
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   379
            bool update_file = false;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   380
            int position = 0;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   381
            
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   382
            for (unsigned int j=0; j<a_target.binaries.size(); j++)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   383
            {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   384
                // check if names match
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   385
                if (StringICmp(a_target.bin_files.at(i).c_str(), a_target.binaries.at(j).filename.c_str()) == 0)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   386
                {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   387
                    is_new_file = false;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   388
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   389
                    // compare modification times
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   390
                    struct stat stat_p;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   391
                    stat((a_target.release_bin_dir + a_target.bin_files.at(i)).c_str(), &stat_p); // get new stats
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   392
                    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   393
                    if (!TimestampsMatches(a_target.binaries.at(j).mod_time, stat_p.st_mtime))
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   394
                    {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   395
                        // time stamps are different so needs to update the file
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   396
                        update_file = true;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   397
                        position = j;   
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   398
                        break; 
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   399
                    }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   400
                    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   401
                    // the entry also needs to be updated if any import library which this binary has dependency on has changed
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   402
                    for (unsigned int k=0; k<_changed_import_libraries.size(); k++)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   403
                    {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   404
                        for (unsigned int p=0; p<a_target.binaries.at(j).dependencies.size(); p++)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   405
                        {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   406
                            // check for file name match
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   407
                            if (StringICmpFileNamesWithoutExtension(a_target.binaries.at(j).dependencies.at(p).filename, _changed_import_libraries.at(k).filename) == 0)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   408
                            {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   409
                                update_file = true;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   410
                                position = j;   
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   411
                                break;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   412
                            }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   413
                        }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   414
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   415
                        // no need to loop anymore if the file needs update
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   416
                        if (update_file)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   417
                            break;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   418
                    }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   419
                    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   420
                    // there can't be anymore same names, so break the loop anyway
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   421
                    break;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   422
                }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   423
            }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   424
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   425
            // get the new data
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   426
            if (update_file)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   427
            {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   428
                a_target.cache_files_valid = false;  // cache files on disk must be rewritten
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   429
                
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   430
                binary_info& b_info = a_target.binaries.at(position);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   431
                b_info.directory = a_target.release_bin_dir;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   432
                                 
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   433
                GetImportTableWithPetran(_petran_location, b_info);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   434
                
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   435
                // get statistics of the file and set the modification time
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   436
                struct stat stat_p;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   437
                stat((a_target.release_bin_dir + a_target.bin_files.at(i)).c_str(), &stat_p);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   438
                b_info.mod_time = stat_p.st_mtime;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   439
            }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   440
        }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   441
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   442
        // this is a new file, get info and append it to the vector
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   443
        if (is_new_file)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   444
        {            
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   445
            a_target.cache_files_valid = false;  // cache files on disk must be rewritten
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   446
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   447
            binary_info b_info;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   448
            b_info.directory = a_target.release_bin_dir;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   449
            b_info.filename = a_target.bin_files.at(i);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   450
                             
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   451
            GetImportTableWithPetran(_petran_location, b_info);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   452
            
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   453
            // get statistics of the file and set the modification time
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   454
            struct stat stat_p;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   455
            stat((a_target.release_bin_dir + a_target.bin_files.at(i)).c_str(), &stat_p);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   456
            b_info.mod_time = stat_p.st_mtime;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   457
            
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   458
            // create a new entry to list of all binary files
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   459
            a_target.binaries.push_back( b_info );
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   460
        }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   461
        
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   462
        if (_cl_print_debug)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   463
            cerr << "OK" << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   464
        else
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   465
            ShowProgressInfo(_current_progress_percentage, _current_progress, _max_progress, false);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   466
    }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   467
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   468
}
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   469
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   470
// ----------------------------------------------------------------------------------------------------------
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   471
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   472
void WriteDataToSymbolTableCacheFile(const target& a_target)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   473
{
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   474
    // open the cache file for writing
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   475
    ofstream symtabcachef(a_target.st_cache_path.c_str(), ios::trunc);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   476
    if (!symtabcachef.is_open())
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   477
    {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   478
        symtabcachef.close();
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   479
		cerr << endl << "ERROR: Cannot open " << a_target.st_cache_path << " for writing!" << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   480
		cerr << "Please check that the directory exists and there are no write permission problems" << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   481
		exit(EXIT_CANNOT_WRITE_TO_CACHE_FILE);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   482
    }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   483
            
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   484
    // write data to the cache file
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   485
    symtabcachef << CACHE_ST_HEADER << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   486
    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   487
    for (unsigned int i=0; i<a_target.import_libraries.size(); i++)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   488
    {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   489
        vector<string> symbol_table = a_target.import_libraries.at(i).symbol_table;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   490
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   491
        symtabcachef << a_target.import_libraries.at(i).directory << CACHE_SEP << a_target.import_libraries.at(i).filename << CACHE_SEP
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   492
                     << a_target.import_libraries.at(i).mod_time << CACHE_SEP << symbol_table.size() << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   493
        
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   494
        for (unsigned int j=0; j<symbol_table.size(); j++)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   495
        {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   496
            symtabcachef << symbol_table.at(j) << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   497
        }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   498
    }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   499
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   500
    // write footer, note that there is no eol char
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   501
    symtabcachef << CACHE_FOOTER;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   502
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   503
    symtabcachef.close(); 
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   504
}
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   505
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   506
// ----------------------------------------------------------------------------------------------------------
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   507
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   508
void WriteDataToDependenciesCacheFile(const target& a_target)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   509
{
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   510
    // open the cache file for writing
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   511
    ofstream depcachef(a_target.dep_cache_path.c_str(), ios::trunc);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   512
    if (!depcachef.is_open())
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   513
    {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   514
        depcachef.close();
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   515
		cerr << endl << "ERROR: Cannot open " << a_target.dep_cache_path << " for writing!" << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   516
		cerr << "Please check that the directory exists and there are no write permission problems" << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   517
		exit(EXIT_CANNOT_WRITE_TO_CACHE_FILE);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   518
    }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   519
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   520
    // write data to the cache file
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   521
    depcachef << CACHE_DEP_HEADER << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   522
    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   523
    for (unsigned int i=0; i<a_target.binaries.size(); i++)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   524
    {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   525
        vector<dependency> deps = a_target.binaries.at(i).dependencies;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   526
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   527
        depcachef << a_target.binaries.at(i).directory << CACHE_SEP << a_target.binaries.at(i).filename << CACHE_SEP
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   528
                  << a_target.binaries.at(i).binary_format << CACHE_SEP << a_target.binaries.at(i).uid1 << CACHE_SEP
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   529
                  << a_target.binaries.at(i).uid2 << CACHE_SEP << a_target.binaries.at(i).uid3 << CACHE_SEP
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   530
                  << a_target.binaries.at(i).secureid << CACHE_SEP << a_target.binaries.at(i).vendorid << CACHE_SEP
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   531
                  << a_target.binaries.at(i).capabilities << CACHE_SEP << a_target.binaries.at(i).min_heap_size << CACHE_SEP
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   532
                  << a_target.binaries.at(i).max_heap_size << CACHE_SEP << a_target.binaries.at(i).stack_size << CACHE_SEP
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   533
                  << a_target.binaries.at(i).mod_time << CACHE_SEP << deps.size() << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   534
        
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   535
        for (unsigned int j=0; j<deps.size(); j++)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   536
        {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   537
            vector<import> imps = deps.at(j).imports;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   538
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   539
            depcachef << deps.at(j).filename << CACHE_SEP << imps.size() << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   540
            
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   541
            for (unsigned int k=0; k<imps.size(); k++)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   542
            {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   543
                depcachef << imps.at(k).funcpos << CACHE_SEP << imps.at(k).funcname << CACHE_SEP << imps.at(k).is_vtable
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   544
                          << CACHE_SEP << imps.at(k).vtable_offset << endl;   
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   545
            }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   546
        }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   547
    }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   548
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   549
    // write footer, note that there is no eol char
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   550
    depcachef << CACHE_FOOTER;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   551
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   552
    depcachef.close();  
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   553
}
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   554
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   555
// ----------------------------------------------------------------------------------------------------------
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   556
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   557