You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2013/07/22 00:25:10 UTC

svn commit: r1505481 - in /subversion/trunk: build/generator/gen_base.py build/generator/gen_make.py build/generator/gen_win_dependencies.py win-tests.py

Author: rhuijben
Date: Sun Jul 21 22:25:10 2013
New Revision: 1505481

URL: http://svn.apache.org/r1505481
Log:
Make it possible to run the Swig Ruby testsuite on Windows.

Somehow my Ruby expects its DLLs to be named .so on Windows, so apply a
similar handling as in the Python build: compile to the expected extension.

Make 'win-tests.py' capable of starting the ruby tests and prepare to
also handle the python and perl tests.

* build/generator/gen_base.py
  (add_dependencies): Reorganize if to make python and perl handling
    of dll extensions special and no replacement default.

* build/generator/gen_make.py
  (_extension_map): Add default mapping of 'so'

* build/generator/gen_win_dependencies.py
  (_extension_map): Add Windows mapping of 'so'

* win-tests.py
  Add --swig=language argument. Implement ruby version and
  store win32 buildbot code as todo for implementing for python
  and perl. (Hopefully the implementation will be smarter than
  this buildbot hack)

Modified:
    subversion/trunk/build/generator/gen_base.py
    subversion/trunk/build/generator/gen_make.py
    subversion/trunk/build/generator/gen_win_dependencies.py
    subversion/trunk/win-tests.py

Modified: subversion/trunk/build/generator/gen_base.py
URL: http://svn.apache.org/viewvc/subversion/trunk/build/generator/gen_base.py?rev=1505481&r1=1505480&r2=1505481&view=diff
==============================================================================
--- subversion/trunk/build/generator/gen_base.py (original)
+++ subversion/trunk/build/generator/gen_base.py Sun Jul 21 22:25:10 2013
@@ -674,13 +674,16 @@ class TargetSWIG(TargetLib):
     module_name = iname[:4] != 'svn_' and iname[:-2] or iname[4:-2]
 
     lib_extension = self.gen_obj._extension_map['lib', 'target']
-    if self.lang == "ruby":
-      lib_filename = module_name + lib_extension
+    if self.lang == "python":
+      lib_extension = self.gen_obj._extension_map['pyd', 'target']
+      lib_filename = '_' + module_name + lib_extension
+    elif self.lang == "ruby":
+      lib_extension = self.gen_obj._extension_map['so', 'target']
+      lib_filename = module_name + '.so'
     elif self.lang == "perl":
       lib_filename = '_' + module_name.capitalize() + lib_extension
     else:
-      lib_extension = self.gen_obj._extension_map['pyd', 'target']
-      lib_filename = '_' + module_name + lib_extension
+      lib_filename = module_name + lib_extension
 
     self.name = self.lang + '_' + module_name
     self.path = build_path_join(self.path, self.lang)

Modified: subversion/trunk/build/generator/gen_make.py
URL: http://svn.apache.org/viewvc/subversion/trunk/build/generator/gen_make.py?rev=1505481&r1=1505480&r2=1505481&view=diff
==============================================================================
--- subversion/trunk/build/generator/gen_make.py (original)
+++ subversion/trunk/build/generator/gen_make.py Sun Jul 21 22:25:10 2013
@@ -62,6 +62,8 @@ class Generator(gen_base.GeneratorBase):
     ('lib', 'object'): '.lo',
     ('pyd', 'target'): '.la',
     ('pyd', 'object'): '.lo',
+    ('so', 'target'): '.la',
+    ('so', 'object'): '.lo',
     }
 
   def __init__(self, fname, verfname, options=None):

