ASDF-INSTALL Tutorial

Customizing ASDF-INSTALL

When ASDF-INSTALL is loaded it LOADs the file ~/.asdf-install if it's there. This file (which is obviously supposed to contain Lisp code) can be used to change the values of some special variables which control ASDF-INSTALL's behaviour. Their names are exported from the ASDF-INSTALL package.

Special variable *GNU-TAR-PROGRAM*

The path to the GNU tar program as a string - the default is "tar", "gtar", or "tar.exe", depending on the operating system. This is used only by the function designated by the default value of *TAR-EXTRACTOR*.

Special variable *PROGRAM-DIRECTORIES*

This is a list of pathnames that designate directories which ASDF-INSTALL searches for your tar program. It is used only by the function designated by the default value of *TAR-EXTRACTOR*. On Unix systems, it defaults to '(#P"/bin/" #P"/usr/bin"); on Windows it defaults to a value derived from the PATH environment variable.

On Windows, this list is also searched for "cygpath.exe", which is used (if found) to prepare arguments for tar.

Special variable *TAR-EXTRACTOR*

If you're having trouble getting your tar program to work with ASDF-INSTALL, e.g. because you're running on Windows but don't want to use Cygwin, then you can set this variable to a funcallable object designating a function that runs tar in whatever fashion is necessary for your environment. It must take two arguments; a pathname that desginates the destination directory, followed by the namestring of the gzipped tar file. It must return the output of the tar program, which must start with a line naming the root directory in which the tar contents were placed. (This is typically generated by the -v argument to Gnu tar.)

Special variable *PROXY*

This variable is NIL by default but will be set to the value of the environment variable $http_proxy (if it's set) prior to loading ~/.asdf-install. Set this to a non-NIL value if you need to go through an http proxy.

Special variable *PROXY-USER*

Special variable *PROXY-PASSWD*

Use these variables if your proxy requires authentication.

Special variable *CCLAN-MIRROR*

This variable is set to "http://ftp.linux.org.uk/pub/lisp/cclan/" before ~/.asdf-install is loaded. A couple of ASDF-installable libraries are available via CCLAN and with the help of this variable you can choose another CCLAN mirror from the list at http://ww.telent.net/cclan-choose-mirror.

Special variable *VERIFY-GPG-SIGNATURES*

This variable is set to T initially which means that there'll be a security check for each library which is not installed from a local file. You can set it to NIL which means no checks at all or to :UNKNOWN-LOCATIONS which means that only URLs which are not in *SAFE-URL-PREFIXES* are checked. Every other value behaves like T.

Note: This customization option is currently not supported in the SBCL version of ASDF-INSTALL.

Special variable *SAFE-URL-PREFIXES*

The value of this variable is NIL initially. It is supposed to be a list of strings which are "safe" URL prefixes, i.e. if a download URL begins with one of these strings there's no security check. The value of *SAFE-URL-PREFIXES* only matters if *VERIFY-GPG-SIGNATURES* is set to :UNKNOWN-LOCATIONS.

Note: This customization option is currently not supported in the SBCL version of ASDF-INSTALL.

Special variable *LOCATIONS*

The initial value of this variable (prior to loading ~/.asdf-install) is

((#p"/usr/local/asdf-install/site/"  
  #p"/usr/local/asdf-install/site-systems/"  
  "System-wide install")  
 (#p"/home/edi/.asdf-install-dir/site/"  
  #p"/home/edi/.asdf-install-dir/systems/"  
  "Personal installation")) 

where /home/edi/ will obviously be replaced with your home directory. You'll notice that this corresponds to the little menu you see when ASDF-INSTALL starts to install a package. You can add elements to this list or replace it completely to get another menu. Each element is a list with three elements - a pathname denoting the directory where the (unpacked) libraries will be stored, a pathname denoting a directory where system definition symlinks will be placed, and a string describing this particular choice.

If you make changes to this value it is important that you also update ASDF:*CENTRAL-REGISTRY* accordingly in your initialization file or ASDF-INSTALL won't find your system definitions (unless you are on Windows). See the example below.

Note: On SBCL the initial value of this variable is different - try it out yourself.

Special variable *PREFERRED-LOCATION*

This variable is initially NIL. If it is not NIL it should be a positive integer not greater than the length of *LOCATIONS*. By setting this value you circumvent the question about where to install a library and ASDF-INSTALL will unconditionally use the corresponding entry from *LOCATIONS*. Note that 1 (not 0) means the first entry.

Note: This customization option is currently not supported in the SBCL version of ASDF-INSTALL.

Special variable *SYSTEM-FILE-INSTALLER*

This variable must be set to a funcallable object that will install a system file so that it can be found by its defsystem. This function is not defsystem-specific. It will receive two arguments; a pathname designating a directory where the system file should be registered, and a pathname designating a system file to be registered. The return value is ignored. The default value is a function that creates a symbolic link on UNIX-like systems, and does nothing on Windows.

Environment variable ASDF_INSTALL_DIR

The value of this environment variable determines the first element of the initial value of *LOCATIONS*, i.e. if it, say, contains the value /usr/local/foo/, then the first element of *LOCATIONS* is

(#p"/usr/local/foo/site/"  
 #p"/usr/local/foo/site-systems/"  
 "System-wide install") 

If this variable is not set, the directory /usr/local/asdf-install/ is used. Note that this variable affects ASDF-INSTALL's behaviour before ~/.asdf-install is loaded.

Note: On SBCL the value of SBCL_HOME is used instead.

Environment variable PRIVATE_ASDF_INSTALL_DIR

The value of this environment variable determines the second element of the initial value of *LOCATIONS*, i.e. if it, say, contains the value frob/ and your username is johndoe, then the second element of *LOCATIONS* is

(#p"/home/johndoe/frob/site/"  
 #p"/home/johndoe/frob/systems/"  
 "Personal installation") 

If this variable is not set, the value .asdf-install-dir (note the dot) is used. Note that this variable affects ASDF-INSTALL's behaviour before ~/.asdf-install is loaded.

Note: On SBCL the value .sbcl is used instead.

An example .asdf-install file

Here's a documented example for how the file ~/.asdf-install could look like:

;; use a http proxy  
(setq asdf-install:[*proxy*][*proxy*] "http://proxy.foo.com/")  
 
;; use a CCLAN mirror in France  
(setq asdf-install:*cclan-mirror* "http://thingamy.com/cclan/")  
 
;; only partial security checks  
(setq asdf-install:[*verify-gpg-signatures*][*verify-gpg-signatures*] :unknown-locations)  
 
;; downloads from Kevin Rosenberg and from my own server don't have to be checked  
(setq asdf-install:*safe-url-prefixes*  
        '("http://files.b9.com/" "http://weitz.de/files/"))  
 
;; add a repository for unstable libraries  
(pushnew '(#p"/usr/local/lisp/unstable/site/"  
           #p"/usr/local/lisp/unstable/systems/"  
           "Install as unstable")  
         asdf-install:*locations*  
         :test #'equal)  
 
;; make sure this is also known by ASDF  
(pushnew "/usr/local/lisp/unstable/systems/"  
         asdf:*central-registry*  
         :test #'equal) 

The list of trusted code suppliers

ASDF-INSTALL maintains a list of library authors you trust. This list is stored in a file trusted-uids.lisp and usually resides in the directory ~/.asdf-install-dir/ but this can be customized by changing the environment variable `PRIVATE_ASDF_INSTALL_DIR`. You are not supposed to edit this file manually - new entries are added automatically whenever you choose the corresponding restart during the security check.