srcanamdw/appdep/src/appdep_sisfiles.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:  Handling of sis files 
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
// Note that in C/C++ code \ has been replaced with \\ and " with \".
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    23
// ----------------------------------------------------------------------------------------------------------
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    24
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    25
void DoInitialChecksAndPreparationsForSisFiles()
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    26
{
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    27
    // specify full location for dumpsis
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    28
    _dumpsis_location = _cl_releasedir + DUMPSIS_LOCATION;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    29
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    30
    // check if dumpsis can be found
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    31
 	if (!FileExists(_dumpsis_location))
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    32
	{
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    33
		cerr << "ERROR: Unable to find " + _dumpsis_location << ", check -release param" << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    34
		cerr << "Please notice that this feature is available only in Symbian OS 9.x" << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    35
		cerr << "It is possible the user to copy dumpsis.exe from some other release under" << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    36
		cerr << "this release to support this feature." << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    37
		exit(EXIT_DUMPSIS_NOT_FOUND);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    38
	}         
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    39
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    40
    // insert quotes to the dumpsis location to avoid any problems caused by white spaces
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    41
    InsertQuotesToFilePath(_dumpsis_location);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    42
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    43
    // parse commandline argument "sisfiles" from sisfile;sisfile;...
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    44
    int last_found_semicolon_pos = -1;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    45
    for (unsigned int i=0; i<_cl_sisfiles.length(); i++)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    46
    {   
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    47
        // try to find ';' characters 
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    48
        string::size_type semicolon_pos = _cl_sisfiles.find(";", i);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    49
        
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    50
        if (semicolon_pos == string::npos)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    51
        {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    52
            // could not find the ';' character, append last part of the list
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    53
            string sis_file = _cl_sisfiles.substr(last_found_semicolon_pos+1,_cl_sisfiles.length()-last_found_semicolon_pos-1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    54
            _sisfiles.push_back(sis_file);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    55
            break;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    56
        }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    57
        else
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    58
        {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    59
            // found a ';' character, append to the list, but needs to check if there are more
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    60
            string sis_file = _cl_sisfiles.substr(last_found_semicolon_pos+1, semicolon_pos-last_found_semicolon_pos-1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    61
            
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    62
            if (sis_file.length() > 0)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    63
                _sisfiles.push_back(sis_file);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    64
            
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    65
            last_found_semicolon_pos = semicolon_pos;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    66
            i = last_found_semicolon_pos;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    67
        }    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    68
    }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    69
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    70
    // check that all given sisfiles can be found and it is supported
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    71
    for (unsigned int i=0; i<_sisfiles.size(); i++)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    72
    { 
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    73
        // report an error if the file does not exist
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    74
        if (!FileExists(_sisfiles.at(i)))
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    75
        {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    76
     		cerr << "ERROR: Unable to find " + _sisfiles.at(i) << ", check -sisfiles parameter" << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    77
    		exit(EXIT_SIS_FILE_NOT_FOUND);           
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
        // open the sis file for reading to check if it is supported    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    81
        ifstream sisf(_sisfiles.at(i).c_str(), ios::binary);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    82
		if (sisf.is_open())
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    83
		{
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    84
            int c1, c2, c3, c4;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    85
            c1 = sisf.get();
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    86
            c2 = sisf.get();
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    87
            c3 = sisf.get();
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    88
            c4 = sisf.get();
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    89
            
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    90
            // in valid sis first four bytes of the file are 7A1A2010
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    91
            if (c1==0x7A && c2==0x1A && c3==0x20 && c4==0x10)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    92
            {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    93
                //cerr << _sisfiles.at(i) << " is supported" << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    94
            }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    95
            else
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    96
            {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    97
                // if starting from offset 8, four next bytes are 19040010, the file is
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    98
                // unsupported SIS file used in previous Symbian OS releases.    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    99
                sisf.seekg(8, ios::beg);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   100
                c1 = sisf.get();
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   101
                c2 = sisf.get();
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   102
                c3 = sisf.get();
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   103
                c4 = sisf.get();
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   104
                sisf.close();
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   105
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   106
                if (c1==0x19 && c2==0x04 && c3==0x00 && c4==0x10)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   107
                {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   108
                    cerr << "ERROR: " + _sisfiles.at(i) << " is a pre-Symbian OS 9.x" << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   109
                    cerr << "sisfile which is not supported, check -sisfiles parameter" << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   110
                    exit(EXIT_SIS_FILE_NOT_SUPPORTED); 
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   111
                }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   112
                else
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   113
                {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   114
                    cerr << "ERROR: " + _sisfiles.at(i) << " is not a valid sis file," << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   115
                    cerr << "check -sisfiles parameter" << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   116
                    exit(EXIT_NOT_SIS_FILE);                     
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   117
                }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   118
            }    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   119
            sisf.close();
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   120
        }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   121
        else
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   122
        {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   123
     		cerr << "ERROR: Cannot open " + _sisfiles.at(i) << " for reading, check -sisfiles parameter" << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   124
    		exit(EXIT_SIS_FILE_CANNOT_OPEN_FOR_READING); 
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   125
        }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   126
    }    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   127
}
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   128
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   129
// ----------------------------------------------------------------------------------------------------------
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   130
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   131
void AnalyseSisFiles()
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   132
{
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   133
    // create a new target and set some defaults
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   134
    target sis_target;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   135
    sis_target.name = "sis";
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   136
    sis_target.cache_dir = _cl_cachedir + sis_target.name + DIR_SEPARATOR;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   137
    sis_target.dep_cache_path = sis_target.cache_dir + CACHE_DEP_FILENAME;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   138
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   139
    cerr << "Analysing sis files..." << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   140
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   141
    // define path to a temp directory where dumpsis will extract the files    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   142
    const string tempdir = _cl_cachedir + SIS_TEMP_DIR + DIR_SEPARATOR;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   143
    const string tempdir2 = _cl_cachedir + SIS_TEMP_DIR;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   144
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   145
    // do analysis for each file
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   146
    for (unsigned int i=0; i<_sisfiles.size(); i++)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   147
    { 
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   148
        // create the temporary directory
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   149
        MkDirAll(tempdir);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   150
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   151
        cerr << "Binaries in " << _sisfiles.at(i) << " are:" << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   152
        
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   153
        // due to bugginess of a specific version of dumpsis, we need to copy the source file under the temporary directory
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   154
        const string new_sis_loc = tempdir + "tempsis.sis";
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   155
        
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   156
        ifstream src_sis_f(_sisfiles.at(i).c_str(), ios::binary);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   157
        if (src_sis_f.is_open())
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   158
		{
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   159
            ofstream trgt_sis_f(new_sis_loc.c_str(), ios::binary);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   160
            if (trgt_sis_f.is_open())
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   161
    		{
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   162
                // read all bytes from source and write to the target
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   163
                int c1;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   164
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   165
                while(!src_sis_f.eof())
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   166
                {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   167
                    c1 = src_sis_f.get();
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   168
                    trgt_sis_f.put(c1);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   169
                }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   170
                
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   171
                trgt_sis_f.close();            
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   172
            
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   173
            }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   174
            else
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   175
            {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   176
         		cerr << "ERROR: Cannot open " + new_sis_loc << " for writing, check write permissions" << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   177
        		exit(EXIT_TEMP_SIS_FILE_CANNOT_OPEN_FOR_WRITING); 
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   178
            }             
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   179
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   180
            src_sis_f.close();
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   181
                        
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   182
        }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   183
        else
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   184
        {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   185
     		cerr << "ERROR: Cannot open " + _sisfiles.at(i) << " for reading, check -sisfiles parameter" << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   186
    		exit(EXIT_SIS_FILE_CANNOT_OPEN_FOR_READING); 
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   187
        }        
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   188
        
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
        // execute dumpsis        
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   192
        string cmd = _dumpsis_location + " -x -d \"" + tempdir2 + "\" \"" + new_sis_loc + "\" " + CERR_TO_NULL;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   193
        
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   194
        vector<string> tempVector;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   195
        ExecuteCommand(cmd, tempVector);
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
        // check if pkg file found
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   199
        string pkgfile_location = tempdir + "tempsis.pkg";
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   200
        
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   201
        if (!FileExists(pkgfile_location))
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   202
        {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   203
            // try again with an alternative
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   204
            pkgfile_location = tempdir + "tempsis.sis.pkg";
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   205
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   206
            if (!FileExists(pkgfile_location))
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   207
            {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   208
         		RemoveDirectoryWithAllFiles(tempdir);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   209
                cerr << "ERROR: Dumpsis failed for " << _sisfiles.at(i) << " since it does not contain a pkg file, check -sisfiles parameter" << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   210
        		exit(EXIT_NO_PKG_FILE_FOUND); 
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   211
            }            
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   212
        }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   213
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   214
        // open the pkg file for reading
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   215
        ifstream pkgf(pkgfile_location.c_str(), ios::binary);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   216
		if (pkgf.is_open())
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   217
		{
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   218
            int c1, c2;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   219
            c1 = pkgf.get();
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   220
            c2 = pkgf.get();
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   221
            
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   222
            // we only support unicode format
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   223
            if (c1 == 0xFF && c2 == 0xFE)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   224
            {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   225
                string line;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   226
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   227
                 // read more chars
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   228
                 while(!pkgf.eof())
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   229
                 {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   230
                    c1 = pkgf.get();
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   231
                    c2 = pkgf.get();
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   232
                    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   233
                 //   if (c1 == 0x0D && c2 == 0x00)  // new line marker #1
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   234
                  //  {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   235
                      //  c1 = pkgf.get();
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   236
                      //  c2 = pkgf.get();                        
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   237
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   238
                        if (c1 == 0x0A && c2 == 0x00)  // new line marker #2
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   239
                        {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   240
                            // full line is now available, parse it
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   241
                                                        
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   242
                            boost::regex re1("^\\\"(.+)\\\"-\\\".*\\\\(\\S+)\\\",.*$");
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   243
                            boost::cmatch matches1;                
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   244
                            if (boost::regex_match(line.c_str(), matches1, re1))
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   245
                            {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   246
                                // match found
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   247
                                string ms1(matches1[1].first, matches1[1].second); // source name
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   248
                                string ms2(matches1[2].first, matches1[2].second); // target name
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   249
                                
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   250
                                binary_info b_info;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   251
                                b_info.directory = tempdir;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   252
                                b_info.filename = ms1;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   253
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   254
                                GetImportTableWithPetran(_petran_location, b_info);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   255
                                
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   256
                                // make sure that Petran succeeded for this file since we don't do any file
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   257
                                // extension checks when parsering the file
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   258
                                if (b_info.binary_format != UNKNOWN)
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   259
                                {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   260
                                    // print name of the destination binary
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   261
                                    cerr << ms2 << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   262
                                
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   263
                                    b_info.directory = "";
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   264
                                    b_info.filename = ms2;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   265
    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   266
                                    // get statistics of the file and set the modification time
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   267
                                    struct stat stat_p;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   268
                                    stat((tempdir + ms1).c_str(), &stat_p);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   269
                                    b_info.mod_time = stat_p.st_mtime;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   270
                                    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   271
                                    // create a new entry to list of binary files
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   272
                                    sis_target.binaries.push_back( b_info );                                      
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   273
                                }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   274
                                              
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   275
                            }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   276
                            
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   277
                            // clear the buffer since we start scanning another line
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   278
                            line = "";
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   279
                        }                        
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
                        char c(c1);  // simple unicode to ascii conversion, just ignore c2
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   284
                        line += c;  // append the char to end of the line      
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   285
                    }    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   286
                 }       
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   287
            }
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   288
            else
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   289
            {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   290
                pkgf.close();
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   291
                RemoveDirectoryWithAllFiles(tempdir);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   292
                cerr << "ERROR: Pkg file " + pkgfile_location << " is not supported, check -sisfiles parameter" << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   293
                exit(EXIT_PKG_FILE_CANNOT_OPEN_FOR_READING); 
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   294
            } 
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
        else
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   298
        {
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   299
      		RemoveDirectoryWithAllFiles(tempdir);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   300
     		cerr << "ERROR: Cannot open " + pkgfile_location << " for reading, check -sisfiles parameter" << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   301
    		exit(EXIT_PKG_FILE_CANNOT_OPEN_FOR_READING); 
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   302
        }                
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   303
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   304
        // close handles and clear any temp files        
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   305
        pkgf.close();
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   306
        RemoveDirectoryWithAllFiles(tempdir);
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
    // make sure that the cache directory exists
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   310
    MkDirAll(sis_target.cache_dir); 
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   311
        
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   312
    // write the dependencies cache of the sis files
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   313
    WriteDataToDependenciesCacheFile(sis_target);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   314
    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   315
    // append to targets
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   316
    _targets.push_back(sis_target);
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   317
    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   318
    cerr << endl;
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   319
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   320
}
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   321
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   322
// ----------------------------------------------------------------------------------------------------------
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   323
    
509e4801c378 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   324