diff --git a/src/Makefile.am b/src/Makefile.am index 003831e..58015b8 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -18,7 +18,7 @@ # along with SGPEMv2; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -SUBDIRS = backend builtin-policies pyloader testsuite +SUBDIRS = backend builtin-policies testsuite #additional rules: %_wrap.cc : %.i @@ -41,7 +41,6 @@ sgpemv2_CPPFLAGS = -I@top_srcdir@ \ $(GTKMM_CFLAGS) \ $(PYTHON_CPPFLAGS) sgpemv2_LDFLAGS = -L@builddir@/backend \ - -L@builddir@/pyloader \ $(LT_LDFLAGS) sgpemv2_LDADD = -lbackend \ $(CAIRO_LIBS) \ diff --git a/src/backend/Makefile.am b/src/backend/Makefile.am index 51939d4..66d3caa 100644 --- a/src/backend/Makefile.am +++ b/src/backend/Makefile.am @@ -20,14 +20,12 @@ # you'll want to setup a testsuite for this component, sooner or later. #SUBDIRS = testsuite +SUBDIRS = pyloader #additional rules: %_wrap.cc : %.i $(SWIG) $(SWIG_PYTHON_OPT) -o $@ $< -../pyloader/libpyloader.la : - make -C ../pyloader libpyloader.la - # Program & library names pkglib_LTLIBRARIES = libbackend.la @@ -43,9 +41,9 @@ libbackend_la_CPPFLAGS = -I@top_srcdir@ \ -DLOCALEDIR="\"$(localedir)\"" \ $(PYTHON_CPPFLAGS) \ $(GLIBMM_CFLAGS) -libbackend_la_LIBADD = ../pyloader/libpyloader.la +libbackend_la_LIBADD = -lpyloader libbackend_la_LDFLAGS = $(GLIBMM_LDFLAGS) \ - $(LT_LDFLAGS) + $(LT_LDFLAGS) -L@builddir@/pyloader/ # Please keep this in sorted order: libbackend_la_SOURCES = \ diff --git a/src/pyloader/Abstract.py b/src/backend/pyloader/Abstract.py similarity index 100% rename from src/pyloader/Abstract.py rename to src/backend/pyloader/Abstract.py diff --git a/src/pyloader/Makefile.am b/src/backend/pyloader/Makefile.am similarity index 100% rename from src/pyloader/Makefile.am rename to src/backend/pyloader/Makefile.am diff --git a/src/pyloader/Policy.py b/src/backend/pyloader/Policy.py similarity index 100% rename from src/pyloader/Policy.py rename to src/backend/pyloader/Policy.py diff --git a/src/backend/pyloader/python_policy.cc b/src/backend/pyloader/python_policy.cc new file mode 100644 index 0000000..d443c49 --- /dev/null +++ b/src/backend/pyloader/python_policy.cc @@ -0,0 +1,27 @@ +// src/backend/python_policy.cc - Copyright 2005, 2006, University +// of Padova, dept. of Pure and Applied +// Mathematics +// +// This file is part of SGPEMv2. +// +// This is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// SGPEMv2 is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with SGPEMv2; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#include "python_policy.hh" +using namespace sgpem; +using namespace std; + +PythonPolicy::PythonPolicy() +{ +} diff --git a/src/backend/pyloader/python_policy.hh b/src/backend/pyloader/python_policy.hh new file mode 100644 index 0000000..3ebf790 --- /dev/null +++ b/src/backend/pyloader/python_policy.hh @@ -0,0 +1,60 @@ +// src/backend/python_policy.hh - Copyright 2005, 2006, University +// of Padova, dept. of Pure and Applied +// Mathematics +// +// This file is part of SGPEMv2. +// +// This is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// SGPEMv2 is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with SGPEMv2; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#ifndef PYTHON_POLICY_HH +#define PYTHON_POLICY_HH 1 + +#include "config.h" + +#include +#include + +#include + +#include "../policy.hh" + +namespace sgpem +{ + + class PythonPolicy; + class PythonPolicyManager; + + class SG_DLLEXPORT PythonPolicy : public Policy + { + public: + //only PythonPolicyManager can create a PythonPolicy object + friend class PythonPolicyManager; + + void configure() {} + void sort_queue(sgpem::Scheduler::event) const {} + Glib::ustring get_description() const {} + bool is_pre_emptive() const {} + int get_time_slice() const {} + void set_time_slice(const int&) {} + + private: + PythonPolicy(); + PythonPolicy(const PythonPolicy&); + PythonPolicy& operator=(const PythonPolicy&); + }; + +} + +#endif diff --git a/src/backend/pyloader/python_policy_manager.cc b/src/backend/pyloader/python_policy_manager.cc new file mode 100644 index 0000000..d3a2bba --- /dev/null +++ b/src/backend/pyloader/python_policy_manager.cc @@ -0,0 +1,71 @@ +// src/backend/python_policy_manager.cc - Copyright 2005, 2006, University +// of Padova, dept. of Pure and Applied +// Mathematics +// +// This file is part of SGPEMv2. +// +// This is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// SGPEMv2 is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with SGPEMv2; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#include "python_policy_manager.hh" + +using namespace sgpem; + + +//static object +PythonPolicyManager* PythonPolicyManager::_instance = NULL; + + +PythonPolicyManager::PythonPolicyManager() //private constructor. The parameter is discarded +{ +} + +PythonPolicyManager& +PythonPolicyManager::get_instance() +{ + if(!_instance) + _instance = new PythonPolicyManager(); + return *_instance; +} + +Policy& +PythonPolicyManager::get_policy() +{ + // FIXME : assumes that _python_policy is always != NULL! + return *_python_policy; +} + +void +PythonPolicyManager::init() +{ + static bool initialized = false; + + if(initialized) + Py_Finalize(); + + Py_Initialize(); + initialized = true; + + // The following line is ugly, but necessary if we use + // non-standard installation directories. Theoretically, + // it should be up to the user to set correct + // environment variables. + // FIXME: find better way to achieve this. + + PyRun_SimpleString("import sys\n" + "sys.path[:0] = [ '" MODDIR "', '" PYCDIR "' ]\n"); + +} + + diff --git a/src/backend/pyloader/python_policy_manager.hh b/src/backend/pyloader/python_policy_manager.hh new file mode 100644 index 0000000..00c8fc1 --- /dev/null +++ b/src/backend/pyloader/python_policy_manager.hh @@ -0,0 +1,54 @@ +// src/backend/python_policy_manager.hh - Copyright 2005, 2006, University +// of Padova, dept. of Pure and Applied +// Mathematics +// +// This file is part of SGPEMv2. +// +// This is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// SGPEMv2 is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with SGPEMv2; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#ifndef PYTHON_POLICY_MANAGER_HH +#define PYTHON_POLICY_MANAGER_HH 1 + +#include "config.h" + +#include + +#include "../policy_manager.hh" +#include "python_policy.hh" + +namespace sgpem +{ + //class PolicyManager; + class PythonPolicyManager; + + class SG_DLLEXPORT PythonPolicyManager : public PolicyManager + { + public: + + Policy& get_policy(); + void init(); + PyObject* get_py_dict(); + + static PythonPolicyManager& get_instance(); + + private: + PythonPolicyManager(); //dummy parameter + static PythonPolicyManager* _instance; + std::auto_ptr _python_policy; + }; + +} + +#endif diff --git a/src/main.cc b/src/main.cc index 6b61b5a..2df5309 100644 --- a/src/main.cc +++ b/src/main.cc @@ -34,8 +34,6 @@ #include "backend/process.hh" #include "backend/policy.hh" #include "backend/policy_parameters.hh" -#include "pyloader/python_policy.hh" -#include "pyloader/python_policy_manager.hh" #include "standard_io.hh" #include @@ -72,8 +70,6 @@ main(int argc, char* argv[]) */ //start_gui(argc, argv); - PythonPolicyManager& p = PythonPolicyManager::get_instance(); - p.init(); StandardIO io; io.write_buffer("\nciao!!"); ustring ss = io.read_command();