Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Skeleton for profile manager.

svn path=/trunk/profile-manager/; revision=3526
  • Loading branch information...
commit b9ba0a174effac062ed67bec2e2b82c1e545f2ee 0 parents
Michal Švec authored
Showing with 1,649 additions and 0 deletions.
  1. +24 −0 .cvsignore
  2. +1 −0  MAINTAINER
  3. +18 −0 Makefile.cvs
  4. +1 −0  RPMNAME
  5. +1 −0  VERSION
  6. +21 −0 agent-scpm/.cvsignore
  7. +1 −0  agent-scpm/Makefile.am
  8. +2 −0  agent-scpm/conf/.cvsignore
  9. +7 −0 agent-scpm/conf/Makefile.am
  10. +26 −0 agent-scpm/conf/scpm.scr
  11. +2 −0  agent-scpm/doc/.cvsignore
  12. +10 −0 agent-scpm/doc/Makefile.am
  13. +71 −0 agent-scpm/doc/SCPM.html
  14. +11 −0 agent-scpm/doc/Todo.txt
  15. +7 −0 agent-scpm/doc/autodocs/.cvsignore
  16. +12 −0 agent-scpm/doc/autodocs/Makefile.am
  17. +9 −0 agent-scpm/src/.cvsignore
  18. +20 −0 agent-scpm/src/Makefile.am
  19. +67 −0 agent-scpm/src/SCPMAgent.cc
  20. +71 −0 agent-scpm/src/SCPMAgent.h
  21. +18 −0 agent-scpm/src/Y2CCSCPMAgent.cc
  22. +2 −0  agent-scpm/testsuite/.cvsignore
  23. +10 −0 agent-scpm/testsuite/Makefile.am
  24. +1 −0  agent-scpm/testsuite/README
  25. +2 −0  agents/.cvsignore
  26. +9 −0 agents/Makefile.am
  27. +14 −0 configure.in.in
  28. +2 −0  doc/.cvsignore
  29. +12 −0 doc/Makefile.am
  30. +3 −0  doc/autodocs/.cvsignore
  31. +12 −0 doc/autodocs/Makefile.am
  32. +2 −0  package/.cvsignore
  33. +4 −0 package/yast2-profile-manager.changes
  34. +2 −0  src/.cvsignore
  35. +26 −0 src/Makefile.am
  36. +216 −0 src/ProfileManager.ycp
  37. +178 −0 src/complex.ycp
  38. +97 −0 src/dialogs.ycp
  39. +89 −0 src/helps.ycp
  40. +43 −0 src/profile-manager.y2cc
  41. +51 −0 src/profile-manager.ycp
  42. +56 −0 src/profile-manager_auto.ycp
  43. +84 −0 src/profile-manager_proposal.ycp
  44. +56 −0 src/profile-manager_write.ycp
  45. +52 −0 src/routines.ycp
  46. +162 −0 src/wizards.ycp
  47. +11 −0 testsuite/.cvsignore
  48. +19 −0 testsuite/Makefile.am
  49. 0  testsuite/tests/.cvsignore
  50. +34 −0 yast2-profile-manager.spec.in
