From 9278d2c268f5e05683c769d0a5e9ef7ec337ddb1 Mon Sep 17 00:00:00 2001
From: Viktor Horvath <technique@alixen.fr>
Date: Fri, 30 Nov 2012 17:58:12 +0100
Subject: [PATCH] Makefile separation : instantiation part (work in progress)

---
 slapos/recipe/mioga/instantiate.py     | 32 ++++++++-------
 software/mioga/instance-apacheperl.cfg | 12 +++---
 software/mioga/mioga-patch             | 57 +++++++++++++++++++++++---
 software/mioga/software.cfg            |  1 +
 4 files changed, 77 insertions(+), 25 deletions(-)

diff --git a/slapos/recipe/mioga/instantiate.py b/slapos/recipe/mioga/instantiate.py
index ab8057a11..d3c83e030 100644
--- a/slapos/recipe/mioga/instantiate.py
+++ b/slapos/recipe/mioga/instantiate.py
@@ -54,15 +54,14 @@ class Recipe(GenericBaseRecipe):
     self.instantiate(False)
 
   def instantiate(self, isNewInstall):
-    print "This is the Mioga recipe"
-    print "Looking for compile folder:"
-    print self.options['mioga_compile_dir']
-
-    # TODO: this will only work for a SINGLE instance in the Slaprunner.
-    # In a real environment we cannot mess around with the compile directory
-    # like that.    
+    # Copy the build/ and var/lib/Mioga2 folders into the instance
+    mioga_location = self.options['mioga_location']
+    var_dir = self.options['var_directory']
+    if not os.path.exists(var_dir):
+      shutil.copytree(os.path.join(mioga_location, 'var'), var_dir, True)
+      
     former_directory = os.getcwd()
-    os.chdir(self.options['mioga_compile_dir'])
+    os.chdir(self.options['mioga_buildinst'])
 
     vardir = self.options['var_directory']
     mioga_base = os.path.join(vardir, 'lib', 'Mioga2')
@@ -91,12 +90,15 @@ class Recipe(GenericBaseRecipe):
     if os.path.isdir('web/conf/apache'):
       shutil.rmtree('web/conf/apache')
 
+    for key in self.options.keys():
+      print "Found option: "+key
 
     environ = os.environ
     environ['PATH'] = ':'.join([self.options['perl_bin'],           # priority!
                                 # Mioga scripts in Makefiles and shell scripts
                                 self.options['bin_dir'],            
-                                self.options['mioga_add_to_path'],
+                                self.options['libxslt_bin'],
+                                self.options['libxml2_bin'],
                                 self.options['postgres_bin'],
                                 environ['PATH'] ])
     
@@ -115,7 +117,7 @@ class Recipe(GenericBaseRecipe):
     # environ = self.options['mioga_compile_env']
     print pprint.pformat(environ)
 
