# バッチ設計書 17-libuv-static.pc.in

## 概要

本ドキュメントは、libuvプロジェクトの静的ライブラリ用pkg-config設定テンプレートファイル（`libuv-static.pc.in`）のバッチ設計書である。Autotools（configure）によるビルド時にプレースホルダが置換され、libuvの静的ライブラリに対するパッケージ設定情報（`libuv-static.pc`）を生成する。

### 本バッチの処理概要

libuv-static.pc.inは、静的リンク用のpkg-config定義ファイルテンプレートである。共有ライブラリ版の `libuv.pc.in`（No.16）とは異なり、Libs行で `-l:libuv.a` を指定し、静的ライブラリへの直接リンクを行う設定を提供する。

**業務上の目的・背景**：組み込みシステムやスタンドアロンバイナリの配布など、共有ライブラリの使用が適さない環境では静的リンクが必要となる。libuv-static.pcにより、外部プロジェクトが `pkg-config --libs libuv-static` で静的リンクに必要なフラグを取得でき、プラットフォーム固有の依存ライブラリ（pthread, dl, rt等）も自動的に含まれる。

**バッチの実行タイミング**：Autotoolsの `configure` スクリプト実行時に自動的にテンプレート置換が行われる。`make install` 実行時に生成された `libuv-static.pc` がシステムのpkg-configディレクトリにインストールされる。

**主要な処理内容**：
1. configureスクリプトによる `@prefix@` 等のプレースホルダ置換
2. 静的ライブラリ（libuv.a）へのリンクフラグ定義（`-L${libdir} -l:libuv.a @LIBS@`）
3. インクルードパスのCflags定義（`-I${includedir}`）
4. パッケージメタデータ（Name, Version, Description, URL）の設定

**前後の処理との関連**：本テンプレートは `configure.ac`（No.2）で定義されたAC_CONFIGにより処理される。`libuv.pc.in`（No.16）が共有ライブラリ版の同等テンプレートである。

**影響範囲**：libuvを静的リンクで利用する全ての外部プロジェクトのビルドに影響する。

## バッチ種別

パッケージング（pkg-config設定テンプレート置換）

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | configureスクリプト実行時 |
| 実行時刻 | ビルド時 |
| 実行曜日 | 該当なし |
| 実行日 | 該当なし |
| トリガー | ./configure 実行（Autotools） |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| Autotoolsビルド | configure.acに基づくconfigureスクリプトが生成・実行されること |
| テンプレートファイル | libuv-static.pc.in がプロジェクトルートに存在すること |

### 実行可否判定

configureスクリプトの `AC_CONFIG_FILES` ディレクティブにより自動的に処理される。Autotoolsビルドでない場合（CMake等）は本テンプレートは使用されない。

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| @prefix@ | string | Yes | /usr/local | インストール先プレフィックス |
| @libdir@ | string | Yes | ${prefix}/lib | ライブラリインストール先 |
| @includedir@ | string | Yes | ${prefix}/include | ヘッダファイルインストール先 |
| @PACKAGE_VERSION@ | string | Yes | configure.acから取得 | libuvパッケージバージョン |
| @LIBS@ | string | Yes | プラットフォーム依存 | プラットフォーム固有の依存ライブラリフラグ |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| configure.ac | Autoconf設定 | バージョン情報およびプラットフォーム設定の定義元 |
| libuv-static.pc.in | テンプレート | 静的ライブラリ用pkg-configテンプレートファイル |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| libuv-static.pc | pkg-config設定ファイル | configureにより生成される静的ライブラリ用pkg-configファイル |

### 出力ファイル仕様

| 項目 | 内容 |
|-----|------|
| ファイル名 | libuv-static.pc |
| 出力先 | ビルドディレクトリ（make install時に ${libdir}/pkgconfig/ にコピー） |
| 文字コード | UTF-8 |
| 区切り文字 | 該当なし（key=value形式） |

