Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
O
ORG.Asm
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
23
Issues
23
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
Operations
Operations
Incidents
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
ORG.Asm
ORG.Asm
Commits
f216ebca
Commit
f216ebca
authored
Oct 01, 2014
by
Eric Coissac
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add to capacity to build everything from the setup.py script
parent
399a29b2
Changes
22
Hide whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
869 additions
and
511 deletions
+869
-511
MANIFEST.in
MANIFEST.in
+10
-0
README.txt
README.txt
+0
-0
distutils.ext/obidistutils/command/__init__.py
distutils.ext/obidistutils/command/__init__.py
+0
-209
distutils.ext/obidistutils/command/build.py
distutils.ext/obidistutils/command/build.py
+9
-1
distutils.ext/obidistutils/command/build_cexe.py
distutils.ext/obidistutils/command/build_cexe.py
+40
-171
distutils.ext/obidistutils/command/build_ctools.py
distutils.ext/obidistutils/command/build_ctools.py
+26
-71
distutils.ext/obidistutils/command/build_exe.py
distutils.ext/obidistutils/command/build_exe.py
+213
-0
distutils.ext/obidistutils/command/build_ext.py
distutils.ext/obidistutils/command/build_ext.py
+23
-4
distutils.ext/obidistutils/command/build_files.py
distutils.ext/obidistutils/command/build_files.py
+58
-0
distutils.ext/obidistutils/command/install_scripts.py
distutils.ext/obidistutils/command/install_scripts.py
+24
-5
distutils.ext/obidistutils/command/littlebigman.py
distutils.ext/obidistutils/command/littlebigman.py
+62
-0
distutils.ext/obidistutils/core.py
distutils.ext/obidistutils/core.py
+27
-18
distutils.ext/obidistutils/dist.py
distutils.ext/obidistutils/dist.py
+8
-3
distutils.ext/obidistutils/serenity/__init__.py
distutils.ext/obidistutils/serenity/__init__.py
+174
-0
distutils.ext/src/littlebigman
distutils.ext/src/littlebigman
+0
-0
python/oa.py
python/oa.py
+100
-0
python/orgasm/__init__.py
python/orgasm/__init__.py
+13
-0
python/orgasm/command/__init__.py
python/orgasm/command/__init__.py
+0
-0
python/orgasm/command/buildgraph.py
python/orgasm/command/buildgraph.py
+30
-0
python/orgasm/command/unfold.py
python/orgasm/command/unfold.py
+10
-0
python/orgasmg.py
python/orgasmg.py
+3
-6
setup.py
setup.py
+39
-23
No files found.
MANIFEST.in
0 → 100644
View file @
f216ebca
include setup.py
recursive-include distutils.ext *.py *.c
recursive-include python *.pyx *.pxd *.c *.h *.cfiles
recursive-include src *.c *.h
recursive-include fiboheap *.c *.h
recursive-include doc/sphinx/source *.txt *.rst *.py
include doc/sphinx/make.bat
include doc/sphinx/Makefile
include README.txt
README.txt
0 → 100644
View file @
f216ebca
distutils.ext/obidistutils/command/__init__.py
View file @
f216ebca
"""distutils.command.build_clib
Implements the Distutils 'build_clib' command, to build a C/C++ library
that is included in the module distribution and needed by an extension
module."""
__revision__
=
"$Id: build_clib.py 77704 2010-01-23 09:23:15Z tarek.ziade $"
# XXX this module has *lots* of code ripped-off quite transparently from
# build_ext.py -- not surprisingly really, as the work required to build
# a static library from a collection of C source files is not really all
# that different from what's required to build a shared object file from
# a collection of C source files. Nevertheless, I haven't done the
# necessary refactoring to account for the overlap in code between the
# two modules, mainly because a number of subtle details changed in the
# cut 'n paste. Sigh.
import
os
from
distutils.core
import
Command
from
distutils.errors
import
DistutilsSetupError
from
distutils.sysconfig
import
customize_compiler
from
distutils
import
log
def
show_compilers
():
from
distutils.ccompiler
import
show_compilers
show_compilers
()
class
build_cexe
(
Command
):
description
=
"build C/C++ executable distributed with Python extensions"
user_options
=
[
(
'build-cexe'
,
'x'
,
"directory to build C/C++ libraries to"
),
(
'build-temp'
,
't'
,
"directory to put temporary build by-products"
),
(
'debug'
,
'g'
,
"compile with debugging information"
),
(
'force'
,
'f'
,
"forcibly build everything (ignore file timestamps)"
),
(
'compiler='
,
'c'
,
"specify the compiler type"
),
]
boolean_options
=
[
'debug'
,
'force'
]
help_options
=
[
(
'help-compiler'
,
None
,
"list available compilers"
,
show_compilers
),
]
def
initialize_options
(
self
):
self
.
build_cexe
=
None
self
.
build_temp
=
None
# List of executables to build
self
.
executables
=
None
# Compilation options for all libraries
self
.
include_dirs
=
None
self
.
define
=
None
self
.
undef
=
None
self
.
debug
=
None
self
.
force
=
0
self
.
compiler
=
None
def
finalize_options
(
self
):
# This might be confusing: both build-cexe and build-temp default
# to build-temp as defined by the "build" command. This is because
# I think that C libraries are really just temporary build
# by-products, at least from the point of view of building Python
# extensions -- but I want to keep my options open.
self
.
set_undefined_options
(
'build'
,
(
'build_temp'
,
'build_cexe'
),
(
'build_temp'
,
'build_temp'
),
(
'compiler'
,
'compiler'
),
(
'debug'
,
'debug'
),
(
'force'
,
'force'
))
self
.
executables
=
self
.
distribution
.
executables
if
self
.
executables
:
self
.
check_executable_list
(
self
.
executables
)
if
self
.
include_dirs
is
None
:
self
.
include_dirs
=
self
.
distribution
.
include_dirs
or
[]
if
isinstance
(
self
.
include_dirs
,
str
):
self
.
include_dirs
=
self
.
include_dirs
.
split
(
os
.
pathsep
)
# XXX same as for build_ext -- what about 'self.define' and
# 'self.undef' ?
def
run
(
self
):
if
not
self
.
executables
:
return
# Yech -- this is cut 'n pasted from build_ext.py!
from
distutils.ccompiler
import
new_compiler
self
.
compiler
=
new_compiler
(
compiler
=
self
.
compiler
,
dry_run
=
self
.
dry_run
,
force
=
self
.
force
)
customize_compiler
(
self
.
compiler
)
if
self
.
include_dirs
is
not
None
:
self
.
compiler
.
set_include_dirs
(
self
.
include_dirs
)
if
self
.
define
is
not
None
:
# 'define' option is a list of (name,value) tuples
for
(
name
,
value
)
in
self
.
define
:
self
.
compiler
.
define_macro
(
name
,
value
)
if
self
.
undef
is
not
None
:
for
macro
in
self
.
undef
:
self
.
compiler
.
undefine_macro
(
macro
)
self
.
build_executables
(
self
.
executables
)
def
check_executable_list
(
self
,
executables
):
"""Ensure that the list of executables is valid.
`executable` is presumably provided as a command option 'executables'.
This method checks that it is a list of 2-tuples, where the tuples
are (executable_name, build_info_dict).
Raise DistutilsSetupError if the structure is invalid anywhere;
just returns otherwise.
"""
if
not
isinstance
(
executables
,
list
):
raise
DistutilsSetupError
,
\
"'executables' option must be a list of tuples"
for
exe
in
executables
:
if
not
isinstance
(
exe
,
tuple
)
and
len
(
exe
)
!=
2
:
raise
DistutilsSetupError
,
\
"each element of 'executables' must a 2-tuple"
name
,
build_info
=
exe
if
not
isinstance
(
name
,
str
):
raise
DistutilsSetupError
,
\
"first element of each tuple in 'executables' "
+
\
"must be a string (the executables name)"
if
'/'
in
name
or
(
os
.
sep
!=
'/'
and
os
.
sep
in
name
):
raise
DistutilsSetupError
,
\
(
"bad executable name '%s': "
+
"may not contain directory separators"
)
%
\
exe
[
0
]
if
not
isinstance
(
build_info
,
dict
):
raise
DistutilsSetupError
,
\
"second element of each tuple in 'executables' "
+
\
"must be a dictionary (build info)"
def
get_executable_names
(
self
):
# Assume the executables list is valid -- 'check_executable_list()' is
# called from 'finalize_options()', so it should be!
if
not
self
.
executables
:
return
None
exe_names
=
[]
for
(
exe_name
,
build_info
)
in
self
.
executables
:
exe_names
.
append
(
exe_name
)
return
exe_names
def
get_source_files
(
self
):
self
.
check_executable_list
(
self
.
executables
)
filenames
=
[]
for
(
exe_name
,
build_info
)
in
self
.
executables
:
sources
=
build_info
.
get
(
'sources'
)
if
sources
is
None
or
not
isinstance
(
sources
,
(
list
,
tuple
)):
raise
DistutilsSetupError
,
\
(
"in 'executables' option (library '%s'), "
"'sources' must be present and must be "
"a list of source filenames"
)
%
exe_name
filenames
.
extend
(
sources
)
return
filenames
def
build_executables
(
self
,
executables
):
for
(
exe_name
,
build_info
)
in
executables
:
sources
=
build_info
.
get
(
'sources'
)
if
sources
is
None
or
not
isinstance
(
sources
,
(
list
,
tuple
)):
raise
DistutilsSetupError
,
\
(
"in 'executables' option (library '%s'), "
+
"'sources' must be present and must be "
+
"a list of source filenames"
)
%
exe_name
sources
=
list
(
sources
)
log
.
info
(
"building '%s' library"
,
exe_name
)
# First, compile the source code to object files in the library
# directory. (This should probably change to putting object
# files in a temporary build directory.)
macros
=
build_info
.
get
(
'macros'
)
include_dirs
=
build_info
.
get
(
'include_dirs'
)
objects
=
self
.
compiler
.
compile
(
sources
,
output_dir
=
self
.
build_temp
,
macros
=
macros
,
include_dirs
=
include_dirs
,
debug
=
self
.
debug
)
# Now "link" the object files together into a static library.
# (On Unix at least, this isn't really linking -- it just
# builds an archive. Whatever.)
self
.
compiler
.
link_executable
(
objects
,
exe_name
,
output_dir
=
self
.
build_cexe
,
debug
=
self
.
debug
)
distutils.ext/obidistutils/command/build.py
View file @
f216ebca
...
...
@@ -12,13 +12,21 @@ class build(ori_build):
def
has_ctools
(
self
):
return
self
.
distribution
.
has_ctools
()
def
has_files
(
self
):
return
self
.
distribution
.
has_files
()
def
has_executables
(
self
):
return
self
.
distribution
.
has_executables
()
def
has_ext_modules
(
self
):
return
self
.
distribution
.
has_ext_modules
()
sub_commands
=
[(
'build_ctools'
,
has_ctools
),
def
has_littlebigman
(
self
):
return
True
sub_commands
=
[(
'littlebigman'
,
has_littlebigman
),
(
'build_ctools'
,
has_ctools
),
(
'build_files'
,
has_files
),
(
'build_cexe'
,
has_executables
),
(
'build_ext'
,
has_ext_modules
)]
\
+
ori_build
.
sub_commands
...
...
distutils.ext/obidistutils/command/build_cexe.py
View file @
f216ebca
...
...
@@ -4,61 +4,21 @@ Created on 20 oct. 2012
@author: coissac
'''
from
distutils.core
import
Command
import
os
from
obidistutils.command.build_ctools
import
build_ctools
from
distutils.sysconfig
import
customize_compiler
from
distutils.errors
import
DistutilsSetupError
from
distutils
import
log
##
#
# Completely inspired from the build_clib command
#
##
def
show_compilers
():
from
distutils.ccompiler
import
show_compilers
show_compilers
()
class
build_cexe
(
Command
):
class
build_cexe
(
build_ctools
):
description
=
"build C/C++ executable distributed with Python extensions"
user_options
=
[
(
'build-cexe'
,
'x'
,
"directory to build C/C++ libraries to"
),
(
'build-temp'
,
't'
,
"directory to put temporary build by-products"
),
(
'debug'
,
'g'
,
"compile with debugging information"
),
(
'force'
,
'f'
,
"forcibly build everything (ignore file timestamps)"
),
(
'compiler='
,
'c'
,
"specify the compiler type"
),
]
boolean_options
=
[
'debug'
,
'force'
]
help_options
=
[
(
'help-compiler'
,
None
,
"list available compilers"
,
show_compilers
),
]
def
initialize_options
(
self
):
self
.
build_cexe
=
None
self
.
build_temp
=
None
# List of executables to build
self
.
executables
=
None
# Compilation options for all libraries
self
.
include_dirs
=
None
self
.
define
=
None
self
.
undef
=
None
self
.
debug
=
None
self
.
force
=
0
self
.
compiler
=
None
build_ctools
.
initialize_options
(
self
)
self
.
built_files
=
None
def
finalize_options
(
self
):
...
...
@@ -67,140 +27,49 @@ class build_cexe(Command):
# I think that C libraries are really just temporary build
# by-products, at least from the point of view of building Python
# extensions -- but I want to keep my options open.
build_cexe_dir
=
self
.
build_cexe
build_ctools
.
finalize_options
(
self
)
if
build_cexe_dir
is
None
:
self
.
build_cexe
=
None
self
.
set_undefined_options
(
'build'
,
(
'build_scripts'
,
'build_cexe'
),
(
'build_temp'
,
'build_temp'
),
(
'compiler'
,
'compiler'
),
(
'debug'
,
'debug'
),
(
'force'
,
'force'
))
(
'build_scripts'
,
'build_cexe'
))
self
.
set_undefined_options
(
'build_files'
,
(
'files'
,
'built_files'
))
self
.
executables
=
self
.
distribution
.
executables
if
self
.
executables
:
self
.
check_executable_list
(
self
.
executables
)
if
self
.
include_dirs
is
None
:
self
.
include_dirs
=
self
.
distribution
.
include_dirs
or
[]
if
isinstance
(
self
.
include_dirs
,
str
):
self
.
include_dirs
=
self
.
include_dirs
.
split
(
os
.
pathsep
)
# XXX same as for build_ext -- what about 'self.define' and
# 'self.undef' ?
def
run
(
self
):
if
not
self
.
executables
:
return
self
.
mkpath
(
self
.
build_cexe
)
# Yech -- this is cut 'n pasted from build_ext.py!
from
distutils.ccompiler
import
new_compiler
self
.
compiler
=
new_compiler
(
compiler
=
self
.
compiler
,
dry_run
=
self
.
dry_run
,
force
=
self
.
force
)
customize_compiler
(
self
.
compiler
)
if
self
.
include_dirs
is
not
None
:
self
.
compiler
.
set_include_dirs
(
self
.
include_dirs
)
if
self
.
define
is
not
None
:
# 'define' option is a list of (name,value) tuples
for
(
name
,
value
)
in
self
.
define
:
self
.
compiler
.
define_macro
(
name
,
value
)
if
self
.
undef
is
not
None
:
for
macro
in
self
.
undef
:
self
.
compiler
.
undefine_macro
(
macro
)
self
.
build_executables
(
self
.
executables
)
def
check_executable_list
(
self
,
executables
):
"""Ensure that the list of executables is valid.
`executable` is presumably provided as a command option 'executables'.
This method checks that it is a list of 2-tuples, where the tuples
are (executable_name, build_info_dict).
Raise DistutilsSetupError if the structure is invalid anywhere;
just returns otherwise.
def
substitute_sources
(
self
,
exe_name
,
sources
):
"""
if
not
isinstance
(
executables
,
list
):
raise
DistutilsSetupError
,
\
"'executables' option must be a list of tuples"
for
exe
in
executables
:
if
not
isinstance
(
exe
,
tuple
)
and
len
(
exe
)
!=
2
:
raise
DistutilsSetupError
,
\
"each element of 'executables' must a 2-tuple"
name
,
build_info
=
exe
if
not
isinstance
(
name
,
str
):
raise
DistutilsSetupError
,
\
"first element of each tuple in 'executables' "
+
\
"must be a string (the executables name)"
if
'/'
in
name
or
(
os
.
sep
!=
'/'
and
os
.
sep
in
name
):
raise
DistutilsSetupError
,
\
(
"bad executable name '%s': "
+
"may not contain directory separators"
)
%
\
exe
[
0
]
if
not
isinstance
(
build_info
,
dict
):
raise
DistutilsSetupError
,
\
"second element of each tuple in 'executables' "
+
\
"must be a dictionary (build info)"
def
get_executable_names
(
self
):
# Assume the executables list is valid -- 'check_executable_list()' is
# called from 'finalize_options()', so it should be!
if
not
self
.
executables
:
return
None
exe_names
=
[]
for
(
exe_name
,
build_info
)
in
self
.
executables
:
exe_names
.
append
(
exe_name
)
return
exe_names
def
get_source_files
(
self
):
self
.
check_executable_list
(
self
.
executables
)
filenames
=
[]
for
(
exe_name
,
build_info
)
in
self
.
executables
:
sources
=
build_info
.
get
(
'sources'
)
if
sources
is
None
or
not
isinstance
(
sources
,
(
list
,
tuple
)):
raise
DistutilsSetupError
,
\
(
"in 'executables' option (library '%s'), "
"'sources' must be present and must be "
"a list of source filenames"
)
%
exe_name
filenames
.
extend
(
sources
)
return
filenames
def
build_executables
(
self
,
executables
):
for
(
exe_name
,
build_info
)
in
executables
:
sources
=
build_info
.
get
(
'sources'
)
if
sources
is
None
or
not
isinstance
(
sources
,
(
list
,
tuple
)):
raise
DistutilsSetupError
,
\
(
"in 'executables' option (library '%s'), "
+
"'sources' must be present and must be "
+
"a list of source filenames"
)
%
exe_name
sources
=
list
(
sources
)
log
.
info
(
"building '%s' program"
,
exe_name
)
# First, compile the source code to object files in the library
# directory. (This should probably change to putting object
# files in a temporary build directory.)
macros
=
build_info
.
get
(
'macros'
)
include_dirs
=
build_info
.
get
(
'include_dirs'
)
objects
=
self
.
compiler
.
compile
(
sources
,
output_dir
=
self
.
build_temp
,
macros
=
macros
,
include_dirs
=
include_dirs
,
debug
=
self
.
debug
)
# Now "link" the object files together into a static library.
# (On Unix at least, this isn't really linking -- it just
# builds an archive. Whatever.)
self
.
compiler
.
link_executable
(
objects
,
exe_name
,
output_dir
=
self
.
build_cexe
,
debug
=
self
.
debug
)
Substitutes source file name starting by an @ by the actual
name of the built file (see --> build_files)
"""
sources
=
list
(
sources
)
for
i
in
xrange
(
len
(
sources
)):
print
exe_name
,
sources
[
i
],
if
sources
[
i
][
0
]
==
'@'
:
try
:
filename
=
self
.
built_files
[
sources
[
i
][
1
:]]
except
KeyError
:
raise
DistutilsSetupError
,
\
(
'The %s filename declared in the source '
'files of the program %s have not been '
'built by the installation process'
)
%
(
sources
[
i
],
exe_name
)
sources
[
i
]
=
filename
print
"changed to "
,
filename
else
:
print
" ok"
return
sources
distutils.ext/obidistutils/command/build_ctools.py
View file @
f216ebca
...
...
@@ -7,20 +7,20 @@ Created on 20 oct. 2012
import
os
from
obidistutils.command.build_
cexe
import
build_c
exe
from
obidistutils.command.build_
exe
import
build_
exe
from
distutils.sysconfig
import
customize_compiler
from
distutils.errors
import
DistutilsSetupError
from
distutils
import
log
class
build_ctools
(
build_
c
exe
):
class
build_ctools
(
build_exe
):
description
=
"build C/C++ executable not distributed with Python extensions"
def
initialize_options
(
self
):
build_
c
exe
.
initialize_options
(
self
)
build_exe
.
initialize_options
(
self
)
# List of
tools to build
# List of
built tools
self
.
ctools
=
None
self
.
build_ctools
=
None
self
.
littlebigman
=
None
def
finalize_options
(
self
):
...
...
@@ -29,77 +29,32 @@ class build_ctools(build_cexe):
# I think that C libraries are really just temporary build
# by-products, at least from the point of view of building Python
# extensions -- but I want to keep my options open.
build_exe
.
finalize_options
(
self
)
self
.
set_undefined_options
(
'build'
,
(
'build_temp'
,
'build_ctools'
),
(
'build_temp'
,
'build_temp'
),
(
'compiler'
,
'compiler'
),
(
'debug'
,
'debug'
),
(
'force'
,
'force'
))
self
.
ctools
=
self
.
distribution
.
ctools
if
self
.
ctools
:
self
.
check_executable_list
(
self
.
ctools
)
(
'build_temp'
,
'build_cexe'
))
if
self
.
include_dirs
is
None
:
self
.
include_dirs
=
self
.
distribution
.
include_dirs
or
[]
if
isinstance
(
self
.
include_dirs
,
str
):
self
.
include_dirs
=
self
.
include_dirs
.
split
(
os
.
pathsep
)
self
.
set_undefined_options
(
'littlebigman'
,
(
'littlebigman'
,
'littlebigman'
))
self
.
executables
=
self
.
distribution
.
ctools
self
.
check_executable_list
(
self
.
executables
)
if
self
.
littlebigman
==
'-DLITTLE_END'
:
if
self
.
define
is
None
:
self
.
define
=
[(
'LITTLE_END'
,
None
)]
else
:
self
.
define
.
append
(
'LITTLE_END'
,
None
)
# XXX same as for build_ext -- what about 'self.define' and
# 'self.undef' ?
self
.
ctools
=
set
()
def
run
(
self
):
if
not
self
.
ctools
:
return
# Yech -- this is cut 'n pasted from build_ext.py!
from
distutils.ccompiler
import
new_compiler
self
.
compiler
=
new_compiler
(
compiler
=
self
.
compiler
,
dry_run
=
self
.
dry_run
,
force
=
self
.
force
)
customize_compiler
(
self
.
compiler
)
if
self
.
include_dirs
is
not
None
:
self
.
compiler
.
set_include_dirs
(
self
.
include_dirs
)
if
self
.
define
is
not
None
:
# 'define' option is a list of (name,value) tuples
for
(
name
,
value
)
in
self
.
define
:
self
.
compiler
.
define_macro
(
name
,
value
)
if
self
.
undef
is
not
None
:
for
macro
in
self
.
undef
:
self
.
compiler
.
undefine_macro
(
macro
)
self
.
build_executables
(
self
.
ctools
)
def
build_executables
(
self
,
executables
):
for
(
exe_name
,
build_info
)
in
executables
:
sources
=
build_info
.
get
(
'sources'
)
if
sources
is
None
or
not
isinstance
(
sources
,
(
list
,
tuple
)):
raise
DistutilsSetupError
,
\
(
"in 'executables' option (library '%s'), "
+
"'sources' must be present and must be "
+
"a list of source filenames"
)
%
exe_name
sources
=
list
(
sources
)
log
.
info
(
"building '%s' program"
,
exe_name
)
# First, compile the source code to object files in the library
# directory. (This should probably change to putting object
# files in a temporary build directory.)
macros
=
build_info
.
get
(
'macros'
)
include_dirs
=
build_info
.
get
(
'include_dirs'
)
objects
=
self
.
compiler
.
compile
(
sources
,
output_dir
=
self
.
build_temp
,