@@ -94,8 +94,9 @@ def properties(self, *package_classes, **kwds):
94
94
pc = PackageClass (* package_classes )
95
95
for package_name in pc .names :
96
96
package = Package (package_name )
97
- if format == 'plain' :
98
- print ("{0}:" .format (package_name ))
97
+ if len (pc .names ) > 1 :
98
+ if format == 'plain' :
99
+ print ("{0}:" .format (package_name ))
99
100
for p in props :
100
101
value = getattr (package , p )
101
102
if value is None :
@@ -112,36 +113,73 @@ def dependencies(self, *package_classes, **kwds):
112
113
"""
113
114
Find the dependencies given package names
114
115
115
- $ sage --package dependencies maxima --runtime --order-only
116
- ecl
117
- info
116
+ $ sage --package dependencies maxima --runtime --order-only --format=shell
117
+ order_only_deps_maxima='info'
118
+ runtime_deps_maxima='ecl'
118
119
"""
119
120
types = kwds .pop ('types' , None )
120
121
format = kwds .pop ('format' , 'plain' )
121
122
log .debug ('Looking up dependencies' )
122
123
pc = PackageClass (* package_classes )
123
- if format == 'plain' :
124
+ if format in [ 'plain' , 'rst' ] :
124
125
if types is None :
125
- types = ['order_only' , 'runtime' ]
126
- deps = []
127
- for package_name in pc .names :
128
- package = Package (package_name )
129
- for t in types :
130
- deps .extend (getattr (package , 'dependencies_' + t ))
131
- for dep in sorted (set (deps )):
132
- print (dep )
126
+ typesets = [['order_only' , 'runtime' ]]
127
+ else :
128
+ typesets = [[t ] for t in types ]
133
129
elif format == 'shell' :
134
130
if types is None :
135
131
types = ['order_only' , 'optional' , 'runtime' , 'check' ]
136
- for package_name in pc .names :
137
- package = Package (package_name )
138
- for t in types :
132
+ typesets = [[t ] for t in types ]
133
+ else :
134
+ raise ValueError ('format must be one of "plain", "rst", and "shell"' )
135
+
136
+ if format == 'plain' :
137
+ indent1 = " "
138
+ indent2 = " "
139
+ elif format == 'rst' :
140
+ indent1 = ""
141
+ indent2 = " "
142
+
143
+ for package_name in pc .names :
144
+ package = Package (package_name )
145
+ if len (pc .names ) > 1 :
146
+ if format == 'plain' :
147
+ print ("{0}:" .format (package_name ))
148
+ elif format == 'rst' :
149
+ print ("\n {0}\n {1}\n " .format (package_name , "~" * len (package_name )))
150
+
151
+ for typeset in typesets :
152
+ if len (typesets ) > 1 :
153
+ if format == 'plain' :
154
+ print (indent1 + "{0}: " .format ('/' .join (typeset )))
155
+ elif format == 'rst' :
156
+ print ("\n " + indent1 + ".. tab:: {0}\n " .format ('/' .join (typeset )))
157
+
158
+ deps = []
159
+ for t in typeset :
160
+ deps .extend (getattr (package , 'dependencies_' + t ))
161
+ deps = sorted (set (deps ))
162
+
163
+ if format in ['plain' , 'rst' ]:
164
+ for dep in deps :
165
+ if '/' in dep :
166
+ # Suppress dependencies on source files, e.g. of the form $(SAGE_ROOT)/..., $(SAGE_SRC)/...
167
+ continue
168
+ if dep == 'FORCE' :
169
+ # Suppress FORCE
170
+ continue
171
+ if dep .startswith ('$(' ):
172
+ # Dependencies like $(BLAS)
173
+ print (indent2 + "- {0}" .format (dep ))
174
+ elif format == 'rst' and Package (dep ).has_file ('SPKG.rst' ):
175
+ # This RST label is set in src/doc/bootstrap
176
+ print (indent2 + "- :ref:`spkg_{0}`" .format (dep ))
177
+ else :
178
+ print (indent2 + "- {0}" .format (dep ))
179
+ elif format == 'shell' :
139
180
# We single-quote the values because dependencies
140
181
# may contain Makefile variable substitutions
141
- deps = getattr (package , 'dependencies_' + t )
142
182
print ("{0}_deps_{1}='{2}'" .format (t , package_name , ' ' .join (deps )))
143
- else :
144
- raise ValueError ('format must be one of "plain" and "shell"' )
145
183
146
184
def name (self , tarball_filename ):
147
185
"""
0 commit comments