24 .cvsignore
@@ -0,0 +1,24 @@
+Makefile
+Makefile.am
+Makefile.in
+aclocal.m4
+autom4te.cache
+config.cache
+config.guess
+config.h
+config.h.in
+config.log
+config.status
+config.sub
+configure
+configure.in
+depcomp
+install-sh
+libtool
+ltconfig
+ltmain.sh
+missing
+mkinstalldirs
+profile-manager.pot
+stamp-h
+stamp-h*
1  MAINTAINER
@@ -0,0 +1 @@
+Jiri Suchomel <jsuchome@suse.cz>
18 Makefile.cvs
@@ -0,0 +1,18 @@
+#
+# Makefile.cvs
+#
+configure: all
+ ./configure
+
+all:
+ y2tool y2autoconf
+ y2tool y2automake
+ autoreconf --force --install
+
+install: configure
+ make
+ make install
+
+reconf: all
+ ./config.status --recheck
+ ./config.status
1  RPMNAME
@@ -0,0 +1 @@
+yast2-profile-manager
1  VERSION
@@ -0,0 +1 @@
+2.6.0
21 agent-scpm/.cvsignore
@@ -0,0 +1,21 @@
+Makefile
+Makefile.am
+Makefile.in
+aclocal.m4
+autom4te.cache
+config.cache
+config.guess
+config.h
+config.h.in
+config.log
+config.status
+config.sub
+configure
+configure.in
+depcomp
+install-sh
+libtool
+ltmain.sh
+missing
+mkinstalldirs
+stamp-h*
1  agent-scpm/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = conf doc src testsuite
2  agent-scpm/conf/.cvsignore
@@ -0,0 +1,2 @@
+Makefile
+Makefile.in
7 agent-scpm/conf/Makefile.am
@@ -0,0 +1,7 @@
+#
+# Makefile.am for .../agent-scpm/conf
+#
+
+scrconf_DATA = scpm.scr
+
+EXTRA_DIST = $(scrconf_DATA)
26 agent-scpm/conf/scpm.scr
@@ -0,0 +1,26 @@
+/**
+ * File: scpm.scr
+ * Summary: SCPM agent
+ * Author: Jiri Suchomel <jsuchome@suse.cz>
+ * Access: read / write / execute
+ * See: MANPAGE(1) http://www.blah.com
+ *
+ * Example:
+ * Dir(.scpm)
+ * (["WHAT", "EVER", "YOU", "GET"])
+ **
+ * Read(.scpm)
+ * ("WHAT_EVER_YOU_GET")
+ **
+ * Write(.scpm, value)
+ * (true)
+ *
+ * $Id$
+ *
+ * SOME USEFUL INFORMATION ON THE AGENT
+ */
+.scpm
+
+`ag_scpm(
+ SCPMAgent()
+)
2  agent-scpm/doc/.cvsignore
@@ -0,0 +1,2 @@
+Makefile
+Makefile.in
10 agent-scpm/doc/Makefile.am
@@ -0,0 +1,10 @@
+#
+# Makefile.am for .../agent-scpm/doc
+#
+
+SUBDIRS = autodocs
+
+htmldir = $(docdir)
+
+html_DATA = SCPM.html Todo.txt
+EXTRA_DIST = $(html_DATA)
71 agent-scpm/doc/SCPM.html
@@ -0,0 +1,71 @@
+<HTML>
+<HEAD>
+<TITLE>SCPM agent description</TITLE>
+<!-- $Id$ -->
+</HEAD>
+<BODY>
+<H1>SCPM agent description</H1>
+<HR>
+
+<H2>Purpose</H2>
+The SCPM agent (<TT>ag_SCPM</TT>) is used to access <TT>...</TT>.
+It is part of YaST2 SCR, the system configuration repository,
+used to access configuration data on the target system. The general
+SCR API allows <TT>Read()</TT> and <TT>Write()</TT> access to get and
+change data.
+
+<P>
+<H2>Implementation</H2>
+<TT>...</TT>
+
+<P>
+<I><B>Note:</B> The complete development documentation is available in the
+<A HREF="autodocs/index.html"><TT>autodocs/</TT></A> directory.</I>
+
+<P>
+<H2>Interface for SCPM-agent</H2>
+The interface is implemented as a SCR agent with the usual <TT>Read()</TT>,
+<TT>Write()</TT> and <TT>Dir()</TT> interface. The path prefix used is
+
+<UL><TT>.SCPM</TT></UL>
+<TT>...</TT>
+
+<P>
+<H2>Restrictions, limits and future enhancements</H2>
+<TT>...</TT>
+
+<P>
+See the <A HREF="TODO.txt">TODO.txt</A> file for the current status of support
+and also for the list of possible future enhancements.
+
+<P>
+<H2>Complete Read paths table</H2>
+The complete <TT>Write()</TT> paths table is similar to this except for
+the paths to which YCPList is returned.
+
+<TABLE>
+ <TR><TH WIDTH="30%" ALIGN="left">Path</TH><TH WIDTH="20%" ALIGN="left">Type</TH><TH ALIGN="left">Result</TH></TR>
+ <TR><TD><TT>.SCPM</TD><TD ALIGN="left">YCPList</TD>
+ <TD>list with all available directives (currently sublist of ["alias", "pre-install", "post-install", "options"]</TD></TR>
+ <TR>...</TR>
+</TABLE>
+
+<P>
+<H2>Complete Dir paths table</H2>
+The return type of the <TT>Dir()</TT> is always YCPList.
+
+<TABLE>
+ <TR><TH WIDTH="40%" ALIGN="left">Path</TH><TH ALIGN="left">Result</TH></TR>
+ <TR><TD><TT>.SCPM</TD>
+ <TD>list with all available directives (currently sublist of ["alias", "pre-install", "post-install", "options"]</TD></TR>
+ <TR>...</TR>
+</TABLE>
+
+<P>
+<ADDRESS>
+Jiri Suchomel &lt;jsuchome@suse.cz&gt;<BR>
+</ADDRESS>
+
+
+</BODY>
+</HTML>
11 agent-scpm/doc/Todo.txt
@@ -0,0 +1,11 @@
+This is a TODO file for the SCPM SCR agent.
+----------------------------------------------
+$Id$
+
+TODO:
+-----
+
+- Something
+- Something else
+- ...
+
7 agent-scpm/doc/autodocs/.cvsignore
@@ -0,0 +1,7 @@
+Makefile
+Makefile.in
+SCPMAgent.html
+Y2CCSCPMAgent.html
+Y2SCPMAgentComponent.html
+heir.html
+index.html
12 agent-scpm/doc/autodocs/Makefile.am
@@ -0,0 +1,12 @@
+#
+# Makefile.am for .../agent-scpm/doc/autodocs
+#
+
+htmldir = $(docdir)/autodocs
+
+html_DATA = index.html $(wildcard *.html)
+CLEANFILES = $(html_DATA)
+
+index.html: $(srcdir)/../../src/*.h
+ cd $(srcdir)/../../src && @ybindir@/ydoc @RPMNAME@ *.h
+ mv -f $(srcdir)/../../src/*.html .
9 agent-scpm/src/.cvsignore
@@ -0,0 +1,9 @@
+Makefile
+Makefile.in
+*.o
+*.lo
+*.la
+.libs
+.deps
+ag_SCPM
+*.kdoc
20 agent-scpm/src/Makefile.am
@@ -0,0 +1,20 @@
+#
+# Makefile.am for .../agent-scpm/src
+#
+
+AM_CXXFLAGS = -DY2LOG=\"agent-scpm\" -Wall
+
+plugin_LTLIBRARIES = libpy2ag_SCPM.la
+noinst_LTLIBRARIES = liby2ag_SCPM.la
+
+liby2ag_SCPM_la_SOURCES = \
+ SCPMAgent.cc \
+ SCPMAgent.h
+liby2ag_SCPM_la_LDFLAGS = -version-info 2:0
+
+libpy2ag_SCPM_la_SOURCES = \
+ $(liby2ag_SCPM_la_SOURCES) \
+ Y2CCSCPMAgent.cc Y2CCSCPMAgent.h
+libpy2ag_SCPM_la_LDFLAGS = -version-info 2:0
+
+INCLUDES = -I$(includedir)
67 agent-scpm/src/SCPMAgent.cc
@@ -0,0 +1,67 @@
+/* SCPMAgent.cc
+ *
+ * An agent for reading the SCPM configuration file.
+ *
+ * Authors: Jiri Suchomel <jsuchome@suse.cz>
+ *
+ * $Id$
+ */
+
+#include "SCPMAgent.h"
+
+/**
+ * Constructor
+ */
+SCPMAgent::SCPMAgent() : SCRAgent()
+{
+}
+
+/**
+ * Destructor
+ */
+SCPMAgent::~SCPMAgent()
+{
+}
+
+/**
+ * Dir
+ */
+YCPValue SCPMAgent::Dir(const YCPPath& path)
+{
+ y2error("Wrong path '%s' in Read().", path->toString().c_str());
+ return YCPVoid();
+}
+
+/**
+ * Read
+ */
+YCPValue SCPMAgent::Read(const YCPPath &path, const YCPValue& arg)
+{
+ y2error("Wrong path '%s' in Read().", path->toString().c_str());
+ return YCPVoid();
+}
+
+/**
+ * Write
+ */
+YCPValue SCPMAgent::Write(const YCPPath &path, const YCPValue& value,
+ const YCPValue& arg)
+{
+ y2error("Wrong path '%s' in Write().", path->toString().c_str());
+ return YCPVoid();
+}
+
+/**
+ * otherCommand
+ */
+YCPValue SCPMAgent::otherCommand(const YCPTerm& term)
+{
+ string sym = term->symbol()->symbol();
+
+ if (sym == "SCPMAgent") {
+ /* Your initialization */
+ return YCPVoid();
+ }
+
+ return YCPNull();
+}
71 agent-scpm/src/SCPMAgent.h
@@ -0,0 +1,71 @@
+/* SCPMAgent.h
+ *
+ * SCPM agent implementation
+ *
+ * Authors: Jiri Suchomel <jsuchome@suse.cz>
+ *
+ * $Id$
+ */
+
+#ifndef _SCPMAgent_h
+#define _SCPMAgent_h
+
+#include <Y2.h>
+#include <scr/SCRAgent.h>
+#include <scr/SCRInterpreter.h>
+
+/**
+ * @short An interface class between YaST2 and SCPM Agent
+ */
+class SCPMAgent : public SCRAgent
+{
+private:
+ /**
+ * Agent private variables
+ */
+
+public:
+ /**
+ * Default constructor.
+ */
+ SCPMAgent();
+
+ /**
+ * Destructor.
+ */
+ virtual ~SCPMAgent();
+
+ /**
+ * Provides SCR Read ().
+ * @param path Path that should be read.
+ * @param arg Additional parameter.
+ */
+ virtual YCPValue Read(const YCPPath &path,
+ const YCPValue& arg = YCPNull());
+
+ /**
+ * Provides SCR Write ().
+ */
+ virtual YCPValue Write(const YCPPath &path,
+ const YCPValue& value,
+ const YCPValue& arg = YCPNull());
+
+ /**
+ * Provides SCR Execute ().
+ */
+ virtual YCPValue Execute(const YCPPath &path,
+ const YCPValue& value = YCPNull(),
+ const YCPValue& arg = YCPNull());
+
+ /**
+ * Provides SCR Dir ().
+ */
+ virtual YCPValue Dir(const YCPPath& path);
+
+ /**
+ * Used for mounting the agent.
+ */
+ virtual YCPValue otherCommand(const YCPTerm& term);
+};
+
+#endif /* _SCPMAgent_h */
18 agent-scpm/src/Y2CCSCPMAgent.cc
@@ -0,0 +1,18 @@
+/* Y2CCSCPMAgent.cc
+ *
+ * SCPM agent implementation
+ *
+ * Authors: Jiri Suchomel <jsuchome@suse.cz>
+ *
+ * $Id$
+ */
+
+#include <scr/Y2AgentComponent.h>
+#include <scr/Y2CCAgentComponent.h>
+#include <scr/SCRInterpreter.h>
+
+#include "SCPMAgent.h"
+
+typedef Y2AgentComp <SCPMAgent> Y2SCPMAgentComp;
+
+Y2CCAgentComp <Y2SCPMAgentComp> g_y2ccag_SCPM ("ag_scpm");
2  agent-scpm/testsuite/.cvsignore
@@ -0,0 +1,2 @@
+Makefile
+Makefile.in
10 agent-scpm/testsuite/Makefile.am
@@ -0,0 +1,10 @@
+#
+# Makefile.am for .../agent-scpm/testsuite
+#
+
+AUTOMAKE_OPTIONS = dejagnu
+
+clean-local:
+ rm -f tmp.err.* tmp.out.* site.exp site.bak
+
+EXTRA_DIST = README
1  agent-scpm/testsuite/README
@@ -0,0 +1 @@
+Testsuite for agent-scpm.
2  agents/.cvsignore
@@ -0,0 +1,2 @@
+Makefile
+Makefile.in
9 agents/Makefile.am
@@ -0,0 +1,9 @@
+#
+# Makefile.am for devtools/devtools/skeletons/config/agents
+#
+
+agent_SCRIPTS =
+
+scrconf_DATA =
+
+EXTRA_DIST = $(agent_SCRIPTS) $(scrconf_DATA)
14 configure.in.in
@@ -0,0 +1,14 @@
+## YCP module configure.in.in
+
+## Initialize
+@YAST2-INIT-COMMON@
+@YAST2-INIT-PROGRAM@
+@YAST2-INIT-YCP@
+
+## some common checks
+@YAST2-CHECKS-COMMON@
+@YAST2-CHECKS-PROGRAM@
+@YAST2-CHECKS-YCP@
+
+## and generate the output...
+@YAST2-OUTPUT@
2  doc/.cvsignore
@@ -0,0 +1,2 @@
+Makefile
+Makefile.in
12 doc/Makefile.am
@@ -0,0 +1,12 @@
+#
+# Makefile.am for devtools/devtools/skeletons/config/doc
+#
+
+SUBDIRS = autodocs
+
+htmldir = $(docdir)
+
+doc_DATA =
+html_DATA =
+
+EXTRA_DIST = $(doc_DATA) $(html_DATA)
3  doc/autodocs/.cvsignore
@@ -0,0 +1,3 @@
+Makefile
+Makefile.in
+*.html
12 doc/autodocs/Makefile.am
@@ -0,0 +1,12 @@
+#
+# Makefile.am for devtools/devtools/skeletons/config/doc/autodocs
+#
+
+htmldir = $(docdir)/autodocs
+
+index.html: $(srcdir)/../../src/*.ycp
+ $(ybindir)/ycpdoc -d. $(srcdir)/../../src/*.ycp
+
+html_DATA = index.html $(wildcard *.html)
+
+CLEANFILES = $(html_DATA)
2  package/.cvsignore
@@ -0,0 +1,2 @@
+*.spec
+*.bz2
4 package/yast2-profile-manager.changes
@@ -0,0 +1,4 @@
+-------------------------------------------------------------------
+Thu Jul 11 19:00:04 2002 - jsuchome@suse.cz
+
+- initial version
2  src/.cvsignore
@@ -0,0 +1,2 @@
+Makefile
+Makefile.in
26 src/Makefile.am
@@ -0,0 +1,26 @@
+#
+# Makefile.am for devtools/devtools/skeletons/config/src
+#
+
+yncludedir = @yncludedir@/profile-manager
+
+client_DATA = \
+ profile-manager.ycp \
+ profile-manager_auto.ycp \
+ profile-manager_proposal.ycp \
+ profile-manager_write.ycp
+
+ynclude_DATA = \
+ helps.ycp \
+ wizards.ycp \
+ dialogs.ycp \
+ complex.ycp \
+ routines.ycp
+
+config_DATA = \
+ profile-manager.y2cc
+
+module_DATA = \
+ ProfileManager.ycp
+
+EXTRA_DIST = $(client_DATA) $(ynclude_DATA) $(config_DATA) $(module_DATA)
216 src/ProfileManager.ycp
@@ -0,0 +1,216 @@
+/**
+ * File: modules/ProfileManager.ycp
+ * Package: Configuration of profile-manager
+ * Summary: Data for configuration of profile-manager, input and output functions.
+ * Authors: Jiri Suchomel <jsuchome@suse.cz>
+ *
+ * $Id$
+ *
+ * Representation of the configuration of profile-manager.
+ * Input and output routines.
+ */
+
+{
+
+module "ProfileManager";
+textdomain "profile-manager";
+
+import "Progress";
+import "Report";
+import "Summary";
+
+include "profile-manager/routines.ycp";
+
+/**
+ * Abort function
+ * return boolean return true if abort
+ */
+global block AbortFunction = nil;
+
+/**
+ * Data was modified?
+ */
+global boolean modified = false;
+
+global boolean proposal_valid = false;
+global boolean write_only = false;
+
+/**
+ * Data was modified?
+ * @return true if modified
+ */
+global define boolean Modified() ``{
+ y2debug("modified=%1",modified);
+ return modified;
+};
+
+// Settings: Define all variables needed for configuration of profile-manager
+// TODO FIXME: Define all the variables necessary to hold
+// TODO FIXME: the configuration here (with the appropriate
+// TODO FIXME: description)
+// TODO FIXME: For example:
+// /**
+// * List of the configured cards.
+// */
+// list cards = [];
+//
+// /**
+// * Some additional parameter needed for the configuration.
+// */
+// boolean additional_parameter = true;
+
+/**
+ * Read all profile-manager settings
+ * @return true on success
+ */
+global define boolean Read() ``{
+
+ /* Xprofile-manager read dialog caption */
+ string caption = _("Initializing profile-manager configuration");
+
+ // TODO FIXME Set the right number of stages
+ integer steps = 4;
+
+ integer sl = 500;
+ sleep(sl);
+
+ // TODO FIXME Names of real stages
+ // We do not set help text here, because it was set outside
+ Progress::New( caption, " ", steps, [
+ _("Read the database"),
+ _("Read the previous settings"),
+ _("Detect the devices")
+ ], [
+ _("Reading the database..."),
+ _("Reading the previous settings..."),
+ _("Detecting the devices..."),
+ _("Finished")
+ ],
+ ""
+ );
+
+ // read database
+ if(Abort()) return false;
+ Progress::NextStage();
+ if(false) Report::Error(_("Can not read the database1!"));
+ sleep(sl);
+
+ // read another database
+ if(Abort()) return false;
+ Progress::NextStep();
+ if(false) Report::Error(_("Can not read the database2"));
+ sleep(sl);
+
+ // read current settings
+ if(Abort()) return false;
+ Progress::NextStage();
+ if(false) Report::Error(_("Can not read current settings!"));
+ sleep(sl);
+
+ // detect devices
+ if(Abort()) return false;
+ Progress::NextStage();
+ if(false) Report::Warning(_("Can not detect device"));
+ sleep(sl);
+
+ if(Abort()) return false;
+ ProgressNextStage(_("Finished"));
+ sleep(sl);
+
+ if(Abort()) return false;
+ modified = false;
+ return true;
+}
+
+/**
+ * Write all profile-manager settings
+ * @return true on success
+ */
+global define boolean Write() ``{
+
+ /* Xprofile-manager read dialog caption */
+ string caption = _("Saving profile-manager configuration");
+
+ // TODO FIXME And set the right number of stages
+ integer steps = 2;
+
+ integer sl = 500;
+ sleep(sl);
+
+ // TODO FIXME Names of real stages
+ // We do not set help text here, because it was set outside
+ Progress::New(caption, " ", steps, [
+ _("Write the settings"),
+ _("Run SuSEconfig")
+ ], [
+ _("Writing the settings..."),
+ _("Running SuSEconfig..."),
+ _("Finished")
+ ],
+ ""
+ );
+
+ // write settings
+ if(Abort()) return false;
+ Progress::NextStage();
+ if(false) Report::Error (_("Can not write settings!"));
+ sleep(sl);
+
+ // run SuSEconfig
+ if(Abort()) return false;
+ Progress::NextStage ();
+ if(false) Report::Error (_("SuSEconfig script failed!"));
+ sleep(sl);
+
+ if(Abort()) return false;
+ ProgressNextStage(_("Finished"));
+ sleep(sl);
+
+ if(Abort()) return false;
+ return true;
+}
+
+/**
+ * Get all profile-manager settings from the first parameter
+ * (For use by autoinstallation.)
+ * @param settings The YCP structure to be imported.
+ * @return boolean True on success
+ */
+global define boolean Import (map settings) ``{
+ // TODO FIXME: your code here (fill the above mentioned variables)...
+ sleep(3000);
+ return true;
+}
+
+/**
+ * Dump the profile-manager settings to a single map
+ * (For use by autoinstallation.)
+ * @return map Dumped settings (later acceptable by Import ())
+ */
+global define map Export () ``{
+ // TODO FIXME: your code here (return the above mentioned variables)...
+ sleep(3000);
+ return $[];
+}
+
+/**
+ * Create a textual summary and a list of unconfigured cards
+ * @param split split configured and unconfigured?
+ * @return summary of the current configuration
+ */
+global define list Summary() ``{
+ // TODO FIXME: your code here...
+ return [ _("Configuration summary ..."), [] ];
+}
+
+/**
+ * Create an overview table with all configured cards
+ * @return table items
+ */
+global define list Overview() ``{
+ // TODO FIXME: your code here...
+ return [];
+}
+
+/* EOF */
+}
178 src/complex.ycp
@@ -0,0 +1,178 @@
+/**
+ * File: include/profile-manager/complex.ycp
+ * Package: Configuration of profile-manager
+ * Summary: Dialogs definitions
+ * Authors: Jiri Suchomel <jsuchome@suse.cz>
+ *
+ * $Id$
+ */
+
+{
+
+textdomain "profile-manager";
+
+import "Wizard";
+import "Wizard_hw";
+
+import "ProfileManager";
+
+include "ui/common_popups.ycp";
+include "ui/common_messages.ycp";
+
+include "profile-manager/helps.ycp";
+include "profile-manager/routines.ycp";
+
+/**
+ * Return a modification status
+ * @return true if data was modified
+ */
+global define boolean Modified() ``{
+ return ProfileManager::Modified();
+}
+
+
+/**
+ * Read settings dialog
+ * @return `abort if aborted and `next otherwise
+ */
+global define symbol ReadDialog() ``{
+ Wizard::RestoreHelp(HELPS["read"]:"");
+ ProfileManager::AbortFunction = ``{ return PollAbort();};
+ boolean ret = ProfileManager::Read();
+ return ret ? `next : `abort;
+}
+
+/**
+ * Write settings dialog
+ * @return `abort if aborted and `next otherwise
+ */
+global define symbol WriteDialog() ``{
+ Wizard::RestoreHelp(HELPS["write"]:"");
+ ProfileManager::AbortFunction = ``{ return PollAbort();};
+ boolean ret = ProfileManager::Write();
+ return ret ? `next : `abort;
+}
+
+/**
+ * Summary dialog
+ * @return dialog result
+ */
+global define symbol SummaryDialog() ``{
+
+ /* ProfileManager summary dialog caption */
+ string caption = _("ProfileManager configuration");
+
+ /* FIXME */
+ list summary = ProfileManager::Summary();
+ list unconfigured = summary[1]:[];
+ string configured = summary[0]:"";
+
+ /* Frame label */
+ term contents = Wizard_hw::DetectedContent(_("ProfileManager to configure"),
+ unconfigured, false, configured);
+
+ Wizard::SetContentsButtons(caption, contents, HELPS["summary"]:"",
+ BackButtonLabel(), FinishButtonLabel());
+
+ any ret = nil;
+ while(true) {
+
+ ret = UI::UserInput();
+
+ /* abort? */
+ if(ret == `abort || ret == `cancel) {
+ if(ReallyAbort()) break;
+ else continue;
+ }
+ /* overview dialog */
+ else if(ret == `edit_button) {
+ ret = `overview;
+ break;
+ }
+ /* configure the selected device */
+ else if(ret == `configure_button) {
+ // TODO FIXME: check for change of the configuration
+ any selected = UI::QueryWidget(`id(`detected_selbox), `CurrentItem);
+ if(selected == `other) {
+ ret = `other;
+ }
+ else {
+ ret = `configure;
+ }
+ break;
+ }
+ else if(ret == `next || ret == `back) {
+ break;
+ }
+ else {
+ y2error("unexpected retcode: %1", ret);
+ continue;
+ }
+ }
+
+ return ret;
+}
+
+/**
+ * Overview dialog
+ * @return dialog result
+ */
+global define symbol OverviewDialog() ``{
+
+ /* ProfileManager overview dialog caption */
+ string caption = _("ProfileManager overview");
+
+ list overview = ProfileManager::Overview();
+
+ /* FIXME table header */
+ term contents = Wizard_hw::ConfiguredContent(
+ /* Table header */
+ `header(_("Number"), _("Profile manager")),
+ overview, nil, nil, nil, nil );
+
+ contents = Wizard_hw::SpacingAround(contents, 1.5, 1.5, 1.0, 1.0);
+
+ Wizard::SetContentsButtons(caption, contents, HELPS["overview"]:"",
+ BackButtonLabel(), FinishButtonLabel());
+
+ any ret = nil;
+ while(true) {
+
+ ret = UI::UserInput();
+
+ /* abort? */
+ if(ret == `abort || ret == `cancel) {
+ if(ReallyAbort()) break;
+ else continue;
+ }
+ /* add */
+ else if(ret == `add_button) {
+ /* FIXME */
+ ret = `add;
+ break;
+ }
+ /* edit */
+ else if(ret == `edit_button) {
+ /* FIXME */
+ ret = `edit;
+ break;
+ }
+ /* delete */
+ else if(ret == `delete_button) {
+ /* FIXME */
+ continue;
+ }
+ else if(ret == `next || ret == `back) {
+ break;
+ }
+ else {
+ y2error("unexpected retcode: %1", ret);
+ continue;
+ }
+ }
+
+ return ret;
+}
+
+/* EOF */
+}
97 src/dialogs.ycp
@@ -0,0 +1,97 @@
+/**
+ * File: include/profile-manager/dialogs.ycp
+ * Package: Configuration of profile-manager
+ * Summary: Dialogs definitions
+ * Authors: Jiri Suchomel <jsuchome@suse.cz>
+ *
+ * $Id$
+ */
+
+{
+
+textdomain "profile-manager";
+
+import "ProfileManager";
+
+include "ui/common_popups.ycp";
+include "ui/common_messages.ycp";
+
+include "profile-manager/helps.ycp";
+include "profile-manager/routines.ycp";
+
+/**
+ * Configure1 dialog
+ * @return dialog result
+ */
+global define symbol Configure1Dialog () ``{
+
+ /* ProfileManager configure1 dialog caption */
+ string caption = _("ProfileManager configuration");
+
+ /* XXPkg configure1 dialog contents */
+ term contents = `Label (_("First part of configuration of profile-manager"));
+
+ Wizard::SetContentsButtons(caption, contents, HELPS["c1"]:"",
+ BackButtonLabel(), NextButtonLabel());
+
+ any ret = nil;
+ while(true) {
+
+ ret = UI::UserInput();
+
+ /* abort? */
+ if(ret == `abort || ret == `cancel) {
+ if(ReallyAbort()) break;
+ else continue;
+ }
+ else if(ret == `next || ret == `back) {
+ break;
+ }
+ else {
+ y2error("unexpected retcode: %1", ret);
+ continue;
+ }
+ }
+
+ return ret;
+}
+
+/**
+ * Configure2 dialog
+ * @return dialog result
+ */
+global define symbol Configure2Dialog () ``{
+
+ /* ProfileManager configure2 dialog caption */
+ string caption = _("ProfileManager configuration");
+
+ /* XXPkg configure2 dialog contents */
+ term contents = `Label (_("Second part of configuration of profile-manager"));
+
+ Wizard::SetContentsButtons(caption, contents, HELPS["c2"]:"",
+ BackButtonLabel(), NextButtonLabel());
+
+ any ret = nil;
+ while(true) {
+
+ ret = UI::UserInput();
+
+ /* abort? */
+ if(ret == `abort || ret == `cancel) {
+ if(ReallyAbort()) break;
+ else continue;
+ }
+ else if(ret == `next || ret == `back) {
+ break;
+ }
+ else {
+ y2error("unexpected retcode: %1", ret);
+ continue;
+ }
+ }
+
+ return ret;
+}
+
+/* EOF */
+}
89 src/helps.ycp
@@ -0,0 +1,89 @@
+/**
+ * File: include/profile-manager/helps.ycp
+ * Package: Configuration of profile-manager
+ * Summary: Help texts of all the dialogs
+ * Authors: Jiri Suchomel <jsuchome@suse.cz>
+ *
+ * $Id$
+ */
+
+{
+
+textdomain "profile-manager";
+
+/**
+ * All helps are here
+ */
+global map HELPS = $[
+
+ /* Read dialog help 1/2 */
+ "read" : _("<p><b><big>Initializing profile-manager configuration</big></b><br>
+Please wait for a while...<br></p>") +
+
+ /* Read dialog help 2/2 */
+ _("<p><b><big>Aborting the initialization:</big></b><br>
+Safely abort the configuration utility by pressing the <b>Abort</b> now.</p>"),
+
+ /* Write dialog help 1/2 */
+ "write" : _("<p><b><big>Saving profile-manager configuration</big></b><br>
+Please wait for a while...<br></p>") +
+
+ /* Write dialog help 2/2 */
+_("<p><b><big>Aborting the saving:</big></b><br>
+You can abort the saving by pressing the <b>Abort</b> button.
+An additional dialog will inform you whether it is safe to do so or not.
+</p>"),
+
+ /* Summary dialog help 1/3 */
+ "summary" : _("<p><b><big>Profile-manager configuration</big></b><br>
+Configure profile-manager here.<br></p>") +
+
+ /* Summary dialog help 2/3 */
+ _("<p><b><big>Adding a profile-manager:</big></b><br>
+Choose profile-manager from the list of the detected profile-managers.
+If your profile-manager was not autodetected, use <b>Other (not detected)</b>.
+Then press <b>Configure</b>.</p>") +
+
+ /* Summary dialog help 3/3 */
+ _("<p><b><big>Editing or deleting:</big></b><br>
+If you press <b>Edit</b>, an additional dialog in which to change
+the configuration opens.</p>"),
+
+ /* Ovreview dialog help 1/3 */
+ "overview" : _("<p><b><big>Profile-manager configuration overview</big></b><br>
+Obtain an overview about installed profile-managers. Additionally
+edit their configuration.<br></p>") +
+
+ /* Ovreview dialog help 2/3 */
+_("<p><b><big>Adding a profile-manager:</big></b><br>
+Press <b>Add</b> to configure a profile-manager.</p>") +
+
+ /* Ovreview dialog help 3/3 */
+_("<p><b><big>Editing or deleting:</big></b><br>
+Choose a profile-manager to change or remove.
+Then press <b>Edit</b> or <b>Delete</b> as desired.</p>"),
+
+ /* Configure1 dialog help 1/2 */
+ "c1" : _("<p><b><big>Configure, part one</big></b><br>
+Please press the <b>Next</b> button.
+<br></p>") +
+
+ /* Configure1 dialog help 2/2 */
+_("<p><b><big>Selecting something:</big></b><br>
+It is not possible, you must code it first :-)
+</p>"),
+
+ /* Configure2 dialog help 1/2 */
+ "c2" : _("<p><b><big>Configure, part two</big></b><br>
+Please press the <b>Next</b> button.
+<br></p>") +
+
+ /* Configure2 dialog help 2/2 */
+_("<p><b><big>Selecting something:</big></b><br>
+It is not possible, you must code it first :-)
+</p>"),
+
+];
+
+/* EOF */
+}
43 src/profile-manager.y2cc
@@ -0,0 +1,43 @@
+;
+; Menuentry file for profile-manager used by YaST2 Control Center
+;
+; $Id$
+;
+
+[Y2Module profile-manager]
+
+; name of the entry, shown in y2cc
+Name = _("Profile manager")
+
+; "raw" group name to which this module belongs
+; see /usr/share/YaST2/config/y2cc.groups for valid values
+Group = Misc
+
+; icon displayed in y2cc
+Icon = profile-manager.png
+
+; *one* *short* descriptive line for y2cc
+Helptext = _("Configure profiles")
+
+; arguments, seperated by space
+Arguments =
+
+; whether root privileges are required to run this module
+RequiresRoot = true
+
+; default size for window, Y2CC will set $Y2_GEOMETRY to this value
+Geometry =
+
+; string to use for sorting instead of Name
+SortKey =
+
+; which textdomain to use for translations (important!)
+Textdomain = profile-manager
+
+; Autoinstall features
+Autoinst =
+
+; Resource in control file
+AutoinstResource =
+
+; vim:syntax=dosini
51 src/profile-manager.ycp
@@ -0,0 +1,51 @@
+/**
+ * File: clients/profile-manager.ycp
+ * Package: Configuration of profile-manager
+ * Summary: Main file
+ * Authors: Jiri Suchomel <jsuchome@suse.cz>
+ *
+ * $Id$
+ *
+ * Main file for profile-manager configuration. Uses all other files.
+ */
+
+{
+
+/***
+ * <h3>Configuration of the profile-manager</h3>
+ */
+
+textdomain "profile-manager";
+
+/* The main () */
+y2milestone ("----------------------------------------");
+y2milestone ("Profile-manager module started");
+
+include "profile-manager/wizards.ycp";
+
+/* is this proposal or not? */
+boolean propose = false;
+list args = Args();
+if(size(args) > 0) {
+ if(is(Args(0), path) && Args(0) == .propose) {
+ y2milestone("Using PROPOSE mode");
+ propose = true;
+ }
+ else
+ y2error("Bad argument for profile-manager: %1", Args(0));
+}
+
+/* main ui function */
+any ret = nil;
+
+if(propose) ret = ProfileManagerAutoSequence();
+else ret = ProfileManagerSequence();
+y2debug("ret == %1", ret);
+
+/* Finish */
+y2milestone("Profile-manager module finished");
+y2milestone("----------------------------------------");
+return ret;
+
+/* EOF */
+}
56 src/profile-manager_auto.ycp
@@ -0,0 +1,56 @@
+/**
+ * File: clients/profile-manager_auto.ycp
+ * Package: Configuration of profile-manager
+ * Summary: Client for autoinstallation
+ * Authors: Jiri Suchomel <jsuchome@suse.cz>
+ *
+ * $Id$
+ *
+ * This is a client for autoinstallation. It takes its arguments,
+ * goes through the configuration and return the setting.
+ * Does not do any changes to the configuration.
+ */
+
+/**
+ * @param first a map of profile-manager settings
+ * @return map edited settings or an empty map if canceled
+ * @example map mm = $[ "FAIL_DELAY" : "77" ];
+ * @example map ret = CallModule ("profile-manager_auto", [ mm ]);
+ */
+
+{
+
+textdomain "profile-manager";
+
+y2milestone("----------------------------------------");
+y2milestone("Profile-manager auto started");
+
+import "ProfileManager";
+include "profile-manager/ui.ycp";
+
+list args = Args();
+if(size(args) <= 0) {
+ y2error("Did not get the settings, probably some mistake...");
+ return false;
+}
+if(!is(Args(0), map)) {
+ y2error("Bad argument for profile-manager_auto: %1", Args(0));
+ return false;
+}
+
+/* The settings are in the first argument */
+map settings = select(args, 0, $[]);
+y2milestone("Imported: (%1)", settings);
+
+ProfileManager::Import(settings);
+symbol ret = ProfileManagerAutoSequence();
+y2debug("ret=%1", ret);
+
+y2milestone("Profile-manager auto finished");
+y2milestone("----------------------------------------");
+
+if(ret == `next) return ProfileManager::Export();
+return $[];
+
+/* EOF */
+}
84 src/profile-manager_proposal.ycp
@@ -0,0 +1,84 @@
+/**
+ * File: clients/profile-manager_proposal.ycp
+ * Package: Configuration of profile-manager
+ * Summary: Proposal function dispatcher.
+ * Authors: Jiri Suchomel <jsuchome@suse.cz>
+ *
+ * $Id$
+ *
+ * Proposal function dispatcher for profile-manager configuration.
+ */
+
+{
+
+textdomain "profile-manager";
+
+import "ProfileManager";
+import "Progress";
+
+/* The main () */
+y2milestone("----------------------------------------");
+y2milestone("Profile-manager proposal started");
+
+string func = Args(0);
+map param = Args(1);
+map ret = $[];
+
+/* create a textual proposal */
+if(func == "MakeProposal") {
+ string proposal = "";
+ string warning = nil;
+ symbol warning_level = nil;
+ boolean force_reset = param["force_reset"]:false;
+
+ if(force_reset || !ProfileManager::proposal_valid) {
+ ProfileManager::proposal_valid = true;
+ Progress::off();
+ ProfileManager::Read();
+ }
+ list sum = ProfileManager::Summary(false);
+ proposal = select(sum, 0, "");
+ Progress::on();
+
+ ret = $[
+ "preformatted_proposal" : proposal,
+ "warning_level" : warning_level,
+ "warning" : warning,
+ ];
+}
+/* run the module */
+else if(func == "AskUser") {
+ map stored = ProfileManager::Export();
+ symbol seq = CallFunction(`profile-manager(.propose));
+ if(seq != `next) ProfileManager::Import(stored);
+ y2debug("stored=%1",stored);
+ y2debug("seq=%1",seq);
+ ret = $[
+ "workflow_sequence" : seq
+ ];
+}
+/* create titles */
+else if(func == "Description") {
+ ret = $[
+ "rich_text_title" : _("Profile manager"),
+ "menu_title" : _("&Profile manager"),
+ "id" : "profile-manager",
+ ];
+}
+/* write the proposal */
+else if(func == "Write") {
+ ProfileManager::Write();
+}
+/* unknown function */
+else {
+ y2error("unknown function: %1", func);
+}
+
+/* Finish */
+y2debug("ret=%1",ret);
+y2milestone("Profile-manager proposal finished");
+y2milestone("----------------------------------------");
+return ret;
+
+/* EOF */
+}
56 src/profile-manager_write.ycp
@@ -0,0 +1,56 @@
+/**
+ * File: clients/profile-manager_write.ycp
+ * Package: Configuration of profile-manager
+ * Summary: Writing only client
+ * Authors: Jiri Suchomel <jsuchome@suse.cz>
+ *
+ * $Id$
+ *
+ * This is a write-only client. It takes its arguments and just
+ * write the settings.
+ */
+
+/**
+ * @param first a map of profile-manager settings
+ * @return boolean success of operation
+ * @example map mm = $[ "FAIL_DELAY" : "77" ];
+ * @example any ret = CallModule ("profile-manager_write", [ mm ]);
+ */
+
+{
+
+textdomain "profile-manager";
+
+y2milestone("----------------------------------------");
+y2milestone("Profile-manager write started");
+
+import "ProfileManager";
+import "Progress";
+
+list args = Args();
+if(size(args) <= 0) {
+ y2error("NOT writing, probably some mistake...");
+ return false;
+}
+if(!is(Args(0), map)) {
+ y2error ("Bad argument for profile-manager write: %1", Args(0));
+ return false;
+}
+
+// The settings are in the first argument
+map settings = select(args, 0, $[]);
+y2milestone("Only writing... (%1)", settings);
+
+if(!ProfileManager::Import(settings))
+ return false;
+
+Progress::off();
+boolean ret = ProfileManager::WriteOnly();
+Progress::on();
+
+y2milestone("Profile-manager write finished");
+y2milestone("----------------------------------------");
+return ret;
+
+/* EOF */
+}
52 src/routines.ycp
@@ -0,0 +1,52 @@
+/**
+ * File: include/profile-manager/routines.ycp
+ * Package: Configuration of profile-manager
+ * Summary: Miscelanous functions for configuration of profile-manager.
+ * Authors: Jiri Suchomel <jsuchome@suse.cz>
+ *
+ * $Id$
+ */
+
+{
+
+textdomain "profile-manager";
+
+/* FIXME: Remove this file if you do not need it! */
+
+/**
+ * Abort function
+ * @return blah blah lahjk
+ */
+global define boolean Abort() ``{
+ if(AbortFunction != nil)
+ return eval(AbortFunction) == true;
+ return false;
+}
+
+/**
+ * Check for pending Abort press
+ * @return true if pending abort
+ */
+global define boolean PollAbort() ``{
+ return UI::PollInput() == `abort;
+}
+
+/**
+ * If modified, ask for confirmation
+ * @return true if abort is confirmed
+ */
+global define boolean ReallyAbort() ``{
+ return !Modified() || UI::ReallyAbortPopup(true);
+}
+
+/**
+ * Progress::NextStage and Progress::Title combined into one function
+ * @param title progressbar title
+ */
+global define void ProgressNextStage(string title) ``{
+ Progress::NextStage();
+ Progress::Title(title);
+}
+
+/* EOF */
+}
162 src/wizards.ycp
@@ -0,0 +1,162 @@
+/**
+ * File: include/profile-manager/wizards.ycp
+ * Package: Configuration of profile-manager
+ * Summary: Wizards definitions
+ * Authors: Jiri Suchomel <jsuchome@suse.cz>
+ *
+ * $Id$
+ */
+
+{
+
+textdomain "profile-manager";
+
+import "Wizard";
+
+include "ui/common_popups.ycp";
+include "ui/common_messages.ycp";
+include "wizard/sequencer.ycp";
+
+include "profile-manager/complex.ycp";
+include "profile-manager/dialogs.ycp";
+
+/**
+ * Whole configuration of profile-manager
+ * @return sequence result
+ */
+global define symbol ProfileManagerSequence() ``{
+
+ map aliases = $[
+ "read" : [ ``( ReadDialog() ), true ],
+ "main" : ``( MainSequence() ),
+ "write" : [ ``( WriteDialog() ), true ]
+ ];
+
+ map sequence = $[
+ "ws_start" : "read",
+ "read" : $[
+ `abort : `abort,
+ `next : "main"
+ ],
+ "main" : $[
+ `abort : `abort,
+ `next : "write"
+ ],
+ "write" : $[
+ `abort : `abort,
+ `next : `next
+ ]
+ ];
+
+ string caption = _("Profile-manager configuration");
+ term contents = `Label(_("Initializing ..."));
+
+ Wizard::CreateDialog();
+ Wizard::SetContentsButtons(caption, contents, "",
+ BackButtonLabel(), NextButtonLabel());
+
+ any ret = WizardSequencer(aliases, sequence);
+
+ UI::CloseDialog();
+ return ret;
+}
+
+/**
+ * Whole configuration of profile-manager but without reading and writing.
+ * For use with autoinstallation.
+ * @return sequence result
+ */
+global define symbol ProfileManagerAutoSequence() ``{
+ string caption = _("Profile-manager configuration");
+ term contents = `Label(_("Initializing ..."));
+
+ Wizard::CreateDialog();
+ Wizard::SetContentsButtons(caption, contents, "",
+ BackButtonLabel(), NextButtonLabel());
+
+ any ret = MainSequence();
+
+ UI::CloseDialog();
+ return ret;
+}
+
+/**
+ * Main workflow of the profile-manager configuration
+ * @return sequence result
+ */
+global define symbol MainSequence() ``{
+
+ /* FIXME: adapt to your needs */
+ map aliases = $[
+ "summary" : ``( SummaryDialog() ),
+ "overview" : ``( OverviewDialog() ),
+ "configure" : [ ``( AddSequence() ), true ],
+ "add" : [ ``( AddSequence() ), true ],
+ "edit" : [ ``( AddSequence() ), true ]
+ ];
+
+ /* FIXME: adapt to your needs */
+ map sequence = $[
+ "ws_start" : "summary",
+ "summary" : $[
+ `abort : `abort,
+ `next : `next,
+ `overview : "overview",
+ `configure : "configure",
+ `other : "configure",
+ ],
+ "overview" : $[
+ `abort : `abort,
+ `next : `next,
+ `add : "add",
+ `edit : "edit",
+ ],
+ "configure" : $[
+ `abort : `abort,
+ `next : "summary",
+ ],
+ "add" : $[
+ `abort : `abort,
+ `next : "overview",
+ ],
+ "edit" : $[
+ `abort : `abort,
+ `next : "overview",
+ ]
+ ];
+
+ any ret = WizardSequencer(aliases, sequence);
+
+ return ret;
+}
+
+/**
+ * Add a configuration of profile-manager
+ * @return sequence result
+ */
+global define symbol AddSequence() ``{
+
+ /* FIXME: adapt to your needs */
+ map aliases = $[
+ "config1" : ``( Configure1Dialog() ),
+ "config2" : ``( Configure2Dialog() )
+ ];
+
+ /* FIXME: adapt to your needs */
+ map sequence = $[
+ "ws_start" : "config1",
+ "config1" : $[
+ `abort : `abort,
+ `next : "config2"
+ ],
+ "config2" : $[
+ `abort : `abort,
+ `next : `next
+ ]
+ ];
+
+ return WizardSequencer( aliases, sequence );
+}
+
+/* EOF */
+}
11 testsuite/.cvsignore
@@ -0,0 +1,11 @@
+Makefile
+Makefile.in
+site.exp
+*.sum
+*.log
+tmp.out*
+tmp.err*
+tmp.log*
+config
+run
+*.test
19 testsuite/Makefile.am
@@ -0,0 +1,19 @@
+#
+# Makefile.am for .../testsuite
+#
+
+AUTOMAKE_OPTIONS = dejagnu
+EXTRA_DIST = $(wildcard tests/*.out) $(wildcard tests/*.err) $(wildcard tests/*.ycp) $(wildcard tests/*.yh)
+
+testsuite_prepare = @ydatadir@/testsuite/Makefile.testsuite
+
+all-local: $(testsuite_prepare)
+ make -f $(testsuite_prepare) RPMNAME=$(RPMNAME) srcdir=$(srcdir)
+
+clean-local: $(testsuite_prepare)
+ make -f $(testsuite_prepare) RPMNAME=$(RPMNAME) srcdir=$(srcdir) clean
+
+check-local: $(testsuite_prepare)
+ make -f $(testsuite_prepare) RPMNAME=$(RPMNAME) srcdir=$(srcdir) check
+
+# EOF
0  testsuite/tests/.cvsignore
No changes.
34 yast2-profile-manager.spec.in
@@ -0,0 +1,34 @@
+@HEADER-COMMENT@
+# neededforbuild gpp libgpp libxcrypt libxcrypt-devel yast2-devel-packages
+
+@HEADER@
+Requires: yast2
+
+BuildArchitectures: noarch
+
+Summary: Configuration of profile-manager
+
+%description
+-
+
+@PREP@
+
+@BUILD@
+
+@INSTALL@
+
+@CLEAN@
+
+%files
+%defattr(-,root,root)
+%dir @yncludedir@/profile-manager
+@yncludedir@/profile-manager/*
+@clientdir@/profile-manager.ycp
+@clientdir@/profile-manager_*.ycp
+@moduledir@/ProfileManager.ycp
+@configdir@/profile-manager.y2cc
+@scrconfdir@/*.scr
+@plugindir@/libpy2ag_SCPM.so.*
+@plugindir@/libpy2ag_SCPM.so
+@plugindir@/libpy2ag_SCPM.la
+%doc @docdir@
Please sign in to comment.
Something went wrong with that request. Please try again.