Skip to content

Instantly share code, notes, and snippets.

@furandon-pig
Created July 20, 2015 18:02
Show Gist options
  • Save furandon-pig/87ec6453b5a34dfd499a to your computer and use it in GitHub Desktop.
Save furandon-pig/87ec6453b5a34dfd499a to your computer and use it in GitHub Desktop.
pkgsrcのパッケージ依存関係をdot形式(Graphviz)で出力するスクリプトです。
#!/bin/sh
# 作業用ディレクトリ
TMP_DIR=/tmp
CHECKED_LIST=$TMP_DIR/checked_list.txt
LICENSE_LIST=$TMP_DIR/license_list.txt
# パッケージの依存関係をdot形式で出力するルーチン
# (シェルスクリプト中から再帰的に呼ばれる)
pkg_depend()
{
local _curdir
[ $# -lt 0 ] && exit 0
_curdir=`pwd`/$1
cd $1
echo $1 >> $CHECKED_LIST
# make show-dependsで出力されるパッケージに対し、
# 再帰的にshow-dependsを実行し依存関係のグラフを
# 作成する
for i in `make show-depends | cut -d: -f2`
do
grep $i $CHECKED_LIST 2>&1 > /dev/null
_retval=$?
_curpkg=`echo $1 | sed -e "s/\.\.\///g"`
_relpkg=`echo $i | sed -e "s/\.\.\///g"`
if [ $_retval -ne 0 ]; then
# まだ依存関係を調べていないパッケージの場合
echo " \"$_curpkg\" -> \"$_relpkg\";"
_lisence=`grep '^LICENSE=' Makefile | awk '{ print $2 }'`
# ライセンス情報を追加する
echo $_lisence >> $LICENSE_LIST
# 当該パッケージの依存関係を調べにゆく
pkg_depend $i
else
# すでに依存関係を調査しているパッケージの場合
# (単にノードのみを出力する)
echo " \"$_curpkg\" -> \"$_relpkg\";"
fi
done | uniq
cd $_curdir
}
# 作業用一時ファイルを作成する
> $CHECKED_LIST
> $LICENSE_LIST
# dotファイルのヘッダを出力
_target_pkg=\"`basename \`pwd\``\"
echo "digraph $_target_pkg {"
echo " node [shape=box];"
# 依存関係にあるパッケージを順次列挙する
pkg_depend . | sed -e "s/\"\.\"/"$_target_pkg"/"
# dotファイルのフッタを出力
echo "}"
# コメントの形式でACCEPTABLE_LICENSES一覧を出力する
# (/etc/mk.confに追記してからpkgsrcをビルドする)
echo '/*'
for i in `cat $LICENSE_LIST`
do
echo "ACCEPTABLE_LICENSES+= $i"
done | sort | uniq
echo '*/'
# 作業用一時ファイルを削除する
rm -f $CHECKED_LIST
rm -f $LICENSE_LIST
# Copyright (c) 2015, @furandon_pig
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the
# distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment