オライリーの「GNU Make 第3版 日本語版」の PDF 版を入手する

## はじめに

オライリーから発行されている「GNU Make 第3版 日本語版」は、[GNU Free Documentation License](https://www.gnu.org/licenses/fdl.html) に従い、PDFで配布されています。

https://www.oreilly.co.jp/library/4873112699/

（他にも [O'Reilly Library](https://www.oreilly.co.jp/library/) として「オープンソースソフトウェアの育て方」「オープンソースソフトウェア」が公開されているみたい）

## GNU Make 第3版のPDFをダウンロード

上記のページから PDF を１つづつダウンロードします。

手動でダウンロードしてきてもいいけど、今回は curl コマンドを使いました。

```:paths.txt
mae.pdf
maegaki.pdf
contents.pdf
ch01.pdf
ch02.pdf
ch03.pdf
ch04.pdf
ch05.pdf
ch06.pdf
ch07.pdf
ch08.pdf
ch09.pdf
ch10.pdf
ch11.pdf
ch12.pdf
appA.pdf
appB.pdf
appC.pdf
index.pdf
ato.pdf
```

```shell
for url_path in $(cat paths.txt) ; do
    curl -sO "https://www.oreilly.co.jp/library/4873112699/${url_path}"
    sleep 1
done
```

`sleep 1` は、サーバにあまり負荷を掛けたくないな、と思ったので。

## PDF の結合

この PDF は章ごとに分かれているため、個人で使う場合にはまとめて 1 つの PDF にしておきたいな、と思いました。
PDF の結合自体はいろいろなコマンドでできるみたいですが、今回は pdftk を使ってみました。

Ubuntu の場合にはインストールは以下のような感じ。

```shell-session
sudo apt install pdftk
```

それ以外の OS ではそれなりの方法でインストールが必要だと思います。

では pdftk コマンドで結合します。

```shell
pdftk $(cat paths.txt) cat output output.pdf
```

`output.pdf` というファイル名で出力されました。

## しおり情報の追加

このまま使ってもいいけど、せっかくなのでしおり情報も追加してみます。

以下のファイルを UTF-8 で保存します。

```:bookmark.txt
BookmarkBegin
BookmarkTitle: 表紙
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
BookmarkTitle: まえがき等
BookmarkLevel: 2
BookmarkPageNumber: 7
BookmarkBegin
BookmarkTitle: 目次
BookmarkLevel: 2
BookmarkPageNumber: 17
BookmarkBegin
BookmarkTitle: 1章 簡単なメイクファイルを書いてみよう
BookmarkLevel: 1
BookmarkPageNumber: 22
BookmarkBegin
BookmarkTitle: 2章 ルール
BookmarkLevel: 1
BookmarkPageNumber: 29
BookmarkBegin
BookmarkTitle: 3章 変数とマクロ
BookmarkLevel: 1
BookmarkPageNumber: 59
BookmarkBegin
BookmarkTitle: 4章 関数
BookmarkLevel: 1
BookmarkPageNumber: 80
BookmarkBegin
BookmarkTitle: 5章 コマンド
BookmarkLevel: 1
BookmarkPageNumber: 108
BookmarkBegin
BookmarkTitle: 6章 大きなプロジェクトの管理
BookmarkLevel: 1
BookmarkPageNumber: 126
BookmarkBegin
BookmarkTitle: 7章 ポータブルなmakefile
BookmarkLevel: 1
BookmarkPageNumber: 148
BookmarkBegin
BookmarkTitle: 8章 CとC++
BookmarkLevel: 1
BookmarkPageNumber: 159
BookmarkBegin
BookmarkTitle: 9章 Java
BookmarkLevel: 1
BookmarkPageNumber: 179
BookmarkBegin
BookmarkTitle: 10章 makeの性能改善
BookmarkLevel: 1
BookmarkPageNumber: 199
BookmarkBegin
BookmarkTitle: 11章 makefileの実例
BookmarkLevel: 1
BookmarkPageNumber: 213
BookmarkBegin
BookmarkTitle: 12章 makefileのデバッグ
BookmarkLevel: 1
BookmarkPageNumber: 248
BookmarkBegin
BookmarkTitle: 付録A makeの実行
BookmarkLevel: 1
BookmarkPageNumber: 265
BookmarkBegin
BookmarkTitle: 付録B 限界を超えて
BookmarkLevel: 1
BookmarkPageNumber: 268
BookmarkBegin
BookmarkTitle: 付録C GNU Free Documentation License――GNU Project――Free Software Foundation (FSF)
BookmarkLevel: 1
BookmarkPageNumber: 280
BookmarkBegin
BookmarkTitle: 索引
BookmarkLevel: 1
BookmarkPageNumber: 286
BookmarkBegin
BookmarkTitle: 奥付
BookmarkLevel: 1
BookmarkPageNumber: 296
```

面倒だったので、章単位のみです（節単位のしおりが欲しい人は、自分で頑張ってください）。

pdftk のしおり情報のフォーマットは以下が参考になると思います。

https://www.pdflabs.com/blog/export-and-import-pdf-bookmarks/

ちなみに、「まえがき等」というのは「監訳者まえがき」「まえがき」「第3版にむけて」をまとめているからです（雑な対応）。

さっきの `output.pdf` に、このしおり情報を追加して、`GNU Make 第3版.pdf` を作ってみます。

```shell
pdftk output.pdf update_info_utf8 bookmark.txt output "GNU Make 第3版.pdf"
```

完成しました！

個人利用は問題ないと思いますが、ご利用はライセンス（GFDL; GNU Free Documentation License）に従ってください。
詳細は上記の PDF の付録Cに書いてあります。
GFDL の日本語参考訳は以下で公開してくれているようです。

【日本語の参考訳(GFDL-1.2)】

https://doclicenses.opensource.jp/GFDL-1.2/fdl/fdl.ja.html

## 英語版 GNU Make 第3版の場合

<details><summary>クリックで開閉ができます</summary>

英語版も、基本的に日本語版と同じように作れます。

[英語版の GNU Make のページ](https://www.oreilly.com/openbook/make3/book/index.csp)からファイルをダウンロードします。

ちなみに、[Open Books](https://www.oreilly.com/openbook/) のページには他にもたくさんの無償提供の書籍があります（html 版も多いですが）。一番上のおサルさんの画像は、たまに目をパチクリさせます。かわいい。

```:paths.txt
cpyrt.pdf
toc.pdf
author_colo.pdf
part1.pdf
ch01.pdf
ch02.pdf
ch03.pdf
ch04.pdf
ch05.pdf
part2.pdf
ch06.pdf
ch07.pdf
ch08.pdf
ch09.pdf
ch10.pdf
ch11.pdf
ch12.pdf
part3.pdf
appa.pdf
appb.pdf
appc.pdf
inx.pdf
```

英語版には、前書きや後書き（奥付）などが無いようです。

```shell
for URL_PATH in $(cat paths.txt) ; do
    curl -sO "https://www.oreilly.com/openbook/make3/book/$URL_PATH"
    sleep 1
done
```

```shell
pdftk $(cat paths.txt) cat output output.pdf
```

```:bookmark.txt
BookmarkBegin
BookmarkTitle: License/Copyright
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
BookmarkTitle: Table of Contents
BookmarkLevel: 2
BookmarkPageNumber: 2
BookmarkBegin
BookmarkTitle: About the Author/Colophon
BookmarkLevel: 2
BookmarkPageNumber: 5
BookmarkBegin
BookmarkTitle: Part I. Basic Concepts
BookmarkLevel: 1
BookmarkPageNumber: 6
BookmarkBegin
BookmarkTitle: Chapter 1: How to write a Simple Makefile
BookmarkLevel: 2
BookmarkPageNumber: 7
BookmarkBegin
BookmarkTitle: Chapter 2: Rules
BookmarkLevel: 2
BookmarkPageNumber: 14
BookmarkBegin
BookmarkTitle: Chapter 3: Variables and Macros
BookmarkLevel: 2
BookmarkPageNumber: 45
BookmarkBegin
BookmarkTitle: Chapter 4: Functions
BookmarkLevel: 2
BookmarkPageNumber: 65
BookmarkBegin
BookmarkTitle: Chapter 5: Commands
BookmarkLevel: 2
BookmarkPageNumber: 92
BookmarkBegin
BookmarkTitle: Part II. Advanced and Specialized Topics
BookmarkLevel: 1
BookmarkPageNumber: 108
BookmarkBegin
BookmarkTitle: Chapter 6: Managing Large Projects
BookmarkLevel: 2
BookmarkPageNumber: 109
BookmarkBegin
BookmarkTitle: Chapter 7: Portable Makefiles
BookmarkLevel: 2
BookmarkPageNumber: 131
BookmarkBegin
BookmarkTitle: Chapter 8: C and C++
BookmarkLevel: 2
BookmarkPageNumber: 143
BookmarkBegin
BookmarkTitle: Chapter 9: Java
BookmarkLevel: 2
BookmarkPageNumber: 161
BookmarkBegin
BookmarkTitle: Chapter 10: Improving the Performance of make
BookmarkLevel: 2
BookmarkPageNumber: 184
BookmarkBegin
BookmarkTitle: Chapter 11: Example Makefiles
BookmarkLevel: 2
BookmarkPageNumber: 198
BookmarkBegin
BookmarkTitle: Chapter 12: Debugging Makefiles
BookmarkLevel: 2
BookmarkPageNumber: 231
BookmarkBegin
BookmarkTitle: Part III. Appendixes
BookmarkLevel: 1
BookmarkPageNumber: 248
BookmarkBegin
BookmarkTitle: A. Running mak
BookmarkLevel: 2
BookmarkPageNumber: 249
BookmarkBegin
BookmarkTitle: B. The Outer Limits
BookmarkLevel: 2
BookmarkPageNumber: 252
BookmarkBegin
BookmarkTitle: C. GNU Free Documentation License--GNU Project--Free Software Foundation (FSF)
BookmarkLevel: 2
BookmarkPageNumber: 263
BookmarkBegin
BookmarkTitle: Index
BookmarkLevel: 1
BookmarkPageNumber: 271
```

```shell
pdftk output.pdf update_info_utf8 bookmark.txt output "GNU_Make_3rd.pdf"
```

正式な書籍名は "Managing Projects with GNU Make, Third Edition" のようですが長いので、短い名前にしました。

</details>