History

python/setup.py: add command 'generate' with option '--enable-double'

Paul Brossier committed 10 years ago

Commit a89ed311 parent 07867cd5 files · +58 −22Browse files

Showing the changes to python (5 of 5 files). Show all

Unified · Split

5 files
  1. python/ext/aubio-types.h +2 −0
  2. python/ext/aubiomodule.c +0 −1
  3. python/lib/gen_external.py +13 −5
  4. python/lib/moresetuptools.py +30 −0
  5. python/setup.py +13 −16
python/ext/aubio-types.h+2−0
@@ -1,6 +1,8 @@
11 #include <Python.h>
22 #include <structmember.h>
33
4+#include "aubio-generated.h"
5+
46 #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
57
68 // define numpy unique symbols for aubio
python/ext/aubiomodule.c+0−1
@@ -1,6 +1,5 @@
11 #define PY_AUBIO_MODULE_MAIN
22 #include "aubio-types.h"
3−#include "aubio-generated.h"
43 #include "py-musicutils.h"
54
65 static char aubio_module_doc[] = "Python module for the aubio library";
python/lib/gen_external.py+13−5
@@ -1,4 +1,4 @@
1−import os
1+import os, glob
22
33 header = """// this file is generated! do not modify
44 #include "aubio-types.h"
@@ -66,8 +66,9 @@ def get_cpp_objects(): · 61 unmodified lines
6666
6767 return cpp_output, cpp_objects
6868
69−def generate_external(output_path, usedouble = False):
69+def generate_external(output_path, usedouble = False, overwrite = True):
7070 if not os.path.isdir(output_path): os.mkdir(output_path)
71+ elif overwrite == False: return glob.glob(os.path.join(output_path, '*.c'))
7172 sources_list = []
7273 cpp_output, cpp_objects = get_cpp_objects()
7374 lib = {}
@@ -160,10 +161,17 @@ void add_generated_objects ( PyObject *m ) · 86 unmodified lines
160161 sources_list.append(output_file)
161162
162163 objlist = "".join(["extern PyTypeObject Py_%sType;\n" % p for p in lib])
163− out = """
164−// generated list of objects created with gen_external.py
165−#include <Python.h>
164+ out = """// generated list of objects created with gen_external.py
166165
166+#include <Python.h>
167+"""
168+ if usedouble:
169+ out += """
170+#ifndef HAVE_AUBIO_DOUBLE
171+#define HAVE_AUBIO_DOUBLE 1
172+#endif
173+"""
174+ out += """
167175 {objlist}
168176 int generated_objects ( void );
169177 void add_generated_objects( PyObject *m );
python/lib/moresetuptools.py+30−0
@@ -0,0 +1,30 @@
1+import distutils, os, subprocess
2+import setuptools.command.build_py
3+import distutils.command.clean
4+from distutils.dir_util import remove_tree
5+
6+class CleanGenerated(distutils.command.clean.clean):
7+ def run(self):
8+ remove_tree('gen')
9+ distutils.command.clean.clean.run(self)
10+
11+class GenerateCommand(distutils.cmd.Command):
12+ description = 'generate gen/gen-*.c files from ../src/aubio.h'
13+ user_options = [
14+ # The format is (long option, short option, description).
15+ ('enable-double', None, 'use HAVE_AUBIO_DOUBLE=1 (default: 0)'),
16+ ]
17+
18+ def initialize_options(self):
19+ self.enable_double = False
20+
21+ def finalize_options(self):
22+ if self.enable_double:
23+ self.announce(
24+ 'will generate code for aubio compiled with HAVE_AUBIO_DOUBLE=1',
25+ level=distutils.log.INFO)
26+
27+ def run(self):
28+ self.announce( 'Generating code', level=distutils.log.INFO)
29+ from .gen_external import generate_external
30+ generated_object_files = generate_external('gen', usedouble = self.enable_double)
python/setup.py+13−16
@@ -1,6 +1,7 @@
11 #! /usr/bin/env python
22
3−from setuptools import setup, Extension
3+from setuptools import setup, Extension, Command
4+from lib.moresetuptools import CleanGenerated, GenerateCommand
45
56 import sys
67 import os.path
@@ -12,30 +13,22 @@ __version__ = '.'.join \ · 5 unmodified lines
1213 ([str(x) for x in [AUBIO_MAJOR_VERSION, AUBIO_MINOR_VERSION, AUBIO_PATCH_VERSION]]) \
1314 + AUBIO_VERSION_STATUS
1415
16+# function to generate gen/*.{c,h}
17+from lib.gen_external import generate_external
18+output_path = 'gen'
1519
1620 include_dirs = []
1721 library_dirs = []
1822 define_macros = []
1923 extra_link_args = []
2024
21−include_dirs += ['ext']
25+include_dirs += [ 'ext' ]
26+include_dirs += [ output_path ] # aubio-generated.h
2227 include_dirs += [ numpy.get_include() ]
2328
2429 if sys.platform.startswith('darwin'):
2530 extra_link_args += ['-framework','CoreFoundation', '-framework','AudioToolbox']
2631
27−output_path = 'gen'
28−generated_object_files = []
29−
30−if not os.path.isdir(output_path):
31− from lib.gen_external import generate_external
32− generated_object_files = generate_external(output_path)
33− # define include dirs
34−else:
35− import glob
36− generated_object_files = glob.glob(os.path.join(output_path, '*.c'))
37−include_dirs += [output_path]
38−
3932 if os.path.isfile('../src/aubio.h'):
4033 define_macros += [('USE_LOCAL_AUBIO', 1)]
4134 include_dirs += ['../src'] # aubio.h
@@ -56,8 +49,8 @@ aubio_extension = Extension("aubio._aubio", [ · 14 unmodified lines
5649 "ext/py-phasevoc.c",
5750 "ext/py-source.c",
5851 "ext/py-sink.c",
59− # generated files
60− ] + generated_object_files,
52+ # generate files if they don't exit
53+ ] + generate_external(output_path, overwrite = False),
6154 include_dirs = include_dirs,
6255 library_dirs = library_dirs,
6356 extra_link_args = extra_link_args,
@@ -96,4 +89,8 @@ distrib = setup(name='aubio', · 32 unmodified lines
9689 platforms = 'any',
9790 classifiers = classifiers,
9891 install_requires = ['numpy'],
92+ cmdclass = {
93+ 'clean': CleanGenerated,
94+ 'generate': GenerateCommand,
95+ }
9996 )

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t