生成される libuv-static.pc の内容例:
```
prefix=/usr/local
exec_prefix=${prefix}
libdir=/usr/local/lib
includedir=/usr/local/include

Name: libuv-static
Version: 1.52.1
Description: multi-platform support library with a focus on asynchronous I/O.
URL: http://libuv.org/

Libs: -L${libdir} -l:libuv.a -lpthread -ldl -lrt
Cflags: -I${includedir}
```

## 処理フロー

### 処理シーケンス

```
1. configure実行時のテンプレート処理
   └─ AC_CONFIG_FILESにlibuv-static.pcが指定されている
2. プレースホルダ置換
   └─ @prefix@ -> /usr/local (または--prefix指定値)
   └─ @libdir@ -> ${prefix}/lib (または--libdir指定値)
   └─ @includedir@ -> ${prefix}/include
   └─ @PACKAGE_VERSION@ -> configure.acで定義されたバージョン
   └─ @LIBS@ -> プラットフォーム固有の依存ライブラリ
3. libuv-static.pc ファイル出力
   └─ ビルドディレクトリにlibuv-static.pcを生成
4. make install時のインストール
   └─ ${libdir}/pkgconfig/libuv-static.pc にコピー
```

### フローチャート

```mermaid
flowchart TD
    A[./configure 実行] --> B[AC_CONFIG_FILESによるテンプレート処理]
    B --> C[libuv-static.pc.in読み込み]
    C --> D[プレースホルダ置換]
    D --> E[libuv-static.pc生成]
    E --> F{make install?}
    F -->|Yes| G[${libdir}/pkgconfig/にインストール]
    F -->|No| H[ビルドディレクトリに留まる]
```

## データベース操作仕様

### 操作別データベース影響一覧

本バッチはデータベースを使用しない。

| 処理 | 対象テーブル | 操作種別 | 概要 |
|-----|-------------|---------|------|
| 該当なし | - | - | - |

### テーブル別操作詳細

該当なし。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| configureエラー | テンプレート未検出 | libuv-static.pc.inが存在しない | リポジトリの完全性を確認 |
| configureエラー | プレースホルダ未解決 | AC_SUBST対象変数が未定義 | configure.acの設定を確認 |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | 0回 |
| リトライ間隔 | 該当なし |
| リトライ対象エラー | 該当なし |

### 障害時対応

1. テンプレート処理失敗：configure.acの `AC_CONFIG_FILES` にlibuv-static.pcが含まれているか確認する
2. pkg-config認識エラー：`PKG_CONFIG_PATH` にインストール先が含まれているか確認する
3. 静的リンクエラー：`@LIBS@` の置換値にプラットフォーム固有の依存ライブラリが正しく含まれているか確認する

## トランザクション仕様

| 項目 | 内容 |
|-----|------|
| トランザクション範囲 | 該当なし |
| コミットタイミング | 該当なし |
| ロールバック条件 | 該当なし |

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | 1ファイルの置換処理 |
| 目標処理時間 | 即時 |
| メモリ使用量上限 | 無視できる程度 |

## 排他制御

テンプレート処理はconfigureプロセスの一部として実行されるため、configure実行の排他制御に従う。

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| 開始ログ | configure実行時 | config.statusによるファイル生成メッセージ |
| 進捗ログ | 該当なし | - |
| 終了ログ | 該当なし | - |
| エラーログ | テンプレート処理失敗時 | configureエラーメッセージ |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| 該当なし | - | - |

## 備考

- `libuv.pc.in`（No.16）との主な違い：
  - Name: `libuv-static`（libuv.pc.inは `libuv`）
  - Libs: `-l:libuv.a`（静的ライブラリ直接指定。libuv.pc.inは `-luv`）
  - LIBUV_STATIC変数は定義されていない（libuv.pc.inにのみ存在）
- `-l:libuv.a` はGNU ld固有の記法であり、他のリンカでは動作しない可能性がある
- URLフィールドは `http://libuv.org/`（HTTP）で定義されている
- 静的リンク時は `@LIBS@` に含まれるプラットフォーム依存の全ライブラリがリンク対象となる
