GDL: python integration fixes (#9936)

* GDL: python integration fixes

* renamed python-related variants to follow the convention
* building the Python module requires patches currently targetting 0.9.8 othwerwise asking for the Python module *only* builds the Pyhton module
* building the python module also requires patching the vendored (with the GDL) antlr to be built as a shared library

* Typo

Co-Authored-By: rmsds <ricardo.d.silva@gmail.com>

* Rename embed-python variant to embed_python
This commit is contained in:
Ricardo Silva 2018-12-17 19:47:16 +01:00 committed by Adam J. Stewart
parent a02cf107b5
commit f979b974a5
2 changed files with 69 additions and 5 deletions

View File

@ -0,0 +1,27 @@
From: Ricardo Silva <ricardo.silva@epfl.ch>
Date: Wed, 3 Oct 2018 13:42:25 +0200
Subject: [PATCH] Always build antlr as shared library
---
src/antlr/CMakeLists.txt | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/src/antlr/CMakeLists.txt b/src/antlr/CMakeLists.txt
index 26a38e3..083e50d 100644
--- a/src/antlr/CMakeLists.txt
+++ b/src/antlr/CMakeLists.txt
@@ -2,9 +2,5 @@ aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} ANTLRSOURCES)
list(REMOVE_ITEM ANTLRSOURCES ${CMAKE_CURRENT_SOURCE_DIR}/dll.cpp)
include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/src/antlr)
-if(PYTHON_MODULE)
- add_library(antlr SHARED ${ANTLRSOURCES})
- install(TARGETS antlr DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
-else(PYTHON_MODULE)
- add_library(antlr STATIC ${ANTLRSOURCES})
-endif(PYTHON_MODULE)
+add_library(antlr SHARED ${ANTLRSOURCES})
+install(TARGETS antlr DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
--
1.8.3.1

View File

@ -2,7 +2,7 @@
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import os
from spack import *
@ -27,7 +27,8 @@ class Gdl(CMakePackage):
variant('hdf5', default=True, description='Enable HDF5')
variant('openmp', default=True, description='Enable OpenMP')
variant('proj', default=True, description='Enable LIBPROJ4')
variant('python', default=False, description='Enable Python')
variant('embed_python', default=False, description='Ability to embed Python within GDL')
variant('python', default=False, description='Build the GDL Python module')
variant('wx', default=False, description='Enable WxWidgets')
variant('x11', default=False, description='Enable X11')
@ -41,8 +42,8 @@ class Gdl(CMakePackage):
depends_on('plplot+wx+wxold', when='+wx@5.12:')
depends_on('plplot~wx', when='~wx')
depends_on('proj', when='+proj')
depends_on('py-numpy', type=('build', 'run'), when='+python')
depends_on('python@2.7:2.8', type=('build', 'run'), when='+python')
depends_on('py-numpy', type=('build', 'run'), when='+embed_python')
depends_on('python@2.7:2.8', type=('build', 'run'), when='+embed_python')
depends_on('wx', when='+wx')
depends_on('eigen')
@ -57,6 +58,21 @@ class Gdl(CMakePackage):
depends_on('pslib')
depends_on('readline')
conflicts('+python', when='~embed_python')
# Building the Python module requires patches currently targetting 0.9.8
# othwerwise asking for the Python module *only* builds the Python module
conflicts('+python', when='@:0.9.7,0.9.9:')
# Allows building gdl as a shared library to in turn allow building
# both the executable and the Python module
patch('https://sources.debian.org/data/main/g/gnudatalanguage/0.9.8-7/debian/patches/Create-a-shared-library.patch',
sha256='bb380394c8ea2602404d8cd18047b93cf00fdb73b83d389f30100dd4b0e1a05c',
when='@0.9.8')
patch('Always-build-antlr-as-shared-library.patch',
sha256='f40c06e8a8f1977780787f58885590affd7e382007cb677d2fb4723aaadd415c',
when='@0.9.8')
def cmake_args(self):
args = []
@ -92,11 +108,16 @@ def cmake_args(self):
else:
args += ['-DLIBPROJ4=OFF']
if '+python' in self.spec:
if '+embed_python' in self.spec:
args += ['-DPYTHON=ON']
else:
args += ['-DPYTHON=OFF']
if '+python' in self.spec:
args += ['-DPYTHON_MODULE=ON']
else:
args += ['-DPYTHON_MODULE=OFF']
if '+wx' in self.spec:
args += ['-DWXWIDGETS=ON']
else:
@ -108,3 +129,19 @@ def cmake_args(self):
args += ['-DX11=OFF']
return args
@run_after('install')
def post_install(self):
if '+python' in self.spec:
# gdl installs the python module into prefix/lib/site-python
# move it to the standard location
src = os.path.join(
self.spec.prefix.lib,
'site-python')
dst = site_packages_dir
if os.path.isdir(src):
if not os.path.isdir(dst):
mkdirp(dst)
for f in os.listdir(src):
os.rename(os.path.join(src, f),
os.path.join(dst, f))