fontist 2.1.1 → 2.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2805581df1364005181f92bd7c897fe641deb6231a2b95d40753c3cb8157a98f
4
- data.tar.gz: bb9e6d7daedf79aedabf7a8f485739d2ef7639d1c5469bbe2d914ad3b5e3111b
3
+ metadata.gz: b50fa7f2d919278a80d47cc5c35942960903a5ed586fc37c0cf21b944a76df1e
4
+ data.tar.gz: cc98d5a18b0e00e62a8ca5f41bd54645e3cf2e92f600d4a91c7ceb79c3110bf5
5
5
  SHA512:
6
- metadata.gz: 4bbd444d044c539b6548da83a719b274d4abe0d2af85f6490c48a5e82b9676d7f8b54ad9e8f38a306cc535476d37e84fc616ec8d1859f695e8af969984f40f6e
7
- data.tar.gz: 1893ffb8d4179ad1dd70bb92ed12dcee3ac7aab0c8337f4faff6c7515e806ee6fb2b9ad975710fafb9efec8b272dc32e7a45e0e3983f04c86ccc0df6cf344171
6
+ metadata.gz: a641b85c69158cbc1430407d0c72c5a480f96b6e77a500834691a579591d1d448c522fa65307c28597b5082bec3a4a6d83913a09dc7066eb533732b9f7dfa8fe
7
+ data.tar.gz: ac31ba8b42034ec098178b6db77f3d35325d81455b0c98d979ec98975ed2d93cf80a40dbb6e7f3f721e8ddd9925ca4ed9b2c9088b06eb88cb27585687ff06dc8
@@ -1,4 +1,8 @@
1
1
  name: deploy-pages
2
+
3
+ permissions:
4
+ contents: read
5
+
2
6
  on:
3
7
  push:
4
8
  branches: "main"
