pkg.sh and defs.mk: Add pkg.sh install-log -N, fix links

pkg.sh install-log now supports a -N option, meaning no-log-directories. This
installs directories, but doesn't log then in the install log, effectively
excluding them from being packaged. This is necessary for directories provided
by other packages. -N can be activated by adding LOG_INSTALL_EXTRA_OPTS += -N
to a Makefile, see changes in defs.mk.

pgk.sh install-log now also omits addition of %attr tags to symbolic links.

Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
Jan Lindemann 2018-10-18 12:02:23 +00:00
commit e37e7f91c1
2 changed files with 50 additions and 25 deletions

View file

@ -679,9 +679,10 @@ cmd_log_install()
local c_opmode=opmode_install
local c_absolute=0
local c_wrap=0
local c_no_log_dirs=0
local install_opts
set -- `getopt 'DLWi:a:f:l:bg:cdm:o:psS:vA' $*`
set -- `getopt 'DLWi:a:f:l:bg:cdm:o:psS:vA:N' $*`
cfgfile_macro()
{
@ -744,6 +745,8 @@ cmd_log_install()
c_wrap=1;;
-A)
c_absolute=1;;
-N)
c_no_log_dirs=1;;
*)
echo unknown option \"$1\". Exiting. >&2
exit 1;;
@ -753,7 +756,7 @@ cmd_log_install()
shift
local args="`echo " $args" | sed -e 's/ -l *[^ ]*//g; s/ -f *[^ ]*//g; s/\b-a\b//g;'`"
local args="`echo " $args" | sed -e 's/ -l *[^ ]*//g; s/ -f *[^ ]*//g; s/\b-a\b//g; s/ -N / /g'`"
if [ -z "$c_use_attr" ]; then
#args="`echo " $args" | sed -e 's/ -g *[^ ]*//g; s/ -m *[^ ]*//g; s/ -o *[^ ]*//g;'`"
@ -808,6 +811,7 @@ cmd_log_install()
local file mode installd_file cfgfile dir
if [ "$c_mode_dir" = true ]; then
for file in $*; do
[ "$c_no_log_dirs" = 0 ] || continue
echo "%dir %attr($c_mode,$c_owner,$c_group) $file" >> $c_logfile
done
else
@ -821,6 +825,7 @@ cmd_log_install()
cfgfile=`cfgfile_macro "$installed_file"`
else
if [ -d "$file" ]; then
[ "$c_no_log_dirs" = 0 ] || continue
dir="%dir "
mode=0755
else
@ -829,7 +834,9 @@ cmd_log_install()
mode=0644
fi
fi
echo "$dir%attr($mode,$c_owner,$c_group) $cfgfile$installed_file" |
local attr="%attr($mode,$c_owner,$c_group)"
[ -l $file ] && attr=""
echo "$dir$attr $cfgfile$installed_file" |
sed "s/^$c_ignore_prefix//" >> $c_logfile
done
else
@ -848,7 +855,11 @@ cmd_log_install()
mode=0644
fi
fi
echo "$dir%attr($mode,$c_owner,$c_group) $cfgfile$c_target" | sed "s/^$c_ignore_prefix//" >> $c_logfile
local attr="%attr($mode,$c_owner,$c_group)"
[ -l $file ] && attr=""
if [ -z "$dir" -o "$c_no_log_dirs" != 0 ]; then
echo "$dir$attr $cfgfile$c_target" | sed "s/^$c_ignore_prefix//" >> $c_logfile
fi
fi
fi
}
@ -878,11 +889,17 @@ cmd_milk_install_log()
chmod 755 $1
}
cat_log()
{
cat $in | $user_filter
}
local type name prefix in out subpackages
subpackages="run devel"
local subpackages="run devel"
local user_filter=cat
eval set -- `getopt -- ht:p:n:s: "$@"`
eval set -- `getopt -- ht:p:n:s:F: "$@"`
while [ "$1" != -- ]; do
case $1 in
-h)
@ -895,6 +912,8 @@ cmd_milk_install_log()
prefix="$2"; shift;;
-s)
subpackages="$2"; shift;;
-F)
user_filter="$2"; shift;;
*)
echo -e "Unexpected argument >$1<\n" >&2
milk_install_log_usage 1;;
@ -908,8 +927,8 @@ cmd_milk_install_log()
milk_install_log_usage 1
}
in=$1
out=$2
local in=$1
local out=$2
local filter_devel="/include$\|/include/$name$"
filter_devel="$filter_devel\|/include/[^/]*.h$\|/include/$name/[^/]*.h$\|/include/[^/]*.hpp$\|/include/$name/[^/]*.hpp$"
@ -919,19 +938,19 @@ cmd_milk_install_log()
# TODO: simplify this
case $type in
rpm)
cat $in | sed "s% $prefix% %" | grep -ve $filter_devel > $in.$name-run
cat $in | sed "s% $prefix% %" | grep -e $filter_devel > $in.$name-devel
cat_log | sed "s% $prefix% %" | grep -ve $filter_devel > $in.$name-run
cat_log | sed "s% $prefix% %" | grep -e $filter_devel > $in.$name-devel
# TODO: this is unimplemented for debian packages
echo $subpackages | grep -q devel || cat $in.$name-devel >> $in.$name-run
;;
deb)
cat $in | grep -v "%dir" | sed "s% $prefix% %; s%//*%/%g; s/.*) *//" | grep -ve $filter_devel | sed 's/\(.*\)\/\([^/]\+\) *$/inst-root\1\/\2 \1/' > $out/$name-run.install
cat $in | grep -v "%dir" | sed "s% $prefix% %; s%//*%/%g; s/.*) *//" | grep -e $filter_devel | sed 's/\(.*\)\/\([^/]\+\) *$/inst-root\1\/\2 \1/' > $out/$name-devel.install
cat $in | grep "%dir" | sed "s% $prefix% %; s%//*%/%g; s/.*) *//" | grep -ve $filter_devel | sed 's/\(.*\)\/\([^/]\+\) *$/\1\/\2/; s%^/%%' | sort -u > $out/$name-run.dirs
cat $in | grep "%dir" | sed "s% $prefix% %; s%//*%/%g; s/.*) *//" | grep -e $filter_devel | sed 's/\(.*\)\/\([^/]\+\) *$/\1\/\2/; s%^/%%' | sort -u > $out/$name-devel.dirs
#cat $in | sed "/%config/ !d; s% $prefix% %; s%//*%/%g; s/.*) *//" | grep -ve $filter_devel > $out/conffiles
cat $in | sed "/%config/ !d; s% $prefix% %; s%//*%/%g; s/.*) *//" | grep -ve $filter_devel > $out/conffiles.$name-run
cat $in | sed "/%config/ !d; s% $prefix% %; s%//*%/%g; s/.*) *//" | grep -e $filter_devel > $out/conffiles.$name-devel
cat_log | grep -v "%dir" | sed "s% $prefix% %; s%//*%/%g; s/.*) *//" | grep -ve $filter_devel | sed 's/\(.*\)\/\([^/]\+\) *$/inst-root\1\/\2 \1/' > $out/$name-run.install
cat_log | grep -v "%dir" | sed "s% $prefix% %; s%//*%/%g; s/.*) *//" | grep -e $filter_devel | sed 's/\(.*\)\/\([^/]\+\) *$/inst-root\1\/\2 \1/' > $out/$name-devel.install
cat_log | grep "%dir" | sed "s% $prefix% %; s%//*%/%g; s/.*) *//" | grep -ve $filter_devel | sed 's/\(.*\)\/\([^/]\+\) *$/\1\/\2/; s%^/%%' | sort -u > $out/$name-run.dirs
cat_log | grep "%dir" | sed "s% $prefix% %; s%//*%/%g; s/.*) *//" | grep -e $filter_devel | sed 's/\(.*\)\/\([^/]\+\) *$/\1\/\2/; s%^/%%' | sort -u > $out/$name-devel.dirs
#cat_log | sed "/%config/ !d; s% $prefix% %; s%//*%/%g; s/.*) *//" | grep -ve $filter_devel > $out/conffiles
cat_log | sed "/%config/ !d; s% $prefix% %; s%//*%/%g; s/.*) *//" | grep -ve $filter_devel > $out/conffiles.$name-run
cat_log | sed "/%config/ !d; s% $prefix% %; s%//*%/%g; s/.*) *//" | grep -e $filter_devel > $out/conffiles.$name-devel
for p in run devel; do
postinst=$out/$name-$p.postinst