Dependencies structure

We already introduced the dependencies structure in the Introduction, here we will go more in depth and explain the different parts of the dependency.

Manifest

This file is the way we instruct Bottles to install the dependency, it is very important that it is well written and that you do not use wrong instructions that can dirty Bottles temp folder or, worse, the user’s bottles (this should never happen and is why every dependency needs to be reviewed by the team before being deployed).

Each manifest has two parts:

The header is the first part of the manifest, it contains the metadata of the dependency and its dependencies if any.

The header must provide the following keys:

These keys are used by Bottles to show the dependency in the Dependencies view and handle its requirements before proceeding with the installation. Let’s see an example:

Name: d3dx9
Description: Microsoft d3dx9 DLLs from DirectX 9 redistributable
Provider: Microsoft
License: Microsoft EULA
License_url: https://www.microsoft.com/web/webpi/eula/net_library_eula_enu.htm
Dependencies: []

In this example, the dependency is named d3dx9, its full name is Microsoft d3dx9 DLLs from DirectX 9 redistributable, it is provided by Microsoft and it is licensed under the Microsoft EULA. It does not depend on any other dependency so the Depdendencies list is kept empty.

Steps

This is where the magic happens, the steps are the instructions to install the dependency. Each dependency can have multiple steps, and each step can have only one action. Actions are the type of instruction to perform (like install_exe to install an executable, get_from_cab to extract a file from a Windows Cabinet, etc).

Note: the steps are executed in the order they are listed in the manifest, so be careful when you add a new one, if your new step depends on the previous one, you should add it after the previous one.

Comments

Despite YAML is a simple language and our dependency syntax is very simple and should be very easy to read, it is still possible to write comments in the manifest to explain what is going on or why it is needed:

..
Steps:
# we need more than one file from cab, so we are going to just extract
# all the files and placing them in the directx_Jun2010_redist whcih
# will be automatically created by Bottles
- action: cab_extract
  file_name: directx_Jun2010_redist.exe
  url: https://download.microsoft.com/download/8/4/A/84A35BF1-DAFE-4AE8-82AF-AD2AE20B6B14/directx_Jun2010_redist.exe
  # urlAlt: http://web.archive.org/web/20210513223919/https://download.microsoft.com/download/8/4/A/84A35BF1-DAFE-4AE8-82AF-AD2AE20B6B14/directx_Jun2010_redist.exe
  file_checksum: 822e4c516600e81dc7fb16d9a77ec6d4
  dest: temp/directx_Jun2010_redist/