Commit 55509ac5057be2304da2d4e4a412270571256f0b

Authored by Jürgen Knödlseder
1 parent 98fe2f28

Make compliant to MacPorts gcc compiler.

A Darwin kluge consisted of linking statically with the ctools library for unit testing. It turned out that this is no longer necessary, so I removed the Darwin kluge of static linking.

Furthermore, a post-processing step was added that creates a symbolic link to the directory that contains the shared wrapper library. In that way, we do not need a double compilation anymore (before, we compiled once for the install and a second time for the unit test). This should now speed up the unit testing step.
Showing 1 changed file with 20 additions and 40 deletions
pyext/setup.py.in
@@ -25,13 +25,6 @@ import glob @@ -25,13 +25,6 @@ import glob
25 import os 25 import os
26 import sys 26 import sys
27 27
28 -# Detect execution mode  
29 -is_unit_test = False  
30 -if (len(sys.argv) >= 3):  
31 - if (sys.argv[2] == '--inplace'):  
32 - print@PYTHON_OPEN@"This build is for unit testing."@PYTHON_CLOSE@  
33 - is_unit_test = True  
34 -  
35 # Darwin MacPorts kluge: Remove -L/opt/local/lib path from LDSHARED as this 28 # Darwin MacPorts kluge: Remove -L/opt/local/lib path from LDSHARED as this
36 # overrides the GammaLib settings. Otherwise, MacPorts libraries would be 29 # overrides the GammaLib settings. Otherwise, MacPorts libraries would be
37 # used instead of the libraries selected by GammaLib 30 # used instead of the libraries selected by GammaLib
@@ -50,43 +43,17 @@ if sys.platform.lower().startswith("darwin"): @@ -50,43 +43,17 @@ if sys.platform.lower().startswith("darwin"):
50 else: 43 else:
51 ldshared_rm += option + ' ' 44 ldshared_rm += option + ' '
52 if (len(ldshared_rm) > 0): 45 if (len(ldshared_rm) > 0):
53 - print@PYTHON_OPEN@"Removed following option(s) from LDSHARED: "+ldshared_rm@PYTHON_CLOSE@ 46 + sys.stdout.write("Removed following option(s) from LDSHARED: "+ldshared_rm+"\n);
54 47
55 # Set LDSHARED 48 # Set LDSHARED
56 cvars['LDSHARED'] = ldshared_new 49 cvars['LDSHARED'] = ldshared_new
57 50
58 -# Set ctools library name. If we're about to make the test build then  
59 -# create a symbolic link to the static library to enforce static linking.  
60 -# This is required on some system (such as Mac OS X) to avoid problems  
61 -# with finding the shared library during unit testing.  
62 -libcta='ctools'  
63 -#if is_unit_test:  
64 -if sys.platform.lower().startswith("darwin") and is_unit_test:  
65 -  
66 - # Remove any existing symbolic link to libctools.a. This will  
67 - # prevent any exception in creating the symbolic link due to  
68 - # an already existing link.  
69 - try:  
70 - os.remove('../src/.libs/libctools_python.a')  
71 - print@PYTHON_OPEN@"Removed ../src/.libs/libctools_python.a"@PYTHON_CLOSE@  
72 - except:  
73 - pass  
74 -  
75 - # Now create a symbolic link and set the library name to this  
76 - # symbolic link  
77 - try:  
78 - os.symlink('libctools.a', '../src/.libs/libctools_python.a')  
79 - print@PYTHON_OPEN@"Created ../src/.libs/libctools_python.a"@PYTHON_CLOSE@  
80 - libcta='ctools_python'  
81 - except:  
82 - print@PYTHON_OPEN@"WARNING: Failed to create symbolic link to static library. Link dynamically."@PYTHON_CLOSE@  
83 -  
84 # Set default include directories and data files 51 # Set default include directories and data files
85 include_dirs = ['@prefix@/include/gammalib'] 52 include_dirs = ['@prefix@/include/gammalib']
86 install_files = glob.glob('@top_srcdir@/pyext/*.i') 53 install_files = glob.glob('@top_srcdir@/pyext/*.i')
87 library_dirs = ['../src/.libs'] 54 library_dirs = ['../src/.libs']
88 runtime_library_dirs = ['../src/.libs'] 55 runtime_library_dirs = ['../src/.libs']
89 -libraries = [libcta,'gamma'] 56 +libraries = ['ctools','gamma']
90 57
91 # Add install directory to runtime library path 58 # Add install directory to runtime library path
92 if os.path.exists('@prefix@/lib'): 59 if os.path.exists('@prefix@/lib'):
@@ -126,11 +93,8 @@ for extra_include_dir in extra_include_dirs: @@ -126,11 +93,8 @@ for extra_include_dir in extra_include_dirs:
126 if len(dir) > 0: 93 if len(dir) > 0:
127 include_dirs.append(dir) 94 include_dirs.append(dir)
128 95
129 -# Set data files to install. Do not install data files in unit testing mode.  
130 -if is_unit_test:  
131 - data_files=[]  
132 -else:  
133 - data_files=[('@prefix@/share/ctools/swig', install_files)] 96 +# Set data files to install.
  97 +data_files=[('@prefix@/share/ctools/swig', install_files)]
134 98
135 # Optionally enable OpenMP 99 # Optionally enable OpenMP
136 if '@OPENMP_TRUE@' != '#': 100 if '@OPENMP_TRUE@' != '#':
@@ -160,3 +124,19 @@ setup(name='@PACKAGE_NAME@', @@ -160,3 +124,19 @@ setup(name='@PACKAGE_NAME@',
160 long_description="CTA science analysis tools", 124 long_description="CTA science analysis tools",
161 platforms=["Linux", "Solaris", "Mac OS-X", "Unix", "BSD"], 125 platforms=["Linux", "Solaris", "Mac OS-X", "Unix", "BSD"],
162 ) 126 )
  127 +
  128 +# Post-processing. A symbolic link is created to the directory containing the
  129 +# shared wrapper libraries so that we can add this directory to the PYTHONPATH
  130 +# for testing.
  131 +try:
  132 + os.chdir('build')
  133 + os.remove('ctools')
  134 + sys.stdout.write("Removed symbolic link build/ctools.\n")
  135 +except:
  136 + pass
  137 +try:
  138 + path = glob.glob('lib.*')
  139 + os.symlink(path[0], 'ctools')
  140 + sys.stdout.write("Created symbolic link build/ctools.\n")
  141 +except:
  142 + sys.stdout.write("WARNING: Failed to create symbolic link build/ctools.\n")