-    # We must call "make installall" in the SAME environment that
+    # We must call "make" in the SAME environment that
     # "perl Makefile.PL" left!
 
     cmd = subprocess.Popen(self.options['perl_bin'] + '/perl Makefile.PL disable_check'
@@ -211,11 +213,12 @@ Include conf/extra/httpd-autoindex.conf
       else:
         os.mkfifo(fifo, 0600)
 
+    site_perl_bin = os.path.join(self.options['site_perl'], 'bin')
     mioga_conf_path = os.path.join(mioga_base, 'conf', 'Mioga.conf')
     notifier_wrapper = self.createPythonScript(
       os.path.join(services_dir, 'notifier'),
       'slapos.recipe.librecipe.execute.execute',
-      [ os.path.join(self.options['mioga_compile_dir'], 'bin', 'notifier', 'notifier.pl'),
+      [ os.path.join(site_perl_bin, 'notifier.pl'),
         mioga_conf_path ]
     )
     path_list.append(notifier_wrapper)
@@ -223,18 +226,17 @@ Include conf/extra/httpd-autoindex.conf
     searchengine_wrapper = self.createPythonScript(
       os.path.join(services_dir, 'searchengine'),
       'slapos.recipe.librecipe.execute.execute',
-      [ os.path.join(self.options['mioga_compile_dir'], 'bin', 'notifier', 'searchengine.pl'),
+      [ os.path.join(site_perl_bin, 'searchengine.pl'),
         mioga_conf_path ]
     )
     path_list.append(searchengine_wrapper)
 
-    crawl_fm = FileModifier(
-      os.path.join(self.options['mioga_compile_dir'], 'bin', 'search', 'crawl_sample.sh') )
+    crawl_fm = FileModifier( os.path.join('bin', 'search', 'crawl_sample.sh') )
     # TODO: The crawl script will still call the shell command "date"
     crawl_fm.modify(r'/var/tmp/crawl', self.options['log_dir'] + '/crawl')
     crawl_fm.modify(r'/var/lib/Mioga2/conf', mioga_base + '/conf')
     crawl_fm.modify(r'/usr/local/bin/(mioga2_(?:info|crawl|index).pl)', 
-                    self.options['site_perl'] + '/bin/' + r"\g<1>")
+                    site_perl_bin + r"/\g<1>")
     crawl_path = os.path.join(self.options['bin_dir'], 'crawl.sh')
     crawl_fm.save(crawl_path)
     os.chmod(crawl_path, stat.S_IRWXU)
diff --git a/software/mioga/instance-apacheperl.cfg b/software/mioga/instance-apacheperl.cfg
index ec9ff221f..edf373414 100644
--- a/software/mioga/instance-apacheperl.cfg
+++ b/software/mioga/instance-apacheperl.cfg
@@ -16,7 +16,6 @@ bin = $${buildout:directory}/bin
 etc = $${buildout:directory}/etc
 srv = $${buildout:directory}/srv
 log = $${buildout:directory}/log
-var = $${buildout:directory}/var
 
 [basedirectory]
 recipe = slapos.cookbook:mkdirectory
@@ -80,11 +79,14 @@ symlink_base = ${postgresql:location}/bin
 
 [mioga-instance]
 recipe = slapos.cookbook:mioga.instantiate
-mioga_compile_dir = ${template-apacheperl:compile-directory}
+# mioga_compile_dir = ${template-apacheperl:compile-directory}
 # Pity that the following line does not work. Or does it?
 # mioga_compile_env = ${mioga:environment}
-mioga_add_to_path = ${libxslt:location}/bin:${libxml2:location}/bin
-var_directory = $${rootdirectory:var}
+mioga_location = ${mioga:location}
+mioga_buildinst = ${mioga:buildinst}
+libxslt_bin = ${libxslt:location}/bin
+libxml2_bin = ${libxml2:location}/bin
+var_directory = $${buildout:directory}/var
 instance_root = $${buildout:directory}
 perl_bin = ${perl:location}/bin
 postgres_bin = ${postgresql:location}/bin
@@ -103,7 +105,7 @@ htdocs = $${basedirectory:htdocs}
 httpd_conf = $${rootdirectory:etc}/httpd.conf
 pid_file = $${basedirectory:services}/apache.pid
 lock_file = $${basedirectory:services}/apache.lock
-dav_locks = $${rootdirectory:var}/dav_locks
+dav_locks = $${buildout:directory}/var/dav_locks
 services_dir = $${basedirectory:services}
 error_log = $${rootdirectory:log}/error.log
 access_log = $${rootdirectory:log}/access.log
diff --git a/software/mioga/mioga-patch b/software/mioga/mioga-patch
index 701307a83..f6acc9ba1 100644
--- a/software/mioga/mioga-patch
+++ b/software/mioga/mioga-patch
@@ -12,10 +12,36 @@ index ef0f369..b275a48 100644
  This script must be run by cron in a day basis with apache user (www-data for Debian)
  
 diff --git a/Makefile.PL b/Makefile.PL
-index 3582d20..0d9ef77 100644
+index 3582d20..262e2c2 100644
 --- a/Makefile.PL
 +++ b/Makefile.PL
-@@ -115,7 +115,7 @@ my $docsubdirs = "docs";
+@@ -22,6 +22,7 @@
+ 
+ use ExtUtils::MakeMaker;
+ use ExtUtils::MakeMaker::Config;
++use File::Find;
+ 
+ # ****************************************************************************
+ # 
+@@ -67,6 +68,7 @@ sub CheckPreDepends {
+ 
+ my $disable_check = grep {lc($_) eq 'disable_check'} @ARGV;
+ 
++if (! $disable_check) {
+ CheckPreDepends({ # 'Data::Dumper' => '2.101',
+ 		  # 'DBI'          => '1.13',
+ 		  # 'DBD::Pg'      => '1.01',
+@@ -75,7 +77,8 @@ CheckPreDepends({ # 'Data::Dumper' => '2.101',
+ 		  'Error'        => '0.15',
+ 		  # 'Net::LDAP'    => '0.25',
+ 		  # 'Unicode::String' => '2.06',
+-	      });
++          })
++}
+     
+ require MiogaConf;
+     
+@@ -115,7 +118,7 @@ my $docsubdirs = "docs";
  # ----------------------------------------------------------------------------
  sub MY::processPL {
  return '
@@ -24,7 +50,7 @@ index 3582d20..0d9ef77 100644
  # between "all" and next "tardist"
  
  include config.mk
-@@ -124,10 +124,7 @@ tardist: doc
+@@ -124,10 +127,7 @@ tardist: doc
  dist: doc
  install ::
  	if test -e $(TMP_DIR) ; then \
@@ -36,7 +62,7 @@ index 3582d20..0d9ef77 100644
                  echo "===> File $(TMP_DIR) exists but is not a directory ..." ; \
                  exit 1 ; \
              fi \
-@@ -156,6 +153,29 @@ install-all ::
+@@ -156,6 +156,31 @@ install-all ::
  
  	(cd web && $(MAKE) setperms) || exit 1;
  
@@ -53,7 +79,9 @@ index 3582d20..0d9ef77 100644
 +	done
 +	# copy a minimal build system into mioga/build
 +	mkdir -p "$(MIOGA_BUILDINST)"
-+	cp -R --parents Makefile.PL sql web/conf conf "$(MIOGA_BUILDINST)"
++	cp -R --parents \
++		Makefile.PL sql web/conf conf bin/search/crawl_sample.sh \
++		"$(MIOGA_BUILDINST)"
 +
 +slapos-instantiation ::
 +	for i in web/conf conf sql ; \
@@ -66,6 +94,25 @@ index 3582d20..0d9ef77 100644
  doc:
  	for i in ' . $docsubdirs . ' ; \
  	do \
+@@ -176,9 +201,17 @@ installall: install install-all
+ # 
+ # ----------------------------------------------------------------------------
+ 
++my $Mioga2_pm = 'lib/Mioga2.pm';
++if ((not -e $lib_Mioga2_pm) and exists($ENV{MIOGA_SITEPERL})) {
++    my $findfile = sub {
++        $Mioga2_pm = $File::Find::name if $_ eq 'Mioga2.pm';
++    };
++    find($findfile, $ENV{MIOGA_SITEPERL});
++}; 
++
+ WriteMakefile(
+    'NAME'  => 'Mioga',
+    'DIR'   => ['bin', 'web',  'locales', 'docs', 'sql'],
+-   'VERSION_FROM' => 'lib/Mioga2.pm',
++   'VERSION_FROM' => $Mioga2_pm,
+ );
+ 
 diff --git a/bin/mailinglist/miogamailinglist.pl b/bin/mailinglist/miogamailinglist.pl
 index 80668e2..fa1603a 100755
 --- a/bin/mailinglist/miogamailinglist.pl
diff --git a/software/mioga/software.cfg b/software/mioga/software.cfg
index 7bda2cc6e..ef96b6420 100644
--- a/software/mioga/software.cfg
+++ b/software/mioga/software.cfg
@@ -102,6 +102,7 @@ environment =
   MIOGA_BASE=${mioga:location}
   MIOGA_BUILDINST=${mioga:buildinst}
   MIOGA_STATIC=${mioga:static}
+  MIOGA_SITEPERL=${perl:siteprefix}
   PATH=${libxslt:location}/bin:${libxml2:location}/bin:${perl:location}/bin:${perl:siteprefix}/bin:%(PATH)s
 patch-options = -p1
 patches =
-- 
2.30.9