-
Notifications
You must be signed in to change notification settings - Fork 8
/
setup.py
231 lines (171 loc) · 6.12 KB
/
setup.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
################################################################################
# Setup for installation #
################################################################################
#
# Copyright (C) 2020-2021 Diego Hayashi Alonso
#
# This file is part of FEniCS TopOpt Foam.
#
# FEniCS TopOpt Foam is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# FEniCS TopOpt Foam is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with FEniCS TopOpt Foam. If not, see <https://www.gnu.org/licenses/>.
#
# https://setuptools.readthedocs.io/en/latest/setuptools.html#basic-use
# https://github.com/mdolab/dafoam/blob/master/setup.py
############################### Python libraries ###############################
import itertools
import setuptools
############################# Project information ##############################
from fenics_topopt_foam.__about__ import __name__ as library_name
from fenics_topopt_foam.__about__ import __version__, __description__, __author__, __maintainer__
############################ Setup configuration ###############################
#### Git website
# Get the Git website from LINK.txt file.
# The LINK.txt file is included in MANIFEST.in for this task:
# https://packaging.python.org/guides/using-manifest-in/
# https://github.com/navdeep-G/setup.py
# https://github.com/interpreters/pypreprocessor
#git_website = "https://github.com/diego-hayashi/fenics_topopt_foam"
import subprocess
p = subprocess.Popen("""echo $(cat LINK.txt | sed -ne 's/^Git repository link: \([https][^)]*\).*$/\\1/p')""", shell = True, stdout = subprocess.PIPE, stderr = subprocess.PIPE, executable = '/bin/bash')
(stdoutdata, stderrdata) = p.communicate()
stdout_response = stdoutdata.decode()
git_website = stdout_response.split('\n')[0]
#### Project website
project_website = git_website
#### Keywords
keywords = "Python, OpenFOAM, FEniCS, dolfin-adjoint, Topology optimization"
#### Installation requirements
installation_requirements = [
# NumPy
'numpy',
# mpi4py
'mpi4py'
]
#### Extra requirements
# * "Extra", but needed in order to access all the functionality...
extra_requirements = {
'finite elements': [
# FEniCS
'fenics-dijitso', 'fenics-dolfin', 'fenics-ffc' ,'fenics-fiat', 'fenics-ufl'
],
'adjoint model': [
# dolfin-adjoint
'dolfin-adjoint'
],
'plotting': [
# Matplotlib
'matplotlib'
],
'meshing': [
# Meshio
'meshio>=3'
],
'others' : [
# PyFoam
'PyFoam'
],
}
############################ Developer information #############################
# Author names
author_names = [aut.split(' <')[0] for aut in __author__]
# Author e-mails
author_emails = [aut.split(' <')[1].split('>')[0] for aut in __author__]
# Maintainer names
maintainer_names = [maint.split(' <')[0] for maint in __maintainer__]
# Maintainer e-mails
maintainer_emails = [maint.split(' <')[1].split('>')[0] for maint in __maintainer__]
############################# Perform the setup ################################
# Gather all extra requirements
extra_requirements['all'] = list(itertools.chain(*extra_requirements.values()))
#### Get the long description from the read-me file
# The read-me file is included in MANIFEST.in for this task:
# https://packaging.python.org/guides/using-manifest-in/
# https://github.com/navdeep-G/setup.py
# https://github.com/interpreters/pypreprocessor
with open('README.md', 'r', encoding = 'utf-8') as f:
long_description = f.read()
#### Setup
setuptools.setup(
########################### Basic information ##########################
# Name
name = library_name,
# Version
version = __version__,
############################## Packages ################################
# Packages
packages = [
'fenics_topopt_foam',
'fenics_topopt_foam.dolfin_adjoint_extensions',
'fenics_topopt_foam.io',
'fenics_topopt_foam.mesh',
'fenics_topopt_foam.plugins',
'fenics_topopt_foam.solver',
'fenics_topopt_foam.types',
'fenics_topopt_foam.utils',
],
package_dir = {
library_name : library_name
},
############################# Requirements #############################
# Python version
python_requires = '>=3',
# Install requirements
install_requires = installation_requirements,
# Extras requirements (not needed for basic installation, but required for
# being able to execute all functions)
extras_require = extra_requirements,
############################### Metadata ###############################
# Author information
author = author_names,
author_email = author_emails,
# Maintainer information
maintainer = maintainer_emails,
maintainer_email = maintainer_emails,
# Description
description = __description__,
# Long description
long_description = long_description,
long_description_content_type = "text/markdown",
# Keywords
keywords = keywords,
# Links
url = project_website,
project_urls = {
"Source Code" : git_website,
},
# License
license = "GPL version 3",
# Classifiers
# https://pypi.org/pypi?%3Aaction=list_classifiers
classifiers = [
# GPL 3
"License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)",
# Python 3
"Programming Language :: Python :: 3",
# OpenFOAM is implemented in C++
"Programming Language :: C++",
# Bash
"Programming Language :: Unix Shell",
# Linux-only (using Bash)
"Operating System :: POSIX :: Linux",
],
########################### Additional data ############################
# https://setuptools.readthedocs.io/en/latest/userguide/datafiles.html
# Include all data mentioned in MANIFEST.in
include_package_data = True,
# Exclude some data mentioned in MANIFEST.in
exclude_package_data = {
# Having just the license (COPYING) file after installation is enough
"": ["README.md", "LINK.txt"]
},
)