mirror of https://github.com/cutefishos/appmotor
New: Basic implementation of the e-booster.
parent
038bf86bc5
commit
28d852e015
@ -0,0 +1,28 @@
|
||||
# Qt support
|
||||
include(${QT_USE_FILE})
|
||||
|
||||
set(LAUNCHER "${CMAKE_HOME_DIRECTORY}/src/launcherlib")
|
||||
set(COMMON "${CMAKE_HOME_DIRECTORY}/src/common")
|
||||
|
||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${COMMON} ${LAUNCHER})
|
||||
|
||||
# Hide all symbols except the ones explicitly exported in the code (like main())
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
|
||||
|
||||
# Set sources
|
||||
set(SRC ebooster.cpp pluginfactory.cpp ${LAUNCHER}/appdata.cpp ${LAUNCHER}/booster.cpp
|
||||
${LAUNCHER}/connection.cpp ${LAUNCHER}/logger.cpp
|
||||
${LAUNCHER}/singleinstance.cpp ${LAUNCHER}/socketmanager.cpp
|
||||
${COMMON}/eventhandler.cpp)
|
||||
|
||||
set(MOC_HDRS ${COMMON}/eventhandler.h)
|
||||
qt4_wrap_cpp(MOC_SRC ${MOC_HDRS})
|
||||
|
||||
# Set libraries to be linked.
|
||||
link_libraries(${MEEGOTOUCH_LIBRARIES} ${LIBDL} ${QT_QTCORE_LIBRARY})
|
||||
|
||||
# Set executable
|
||||
add_library(ebooster MODULE ${SRC} ${MOC_SRC})
|
||||
|
||||
# Add install rule
|
||||
install(TARGETS ebooster DESTINATION /usr/lib/applauncherd/)
|
||||
@ -0,0 +1,87 @@
|
||||
/***************************************************************************
|
||||
**
|
||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (directui@nokia.com)
|
||||
**
|
||||
** This file is part of applauncherd
|
||||
**
|
||||
** If you have questions regarding the use of this file, please contact
|
||||
** Nokia at directui@nokia.com.
|
||||
**
|
||||
** This library is free software; you can redistribute it and/or
|
||||
** modify it under the terms of the GNU Lesser General Public
|
||||
** License version 2.1 as published by the Free Software Foundation
|
||||
** and appearing in the file LICENSE.LGPL included in the packaging
|
||||
** of this file.
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "ebooster.h"
|
||||
#include "logger.h"
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
#ifdef HAVE_MCOMPONENTCACHE
|
||||
#include <mcomponentcache.h>
|
||||
#endif
|
||||
|
||||
const string EBooster::m_socketId = "/tmp/booste";
|
||||
const string EBooster::m_temporaryProcessName = "booster-e";
|
||||
|
||||
const string & EBooster::socketId() const
|
||||
{
|
||||
return m_socketId;
|
||||
}
|
||||
|
||||
const string & EBooster::socketName()
|
||||
{
|
||||
return m_socketId;
|
||||
}
|
||||
|
||||
const string & EBooster::temporaryProcessName()
|
||||
{
|
||||
return m_temporaryProcessName;
|
||||
}
|
||||
|
||||
const string & EBooster::boosterTemporaryProcessName() const
|
||||
{
|
||||
return temporaryProcessName();
|
||||
}
|
||||
|
||||
char EBooster::type()
|
||||
{
|
||||
return 'e';
|
||||
}
|
||||
|
||||
bool EBooster::preload()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
int EBooster::launchProcess()
|
||||
{
|
||||
Booster::setEnvironmentBeforeLaunch();
|
||||
|
||||
// Ensure a NULL-terminated argv
|
||||
char ** dummyArgv = new char * [appData()->argc() + 1];
|
||||
const int i2 = appData()->argc();
|
||||
for (int i = 0; i < i2; i++)
|
||||
dummyArgv[i] = strdup(appData()->argv()[i]);
|
||||
dummyArgv[i2] = NULL;
|
||||
|
||||
// Exec the binary (execv returns only in case of an error).
|
||||
if (execv(appData()->fileName().c_str(),
|
||||
dummyArgv))
|
||||
{
|
||||
Logger::logError("EBooster: Couldn't execv '%s': %s",
|
||||
appData()->fileName().c_str(),
|
||||
strerror(errno));
|
||||
}
|
||||
|
||||
// Delete dummy argv if execv failed
|
||||
for (int i = 0; i < i2; i++)
|
||||
delete dummyArgv[i];
|
||||
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
@ -0,0 +1,111 @@
|
||||
/***************************************************************************
|
||||
**
|
||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (directui@nokia.com)
|
||||
**
|
||||
** This file is part of applauncherd
|
||||
**
|
||||
** If you have questions regarding the use of this file, please contact
|
||||
** Nokia at directui@nokia.com.
|
||||
**
|
||||
** This library is free software; you can redistribute it and/or
|
||||
** modify it under the terms of the GNU Lesser General Public
|
||||
** License version 2.1 as published by the Free Software Foundation
|
||||
** and appearing in the file LICENSE.LGPL included in the packaging
|
||||
** of this file.
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef EBOOSTER_H
|
||||
#define EBOOSTER_H
|
||||
|
||||
#include "booster.h"
|
||||
#include "eventhandler.h"
|
||||
#include <tr1/memory>
|
||||
|
||||
using std::tr1::shared_ptr;
|
||||
|
||||
#include <signal.h>
|
||||
|
||||
/*!
|
||||
\class EBooster
|
||||
\brief EBooster is a "booster" that only exec()'s the given binary.
|
||||
|
||||
This can be used with e.g. splash screen to launch any application.
|
||||
*/
|
||||
class EBooster : public Booster
|
||||
{
|
||||
public:
|
||||
|
||||
//! \brief Constructor
|
||||
EBooster() {}
|
||||
|
||||
//! \brief Destructor
|
||||
virtual ~EBooster() {}
|
||||
|
||||
/*!
|
||||
* \brief Return the socket name common to all EBooster objects.
|
||||
* \return Path to the socket file.
|
||||
*/
|
||||
static const string & socketName();
|
||||
|
||||
//! Return the process name to be used when booster is not
|
||||
//! yet transformed into a running application
|
||||
static const string & temporaryProcessName();
|
||||
|
||||
//! \reimp
|
||||
virtual const string & boosterTemporaryProcessName() const;
|
||||
|
||||
//! \reimp
|
||||
virtual char boosterType() const { return type(); }
|
||||
|
||||
/*!
|
||||
* \brief Return a unique character ('e') represtenting the type of EBoosters.
|
||||
* \return Type character.
|
||||
*/
|
||||
static char type();
|
||||
|
||||
//! \reimp
|
||||
virtual const string & socketId() const;
|
||||
|
||||
protected:
|
||||
|
||||
//! \reimp
|
||||
virtual int launchProcess();
|
||||
|
||||
//! \reimp
|
||||
virtual bool preload();
|
||||
|
||||
private:
|
||||
|
||||
//! Disable copy-constructor
|
||||
EBooster(const EBooster & r);
|
||||
|
||||
//! Disable assignment operator
|
||||
EBooster & operator= (const EBooster & r);
|
||||
|
||||
static const string m_socketId;
|
||||
|
||||
//! Process name to be used when booster is not
|
||||
//! yet transformed into a running application
|
||||
static const string m_temporaryProcessName;
|
||||
|
||||
//! wait for socket connection
|
||||
void accept();
|
||||
|
||||
private slots:
|
||||
|
||||
//! Qt signal handler for SIGHUP.
|
||||
void handleSigHup();
|
||||
|
||||
//! Qt signal handler for theme change
|
||||
void notifyThemeChange();
|
||||
|
||||
|
||||
#ifdef UNIT_TEST
|
||||
friend class Ut_EBooster;
|
||||
#endif
|
||||
};
|
||||
|
||||
#endif // EBooster_H
|
||||
@ -0,0 +1,45 @@
|
||||
/***************************************************************************
|
||||
**
|
||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (directui@nokia.com)
|
||||
**
|
||||
** This file is part of applauncherd
|
||||
**
|
||||
** If you have questions regarding the use of this file, please contact
|
||||
** Nokia at directui@nokia.com.
|
||||
**
|
||||
** This library is free software; you can redistribute it and/or
|
||||
** modify it under the terms of the GNU Lesser General Public
|
||||
** License version 2.1 as published by the Free Software Foundation
|
||||
** and appearing in the file LICENSE.LGPL included in the packaging
|
||||
** of this file.
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "ebooster.h"
|
||||
#include <QtCore>
|
||||
|
||||
extern "C"
|
||||
{
|
||||
// Create a new plugin instance.
|
||||
Q_DECL_EXPORT void * create()
|
||||
{
|
||||
return new EBooster;
|
||||
}
|
||||
|
||||
Q_DECL_EXPORT char type()
|
||||
{
|
||||
return EBooster::type();
|
||||
}
|
||||
|
||||
Q_DECL_EXPORT const char * socketName()
|
||||
{
|
||||
return EBooster::socketName().c_str();
|
||||
}
|
||||
|
||||
Q_DECL_EXPORT const char * temporaryProcessName()
|
||||
{
|
||||
return EBooster::temporaryProcessName().c_str();
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue