(full quote for the list) On Sun, Nov 07, 2010 at 12:09:22AM +0100, Pavel Nemec wrote: > Hi Martin, > today I finaly find sime time to dig into Yast again. > > I realize that I will need my own starter. It is because I need to set > communication handler and doing that when UI start is overhead. (and I also > need to start it from linked program and not as external app) > > So I am trying to create my own genericsfrontend.cc Which at the and wasn`t > so > hard. > > Problem is that for some reason I cant load client from "ycp". > Y2Component *client = Y2ComponentBroker::createClient(client_name); > > will print into logs that it only look in pathsearch.cc(findy2exe) and > pathsearch.cc(findy2plugin) > > For some reason Y2CCWFM.cc do not kick in and client is always null. > > I looked into genericsfrontend.cc how path is created, but I only fond > > YCPPathSearch::initialize(); > > Which I am using too.
Hi Pavel, the problem is that, contrary to expectations, the WFM plugin needs to be linked explicitly to the executable. I am attaching a modified version of your source which I have successfully compiled and run. See the inlined compilation command there. Also compare how we link the actual y2base program: http://svn.opensuse.org/svn/yast/trunk/core/base/src/Makefile.am Good luck with your work. I've connected to you on GTalk and I'll try to hang out on IRC in the evenings too so that we can connect faster. Martin > This is log I get with my program: > ... > /home/pavel/.yast2/clients_non_y2/nfs > 2010-11-06 23:26:54 <0> deepblue(26442) [libycp] pathsearch.cc(findy2exe):210 > Trying file /home/pavel/.yast2/clients/nfs > 2010-11-06 23:26:54 <0> deepblue(26442) [libycp] > pathsearch.cc(findy2plugin):233 Testing existence of plugin > /usr/lib/YaST2/plugin/libpy2nfs.so.2 > 2010-11-06 23:26:54 <0> deepblue(26442) [libycp] pathsearch.cc(findy2exe):210 > Trying file /usr/lib/YaST2/clients_non_y2/nfs > 2010-11-06 23:26:54 <0> deepblue(26442) [libycp] pathsearch.cc(findy2exe):210 > Trying file /usr/lib/YaST2/clients/nfs > 2010-11-06 23:26:54 <3> deepblue(26442) [CustomLoader] > loader/CustomLoader.cpp(main):39 client is null, exiting > > > This is how it should look like: > ...2010-11-06 23:26:21 <0> deepblue(26415) [wfm] Y2CCWFM.cc(createInLevel):67 > Trying to create nfs > 2010-11-06 23:26:21 <0> deepblue(26415) [libycp] pathsearch.cc(findy2exe):210 > Trying file /y2update/clients_non_y2/nfs > 2010-11-06 23:26:21 <0> deepblue(26415) [libycp] pathsearch.cc(findy2exe):210 > Trying file /y2update/clients/nfs > 2010-11-06 23:26:21 <0> deepblue(26415) [libycp] > pathsearch.cc(findy2plugin):233 Testing existence of plugin > /home/pavel/.yast2/plugin/libpy2nfs.so.2 > 2010-11-06 23:26:21 <0> deepblue(26415) [wfm] Y2CCWFM.cc(createInLevel):67 > Trying to create nfs > 2010-11-06 23:26:21 <0> deepblue(26415) [libycp] pathsearch.cc(findy2exe):210 > Trying file /home/pavel/.yast2/clients_non_y2/nfs > 2010-11-06 23:26:21 <0> deepblue(26415) [libycp] pathsearch.cc(findy2exe):210 > Trying file /home/pavel/.yast2/clients/nfs > 2010-11-06 23:26:21 <0> deepblue(26415) [libycp] > pathsearch.cc(findy2plugin):233 Testing existence of plugin > > > Please use you magic insight and tell me what I am missing to call/set. > > Thanks, > Pavel > /* > * CustomLoader.cpp > * > * Created on: Nov 6, 2010 > * Author: pavel > */ > > #include "CustomLoader.h" > > > > CustomLoader::CustomLoader() { > // TODO Auto-generated constructor stub > > } > > CustomLoader::~CustomLoader() { > // TODO Auto-generated destructor stub > } > > int main(int argc, char **argv) { > char *progname = "CustomLoader"; > char *client_name="nfs"; > char *server_name = "jast"; > char **server_argv = new char *[0]; > > YCPPathSearch::initialize(); > string module = YCPPathSearch::findModule("nfs",true); > y2milestone("Launched YaST2 component '%s' jast", progname); > Y2ComponentBroker::getNamespaceComponent("UI"); > Y2Component *server = Y2ComponentBroker::createServer(server_name); > server->setServerOptions(0, server_argv); > Y2Component *client = Y2ComponentBroker::createClient(client_name); > > if(!server){ > y2error("server is null, exiting"); > exit(1); > } > if(!client){ > y2error("client is null, exiting"); > exit(1); > } > > setenv("YAST_IS_RUNNING", "instsys", 1); > y2milestone("YAST_IS_RUNNING is %s", getenv("YAST_IS_RUNNING")); > > YCPList arglist; > YCPValue result = client->doActualWork(arglist, server); > server->result(result); > > // Cleanup > delete server; > delete[] server_argv; > delete client; > > // might be useful in tracking segmentation faults > y2milestone("Finished YaST2 component '%s'", progname); > > if (result.isNull()) > exit(0); > > y2milestone("Exiting with client return value '%s'", > result->toString().c_str()); > } -- Martin Vidner, YaST developer http://en.opensuse.org/User:Mvidner Kuracke oddeleni v restauraci je jako fekalni oddeleni v bazenu
/*
* CustomLoader.cpp
*
* Created on: Nov 6, 2010
* Author: pavel
* Edited to make it work, mvidner
*/
// This links OK but y2log will say
// CustomLoader.cpp(main):36 client is null, exiting
// g++ -I /usr/include/YaST2 -lycp ly2 CustomLoader.cpp
// WFM needs to be linked in:
// g++ -I /usr/include/YaST2 -L /usr/lib/YaST2/plugin -Wl,-rpath /usr/lib/YaST2/plugin -lpy2wfm -lycp -ly2 CustomLoader.cpp
#include <YCP.h>
#include <Y2.h>
#include <ycp/pathsearch.h>
#define Y2LOG "Custom"
#include <ycp/y2log.h>
int main(int argc, char **argv) {
char *progname = "CustomLoader";
char *client_name="nfs";
char *server_name = "qt";
char **server_argv = new char *[0];
YCPPathSearch::initialize();
string module = YCPPathSearch::findModule("nfs",true);
y2milestone("Launched YaST2 component '%s' jast", progname);
Y2ComponentBroker::getNamespaceComponent("UI");
Y2Component *server = Y2ComponentBroker::createServer(server_name);
server->setServerOptions(0, server_argv);
Y2Component *client = Y2ComponentBroker::createClient(client_name);
if(!server){
y2error("server is null, exiting");
exit(1);
}
if(!client){
y2error("client is null, exiting");
exit(1);
}
setenv("YAST_IS_RUNNING", "instsys", 1);
y2milestone("YAST_IS_RUNNING is %s", getenv("YAST_IS_RUNNING"));
YCPList arglist;
YCPValue result = client->doActualWork(arglist, server);
server->result(result);
// Cleanup
delete server;
delete[] server_argv;
delete client;
// might be useful in tracking segmentation faults
y2milestone("Finished YaST2 component '%s'", progname);
if (result.isNull())
exit(0);
y2milestone("Exiting with client return value '%s'",
result->toString().c_str());
}
pgpgFvOqSorv6.pgp
Description: PGP signature