@@ -10,9 +14,11 @@ on:
10
14
  - .github/**
11
15
  - "!.github/workflows/deploy-pages.yml"
12
16
  workflow_dispatch:
17
+
13
18
  concurrency:
14
19
  group: ${{ github.workflow }}
15
20
  cancel-in-progress: true
21
+
16
22
  jobs:
17
23
  deploy-pages:
18
24
  environment:
@@ -0,0 +1,287 @@
1
+ name: formulas-auto-update-test
2
+
3
+ on:
4
+ push:
5
+ branches: [ main ]
6
+ pull_request:
7
+ workflow_dispatch:
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ # Cancel in-progress runs for the same workflow and branch
13
+ concurrency:
14
+ group: '${{ github.workflow }}-${{ github.head_ref || github.ref_name }}'
15
+ cancel-in-progress: true
16
+
17
+ env:
18
+ BUNDLER_VER: latest
19
+
20
+ jobs:
21
+ # This job tests that fonts can be installed WITHOUT explicit `fontist update`.
22
+ # This verifies the lazy initialization feature works correctly on all platforms.
23
+ #
24
+ # Lazy initialization ensures formulas are auto-downloaded on first access,
25
+ # fixing the issue where CI workflows failed because formulas weren't available.
26
+ test-formulas-auto-update:
27
+ name: Formulas Auto-Update Test (${{ matrix.os }})
28
+ runs-on: ${{ matrix.os }}
29
+
30
+ strategy:
31
+ fail-fast: false
32
+ matrix:
33
+ os: [ubuntu-latest, macos-latest, windows-latest]
34
+ # Test on all platforms to ensure lazy initialization works everywhere
35
+ # macOS: STIX Two Math is pre-installed, but we still test the mechanism
36
+ # Linux/Windows: No pre-installed fonts, tests full lazy initialization
37
+
38
+ steps:
39
+ - name: Checkout
40
+ uses: actions/checkout@v4
41
+
42
+ - name: Setup Ruby
43
+ uses: ruby/setup-ruby@v1
44
+ with:
45
+ ruby-version: '3.3'
46
+ rubygems: latest
47
+ bundler: ${{ env.BUNDLER_VER }}
48
+ bundler-cache: true
49
+
50
+ - name: Verify fontist installation
51
+ shell: bash
52
+ run: |
53
+ echo "=== Fontist Version ==="
54
+ bundle exec fontist --version
55
+ echo ""
56
+ echo "=== Fontist Home Path ==="
57
+ echo "Fontist home: $HOME/.fontist"
58
+ echo "Formulas path: $HOME/.fontist/versions/v4/formulas"
59
+
60
+ # CRITICAL: Remove any existing formulas directory to simulate fresh CI environment
61
+ # This ensures we're testing lazy initialization from a clean state
62
+ - name: Remove existing formulas directory (simulate fresh CI)
63
+ shell: bash
64
+ run: |
65
+ echo "=== Simulating Fresh CI Environment ==="
66
+ echo "Removing any existing formulas directory..."
67
+ if [ -d "$HOME/.fontist/versions/v4/formulas" ]; then
68
+ echo " ✓ Found existing formulas directory, removing..."
69
+ rm -rf "$HOME/.fontist/versions/v4/formulas"
70
+ echo " ✓ Formulas directory removed"
71
+ else
72
+ echo " ✓ No existing formulas directory (clean state)"
73
+ fi
74
+ echo ""
75
+ echo "Verifying formulas directory does not exist:"
76
+ if [ -d "$HOME/.fontist/versions/v4/formulas" ]; then
77
+ echo " ✗ ERROR: Formulas directory still exists!"
78
+ exit 1
79
+ else
80
+ echo " ✓ Confirmed: Formulas directory does not exist"
81
+ fi
82
+
83
+ - name: Verify formulas directory doesn't exist before test
84
+ shell: bash
85
+ run: |
86
+ echo "=== Pre-test State Verification ==="
87
+ echo "Checking formulas directory status:"
88
+ FORMULAS_DIR="$HOME/.fontist/versions/v4/formulas/Formulas"
89
+ if [ -d "$FORMULAS_DIR" ]; then
90
+ echo " ✗ ERROR: Formulas directory exists at $FORMULAS_DIR"
91
+ echo " This will invalidate the test!"
92
+ exit 1
93
+ else
94
+ echo " ✓ Formulas directory does not exist (as expected)"
95
+ fi
96
+ echo ""
97
+ echo "Listing .fontist directory contents (if any):"
98
+ ls -la "$HOME/.fontist/" 2>/dev/null || echo " (No .fontist directory yet)"
99
+ echo ""
100
+ echo "Listing versions directory (if any):"
101
+ ls -la "$HOME/.fontist/versions/" 2>/dev/null || echo " (No versions directory yet)"
102
+
103
+ # CRITICAL: Remove formulas directory again right before install test
104
+ # This is necessary because bundler-cache may restore .fontist directory
105
+ - name: Force remove formulas directory before test
106
+ shell: bash
107
+ run: |
108
+ echo "=== Force removing formulas directory before test ==="
109
+ rm -rf "$HOME/.fontist/versions/v4/formulas"
110
+ echo "✓ Formulas directory removed"
111
+ echo ""
112
+ echo "Verifying removal:"
113
+ if [ -d "$HOME/.fontist/versions/v4/formulas" ]; then
114
+ echo " ✗ ERROR: Formulas directory still exists!"
115
+ exit 1
116
+ else
117
+ echo " ✓ Formulas directory successfully removed"
118
+ fi
119
+
120
+ # CRITICAL TEST: Install Andale Mono WITHOUT running `fontist update` first
121
+ # Andale Mono is NOT pre-installed on any platform (macOS/Linux/Windows),
122
+ # so this properly tests lazy initialization on ALL platforms.
123
+ # Unlike STIX Two Math which is pre-installed on macOS.
124
+ - name: Install Andale Mono (WITHOUT fontist update)
125
+ shell: bash
126
+ run: |
127
+ echo "========================================================================="
128
+ echo " CRITICAL TEST: Lazy Initialization"
129
+ echo "========================================================================="
130
+ echo ""
131
+ echo "This test installs Andale Mono WITHOUT running 'fontist update' first."
132
+ echo "Andale Mono is NOT pre-installed on any platform, ensuring we test"
133
+ echo "lazy initialization on ALL platforms (macOS/Linux/Windows)."
134
+ echo ""
135
+ echo "Platform: ${{ matrix.os }}"
136
+ echo "Ruby: $(ruby --version)"
137
+ echo ""
138
+ echo "--- Step 1: Verify formulas don't exist yet ---"
139
+ FORMULAS_DIR="$HOME/.fontist/versions/v4/formulas/Formulas"
140
+ if [ -d "$FORMULAS_DIR" ]; then
141
+ echo " ✗ ERROR: Formulas directory already exists!"
142
+ echo " This invalidates the test - lazy initialization won't be tested."
143
+ exit 1
144
+ else
145
+ echo " ✓ Formulas directory does not exist (as expected)"
146
+ fi
147
+ echo ""
148
+
149
+ echo "--- Step 2: Install Andale Mono (should trigger lazy update) ---"
150
+ echo "Running: bundle exec fontist install 'Andale Mono' --accept-all-licenses --force"
151
+ echo ""
152
+ if bundle exec fontist install "Andale Mono" --accept-all-licenses --force 2>&1; then
153
+ echo ""
154
+ echo "✓ SUCCESS: Andale Mono installation completed"
155
+ INSTALL_SUCCESS=true
156
+ else
157
+ EXIT_CODE=$?
158
+ echo ""
159
+ echo "✗ FAILED: Andale Mono installation failed with exit code: $EXIT_CODE"
160
+ INSTALL_SUCCESS=false
161
+ fi
162
+ echo ""
163
+
164
+ echo "--- Step 3: Verify formulas were auto-downloaded ---"
165
+ if [ -d "$FORMULAS_DIR" ]; then
166
+ echo " ✓ Formulas directory was created (lazy initialization worked!)"
167
+ echo ""
168
+ echo " Formulas directory contents (first 20 entries):"
169
+ ls -1 "$FORMULAS_DIR" | head -20
170
+ else
171
+ echo " ✗ ERROR: Formulas directory was NOT created!"
172
+ echo " This indicates lazy initialization FAILED."
173
+ INSTALL_SUCCESS=false
174
+ fi
175
+ echo ""
176
+
177
+ echo "--- Step 4: Verify Andale Mono formula exists ---"
178
+ ANDALE_FORMULA="$FORMULAS_DIR/andale.yml"
179
+ if [ -f "$ANDALE_FORMULA" ]; then
180
+ echo " ✓ Andale Mono formula exists at andale.yml"
181
+ else
182
+ echo " ✗ ERROR: Andale Mono formula NOT found!"
183
+ echo " Expected: $ANDALE_FORMULA"
184
+ INSTALL_SUCCESS=false
185
+ fi
186
+ echo ""
187
+
188
+ echo "--- Step 5: Verify Andale Mono font was installed ---"
189
+ # Check if font file exists
190
+ FONT_PATH=$(find "$HOME/.fontist/fonts" -name "*Andale*" -type f 2>/dev/null | head -1)
191
+ if [ -n "$FONT_PATH" ]; then
192
+ echo " ✓ Andale Mono font file found:"
193
+ echo " $FONT_PATH"
194
+ else
195
+ echo " ⚠ WARNING: Andale Mono font file not found in .fontist/fonts"
196
+ echo " Checking with 'fontist list'..."
197
+ if bundle exec fontist list "Andale Mono" 2>&1 | grep -q "Andale"; then
198
+ echo " ✓ Font is discoverable via fontist list"
199
+ else
200
+ echo " ✗ ERROR: Font is NOT discoverable"
201
+ INSTALL_SUCCESS=false
202
+ fi
203
+ fi
204
+ echo ""
205
+
206
+ echo "--- Step 6: Final Result ---"
207
+ if [ "$INSTALL_SUCCESS" = true ]; then
208
+ echo "========================================================================="
209
+ echo " ✓✓✓ TEST PASSED: Lazy initialization works correctly ✓✓✓"
210
+ echo "========================================================================="
211
+ echo ""
212
+ echo "Andale Mono was successfully installed WITHOUT running 'fontist update'"
213
+ echo "This confirms that formulas are auto-downloaded on first access."
214
+ else
215
+ echo "========================================================================="
216
+ echo " ✗✗✗ TEST FAILED: Lazy initialization not working ✗✗✗"
217
+ echo "========================================================================="
218
+ echo ""
219
+ echo "Andale Mono installation failed or formulas were not auto-downloaded."
220
+ echo "This indicates a regression in the lazy initialization feature."
221
+ exit 1
222
+ fi
223
+
224
+ - name: Debug output on failure
225
+ if: failure()
226
+ shell: bash
227
+ run: |
228
+ echo "=== Debug Information ==="
229
+ echo ""
230
+ echo "Fontist version:"
231
+ bundle exec fontist --version || true
232
+ echo ""
233
+ echo ".fontist directory structure:"
234
+ find "$HOME/.fontist" -type d 2>/dev/null || true
235
+ echo ""
236
+ echo "Formulas directory:"
237
+ ls -la "$HOME/.fontist/versions/v4/formulas/" 2>/dev/null || echo " (Does not exist)"
238
+ echo ""
239
+ echo "Formulas/Formulas directory:"
240
+ ls -la "$HOME/.fontist/versions/v4/formulas/Formulas/" 2>/dev/null || echo " (Does not exist)"
241
+ echo ""
242
+ echo "Fonts directory:"
243
+ ls -la "$HOME/.fontist/fonts/" 2>/dev/null || echo " (Does not exist)"
244
+ echo ""
245
+ echo "Andale Mono formula file:"
246
+ cat "$HOME/.fontist/versions/v4/formulas/Formulas/andale.yml" 2>/dev/null || echo " (Does not exist)"
247
+
248
+ # Additional test: Verify that explicit 'fontist update' still works
249
+ test-explicit-update-still-works:
250
+ name: Explicit fontist update still works
251
+ runs-on: ubuntu-latest
252
+
253
+ steps:
254
+ - name: Checkout
255
+ uses: actions/checkout@v4
256
+
257
+ - name: Setup Ruby
258
+ uses: ruby/setup-ruby@v1
259
+ with:
260
+ ruby-version: '3.3'
261
+ rubygems: latest
262
+ bundler: ${{ env.BUNDLER_VER }}
263
+ bundler-cache: true
264
+
265
+ - name: Remove existing formulas directory
266
+ shell: bash
267
+ run: rm -rf "$HOME/.fontist/versions/v4/formulas"
268
+
269
+ - name: Run explicit fontist update
270
+ shell: bash
271
+ run: |
272
+ echo "=== Testing explicit 'fontist update' ==="
273
+ echo ""
274
+ echo "Running: bundle exec fontist update"
275
+ bundle exec fontist update
276
+ echo ""
277
+ echo "✓ Explicit update completed"
278
+ echo ""
279
+ echo "Verifying formulas directory exists:"
280
+ FORMULAS_DIR="$HOME/.fontist/versions/v4/formulas/Formulas"
281
+ if [ -d "$FORMULAS_DIR" ]; then
282
+ echo " ✓ Formulas directory exists"
283
+ echo " Formula count: $(ls -1 "$FORMULAS_DIR" | wc -l)"
284
+ else
285
+ echo " ✗ ERROR: Formulas directory does not exist"
286
+ exit 1
287
+ fi
@@ -3,12 +3,16 @@ name: post-rake
3
3
  on:
4
4
  workflow_dispatch:
5
5
  workflow_run:
6
- workflows:
6
+ workflows:
7
7
  - rake
8
8
  - rake-metanorma
9
9
  types:
10
10
  - completed
11
11
 
12
+ permissions:
13
+ contents: write
14
+ packages: write
15
+
12
16
  jobs:
13
17
  post-rake:
14
18
  if: ${{ github.event.workflow_run.conclusion == 'success' && contains(github.ref, 'refs/tags/v') }}
@@ -6,6 +6,9 @@ on:
6
6
  tags: [ 'v*' ]
7
7
  pull_request:
8
8
 
9
+ permissions:
10
+ contents: read
11
+
9
12
  concurrency:
10
13
  group: '${{ github.workflow }}-${{ github.job }}-${{ github.head_ref || github.ref_name }}'
11
14
  cancel-in-progress: true
@@ -15,6 +18,7 @@ env:
15
18
 
16
19
  jobs:
17
20
  prepare:
21
+ # commented for https://github.com/fontist/fontist/issues/428#issuecomment-3992198584
18
22
  uses: metanorma/ci/.github/workflows/prepare-rake.yml@main
19
23
 
20
24
  metanorma:
@@ -31,11 +35,11 @@ jobs:
31
35
  matrix: ${{ fromJson(needs.prepare.outputs.matrix) }}
32
36
 
33
37
  steps:
34
- - uses: actions/checkout@v4
38
+ - uses: actions/checkout@v6
35
39
  with:
36
40
  repository: metanorma/metanorma
37
41
 
38
- - uses: actions/checkout@master
42
+ - uses: actions/checkout@v6
39
43
  with:
40
44
  path: "fontist"
41
45
 
@@ -48,6 +52,23 @@ jobs:
48
52
  bundler: ${{ env.BUNDLER_VER }}
49
53
  bundler-cache: true
50
54
 
51
- - uses: metanorma/metanorma-build-scripts/inkscape-setup-action@main
55
+ - uses: metanorma/ci/inkscape-setup-action@main
56
+
57
+ - name: Configure Git credentials
58
+ env:
59
+ GIT_TOKEN: ${{ secrets.FONTIST_CI_PAT_TOKEN }}
60
+ run: |
61
+ git config --global user.name 'Fontist CI'
62
+ git config --global user.email 'fontist@ribose.com'
63
+ git config --global credential.helper store
64
+ echo "https://fontist-ci:${GIT_TOKEN}@github.com" > ~/.git-credentials
65
+ shell: bash
66
+
67
+ - run: |
68
+ bundle exec fontist update
69
+ bundle exec fontist repo setup metanorma https://github.com/metanorma/fontist-formulas-private.git
70
+ bundle exec fontist repo update metanorma
71
+ shell: bash
52
72
 
53
73
  - run: bundle exec rake
74
+ shell: bash
@@ -10,6 +10,9 @@ on:
10
10
  paths-ignore:
11
11
  - '**.adoc'
12
12
 
13
+ permissions:
14
+ contents: read
15
+
13
16
  concurrency:
14
17
  group: '${{ github.workflow }}-${{ github.job }}-${{ github.head_ref || github.ref_name }}'
15
18
  cancel-in-progress: true
@@ -45,7 +48,7 @@ jobs:
45
48
  run: |
46
49
  git clone --branch v4 --depth 1 https://github.com/fontist/formulas.git C:\temp\fontist\versions\v4\formulas
47
50
  shell: powershell
48
-
51
+
49
52
  - uses: actions/checkout@v4
50
53
 
51
54
  - uses: ruby/setup-ruby@v1
@@ -12,10 +12,16 @@ on:
12
12
  repository_dispatch:
13
13
  types: [ do-release ]
14
14
 
15
+ permissions:
16
+ contents: read
17
+ packages: write
18
+ id-token: write
19
+
15
20
  jobs:
16
21
  release:
17
22
  permissions:
18
23
  contents: write
24
+ packages: write
19
25
  id-token: write
20
26
  uses: fontist/support/.github/workflows/release.yml@main
21
27
  with:
@@ -0,0 +1,36 @@
1
+ name: release
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ next_version:
7
+ description: |
8
+ Next release version. Possible values: x.y.z, major, minor, patch (or pre|rc|etc).
9
+ Also, you can pass 'skip' to skip 'git tag' and do 'gem push' for the current version
10
+ required: true
11
+ default: 'skip'
12
+ repository_dispatch:
13
+ types: [ do-release ]
14
+
15
+ permissions:
16
+ contents: read
17
+ <<<<<<< HEAD
18
+ =======
19
+ packages: write
20
+ <<<<<<< Updated upstream
21
+ =======
22
+ id-token: write
23
+ >>>>>>> Stashed changes
24
+ >>>>>>> 35f3c7d (fix: release gha)
25
+
26
+ jobs:
27
+ release:
28
+ permissions:
29
+ contents: write
30
+ packages: write
31
+ id-token: write
32
+ uses: fontist/support/.github/workflows/release.yml@main
33
+ with:
34
+ next_version: ${{ github.event.inputs.next_version }}
35
+ secrets:
36
+ rubygems-api-key: ${{ secrets.FONTIST_CI_RUBYGEMS_API_KEY }}
@@ -5,6 +5,10 @@ on:
5
5
  types: [ do-release ]
6
6
  workflow_dispatch:
7
7
 
8
+ permissions:
9
+ contents: read
10
+ packages: write
11
+
8
12
  concurrency:
9
13
  group: '${{ github.workflow }}-${{ github.job }}-${{ github.head_ref || github.ref_name }}'
10
14
  cancel-in-progress: true
data/.gitignore CHANGED
@@ -9,12 +9,13 @@
9
9
  Gemfile.lock
10
10
 
11
11
  # fonts
12
- # /spec/fixtures/fonts/*
13
- # /spec/fixtures/fonts/DejaVuSerif.ttf
14
- # /spec/fixtures/formulas/
15
- # /spec/fixtures/*
16
- # !/spec/fixtures/system.yml
17
- # !/spec/fixtures/google_fonts/
12
+ /spec/fixtures/fonts/*
13
+ /spec/fixtures/fonts/DejaVuSerif.ttf
14
+ /spec/fixtures/fonts/Rupali.ttf
15
+ /spec/fixtures/formulas/
16
+ /spec/fixtures/*
17
+ !/spec/fixtures/system.yml
18
+ !/spec/fixtures/fonts/corrupt/*
18
19
 
19
20
  # rspec failure tracking
20
21
  .rspec_status
data/README.adoc CHANGED
@@ -69,6 +69,106 @@ legacy `ttfunk` and `extract_ttc` gems), and `marcel` for MIME type detection
69
69
  (replacing `mime-types`). These changes improve cross-platform compatibility
70
70
  and eliminate external binary dependencies.
71
71
 
72
+ === Prerequisites
73
+
74
+ Some of Fontist's dependencies require native compilation during installation.
75
+ The following build tools are required depending on your platform.
76
+
77
+ ==== Ubuntu/Debian
78
+
79
+ [source,sh]
80
+ ----
81
+ sudo apt-get install build-essential ruby-dev git
82
+ ----
83
+
84
+ * `build-essential` provides `gcc` and `g++` compilers needed for native gem extensions
85
+ * `ruby-dev` provides Ruby headers required for gem compilation
86
+ * `git` is required for `fontist update` and `fontist repo` commands
87
+
88
+ ==== Fedora/RHEL/CentOS
89
+
90
+ [source,sh]
91
+ ----
92
+ sudo dnf install gcc gcc-c++ make ruby-devel git
93
+ ----
94
+
95
+ For RHEL/CentOS 7 or earlier, use `yum` instead of `dnf`.
96
+
97
+ ==== macOS
98
+
99
+ [source,sh]
100
+ ----
101
+ xcode-select --install
102
+ ----
103
+
104
+ This installs the Xcode Command Line Tools which include:
105
+
106
+ * `clang` compiler (compatible with gcc/g++)
107
+ * `git` command-line tool
108
+ * Required headers and libraries for native gem compilation
109
+
110
+ ==== Windows
111
+
112
+ 1. Install Ruby using https://rubyinstaller.org/downloads/[RubyInstaller] *with DevKit*
113
+ (select the "Ruby+Devkit" version)
114
+
115
+ 2. After installation, run the following in a command prompt to set up MSYS2:
116
+ +
117
+ [source,cmd]
118
+ ----
119
+ ridk install
120
+ ----
121
+ +
122
+ Select option 3 (MSYS2 and MINGW development toolchain) when prompted.
123
+
124
+ 3. Install https://git-scm.com/download/win[Git for Windows]
125
+
126
+ ==== Optional: Fontconfig (Linux)
127
+
128
+ On Linux systems, if you want to use `fontist fontconfig update` to make Fontist
129
+ fonts available to other applications, install fontconfig:
130
+
131
+ [source,sh]
132
+ ----
133
+ # Ubuntu/Debian
134
+ sudo apt-get install fontconfig
135
+
136
+ # Fedora/RHEL/CentOS
137
+ sudo dnf install fontconfig
138
+ ----
139
+
140
+ ==== Why are build tools needed?
141
+
142
+ Fontist depends on several gems that include native C/C++ extensions:
143
+
144
+ [cols="1,1,2"]
145
+ |===
146
+ |Gem |Compiler |Purpose
147
+
148
+ |`json`
149
+ |gcc
150
+ |JSON processing
151
+
152
+ |`brotli` (via fontisan)
153
+ |gcc
154
+ |WOFF2 font decompression
155
+
156
+ |`seven-zip` (via excavate)
157
+ |g++
158
+ |7z archive extraction
159
+
160
+ |`libmspack` (via excavate)
161
+ |gcc
162
+ |CAB/CHM archive extraction
163
+
164
+ |`ffi-libarchive-binary` (via excavate)
165
+ |gcc
166
+ |Archive extraction (zip, tar, etc.)
167
+ |===
168
+
169
+ NOTE: Some gems like `nokogiri` and `ffi` provide prebuilt binaries for common
170
+ platforms, so they typically don't require compilation.
171
+
72
172
 
73
173
  == Using the command-line interface (CLI)
74
174