void QgsApplication::setPrefixPath( const QString thePrefixPath, bool useDefaultPaths ) { mPrefixPath = thePrefixPath; #if defined(_MSC_VER) if ( mPrefixPath.endsWith( "/bin" ) ) { mPrefixPath.chop( 4 ); } #endif if ( useDefaultPaths ) { setPluginPath( mPrefixPath + "/" + QString( QGIS_PLUGIN_SUBDIR ) ); setPkgDataPath( mPrefixPath + "/" + QString( QGIS_DATA_SUBDIR ) ); } mLibraryPath = mPrefixPath + "/" + QGIS_LIB_SUBDIR + "/"; mLibexecPath = mPrefixPath + "/" + QGIS_LIBEXEC_SUBDIR + "/"; }
CCoreApplication< APPLICATION, SETTINGS >::CCoreApplication( int &argc, char **argv, bool GUIenabled, QString customConfigPath ) //customConfigPath = QString() : base_t( argc, argv, GUIenabled, customConfigPath.isEmpty() ? smApplicationPaths->mInternalDataDir.c_str() : customConfigPath ) , mSettings( *smApplicationPaths, "ESA", q2t< std::string >( QgsApplication::applicationName() ) ) { LOG_TRACE( "Starting application instance construction..." ); // v4 //#ifdef WIN32 //#ifdef _DEBUG // _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); //#endif //#endif assert__( smPrologueCalled ); if ( !smPrologueCalled ) throw CException( "CCoreApplication Prologue must be called before application construction." ); CheckRunMode(); CreateSplash(); // QGIS paths // setPkgDataPath( mSettings.BratPaths().mInternalDataDir.c_str() ); // returned by QgsApplication::srsDbFilePath(); variable: mPkgDataPath LOG_TRACE( "srsDbFilePath==" + srsDbFilePath() ); LOG_TRACE( "showSettings==" + showSettings() ); LOG_TRACE( "qgisSettingsDirPath==" + qgisSettingsDirPath() ); LOG_TRACE( "qgisUserDbFilePath==" + qgisUserDbFilePath() ); //variable mConfigPath LOG_TRACEstd( "Qt plugins==" + mSettings.BratPaths().mQtPluginsDir ); LOG_TRACEstd( "QGIS plugins==" + mSettings.BratPaths().mQgisPluginsDir ); // To be sure that number have always a decimal point (and not a comma or something else) // setlocale( LC_NUMERIC, "C" ); ShowSplash( "Loading application settings..." ); // Load configuration - I // if ( !mSettings.LoadConfig() ) { throw CException( "Error reading the configuration. Settings file: " + mSettings.FilePath() ); } // Keep v3 happy // CTools::SetInternalDataDir( mSettings.BratPaths().mInternalDataDir ); assert__( CTools::DirectoryExists( CTools::GetInternalDataDir() ) ); // Register Brat algorithms // LOG_TRACE( "Registering algorithms..." ); RegisterAlgorithms(); // OpenGL // ShowSplash( "Checking OpenGL..." ); if ( mSettings.mCheckOpenGL ) { CheckOpenGL(); //throws on failure LOG_TRACE( "OpenGL check successful." ); } // Use application paths to initialize COperation internal path references // COperation::SetExecNames( mSettings.BratPaths() ); // Load physical units system // std::string errorMsg; if ( !CTools::LoadAndCheckUdUnitsSystem( errorMsg ) ) { std::cerr << errorMsg << std::endl; SimpleErrorBox( errorMsg.c_str() ); throw false; } // Load aliases dictionary // CAliasesDictionary::LoadAliasesDictionary( &errorMsg, false ); if ( !errorMsg.empty() ) { std::cerr << "WARNING: " << errorMsg << std::endl; SimpleWarnBox( errorMsg ); } // CODA - can only be done after SetInternalDataDir // assert__( CProduct::GetRefCount() <= 0 ); // CProduct::CodaInit(); // Load configuration - II - can only be done after CodaInit // if ( !mSettings.LoadConfigSelectionCriteria() ) { throw CException( "Error reading the configuration file." ); } // (*) this can be statically set, but not statically // queried before ctor call (issues Qt assertion) // #if defined (Q_OS_LINUX) mDefaultAppStyle = t2q( mSettings.getNameOfStyle( new QCleanlooksStyle, true ) ); //(*) #else mDefaultAppStyle = getCurrentStyleName(); //(*) #endif mSettings.setApplicationStyle( *this, mDefaultAppStyle ); // Load XML processor and TasksProcessor // ShowSplash( "Loading scheduled tasks processor." ); ::xercesc::XMLPlatformUtils::Initialize(); if ( !CTasksProcessor::GetInstance() ) CTasksProcessor::CreateInstance( mSettings.BratPaths().mExecutableDir ); LOG_TRACE( "Scheduled tasks processor loaded." ); //v4: remaining initialization in charge of the main window LOG_TRACE( "Finished application instance construction." ); }
void QgsApplication::init( QString customConfigPath ) { if ( customConfigPath.isEmpty() ) { if ( getenv( "QGIS_CUSTOM_CONFIG_PATH" ) ) { customConfigPath = getenv( "QGIS_CUSTOM_CONFIG_PATH" ); } else { customConfigPath = QStringLiteral( "%1/.qgis3/" ).arg( QDir::homePath() ); } } qRegisterMetaType<QgsGeometry::Error>( "QgsGeometry::Error" ); qRegisterMetaType<QgsProcessingFeatureSourceDefinition>( "QgsProcessingFeatureSourceDefinition" ); qRegisterMetaType<QgsProcessingOutputLayerDefinition>( "QgsProcessingOutputLayerDefinition" ); QString prefixPath( getenv( "QGIS_PREFIX_PATH" ) ? getenv( "QGIS_PREFIX_PATH" ) : applicationDirPath() ); // QgsDebugMsg( QString( "prefixPath(): %1" ).arg( prefixPath ) ); // check if QGIS is run from build directory (not the install directory) QFile f; // "/../../.." is for Mac bundled app in build directory Q_FOREACH ( const QString &path, QStringList() << "" << "/.." << "/bin" << "/../../.." ) { f.setFileName( prefixPath + path + "/qgisbuildpath.txt" ); if ( f.exists() ) break; } if ( f.exists() && f.open( QIODevice::ReadOnly ) ) { ABISYM( mRunningFromBuildDir ) = true; ABISYM( mBuildSourcePath ) = f.readLine().trimmed(); ABISYM( mBuildOutputPath ) = f.readLine().trimmed(); qDebug( "Running from build directory!" ); qDebug( "- source directory: %s", ABISYM( mBuildSourcePath ).toUtf8().data() ); qDebug( "- output directory of the build: %s", ABISYM( mBuildOutputPath ).toUtf8().data() ); #ifdef _MSC_VER ABISYM( mCfgIntDir ) = prefixPath.split( '/', QString::SkipEmptyParts ).last(); qDebug( "- cfg: %s", ABISYM( mCfgIntDir ).toUtf8().data() ); #endif } if ( ABISYM( mRunningFromBuildDir ) ) { // we run from source directory - not installed to destination (specified prefix) ABISYM( mPrefixPath ) = QString(); // set invalid path #if defined(_MSC_VER) && !defined(USING_NMAKE) && !defined(USING_NINJA) setPluginPath( ABISYM( mBuildOutputPath ) + '/' + QString( QGIS_PLUGIN_SUBDIR ) + '/' + ABISYM( mCfgIntDir ) ); #else setPluginPath( ABISYM( mBuildOutputPath ) + '/' + QStringLiteral( QGIS_PLUGIN_SUBDIR ) ); #endif setPkgDataPath( ABISYM( mBuildSourcePath ) ); // directly source path - used for: doc, resources, svg ABISYM( mLibraryPath ) = ABISYM( mBuildOutputPath ) + '/' + QGIS_LIB_SUBDIR + '/'; #if defined(_MSC_VER) && !defined(USING_NMAKE) && !defined(USING_NINJA) ABISYM( mLibexecPath ) = ABISYM( mBuildOutputPath ) + '/' + QGIS_LIBEXEC_SUBDIR + '/' + ABISYM( mCfgIntDir ) + '/'; #else ABISYM( mLibexecPath ) = ABISYM( mBuildOutputPath ) + '/' + QGIS_LIBEXEC_SUBDIR + '/'; #endif } else { char *prefixPath = getenv( "QGIS_PREFIX_PATH" ); if ( !prefixPath ) { #if defined(Q_OS_MACX) || defined(Q_OS_WIN) setPrefixPath( applicationDirPath(), true ); #elif defined(ANDROID) // this is "/data/data/org.qgis.qgis" in android QDir myDir( QDir::homePath() ); myDir.cdUp(); QString myPrefix = myDir.absolutePath(); setPrefixPath( myPrefix, true ); #else QDir myDir( applicationDirPath() ); myDir.cdUp(); QString myPrefix = myDir.absolutePath(); setPrefixPath( myPrefix, true ); #endif } else { setPrefixPath( prefixPath, true ); } } if ( !customConfigPath.isEmpty() ) { ABISYM( mConfigPath ) = customConfigPath + '/'; // make sure trailing slash is included } ABISYM( mDefaultSvgPaths ) << qgisSettingsDirPath() + QStringLiteral( "svg/" ); ABISYM( mAuthDbDirPath ) = qgisSettingsDirPath(); if ( getenv( "QGIS_AUTH_DB_DIR_PATH" ) ) { setAuthDatabaseDirPath( getenv( "QGIS_AUTH_DB_DIR_PATH" ) ); } // store system environment variables passed to application, before they are adjusted QMap<QString, QString> systemEnvVarMap; QString passfile( QStringLiteral( "QGIS_AUTH_PASSWORD_FILE" ) ); // QString, for comparison Q_FOREACH ( const QString &varStr, QProcess::systemEnvironment() ) { int pos = varStr.indexOf( QLatin1Char( '=' ) ); if ( pos == -1 ) continue; QString varStrName = varStr.left( pos ); QString varStrValue = varStr.mid( pos + 1 ); if ( varStrName != passfile ) { systemEnvVarMap.insert( varStrName, varStrValue ); } }
void QgsApplication::init( QString customConfigPath ) { // check if QGIS is run from build directory (not the install directory) QDir appDir( applicationDirPath() ); if ( appDir.exists( "source_path.txt" ) ) { QFile f( applicationDirPath() + "/source_path.txt" ); if ( f.open( QIODevice::ReadOnly ) ) { mRunningFromBuildDir = true; mBuildSourcePath = f.readAll(); #if defined(Q_WS_MACX) || defined(Q_WS_WIN32) || defined(WIN32) mBuildOutputPath = applicationDirPath(); #else mBuildOutputPath = applicationDirPath() + "/.."; // on linux #endif qDebug( "Running from build directory!" ); qDebug( "- source directory: %s", mBuildSourcePath.toAscii().data() ); qDebug( "- output directory of the build: %s", mBuildOutputPath.toAscii().data() ); } } if ( mRunningFromBuildDir ) { // we run from source directory - not installed to destination (specified prefix) mPrefixPath = QString(); // set invalid path setPluginPath( mBuildOutputPath + "/" + QString( QGIS_PLUGIN_SUBDIR ) ); setPkgDataPath( mBuildSourcePath ); // directly source path - used for: doc, resources, svg mLibraryPath = mBuildOutputPath + "/" + QGIS_LIB_SUBDIR + "/"; mLibexecPath = mBuildOutputPath + "/" + QGIS_LIBEXEC_SUBDIR + "/"; } else { #if defined(Q_WS_MACX) || defined(Q_WS_WIN32) || defined(WIN32) setPrefixPath( applicationDirPath(), true ); #else QDir myDir( applicationDirPath() ); myDir.cdUp(); QString myPrefix = myDir.absolutePath(); setPrefixPath( myPrefix, true ); #endif } if ( !customConfigPath.isEmpty() ) { mConfigPath = customConfigPath + "/"; // make sure trailing slash is included } mDefaultSvgPaths << qgisSettingsDirPath() + QString( "svg/" ); // set a working directory up for gdal to write .aux.xml files into // for cases where the raster dir is read only to the user // if the env var is already set it will be used preferentially QString myPamPath = qgisSettingsDirPath() + QString( "gdal_pam/" ); QDir myDir( myPamPath ); if ( !myDir.exists() ) { myDir.mkpath( myPamPath ); //fail silently } #if defined(Q_WS_WIN32) || defined(WIN32) CPLSetConfigOption( "GDAL_PAM_PROXY_DIR", myPamPath.toUtf8() ); #else //under other OS's we use an environment var so the user can //override the path if he likes int myChangeFlag = 0; //whether we want to force the env var to change setenv( "GDAL_PAM_PROXY_DIR", myPamPath.toUtf8(), myChangeFlag ); #endif }
void QgsApplication::init( QString customConfigPath ) { if ( customConfigPath.isEmpty() ) { customConfigPath = QDir::homePath() + QString( "/.qgis/" ); } qRegisterMetaType<QgsGeometry::Error>( "QgsGeometry::Error" ); // check if QGIS is run from build directory (not the install directory) QDir appDir( applicationDirPath() ); #ifndef _MSC_VER #define SOURCE_PATH "source_path.txt" #else #define SOURCE_PATH "../source_path.txt" #endif if ( appDir.exists( SOURCE_PATH ) ) { QFile f( applicationDirPath() + "/" + SOURCE_PATH ); if ( f.open( QIODevice::ReadOnly ) ) { ABISYM( mRunningFromBuildDir ) = true; ABISYM( mBuildSourcePath ) = f.readAll(); #if _MSC_VER QStringList elems = applicationDirPath().split( "/", QString::SkipEmptyParts ); ABISYM( mCfgIntDir ) = elems.last(); ABISYM( mBuildOutputPath ) = applicationDirPath() + "/../.."; #elif defined(Q_WS_MACX) ABISYM( mBuildOutputPath ) = applicationDirPath(); #else ABISYM( mBuildOutputPath ) = applicationDirPath() + "/.."; // on linux #endif qDebug( "Running from build directory!" ); qDebug( "- source directory: %s", ABISYM( mBuildSourcePath ).toAscii().data() ); qDebug( "- output directory of the build: %s", ABISYM( mBuildOutputPath ).toAscii().data() ); } } if ( ABISYM( mRunningFromBuildDir ) ) { // we run from source directory - not installed to destination (specified prefix) ABISYM( mPrefixPath ) = QString(); // set invalid path #ifdef _MSC_VER setPluginPath( ABISYM( mBuildOutputPath ) + "/" + QString( QGIS_PLUGIN_SUBDIR ) + "/" + ABISYM( mCfgIntDir ) ); #else setPluginPath( ABISYM( mBuildOutputPath ) + "/" + QString( QGIS_PLUGIN_SUBDIR ) ); #endif setPkgDataPath( ABISYM( mBuildSourcePath ) ); // directly source path - used for: doc, resources, svg ABISYM( mLibraryPath ) = ABISYM( mBuildOutputPath ) + "/" + QGIS_LIB_SUBDIR + "/"; ABISYM( mLibexecPath ) = ABISYM( mBuildOutputPath ) + "/" + QGIS_LIBEXEC_SUBDIR + "/"; } else { char *prefixPath = getenv( "QGIS_PREFIX_PATH" ); if ( !prefixPath ) { #if defined(Q_WS_MACX) || defined(Q_WS_WIN32) || defined(WIN32) setPrefixPath( applicationDirPath(), true ); #else QDir myDir( applicationDirPath() ); myDir.cdUp(); QString myPrefix = myDir.absolutePath(); setPrefixPath( myPrefix, true ); #endif } else { setPrefixPath( prefixPath, true ); } } if ( !customConfigPath.isEmpty() ) { ABISYM( mConfigPath ) = customConfigPath + "/"; // make sure trailing slash is included } ABISYM( mDefaultSvgPaths ) << qgisSettingsDirPath() + QString( "svg/" ); // set a working directory up for gdal to write .aux.xml files into // for cases where the raster dir is read only to the user // if the env var is already set it will be used preferentially QString myPamPath = qgisSettingsDirPath() + QString( "gdal_pam/" ); QDir myDir( myPamPath ); if ( !myDir.exists() ) { myDir.mkpath( myPamPath ); //fail silently } #if defined(Q_WS_WIN32) || defined(WIN32) CPLSetConfigOption( "GDAL_PAM_PROXY_DIR", myPamPath.toUtf8() ); #else //under other OS's we use an environment var so the user can //override the path if he likes int myChangeFlag = 0; //whether we want to force the env var to change setenv( "GDAL_PAM_PROXY_DIR", myPamPath.toUtf8(), myChangeFlag ); #endif }