Modified: subversion/trunk/build/generator/gen_win_dependencies.py
URL: http://svn.apache.org/viewvc/subversion/trunk/build/generator/gen_win_dependencies.py?rev=1505481&r1=1505480&r2=1505481&view=diff
==============================================================================
--- subversion/trunk/build/generator/gen_win_dependencies.py (original)
+++ subversion/trunk/build/generator/gen_win_dependencies.py Sun Jul 21 22:25:10 2013
@@ -101,6 +101,8 @@ class GenDependenciesBase(gen_base.Gener
     ('lib', 'object'): '.obj',
     ('pyd', 'target'): '.pyd',
     ('pyd', 'object'): '.obj',
+    ('so', 'target'): '.pyd',
+    ('so', 'object'): '.obj',
     }
 
   _libraries = {}     # Dict of SVNCommonLibrary instances of found libraries
@@ -901,10 +903,10 @@ class GenDependenciesBase(gen_base.Gener
     if not self.swig_path:
       swig_exe = 'swig.exe'
     else:
-      swig_exe = os.path.abspath(os.path.join(self.swig_path, 'swig'))
+      swig_exe = os.path.abspath(os.path.join(self.swig_path, 'swig.exe'))
 
     if self.swig_path is not None:
-      self.swig_exe = os.path.abspath(os.path.join(self.swig_path, 'swig'))
+      self.swig_exe = os.path.abspath(os.path.join(self.swig_path, 'swig.exe'))
     else:
       self.swig_exe = 'swig'
 

Modified: subversion/trunk/win-tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/win-tests.py?rev=1505481&r1=1505480&r2=1505481&view=diff
==============================================================================
--- subversion/trunk/win-tests.py (original)
+++ subversion/trunk/win-tests.py Sun Jul 21 22:25:10 2013
@@ -84,6 +84,8 @@ def _usage_exit():
   print("  --disable-bulk-updates : Disable bulk updates on HTTP server")
   print("  --ssl-cert             : Path to SSL server certificate to trust.")
   print("  --javahl               : Run the javahl tests instead of the normal tests")
+  print("  --swig=language        : Run the swig perl/python/ruby tests instead of")
+  print("                           the normal tests")
   print("  --list                 : print test doc strings only")
   print("  --milestone-filter=RE  : RE is a regular expression pattern that (when")
   print("                           used with --list) limits the tests listed to")
@@ -130,7 +132,7 @@ opts, args = my_getopt(sys.argv[1:], 'hr
                         'httpd-dir=', 'httpd-port=', 'httpd-daemon',
                         'httpd-server', 'http-short-circuit', 'httpd-no-log',
                         'disable-http-v2', 'disable-bulk-updates', 'help',
-                        'fsfs-packing', 'fsfs-sharding=', 'javahl',
+                        'fsfs-packing', 'fsfs-sharding=', 'javahl', 'swig=',
                         'list', 'enable-sasl', 'bin=', 'parallel',
                         'config-file=', 'server-minor-version=', 'log-level=',
                         'log-to-stdout', 'mode-filter=', 'milestone-filter=',
@@ -156,6 +158,7 @@ http_bulk_updates = True
 list_tests = None
 milestone_filter = None
 test_javahl = None
+test_swig = None
 enable_sasl = None
 svn_bin = None
 parallel = None
@@ -216,6 +219,11 @@ for opt, val in opts:
     fsfs_packing = 1
   elif opt == '--javahl':
     test_javahl = 1
+  elif opt == '--swig':
+    if val not in ['ruby']:
+      sys.stderr.write('Running \'%s\' swig tests not supported (yet).\n' 
+                        % (val,))
+    test_swig = val
   elif opt == '--list':
     list_tests = 1
   elif opt == '--milestone-filter':
@@ -746,7 +754,7 @@ else:
   print('Testing %s configuration on %s' % (objdir, repo_loc))
 sys.path.insert(0, os.path.join(abs_srcdir, 'build'))
 
-if not test_javahl:
+if not test_javahl and not test_swig:
   import run_tests
   if log_to_stdout:
     log_file = None
@@ -774,7 +782,7 @@ if not test_javahl:
     raise
   else:
     os.chdir(old_cwd)
-else:
+elif test_javahl:
   failed = False
   args = (
           'java.exe',
@@ -812,6 +820,88 @@ else:
   if (r != 0):
     print('[Test runner reported failure]')
     failed = True
+elif test_swig == 'perl':
+  print('Running Swig Perl tests not supported yet')
+
+  # TODO: Implement something like
+  
+  # mkdir "%TESTDIR%\swig\pl-release\SVN"
+  # mkdir "%TESTDIR%\swig\pl-release\auto\SVN"
+  # xcopy subversion\bindings\swig\perl\native\*.pm "%TESTDIR%\swig\pl-release\SVN" > nul:
+  # pushd release\subversion\bindings\swig\perl\native
+  # for %%i in (*.dll) do (
+  #   set name=%%i
+  #   mkdir "%TESTDIR%\swig\pl-release\auto\SVN\!name:~0,-4!"
+  #   xcopy "!name:~0,-4!.*" "%TESTDIR%\swig\pl-release\auto\SVN\!name:~0,-4!" > nul:
+  #   xcopy /y "_Core.dll" "%TESTDIR%\swig\pl-release\auto\SVN\!name:~0,-4!" > nul:
+  # )
+  # popd
+  # 
+  # SET PERL5LIB=%PERL5LIB%;%TESTDIR%\swig\pl-release;
+  # pushd subversion\bindings\swig\perl\native
+  # perl -MExtUtils::Command::MM -e test_harness() t\*.t
+  # IF ERRORLEVEL 1 (
+  #   echo [Perl reported error %ERRORLEVEL%]
+  #   SET result=1
+  # )
+  # popd
+
+  failed = False
+elif test_swig == 'python':
+  print('Running Swig Python tests not supported yet')
+  
+  # TODO: Implement something like
+  
+  # IF EXIST "%TESTDIR%\swig" rmdir /s /q "%TESTDIR%\swig"
+  # mkdir "%TESTDIR%\swig\py-release\libsvn"
+  # mkdir "%TESTDIR%\swig\py-release\svn"
+  # 
+  # xcopy "release\subversion\bindings\swig\python\*.pyd" "%TESTDIR%\swig\py-release\libsvn\*.pyd" > nul:
+  # xcopy "release\subversion\bindings\swig\python\libsvn_swig_py\*.dll" "%TESTDIR%\swig\py-release\libsvn\*.dll" > nul:
+  # xcopy "subversion\bindings\swig\python\*.py" "%TESTDIR%\swig\py-release\libsvn\*.py" > nul:
+  # xcopy "subversion\bindings\swig\python\svn\*.py" "%TESTDIR%\swig\py-release\svn\*.py" > nul:
+  # 
+  # SET PYTHONPATH=%TESTDIR%\swig\py-release
+  # 
+  # python subversion\bindings\swig\python\tests\run_all.py
+  # IF ERRORLEVEL 1 (
+  #   echo [Python reported error %ERRORLEVEL%]
+  #   SET result=1
+  # )
+  
+  failed = False
+elif test_swig == 'ruby':
+  failed = False
+
+  if 'ruby' not in gen_obj._libraries:
+    print('Ruby not found. Skipping Ruby tests')
+  else:
+    print('Running Swig Ruby Tests')
+    ruby_lib = gen_obj._libraries['ruby']
+
+    ruby_exe = 'ruby.exe'
+    ruby_subdir = os.path.join('subversion', 'bindings', 'swig', 'ruby')
+    ruby_args = [
+        '-I', os.path.join(abs_srcdir, ruby_subdir),
+        os.path.join(abs_srcdir, ruby_subdir, 'test', 'run-test.rb'),
+        '--verbose'
+      ]
+
+    old_cwd = os.getcwd()
+    try:
+      os.chdir(ruby_subdir)
+
+      os.environ["BUILD_TYPE"] = objdir
+      r = subprocess.call([ruby_exe] + ruby_args)
+    finally:
+      os.chdir(old_cwd)
+
+    sys.stdout.flush()
+    sys.stderr.flush()
+    if (r != 0):
+      print()
+      print('[Test runner reported failure]')
+      failed = True
 
 # Stop service daemon, if any
 if daemon: