/* -----BEGIN QCMOD----- name: the XScreenSaver extension -----END QCMOD----- */ //---------------------------------------------------------------------------- // qc_xss //---------------------------------------------------------------------------- class qc_xss : public ConfObj { public: enum { OK, NEEDLIB, FAIL }; qc_xss(Conf *c) : ConfObj(c) { } ~qc_xss() { remove("xssprobe_test.c"); remove("xssprobe_test.o"); remove("xssprobe_test"); } QString name() const { return "the XScreenSaver extension"; } QString shortname() const { return "xss"; } int do_write() { char *xsstest = "#include\n" "#include\n" "#include\n" "\n" "int main()\n" "{\n" " XScreenSaverQueryExtension(NULL, NULL, NULL);\n" " return 0;\n" "}\n"; FILE *f; f = fopen("xssprobe_test.c", "w"); if(!f) return 0; fwrite(xsstest, strlen(xsstest), 1, f); fclose(f); return 1; } int do_compile() { QString inc = conf->expandIncludes(conf->qvar("QMAKE_INCDIR_X11")); QString str = conf->qvar("QMAKE_CC") + " -c " + inc + " xssprobe_test.c -o xssprobe_test.o"; int r = conf->doCommand(str); if(r == 0) return 1; else return 0; } int do_link() { QString lib = conf->expandLibs(conf->qvar("QMAKE_LIBDIR_X11")); QString inc = conf->expandIncludes(conf->qvar("QMAKE_INCDIR_X11")); QString str = conf->qvar("QMAKE_CC") + " xssprobe_test.o -o xssprobe_test " + lib + ' ' + conf->qvar("QMAKE_LIBS_X11"); int r = conf->doCommand(str); if(r == 0) return 1; else return 0; } int do_linkLib() { QString lib = conf->expandLibs(conf->qvar("QMAKE_LIBDIR_X11")); QString inc = conf->expandIncludes(conf->qvar("QMAKE_INCDIR_X11")); QString str = conf->qvar("QMAKE_CC") + " xssprobe_test.o -o xssprobe_test " + lib + ' ' + conf->qvar("QMAKE_LIBS_X11") + " -lXss"; int r = conf->doCommand(str); if(r == 0) return 1; else return 0; } int do_all() { if(!do_write()) return FAIL; if(!do_compile()) return FAIL; if(do_link()) return OK; if(do_linkLib()) return NEEDLIB; return FAIL; } bool exec() { int r = do_all(); if(r == OK) { conf->addDefine("HAVE_XSS"); return true; } else if(r == NEEDLIB) { conf->addDefine("HAVE_XSS"); conf->addLib("-lXss"); return true; } } };