Skip to content
Snippets Groups Projects
Commit 6383cbd0 authored by Thomas Jahns's avatar Thomas Jahns :cartwheel: Committed by Sergey Kosukhin
Browse files

First intermediate step to enable VPATH builds of python extension.

parent 54c23572
No related branches found
No related tags found
1 merge request!11Consolidation with CDI-PIO (1.8.x)
......@@ -56,33 +56,33 @@ help:
# RUBY
rubyObj: rubyObjWrapper rubyObjMakefile libcdipp.la
@$(am__cd) ruby && $(MAKE) $(AM_MAKEFLAGS)
@$(MKDIR_P) ruby && $(am__cd) ruby && $(MAKE) $(AM_MAKEFLAGS)
rubyLib: rubyLibWrapper rubyLibMakefile
@$(am__cd) ruby && $(MAKE) $(AM_MAKEFLAGS)
@$(MKDIR_P) ruby && $(am__cd) ruby && $(MAKE) $(AM_MAKEFLAGS)
rubyObjWrapper: ruby/cdiobj_wrap.cpp
rubyLibWrapper: ruby/cdilib_wrap.c
rubyObjTest: rubyObj
@$(am__cd) ruby && $(RUBY) testObj.rb
@$(MKDIR_P) ruby && $(am__cd) ruby && $(RUBY) testObj.rb
rubyLibTest: rubyLib
@$(am__cd) ruby && $(RUBY) testLib.rb
@$(MKDIR_P) ruby && $(am__cd) ruby && $(RUBY) testLib.rb
rubyObjInstall: rubyObjMakefile
@$(am__cd) ruby && $(MAKE) $(AM_MAKEFLAGS) install
@$(MKDIR_P) ruby && $(am__cd) ruby && $(MAKE) $(AM_MAKEFLAGS) install
rubyLibInstall: rubyLibMakefile
@$(am__cd) ruby && $(MAKE) $(AM_MAKEFLAGS) install
@$(MKDIR_P) ruby && $(am__cd) ruby && $(MAKE) $(AM_MAKEFLAGS) install
rubyObjMakefile:
$(AM_V_GEN)$(am__cd) ruby && \
$(AM_V_GEN)$(MKDIR_P) ruby && $(am__cd) ruby && \
INCFLAGS='-I$(abs_srcdir)' CFLAGS='$(CFLAGS)' LDFLAGS='$(LDFLAGS)' LIBS='$(LIBS)' $(RUBY) extconfObj.rb
rubyLibMakefile:
$(AM_V_GEN)$(am__cd) ruby && \
$(AM_V_GEN)$(MKDIR_P) ruby && $(am__cd) ruby && \
INCFLAGS='-I$(abs_top_srcdir)/src' CFLAGS='$(CFLAGS)' LDFLAGS='$(LDFLAGS) -L$(abs_top_builddir)/src/.libs' LIBS='-lcdi $(LIBS)' $(RUBY) extconfLib.rb
ruby/cdiobj_wrap.cpp: @MAINTAINER_MODE_TRUE@ cdiobj.i
......@@ -93,26 +93,26 @@ ruby/cdilib_wrap.c: @MAINTAINER_MODE_TRUE@ cdilib.i
# PYTHON
pythonObj: pythonObjWrapper cdi.lo
@$(am__cd) python && CC='$(CC)' CXX='$(CXX)' INCFLAGS='-I$(abs_srcdir)' CFLAGS='$(CFLAGS)' CXXFLAGS='$(CXXFLAGS)' LDFLAGS='$(LDFLAGS) -L$(abs_top_builddir)/src/.libs' LIBS='$(LIBS)' BUILDLIBDIR='$(abs_top_builddir)/src/.libs' LIBDIR='$(libdir)' $(PYTHON) setupObj.py build_ext --inplace
@$(MKDIR_P) python && $(am__cd) python && CC='$(CC)' CXX='$(CXX)' INCFLAGS='-I$(abs_srcdir)' CFLAGS='$(CFLAGS)' CXXFLAGS='$(CXXFLAGS)' LDFLAGS='$(LDFLAGS) -L$(abs_top_builddir)/src/.libs' LIBS='$(LIBS)' BUILDLIBDIR='$(abs_top_builddir)/src/.libs' LIBDIR='$(libdir)' $(PYTHON) setupObj.py build_ext --inplace
pythonLib: pythonLibWrapper $(top_builddir)/src/cdilib.lo
@$(am__cd) python && CC='$(CC)' CXX='$(CXX)' INCFLAGS='-I$(abs_top_srcdir)/src' CFLAGS='$(CFLAGS)' CXXFLAGS='$(CXXFLAGS)' LDFLAGS='$(LDFLAGS)' LIBS='$(LIBS)' $(PYTHON) setupLib.py build_ext --inplace
@$(MKDIR_P) python && $(am__cd) python && CC='$(CC)' CXX='$(CXX)' INCFLAGS='-I$(abs_top_srcdir)/src' CFLAGS='$(CFLAGS)' CXXFLAGS='$(CXXFLAGS)' LDFLAGS='$(LDFLAGS)' LIBS='$(LIBS)' $(PYTHON) setupLib.py build_ext --inplace
pythonObjWrapper: python/cdiobj_wrap.cpp
pythonLibWrapper: python/cdilib_wrap.c
pythonObjTest: pythonObj
@$(am__cd) python && $(PYTHON) testObj.py
@$(MKDIR_P) python && $(am__cd) python && $(PYTHON) testObj.py
pythonLibTest: pythonLib
@$(am__cd) python && $(PYTHON) testLib.py
@$(MKDIR_P) python && $(am__cd) python && $(PYTHON) testLib.py
pythonObjInstall: pythonObj
@$(am__cd) python && CC='$(CC)' CXX='$(CXX)' INCFLAGS='-I$(abs_srcdir)' CFLAGS='$(CFLAGS)' CXXFLAGS='$(CXXFLAGS)' LDFLAGS='$(LDFLAGS) -L$(abs_top_builddir)/src/.libs' LIBS='$(LIBS)' BUILDLIBDIR='$(abs_top_builddir)/src/.libs' LIBDIR='$(libdir)' $(PYTHON) setupObj.py install --prefix='$(prefix)'
@$(MKDIR_P) python && $(am__cd) python && CC='$(CC)' CXX='$(CXX)' INCFLAGS='-I$(abs_srcdir)' CFLAGS='$(CFLAGS)' CXXFLAGS='$(CXXFLAGS)' LDFLAGS='$(LDFLAGS) -L$(abs_top_builddir)/src/.libs' LIBS='$(LIBS)' BUILDLIBDIR='$(abs_top_builddir)/src/.libs' LIBDIR='$(libdir)' $(PYTHON) setupObj.py install --prefix='$(prefix)'
pythonLibInstall: pythonLib
@$(am__cd) python && CC='$(CC)' CXX='$(CXX)' INCFLAGS='-I$(abs_top_srcdir)/src' CFLAGS='$(CFLAGS)' CXXFLAGS='$(CXXFLAGS)' LDFLAGS='$(LDFLAGS)' LIBS='$(LIBS)' $(PYTHON) setupLib.py install --prefix='$(prefix)'
@$(MKDIR_P) python && $(am__cd) python && CC='$(CC)' CXX='$(CXX)' INCFLAGS='-I$(abs_top_srcdir)/src' CFLAGS='$(CFLAGS)' CXXFLAGS='$(CXXFLAGS)' LDFLAGS='$(LDFLAGS)' LIBS='$(LIBS)' $(PYTHON) setupLib.py install --prefix='$(prefix)'
python/cdiobj_wrap.cpp: @MAINTAINER_MODE_TRUE@ cdiobj.i
$(AM_V_GEN)$(SWIG) -python -c++ -module CdiObj -o $@ $(AM_CPPFLAGS) $<
......
......@@ -773,33 +773,33 @@ help:
# RUBY
rubyObj: rubyObjWrapper rubyObjMakefile libcdipp.la
@$(am__cd) ruby && $(MAKE) $(AM_MAKEFLAGS)
@$(MKDIR_P) ruby && $(am__cd) ruby && $(MAKE) $(AM_MAKEFLAGS)
rubyLib: rubyLibWrapper rubyLibMakefile
@$(am__cd) ruby && $(MAKE) $(AM_MAKEFLAGS)
@$(MKDIR_P) ruby && $(am__cd) ruby && $(MAKE) $(AM_MAKEFLAGS)
rubyObjWrapper: ruby/cdiobj_wrap.cpp
rubyLibWrapper: ruby/cdilib_wrap.c
rubyObjTest: rubyObj
@$(am__cd) ruby && $(RUBY) testObj.rb
@$(MKDIR_P) ruby && $(am__cd) ruby && $(RUBY) testObj.rb
rubyLibTest: rubyLib
@$(am__cd) ruby && $(RUBY) testLib.rb
@$(MKDIR_P) ruby && $(am__cd) ruby && $(RUBY) testLib.rb
rubyObjInstall: rubyObjMakefile
@$(am__cd) ruby && $(MAKE) $(AM_MAKEFLAGS) install
@$(MKDIR_P) ruby && $(am__cd) ruby && $(MAKE) $(AM_MAKEFLAGS) install
rubyLibInstall: rubyLibMakefile
@$(am__cd) ruby && $(MAKE) $(AM_MAKEFLAGS) install
@$(MKDIR_P) ruby && $(am__cd) ruby && $(MAKE) $(AM_MAKEFLAGS) install
rubyObjMakefile:
$(AM_V_GEN)$(am__cd) ruby && \
$(AM_V_GEN)$(MKDIR_P) ruby && $(am__cd) ruby && \
INCFLAGS='-I$(abs_srcdir)' CFLAGS='$(CFLAGS)' LDFLAGS='$(LDFLAGS)' LIBS='$(LIBS)' $(RUBY) extconfObj.rb
rubyLibMakefile:
$(AM_V_GEN)$(am__cd) ruby && \
$(AM_V_GEN)$(MKDIR_P) ruby && $(am__cd) ruby && \
INCFLAGS='-I$(abs_top_srcdir)/src' CFLAGS='$(CFLAGS)' LDFLAGS='$(LDFLAGS) -L$(abs_top_builddir)/src/.libs' LIBS='-lcdi $(LIBS)' $(RUBY) extconfLib.rb
ruby/cdiobj_wrap.cpp: @MAINTAINER_MODE_TRUE@ cdiobj.i
......@@ -810,26 +810,26 @@ ruby/cdilib_wrap.c: @MAINTAINER_MODE_TRUE@ cdilib.i
# PYTHON
pythonObj: pythonObjWrapper cdi.lo
@$(am__cd) python && CC='$(CC)' CXX='$(CXX)' INCFLAGS='-I$(abs_srcdir)' CFLAGS='$(CFLAGS)' CXXFLAGS='$(CXXFLAGS)' LDFLAGS='$(LDFLAGS) -L$(abs_top_builddir)/src/.libs' LIBS='$(LIBS)' BUILDLIBDIR='$(abs_top_builddir)/src/.libs' LIBDIR='$(libdir)' $(PYTHON) setupObj.py build_ext --inplace
@$(MKDIR_P) python && $(am__cd) python && CC='$(CC)' CXX='$(CXX)' INCFLAGS='-I$(abs_srcdir)' CFLAGS='$(CFLAGS)' CXXFLAGS='$(CXXFLAGS)' LDFLAGS='$(LDFLAGS) -L$(abs_top_builddir)/src/.libs' LIBS='$(LIBS)' BUILDLIBDIR='$(abs_top_builddir)/src/.libs' LIBDIR='$(libdir)' $(PYTHON) setupObj.py build_ext --inplace
pythonLib: pythonLibWrapper $(top_builddir)/src/cdilib.lo
@$(am__cd) python && CC='$(CC)' CXX='$(CXX)' INCFLAGS='-I$(abs_top_srcdir)/src' CFLAGS='$(CFLAGS)' CXXFLAGS='$(CXXFLAGS)' LDFLAGS='$(LDFLAGS)' LIBS='$(LIBS)' $(PYTHON) setupLib.py build_ext --inplace
@$(MKDIR_P) python && $(am__cd) python && CC='$(CC)' CXX='$(CXX)' INCFLAGS='-I$(abs_top_srcdir)/src' CFLAGS='$(CFLAGS)' CXXFLAGS='$(CXXFLAGS)' LDFLAGS='$(LDFLAGS)' LIBS='$(LIBS)' $(PYTHON) setupLib.py build_ext --inplace
pythonObjWrapper: python/cdiobj_wrap.cpp
pythonLibWrapper: python/cdilib_wrap.c
pythonObjTest: pythonObj
@$(am__cd) python && $(PYTHON) testObj.py
@$(MKDIR_P) python && $(am__cd) python && $(PYTHON) testObj.py
pythonLibTest: pythonLib
@$(am__cd) python && $(PYTHON) testLib.py
@$(MKDIR_P) python && $(am__cd) python && $(PYTHON) testLib.py
pythonObjInstall: pythonObj
@$(am__cd) python && CC='$(CC)' CXX='$(CXX)' INCFLAGS='-I$(abs_srcdir)' CFLAGS='$(CFLAGS)' CXXFLAGS='$(CXXFLAGS)' LDFLAGS='$(LDFLAGS) -L$(abs_top_builddir)/src/.libs' LIBS='$(LIBS)' BUILDLIBDIR='$(abs_top_builddir)/src/.libs' LIBDIR='$(libdir)' $(PYTHON) setupObj.py install --prefix='$(prefix)'
@$(MKDIR_P) python && $(am__cd) python && CC='$(CC)' CXX='$(CXX)' INCFLAGS='-I$(abs_srcdir)' CFLAGS='$(CFLAGS)' CXXFLAGS='$(CXXFLAGS)' LDFLAGS='$(LDFLAGS) -L$(abs_top_builddir)/src/.libs' LIBS='$(LIBS)' BUILDLIBDIR='$(abs_top_builddir)/src/.libs' LIBDIR='$(libdir)' $(PYTHON) setupObj.py install --prefix='$(prefix)'
pythonLibInstall: pythonLib
@$(am__cd) python && CC='$(CC)' CXX='$(CXX)' INCFLAGS='-I$(abs_top_srcdir)/src' CFLAGS='$(CFLAGS)' CXXFLAGS='$(CXXFLAGS)' LDFLAGS='$(LDFLAGS)' LIBS='$(LIBS)' $(PYTHON) setupLib.py install --prefix='$(prefix)'
@$(MKDIR_P) python && $(am__cd) python && CC='$(CC)' CXX='$(CXX)' INCFLAGS='-I$(abs_top_srcdir)/src' CFLAGS='$(CFLAGS)' CXXFLAGS='$(CXXFLAGS)' LDFLAGS='$(LDFLAGS)' LIBS='$(LIBS)' $(PYTHON) setupLib.py install --prefix='$(prefix)'
python/cdiobj_wrap.cpp: @MAINTAINER_MODE_TRUE@ cdiobj.i
$(AM_V_GEN)$(SWIG) -python -c++ -module CdiObj -o $@ $(AM_CPPFLAGS) $<
......
#include <string>
#include <vector>
#include <map>
// the following include is only needed for buggy versions of SWIG
// (2.0.7 and earlier) with newer STL which no longer include cstddef
#include <cstddef>
#define CHARSIZE 128
class CdiGrid {
......@@ -16,7 +20,7 @@ class CdiGrid {
// [xy]stdname cannot be set arbitrarily
std::string xname, xlongname, xstdname, xunits;
std::string yname, ylongname, ystdname, yunits;
std::string yname, ylongname, ystdname, yunits;
std::string name;
void getValues();
......@@ -25,7 +29,7 @@ class CdiGrid {
void getBoundsAsPointer(double *xbnds, double *ybnds);
void getFloatVals(float *xvals, float * yvals);
void getFloatBounds(float *xbnds, float *ybnds);
private:
void determineGrid(int gridID);
};
......@@ -35,7 +39,7 @@ class CdiTaxis {
CdiTaxis();
CdiTaxis(int vlistID);
~CdiTaxis();
int taxisID;
int ntsteps, unit;
int rdate, rtime, vdate, vtime;
......@@ -57,7 +61,7 @@ class CdiZaxis {
std::string name, longname, units;
};
class CdiVariable {
class CdiVariable {
public:
CdiVariable();
CdiVariable(int streamid,int vlistid, int varid);
......@@ -77,7 +81,7 @@ class CdiVariable {
CdiTaxis taxis;
void sinfo();
void getValues();
void getValues();
void getValuesWithLevel(int tsID = 0);
std::vector<float> getFValues();
std::vector< std::vector<float> > getFValuesWithLevel(int tsID = 0);
......@@ -94,7 +98,7 @@ class Cdi {
std::vector <std::string> varnames;
std::vector <int> codes;
std::vector<CdiVariable> variables;
std::map<std::string, CdiVariable> var;
std::map<int, CdiVariable> varByCode;
......
#!/usr/bin/env python
from __future__ import print_function
import distutils.sysconfig
import distutils.core
from distutils.core import setup, Extension
from distutils.command.build_ext import build_ext
from distutils.command.install_lib import install_lib
import sys
import re
import os
# customize the compiler to use libtool naming
class custom_build_ext(build_ext):
def my_compiler__compile(self, obj, src, ext, cc_args, extra_postargs,
pp_opts):
if not os.path.isfile(src):
srcdir_fname=os.path.join(os.environ['abs_srcdir'], src)
if os.path.isfile(srcdir_fname):
src = srcdir_fname
self.compiler.orig__compile(obj, src, ext, cc_args, extra_postargs,
pp_opts)
def build_extension(self, ext):
self.compiler.shared_lib_extension = '.la'
self.compiler.obj_extension = '.lo'
self.compiler.orig__compile=self.compiler._compile
self.compiler._compile=self.my_compiler__compile
build_ext.build_extension(self,ext)
def get_ext_filename(self, ext_name):
name = build_ext.get_ext_filename(self, ext_name)
name = re.sub('\.[^.]*$', '.la', name)
return name
class custom_install_lib(install_lib):
# re-assemble libtool install command
libtool_cmd = []
for env_var in ['LIBTOOL', 'AM_LIBTOOLFLAGS', 'LIBTOOLFLAGS', 'INSTALL']:
libtool_cmd += os.environ[env_var].split()
def copy_tree(self, infile, outfile,
preserve_mode=1, preserve_times=1, preserve_symlinks=0,
level=1):
"""almost identical to dir_util.copy_tree but for the special
treatment of .libs directories and .la files
"""
from distutils.file_util import copy_file
from distutils.dir_util import mkpath
verbose=1
update=0
if not self.dry_run and not os.path.isdir(infile):
raise DistutilsFileError, \
"cannot copy tree '%s': not a directory" % infile
try:
names = os.listdir(infile)
except os.error, (errno, errstr):
if self.dry_run:
names = []
else:
raise DistutilsFileError, \
"error listing files in '%s': %s" % (infile, errstr)
if not self.dry_run:
mkpath(outfile, verbose=verbose)
outputs = []
for n in names:
infile_name = os.path.join(infile, n)
outfile_name = os.path.join(outfile, n)
if n.startswith('.nfs') or n == '.libs':
# skip NFS rename files and libtool-internals
continue
if n.endswith('.la'):
print('installing libtool library', n, file=sys.stderr)
self.spawn(self.libtool_cmd + [infile_name, outfile_name])
continue
if preserve_symlinks and os.path.islink(infile_name):
link_dest = os.readlink(infile_name)
if verbose >= 1:
log.info("linking %s -> %s", outfile_name, link_dest)
if not self.dry_run:
os.symlink(link_dest, outfile_name)
outputs.append(outfile_name)
elif os.path.isdir(infile_name):
outputs.extend(
self.copy_tree(infile_name, outfile_name, preserve_mode,
preserve_times, preserve_symlinks))
else:
copy_file(infile_name, outfile_name, preserve_mode,
preserve_times, update, verbose=verbose,
dry_run=self.dry_run)
outputs.append(outfile_name)
return outputs
from setup import *
cdiobj_module = Extension('_CdiObj',
sources=['cdiobj_wrap.cpp'],
#os.environ['CDIOBJ_WRAP']
extra_compile_args = INCFLAGS,
library_dirs = LDFLAGS,
extra_objects = ['../cdi.o'],
library_dirs = map(lambda x: x.lstrip('-L'),
filter(lambda x: x if x.startswith('-L')
else None,
os.environ['LDFLAGS'].split())),
extra_objects = ['../cdi.lo'],
runtime_library_dirs = [os.environ['BUILDLIBDIR'],os.environ['LIBDIR']],
extra_link_args = LIBS,
libraries = ['cdi','stdc++'],
language = 'c++',
)
setup (name = 'CdiObj',
version = '0.1',
author = "Ralf Mueller",
description = """pyhton bindings to CDI class library""",
ext_modules = [cdiobj_module],
py_modules = ["CdiObj"],
)
print_libdir = False
print_build_libdir = False
if '--print-libdir' in sys.argv:
sys.argv.remove('--print-libdir')
distutils.core._setup_stop_after = "commandline"
print_libdir = True
if '--print-build-libdir' in sys.argv:
sys.argv.remove('--print-build-libdir')
distutils.core._setup_stop_after = "commandline"
print_build_libdir = True
dist = setup (name = 'CdiObj',
version = '0.1',
author = "Ralf Mueller",
description = """pyhton bindings to CDI class library""",
package_dir = {"" : os.environ['abs_srcdir']},
ext_modules = [cdiobj_module],
cmdclass={'build_ext': custom_build_ext, "install_lib" : custom_install_lib},
py_modules = ["CdiObj"],
)
if print_libdir or print_build_libdir:
installer = dist.get_command_obj('install')
installer.ensure_finalized()
if print_libdir:
print(installer.install_lib.rstrip('/'))
if print_build_libdir:
print(installer.build_lib)
#! /usr/bin/env python
from __future__ import print_function
import sys, os
for env_var in [ 'abs_srcdir', 'abs_builddir_python_build', 'abs_builddir' ]:
v = os.getenv(env_var)
if v != None:
sys.path.insert(0, v)
import CdiObj
ifile = "../testdata/mulval.grb"
ifile_name = "../testdata/mulval.grb"
if 'abs_srcdir' in os.environ:
ifile_name = os.path.join(os.environ['abs_srcdir'], ifile_name)
cdi = CdiObj.Cdi(ifile)
cdi = CdiObj.Cdi(ifile_name)
print('Stream: ',cdi.streamID,' vlistID:',cdi.vlistID,' nvars:{d}', cdi.nvars)
......
require 'mkmf'
load "extconf.rb"
$libs = append_library($libs, "stdc++")
$LDFLAGS += " ../.libs/libcdipp.a ../../src/.libs/libcdi.a"
$LDFLAGS += " ../libcdipp.la ../../src/libcdi.la"
$srcs = %w[cdiobj_wrap.cpp]
$objs = %w[cdiobj_wrap.o]
create_makefile('CdiObj')
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment