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 @@
1#include <Python.h>1#include <Python.h>
2#include <structmember.h>2#include <structmember.h>
3 3
4#include "aubio-generated.h"
5
4#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION6#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
5 7
6// define numpy unique symbols for aubio8// define numpy unique symbols for aubio
python/ext/aubiomodule.c+0−1
@@ -1,6 +1,5 @@
1#define PY_AUBIO_MODULE_MAIN1#define PY_AUBIO_MODULE_MAIN
2#include "aubio-types.h"2#include "aubio-types.h"
3#include "aubio-generated.h"
4#include "py-musicutils.h"3#include "py-musicutils.h"
5 4
6static char aubio_module_doc[] = "Python module for the aubio library";5static char aubio_module_doc[] = "Python module for the aubio library";
python/lib/gen_external.py+13−5
@@ -1,4 +1,4 @@
1import os1import os, glob
2 2
3header = """// this file is generated! do not modify3header = """// this file is generated! do not modify
4#include "aubio-types.h"4#include "aubio-types.h"
@@ -66,8 +66,9 @@ def get_cpp_objects(): · 61 unmodified lines
66 66
67 return cpp_output, cpp_objects67 return cpp_output, cpp_objects
68 68
69def generate_external(output_path, usedouble = False):69def generate_external(output_path, usedouble = False, overwrite = True):
70 if not os.path.isdir(output_path): os.mkdir(output_path)70 if not os.path.isdir(output_path): os.mkdir(output_path)
71 elif overwrite == False: return glob.glob(os.path.join(output_path, '*.c'))
71 sources_list = []72 sources_list = []
72 cpp_output, cpp_objects = get_cpp_objects()73 cpp_output, cpp_objects = get_cpp_objects()
73 lib = {}74 lib = {}
@@ -160,10 +161,17 @@ void add_generated_objects ( PyObject *m ) · 86 unmodified lines
160 sources_list.append(output_file)161 sources_list.append(output_file)
161 162
162 objlist = "".join(["extern PyTypeObject Py_%sType;\n" % p for p in lib])163 objlist = "".join(["extern PyTypeObject Py_%sType;\n" % p for p in lib])
163 out = """164 out = """// generated list of objects created with gen_external.py
164// generated list of objects created with gen_external.py
165#include <Python.h>
166 165
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 += """
167{objlist}175{objlist}
168int generated_objects ( void );176int generated_objects ( void );
169void add_generated_objects( PyObject *m );177void add_generated_objects( PyObject *m );
python/lib/moresetuptools.py+30−0
@@ -0,0 +1,30 @@
1import distutils, os, subprocess
2import setuptools.command.build_py
3import distutils.command.clean
4from distutils.dir_util import remove_tree
5
6class CleanGenerated(distutils.command.clean.clean):
7 def run(self):
8 remove_tree('gen')
9 distutils.command.clean.clean.run(self)
10
11class 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 @@
1#! /usr/bin/env python1#! /usr/bin/env python
2 2
3from setuptools import setup, Extension3from setuptools import setup, Extension, Command
4from lib.moresetuptools import CleanGenerated, GenerateCommand
4 5
5import sys6import sys
6import os.path7import os.path
@@ -12,30 +13,22 @@ __version__ = '.'.join \ · 5 unmodified lines
12 ([str(x) for x in [AUBIO_MAJOR_VERSION, AUBIO_MINOR_VERSION, AUBIO_PATCH_VERSION]]) \13 ([str(x) for x in [AUBIO_MAJOR_VERSION, AUBIO_MINOR_VERSION, AUBIO_PATCH_VERSION]]) \
13 + AUBIO_VERSION_STATUS14 + AUBIO_VERSION_STATUS
14 15
16# function to generate gen/*.{c,h}
17from lib.gen_external import generate_external
18output_path = 'gen'
15 19
16include_dirs = []20include_dirs = []
17library_dirs = []21library_dirs = []
18define_macros = []22define_macros = []
19extra_link_args = []23extra_link_args = []
20 24
21include_dirs += ['ext']25include_dirs += [ 'ext' ]
26include_dirs += [ output_path ] # aubio-generated.h
22include_dirs += [ numpy.get_include() ]27include_dirs += [ numpy.get_include() ]
23 28
24if sys.platform.startswith('darwin'):29if sys.platform.startswith('darwin'):
25 extra_link_args += ['-framework','CoreFoundation', '-framework','AudioToolbox']30 extra_link_args += ['-framework','CoreFoundation', '-framework','AudioToolbox']
26 31
27output_path = 'gen'
28generated_object_files = []
29
30if 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
34else:
35 import glob
36 generated_object_files = glob.glob(os.path.join(output_path, '*.c'))
37include_dirs += [output_path]
38
39if os.path.isfile('../src/aubio.h'):32if os.path.isfile('../src/aubio.h'):
40 define_macros += [('USE_LOCAL_AUBIO', 1)]33 define_macros += [('USE_LOCAL_AUBIO', 1)]
41 include_dirs += ['../src'] # aubio.h34 include_dirs += ['../src'] # aubio.h
@@ -56,8 +49,8 @@ aubio_extension = Extension("aubio._aubio", [ · 14 unmodified lines
56 "ext/py-phasevoc.c",49 "ext/py-phasevoc.c",
57 "ext/py-source.c",50 "ext/py-source.c",
58 "ext/py-sink.c",51 "ext/py-sink.c",
59 # generated files52 # generate files if they don't exit
60 ] + generated_object_files,53 ] + generate_external(output_path, overwrite = False),
61 include_dirs = include_dirs,54 include_dirs = include_dirs,
62 library_dirs = library_dirs,55 library_dirs = library_dirs,
63 extra_link_args = extra_link_args,56 extra_link_args = extra_link_args,
@@ -96,4 +89,8 @@ distrib = setup(name='aubio', · 32 unmodified lines
96 platforms = 'any',89 platforms = 'any',
97 classifiers = classifiers,90 classifiers = classifiers,
98 install_requires = ['numpy'],91 install_requires = ['numpy'],
92 cmdclass = {
93 'clean': CleanGenerated,
94 'generate': GenerateCommand,
95 }
99 )96 )

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