OSDN Git Service

modify for Linux.
[meshio/meshio.git] / swig / setup.py
1 # coding: utf-8
2
3 import distutils.command.build_ext
4 import distutils.command.build_ext
5 #from distutils.core import setup, Extension
6 from setuptools import setup, Extension
7 import os
8 import sys
9 import shutil
10
11 VERSION='1.03'
12
13 option={
14         'swig_opts': ['-c++'],
15         'include_dirs': [
16             '../include'
17             ],
18         'libraries': [
19             'meshio',
20             ],
21         'library_dirs': [
22             '../release',
23             ],
24         }
25
26 # copy englishmap
27 shutil.copy("pymeshio/englishmap.py", ".")
28
29 if os.name=='nt':
30     # vc option
31     option['extra_compile_args']=[
32             '/EHsc', '/MT',
33             ]
34
35 # swig c extensions    
36 ext_modules=[
37         Extension("_mqo", ["mqo.i"], **option),
38         Extension("_pmd", ["pmd.i"], **option),
39         Extension("_vmd", ["vmd.i"], **option),
40         ]
41
42 # blender importers
43 if sys.version_info[0]<3:
44     # blender 2.4
45      data_files=[
46              ('blender24', [
47                  'blender/README24',
48                  'blender/bl24.py',
49                  'blender/mqo_import.py', 
50                  'blender/mqo_export.py',
51                  'blender/pmd_import.py', 
52                  'blender/pmd_export.py', 
53                  ]),
54              ('blender24/pymeshio', [
55                  'pymeshio/__init__.py',
56                  'pymeshio/mqo.py',
57                  'pymeshio/mmd.py',
58                  'pymeshio/englishmap.py',
59                  ]),
60              ]
61
62 else:
63     # rename blender25 files
64     if not os.path.exists("addons"):
65         os.mkdir("addons")
66     shutil.copy("blender/mqo_import.py", "addons/io_import_scene_mqo.py")
67     shutil.copy("blender/mqo_export.py", "addons/io_export_scene_mqo.py")
68     shutil.copy("blender/pmd_import.py", "addons/io_import_scene_pmd.py")
69     shutil.copy("blender/pmd_export.py", "addons/io_export_scene_pmd.py")
70
71     # blender2.5
72     data_files=[
73             ('blender25', [
74                 'blender/README25',
75                 ]),
76             ('blender25/addons', [
77                 'blender/bl25.py',
78                 'addons/io_import_scene_mqo.py',
79                 'addons/io_export_scene_mqo.py',
80                 'addons/io_import_scene_pmd.py',
81                 'addons/io_export_scene_pmd.py',
82                 ]),
83             ('blender25/addons/pymeshio', [
84                 'pymeshio/__init__.py',
85                 'pymeshio/mqo.py',
86                 'pymeshio/mmd.py',
87                 'pymeshio/englishmap.py',
88                 ]),
89             ]
90
91 def mysetup(ext_modules, data_files):
92     setup(name="meshio",
93             version=VERSION,
94             description='polygon mesh io utilities',
95             author='ousttrue',
96             author_email='ousttrue@gmail.com',
97             url='http://sourceforge.jp/projects/meshio/',
98             packages=['meshio'],
99             package_dir={'meshio': '.'},
100             ext_package='meshio',
101             ext_modules=ext_modules,
102             data_files=data_files,
103             classifiers = [
104                 "Programming Language :: Python",
105                 "Programming Language :: Python :: 3",
106                 "Development Status :: 4 - Beta",
107                 "Environment :: Other Environment",
108                 "Intended Audience :: Developers",
109                 "License :: OSI Approved :: BSD License",
110                 "Operating System :: Microsoft :: Windows",
111                 "Operating System :: POSIX :: Linux",
112                 "Natural Language :: Japanese",
113                 "Topic :: Multimedia :: Graphics :: 3D Modeling",
114                 ],
115             )
116
117 if os.name=='nt':
118     # スタティックruntime(/MT)とリンクするのでマニフェストが不要だが
119     # mt.exeの呼び出しを止めることができないので
120     # 繰り返す(1度目でエラーになり2度目で通過できる)
121     for i in range(len(ext_modules)+1):
122         try:
123             mysetup(ext_modules, data_files)
124             break
125         except:
126             continue
127 else:
128     import re
129     pattern=re.compile("<:")
130     def edit(f):
131         new_file=f+".cpp"
132         io=open(new_file, 'wb')
133         for line in open(f):
134             if sys.version_info[0]<3:
135                 io.write(pattern.sub("< :", line))
136             else:
137                 io.write(pattern.sub("< :", line).encode('utf-8'))
138         io.close()
139         return new_file
140
141     org=distutils.command.build_ext.build_ext.swig_sources
142     def custom(self, sources, extension):
143         return [edit(f) for f in org(self, sources, extension)]
144     distutils.command.build_ext.build_ext.swig_sources=custom
145     mysetup(ext_modules, data_files)
146