This file is indexed.

/usr/share/doc/cl-asdf/asdf/The-package_002dinferred_002dsystem-extension.html is in cl-asdf 2:3.1.4-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- This manual describes ASDF, a system definition facility
for Common Lisp programs and libraries.

You can find the latest version of this manual at
http://common-lisp.net/project/asdf/asdf.html.

ASDF Copyright (C) 2001-2014 Daniel Barlow and contributors.

This manual Copyright (C) 2001-2014 Daniel Barlow and contributors.

This manual revised (C) 2009-2014 Robert P. Goldman and Francois-Rene Rideau.

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 -->
<!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
<head>
<title>ASDF Manual: The package-inferred-system extension</title>

<meta name="description" content="ASDF Manual: The package-inferred-system extension">
<meta name="keywords" content="ASDF Manual: The package-inferred-system extension">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Concept-Index.html#Concept-Index" rel="index" title="Concept Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Defining-systems-with-defsystem.html#Defining-systems-with-defsystem" rel="up" title="Defining systems with defsystem">
<link href="The-object-model-of-ASDF.html#The-object-model-of-ASDF" rel="next" title="The object model of ASDF">
<link href="Other-code-in-_002easd-files.html#Other-code-in-_002easd-files" rel="prev" title="Other code in .asd files">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>


</head>

<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="The-package_002dinferred_002dsystem-extension"></a>
<div class="header">
<p>
Previous: <a href="Other-code-in-_002easd-files.html#Other-code-in-_002easd-files" accesskey="p" rel="prev">Other code in .asd files</a>, Up: <a href="Defining-systems-with-defsystem.html#Defining-systems-with-defsystem" accesskey="u" rel="up">Defining systems with defsystem</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="The-package_002dinferred_002dsystem-extension-1"></a>
<h3 class="section">6.5 The package-inferred-system extension</h3>

<p>Starting with release 3.1.2,
ASDF supports a one-package-per-file style of programming,
whereby each file is its own system,
and dependencies are deduced from the <code>defpackage</code> form
(or its variant <code>uiop:define-package</code>).
</p>

<p>In this style, packages refer to a system with the same name (downcased);
and if a system is defined with <code>:class package-inferred-system</code>,
then system names that start with that name
(using the slash <code>/</code> separator)
refer to files under the filesystem hierarchy where the system is defined.
For instance, if system <code>my-lib</code> is defined in
<samp>/foo/bar/my-lib/my-lib.asd</samp>, then system <code>my-lib/src/utility</code>
will be found in file <samp>/foo/bar/my-lib/src/utility.lisp</samp>.
</p>
<p>This style was made popular by <code>faslpath</code> and <code>quick-build</code> before,
and at the cost of a stricter package discipline,
seems to make for more maintainable code.
It is used by ASDF itself (starting with ASDF 3) and by <code>lisp-interface-library</code>.
</p>
<p>To use this style, choose a toplevel system name, e.g. <code>my-lib</code>,
and create a file <samp>my-lib.asd</samp>
with the <code>:class :package-inferred-system</code> option in its <code>defsystem</code>.
For instance:
</p><div class="example">
<pre class="example">#-asdf3 (error &quot;my-lib requires ASDF 3&quot;)
(defsystem my-lib
  :class :package-inferred-system
  :defsystem-depends-on (:asdf-package-system)
  :depends-on (:my-lib/interface/all
               :my-lib/src/all
               :my-lib/extras/all)
  :in-order-to ((test-op (load-op :my-lib/test/all)))
  :perform (test-op (o c) (symbol-call :my-lib/test/all :test-suite)))

(defsystem :my-lib/test :depends-on (:my-lib/test/all))

(register-system-packages :my-lib/interface/all '(:my-lib-interface))
(register-system-packages :my-lib/src/all '(:my-lib-implementation))
(register-system-packages :my-lib/test/all '(:my-lib-test))

(register-system-packages
 :closer-mop
 '(:c2mop :closer-common-lisp :c2cl :closer-common-lisp-user :c2cl-user))
</pre></div>

<p>In the code above, the
<code>:defsystem-depends-on (:asdf-package-system)</code> is
for compatibility with older versions of ASDF 3 (ASDF 2 is not supported),
and requires the <code>asdf-package-system</code> library to be present
(it is implicitly provided by ASDF starting with release 3.1.2,
which can be detected with the feature <code>:asdf3.1</code>).
</p>
<p>The function <code>register-system-packages</code> has to be called to register
packages used or provided by your system and its components
where the name of the system that provides the package
is not the downcase of the package name.
</p>
<p>Then, file <samp>interface/order.lisp</samp> under the <code>lil</code> hierarchy,
that defines abstract interfaces for order comparisons,
starts with the following form,
dependencies being trivially computed from the <code>:use</code> and <code>:mix</code> clauses:
</p>
<div class="example">
<pre class="example">(uiop:define-package :lil/interface/order
  (:use :closer-common-lisp
   :lil/interface/definition
   :lil/interface/base
   :lil/interface/eq :lil/interface/group)
  (:mix :fare-utils :uiop :alexandria)
  (:export ...))
</pre></div>

<p>ASDF can tell that this file depends on system <code>closer-mop</code> (registered above),
<code>lil/interface/definition</code>, <code>lil/interface/base</code>,
<code>lil/interface/eq</code>, and <code>lil/interface/group</code>
(package and system names match, and they will be looked up hierarchically).
</p>
<p>ASDF also detects dependencies from <code>:import-from</code> clauses.
You may thus import a well-defined set of symbols from an existing package
as loaded from suitably named system;
or if you prefer to use any such symbol fully qualified by a package prefix,
you may declare a dependency on such a package and its corresponding system
via an <code>:import-from</code> clause with an empty list of symbols, as in:
</p>
<div class="example">
<pre class="example">(defpackage :foo/bar
  (:use :cl)
  (:import-from :foo/baz #:sym1 #:sym2)
  (:import-from :foo/quux)
  (:export ...))
</pre></div>

<p>The form <code>uiop:define-package</code> is supported as well as <code>defpackage</code>,
and has many options that prove useful in this context,
such as <code>:use-reexport</code> and <code>:mix-reexport</code>
that allow for &ldquo;inheritance&rdquo; of symbols being exported.
</p>
<hr>
<div class="header">
<p>
Previous: <a href="Other-code-in-_002easd-files.html#Other-code-in-_002easd-files" accesskey="p" rel="prev">Other code in .asd files</a>, Up: <a href="Defining-systems-with-defsystem.html#Defining-systems-with-defsystem" accesskey="u" rel="up">Defining systems with defsystem</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>