24
24
import shutil
25
25
import subprocess
26
26
import sys
27
+ from distutils .file_util import copy_file
27
28
from setuptools .command .build_ext import build_ext as _build_ext
28
29
29
30
class BuildExt (_build_ext ):
@@ -44,23 +45,78 @@ def build_extensions(self):
44
45
super ().build_extensions ()
45
46
46
47
def build_extension (self , ext ):
48
+ from ivpm .setup .ivpm_data import get_hooks , Phase_BuildPre , Phase_BuildPost , expand_libvars , get_ivpm_ext_name_m
47
49
proj_dir = os .getcwd ()
48
50
print ("build_extension: %s" % str (ext ))
49
51
include_dirs = getattr (ext , 'include_dirs' , [])
50
52
# include_dirs.append("foobar")
51
53
# include_dirs.append(os.path.join(proj_dir, 'src', 'include'))
52
54
setattr (ext , 'include_dirs' , include_dirs )
53
55
54
- return super ().build_extension (ext )
56
+ ret = super ().build_extension (ext )
57
+
58
+ build_py = self .get_finalized_command ("build_py" )
59
+ ext_name_m = get_ivpm_ext_name_m ()
60
+
61
+ for ext in self .extensions :
62
+ print ("Ext: %s" % str (ext ))
63
+ fullname = self .get_ext_fullname (ext .name )
64
+ filename = self .get_ext_filename (fullname )
65
+
66
+ print ("fullname=%s filename=%s" % (fullname , filename ), flush = True )
67
+
68
+ modpath = fullname .split ("." )
69
+
70
+ if fullname in ext_name_m .keys ():
71
+ # replace last path element
72
+ mapped_filename = expand_libvars (ext_name_m [fullname ])
73
+ dest_filename = os .path .join (self .build_lib , "/" .join (modpath [:- 1 ]), mapped_filename )
74
+ else :
75
+ dest_filename = os .path .join (self .build_lib , filename )
76
+ src_filename = os .path .join (self .build_lib , filename )
77
+
78
+ print ("dest_filename: %s src_filename: %s" % (dest_filename , src_filename ))
79
+ if src_filename != dest_filename :
80
+ os .rename (src_filename , dest_filename )
81
+
82
+ return ret
55
83
56
84
def copy_extensions_to_source (self ):
57
- import ivpm .setup .setup as ivpms
58
- from ivpm .setup .setup import get_hooks , Phase_BuildPre , Phase_BuildPost
85
+ from ivpm .setup .ivpm_data import get_hooks , Phase_BuildPre , Phase_BuildPost , expand_libvars , get_ivpm_ext_name_m
59
86
""" Like the base class method, but copy libs into proper directory in develop. """
60
87
print ("copy_extensions_to_source" )
61
88
for hook in get_hooks (Phase_BuildPre ):
62
89
hook (self )
63
- super ().copy_extensions_to_source ()
90
+
91
+ build_py = self .get_finalized_command ("build_py" )
92
+ ext_name_m = get_ivpm_ext_name_m ()
93
+ for ext in self .extensions :
94
+ fullname = self .get_ext_fullname (ext .name )
95
+ filename = self .get_ext_filename (fullname )
96
+
97
+ print ("fullname=%s filename=%s" % (fullname , filename ), flush = True )
98
+
99
+ modpath = fullname .split ("." )
100
+ package = "." .join (modpath [:- 1 ])
101
+ package_dir = build_py .get_package_dir (package )
102
+
103
+ if fullname in ext_name_m .keys ():
104
+ # replace last path element
105
+ mapped_filename = expand_libvars (ext_name_m [fullname ])
106
+ dest_filename = os .path .join (package_dir , mapped_filename )
107
+ src_filename = os .path .join (self .build_lib , "/" .join (modpath [:- 1 ]), mapped_filename )
108
+ else :
109
+ dest_filename = os .path .join (package_dir , os .path .basename (filename ))
110
+ src_filename = os .path .join (self .build_lib , filename )
111
+
112
+ os .makedirs (os .path .dirname (dest_filename ), exist_ok = True )
113
+
114
+ copy_file (
115
+ src_filename ,
116
+ dest_filename ,
117
+ verbose = self .verbose ,
118
+ dry_run = self .dry_run
119
+ )
64
120
65
121
# Appy any post-copy hooks
66
122
for hook in get_hooks (Phase_BuildPost ):
@@ -183,7 +239,7 @@ def build_cmake(self, proj_dir):
183
239
build_cmd [cmake_build_tool ](self , build_dir , env )
184
240
install_cmd [cmake_build_tool ](self , build_dir , env )
185
241
186
- from ivpm .setup .setup import get_ivpm_extdep_data
242
+ from ivpm .setup .ivpm_data import get_ivpm_extdep_data
187
243
for src ,dst in get_ivpm_extdep_data ():
188
244
shutil .copyfile (src , dst )
189
245
0 commit comments