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

## 概要

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

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

libuv.pc.inは、pkg-configシステムで使用するパッケージ定義ファイルのテンプレートである。configureスクリプト（Autotools）がビルド時にこのテンプレートを処理し、`@prefix@`、`@libdir@`、`@includedir@`、`@PACKAGE_VERSION@`、`@LIBS@` 等のプレースホルダを実際のインストール先パスやバージョン情報に置換して `libuv.pc` を生成する。

**業務上の目的・背景**：libuvを利用する外部プロジェクトが、`pkg-config --cflags libuv` や `pkg-config --libs libuv` コマンドでコンパイルフラグやリンカフラグを取得できるようにする必要がある。これにより、ユーザはlibuvのインストール先やプラットフォーム固有の依存ライブラリを意識することなく、ビルドシステムに組み込むことができる。

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

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

**前後の処理との関連**：本テンプレートは `configure.ac`（No.2）で定義されたAC_CONFIGにより処理される。CMakeビルドの場合は `CMakeLists.txt`（No.4）から別途 `.pc` ファイルが生成される。`libuv-static.pc.in`（No.17）は静的ライブラリ専用の同等テンプレートである。

**影響範囲**：libuvをpkg-configで参照する全ての外部プロジェクトのビルドに影響する。

## バッチ種別

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

## 実行スケジュール

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

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| Autotoolsビルド | configure.acに基づくconfigureスクリプトが生成・実行されること |
| テンプレートファイル | libuv.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.pc.in | テンプレート | pkg-configテンプレートファイル |

## 出力仕様

### 出力データ

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

### 出力ファイル仕様

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

生成される libuv.pc の内容例:
```
prefix=/usr/local
exec_prefix=${prefix}
libdir=/usr/local/lib
includedir=/usr/local/include
LIBUV_STATIC=-L${libdir} -l:libuv.a -lpthread -ldl -lrt

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

Libs: -L${libdir} -luv -lpthread -ldl -lrt
Cflags: -I${includedir}
```

## 処理フロー

### 処理シーケンス

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

### フローチャート

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

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

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

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

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

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

該当なし。

## エラー処理

### エラーケース一覧

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

### リトライ仕様

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

### 障害時対応

1. テンプレート処理失敗：configure.acの `AC_CONFIG_FILES` にlibuv.pcが含まれているか確認する
2. pkg-config認識エラー：`PKG_CONFIG_PATH` にインストール先が含まれているか確認する

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

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

## パフォーマンス要件

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

## 排他制御

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

## ログ出力

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

## 監視・アラート

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

## 備考

- `LIBUV_STATIC` 変数は非標準のpkg-config変数であり、静的リンク時のフラグを提供する。`pkg-config --variable=LIBUV_STATIC libuv` で取得可能
- Libs行の `@LIBS@` はプラットフォーム依存であり、Linux環境では `-lpthread -ldl -lrt` 等に置換される
- URLフィールドは `http://libuv.org/`（HTTP）で定義されている
- 静的ライブラリ専用のpkg-config設定は `libuv-static.pc.in`（No.17）で別途提供される
