From 5042e3cf0d3514552769e441f5aad590c8eaf967 Mon Sep 17 00:00:00 2001 From: kergoth Date: Fri, 01 Nov 2002 00:10:42 +0000 Subject: Adding qmake in preperation for new build system --- (limited to 'qmake/tools/qlibrary_unix.cpp') diff --git a/qmake/tools/qlibrary_unix.cpp b/qmake/tools/qlibrary_unix.cpp new file mode 100644 index 0000000..f0fbdf6 --- a/dev/null +++ b/qmake/tools/qlibrary_unix.cpp @@ -0,0 +1,163 @@ +/**************************************************************************** +** $Id$ +** +** Implementation of QLibraryPrivate class +** +** Created : 2000-01-01 +** +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. +** +** This file is part of the tools module of the Qt GUI Toolkit. +** +** This file may be distributed under the terms of the Q Public License +** as defined by Trolltech AS of Norway and appearing in the file +** LICENSE.QPL included in the packaging of this file. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition +** licenses may use this file in accordance with the Qt Commercial License +** Agreement provided with the Software. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for +** information about Qt Commercial License Agreements. +** See http://www.trolltech.com/qpl/ for QPL licensing information. +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#include "qplatformdefs.h" +#include "private/qlibrary_p.h" + +#ifndef QT_NO_LIBRARY + +#if defined(QT_AOUT_UNDERSCORE) +#include +#endif + +/* + The platform dependent implementations of + - loadLibrary + - freeLibrary + - resolveSymbol + + It's not too hard to guess what the functions do. +*/ + +#if defined(QT_HPUX_LD) // for HP-UX < 11.x and 32 bit + +bool QLibraryPrivate::loadLibrary() +{ + if ( pHnd ) + return TRUE; + + QString filename = library->library(); + + pHnd = (void*)shl_load( filename.latin1(), BIND_DEFERRED | BIND_NONFATAL | DYNAMIC_PATH, 0 ); +#if defined(QT_DEBUG) || defined(QT_DEBUG_COMPONENT) + if ( !pHnd ) + qWarning( "%s: failed to load library!", filename.latin1() ); +#endif + return pHnd != 0; +} + +bool QLibraryPrivate::freeLibrary() +{ + if ( !pHnd ) + return TRUE; + + if ( shl_unload( (shl_t)pHnd ) ) { +#if defined(QT_DEBUG) || defined(QT_DEBUG_COMPONENT) + QString filename = library->library(); + qWarning( "%s: Failed to unload library!", filename.latin1() ); +#endif + return FALSE; + } + pHnd = 0; + return TRUE; +} + +void* QLibraryPrivate::resolveSymbol( const char* symbol ) +{ + if ( !pHnd ) + return 0; + + void* address = 0; + if ( shl_findsym( (shl_t*)&pHnd, symbol, TYPE_UNDEFINED, &address ) < 0 ) { +#if defined(QT_DEBUG_COMPONENT) + QString filename = library->library(); + qWarning( "%s: couldn't resolve symbol \"%s\"", filename.latin1(), symbol ); +#endif + } + return address; +} + +#else // POSIX +#include + +bool QLibraryPrivate::loadLibrary() +{ + if ( pHnd ) + return TRUE; + + QString filename = library->library(); + + pHnd = dlopen( filename.latin1(), RTLD_LAZY ); +#if defined(QT_DEBUG) || defined(QT_DEBUG_COMPONENT) + if ( !pHnd ) + qWarning( "%s", dlerror() ); +#endif + return pHnd != 0; +} + +bool QLibraryPrivate::freeLibrary() +{ + if ( !pHnd ) + return TRUE; + + if ( dlclose( pHnd ) ) { +#if defined(QT_DEBUG) || defined(QT_DEBUG_COMPONENT) + qWarning( "%s", dlerror() ); +#endif + return FALSE; + } + + pHnd = 0; + return TRUE; +} + +void* QLibraryPrivate::resolveSymbol( const char* symbol ) +{ + if ( !pHnd ) + return 0; + +#if defined(QT_AOUT_UNDERSCORE) + // older a.out systems add an underscore in front of symbols + char* undrscr_symbol = new char[strlen(symbol)+2]; + undrscr_symbol[0] = '_'; + strcpy(undrscr_symbol+1, symbol); + void* address = dlsym( pHnd, undrscr_symbol ); + delete [] undrscr_symbol; +#else + void* address = dlsym( pHnd, symbol ); +#endif +#if defined(QT_DEBUG_COMPONENT) + const char* error = dlerror(); + if ( error ) + qWarning( "%s", error ); +#endif + return address; +} + +#endif // POSIX + +#endif -- cgit v0.9.0.2