/*
 $License:
    Copyright (C) 2011 InvenSense Corporation, All Rights Reserved.
 $
 */
/******************************************************************************
 *
 * $Id: fopenCMake.c 5629 2011-06-11 03:13:08Z mcaramello $
 *
 *****************************************************************************/

#include <string.h>

#include "fopenCMake.h"
#include "path_configure.h"

/**
 *  @brief  Replacement for fopen that concatenates the location of the 
 *          source tree onto the filename path. 
 *          It looks in 3 locations:
 *              - in the current directory, 
 *              - then it looks in "..", 
 *              - lastly in the define UNITTEST_SOURCE_DIR which 
 *                gets defined by CMake.
 * @param filename 
 *              Filename relative to base of source directory.
 * @param prop 
 *              Second argument to fopen.
 */
FILE *fopenCMake(const char *filename, const char *prop)
{
    char path[150];
    FILE *file;

    // Look first in current directory
    file = fopen(filename, prop);
    if (file == NULL) {
        // Now look in ".."
#ifdef WIN32
        strcpy(path, "..\\");
#else
        strcpy(path, "../");
#endif
        strcat(path, filename);
        file = fopen(path, prop);
        if (file == NULL) {
            // Now look in definition by CMake
            strcpy(path, PATH_SOURCE_DIR);
            strcat(path, filename);
            file = fopen(path, prop);
        }
    }
    return file;
}


