#!/usr/bin/perl
use File::Basename;

# Usage : make-updates.pl を実行すると $CHECK で指定したファイルより新
# しいファイルへのシンボリックをそれぞれのディレクトリ内に作成する．


# TODO : contrib/Database/PostGIS のような,さらにサブディレクトリがあっ
# た場合の処理が必要．recursion 的な関数を書かないとダメかな？
# 

$root_path = "../..";
$base_dir = "Plamo-4.2";

# $root_path は、Plamo-X.y ディレクトリへの相対位置を指定
# $base_dir は Plamo-X.y のディレクトリ名

@subdirs = ('plamo', 'contrib');

# チェック対象はこの二つのディレクトリ以下

$CHECK = "/mnt2/Plamo/CDimg/plamo-4.2.md5sum";

# このファイルよりも更新日付が新しいものを探す

foreach $check_dir (@subdirs) {
    $dirs = "";
    opendir(DIR,$root_path."/".$base_dir."/".$check_dir);            # ディレクトリのオープン
    foreach ( readdir(DIR) ) {
	next if /^\.\.?$/;       # "."と".."を削除
	$path = $root_path."/".$base_dir."/".$check_dir."/".$_;
	print "path : $path \n";

	if ( -d $path ) {         # ディレクトリなら処理する
	    if ( $dirs ne "" ) { $dirs = "$dirs,"; }
	    # $dirsが空でないなら","を追加
	    $dirs = "$dirs$path";   # $dirsにディレクトリ名を追加
	}
    }
    closedir(DIR);               # ディレクトリのクローズ

    # print "dirs: $dirs\n";

    @dirs_list = split(/,/,$dirs);    # ディレクトリリストを配列に分割
    foreach $i (@dirs_list) {
	@dir_path = split(/\//, $i);
	$target_dir = $dir_path[$#dir_path - 1]."/".$dir_path[$#dir_path];

	if ( ! -d $target_dir ) {
	    system("mkdir -p $target_dir");
	}

	$here = $ENV{'PWD'};
	$dist_dir = $here."/".$target_dir;
	print "here : $ENV{'PWD'}, dist_dir: $dist_dir\n";
	chdir ($dist_dir);
	$root_dir = "../../".$root_path."/".$base_dir."/".$check_dir."/".$dir_path[$#dir_path];
	# print "root_dir : $root_dir : here2: $here2\n";
	# system ("ls $root_dir");

	open(IN, "find $root_dir -newer $CHECK | grep tgz |");
	@org = <IN>;
	close(IN);
	for ($i = 0; $i <= $#org; $i++) {
	    $newfile = $org[$i];
	    chomp($newfile);
	    if ( $newfile !~ /old/) {
		$filename = basename($newfile);
		system(" ln -sf $newfile $filename");
	    }
	}
	chdir ($here);
	
    }
}

