|
| 1 | +{/* DO NOT EDIT! */} |
| 2 | +{/* Automatically generated from docusaurus-template-liquid/templates/docusaurus. */} |
| 3 | + |
| 4 | +{/* ------------------------------------------------------------------------ */} |
| 5 | + |
| 6 | +## What are xpm packages? (xPacks) {#xpm-packages} |
| 7 | + |
| 8 | +**xpm packages**, abbreviated as **xPacks**, are versatile, |
| 9 | +language-neutral software packages. They have been successfully |
| 10 | +utilised in C/C++ projects. |
| 11 | + |
| 12 | +<details> |
| 13 | +<summary>What the heck are xpm packages (xPacks)? Please, do not introduce another package format!</summary> |
| 14 | + |
| 15 | +Although the initial appearance may seem complex, utilising |
| 16 | +xpm packages is, in fact, straightforward. |
| 17 | +The design rationale is to automate frequent |
| 18 | +operations that occur during software development, such as the |
| 19 | +installation of |
| 20 | +dependencies, and to ensure reproducibility. |
| 21 | + |
| 22 | +These packages are managed by **[xpm](https://xpack.github.io/xpm/)** |
| 23 | +(the xPack Project Manager), |
| 24 | +a programme that complements the **[npm](https://docs.npmjs.com/cli/)** CLI |
| 25 | +(the popular JavaScript package manager), with new language-neutral features. |
| 26 | + |
| 27 | +The xPacks Framework **does NOT introduce a new package format**; instead, |
| 28 | +it uses **the same format as npm packages**, which is a collection of |
| 29 | +files/folders and a `package.json` file with the package metadata. |
| 30 | + |
| 31 | +**xpm** can install packages from the |
| 32 | +same repositories as **npm**, whether public or private. |
| 33 | + |
| 34 | +The packages (usually regular archives, but also git repositories), |
| 35 | +are extracted into separate folders within the project. |
| 36 | + |
| 37 | +Based on the content, there are two types of xpm packages: |
| 38 | + |
| 39 | +- packages with source libraries (**source** xpm packages) |
| 40 | +- packages with executables, usually platform-specific binary |
| 41 | +tools (**binary** xpm packages) |
| 42 | + |
| 43 | +**Source xpm packages** are regular npm packages that include **library |
| 44 | +source files**, typically in **C/C++**, though there are no language |
| 45 | +restrictions. |
| 46 | + |
| 47 | +**Binary xpm packages** are also regular npm packages, but with minimal |
| 48 | +content, typically just the `package.json` file. Since these packages |
| 49 | +provide executables for multiple platforms, some of which are quite |
| 50 | +large, it is not practical to include all binaries within the npm |
| 51 | +package itself. Instead, the `package.json` file contains references |
| 52 | +(URLs) to platform-specific binary archives (e.g., `.tar.gz` for Unix or |
| 53 | +`.zip` for Windows). |
| 54 | + |
| 55 | +These archives are also expanded along with the package metadata. |
| 56 | +Links/forwarders to |
| 57 | +these executables are created in a `.bin` folder, |
| 58 | +eliminating the need to add multiple folders to the `PATH`. |
| 59 | + |
| 60 | +In summary, xpm packages can enhance and automate the installation |
| 61 | +process for source libraries and tools. |
| 62 | + |
| 63 | +In summary, xpm packages can streamline and automate the installation |
| 64 | +process for source libraries and tools. Further details are available on the |
| 65 | +[xpm Concepts](https://xpack.github.io/xpm/docs/guide/concepts/) page. |
| 66 | + |
| 67 | +</details> |
0 commit comments