// Module:  Log4CPLUS
// File:    global-init.cxx
// Created: 5/2003
// Author:  Tad E. Smith
//
//
// Copyright (C) Tad E. Smith  All rights reserved.
//
// This software is published under the terms of the Apache Software
// License version 1.1, a copy of which has been included with this
// distribution in the LICENSE.APL file.
//
// $Log: global-init.cxx,v $
// Revision 1.6  2003/08/22 06:54:18  tcsmith
// Now set the initialized flag in the initializeLog4cplus() method.
//
// Revision 1.5  2003/08/08 05:36:51  tcsmith
// Changed the #if checks to look for _WIN32 and not WIN32.
//
// Revision 1.4  2003/06/29 16:48:24  tcsmith
// Modified to support that move of the getLogLog() method into the LogLog
// class.
//
// Revision 1.3  2003/06/03 20:25:19  tcsmith
// Modified initializeLog4cplus() so that it can safely be called multiple
// times.
//
// Revision 1.2  2003/05/04 08:41:33  tcsmith
// Formatting cleanup.
//
// Revision 1.1  2003/05/04 07:25:16  tcsmith
// Initial version.
//

#include <log4cplus/config.h>
#include <log4cplus/logger.h>
#include <log4cplus/ndc.h>
#include <log4cplus/helpers/loglog.h>


// Forward Declarations
namespace log4cplus {
    void initializeFactoryRegistry();
}


namespace log4cplus {
    void initializeLog4cplus() {
        static bool initialized = false;
        if(!initialized) {
            log4cplus::helpers::LogLog::getLogLog();
            getNDC();
            Logger::getRoot();
            initializeFactoryRegistry();
            initialized = true;
        }
    }
}


#if !defined(_WIN32) || !defined(LOG4CPLUS_BUILD_DLL)
namespace {

    class _static_log4cplus_initializer {
    public:
        _static_log4cplus_initializer() {
            log4cplus::initializeLog4cplus();
        }
    } initializer;
}


#else /* Built as part of a WIN32 DLL */ 

BOOL WINAPI DllMain(HINSTANCE hinstDLL,  // handle to DLL module
                    DWORD fdwReason,     // reason for calling function
                    LPVOID lpReserved )  // reserved
{
    // Perform actions based on the reason for calling.
    switch( fdwReason ) 
    { 
        case DLL_PROCESS_ATTACH:
            log4cplus::initializeLog4cplus();
            break;

        case DLL_THREAD_ATTACH:
         // Do thread-specific initialization.
            break;

        case DLL_THREAD_DETACH:
         // Do thread-specific cleanup.
            break;

        case DLL_PROCESS_DETACH:
         // Perform any necessary cleanup.
            break;
    }

    return TRUE;  // Successful DLL_PROCESS_ATTACH.
}
 
#endif




syntax highlighted by Code2HTML, v. 0.9.1