Compare commits

...

15 Commits

Author SHA1 Message Date
2ec067cddb fix printf when used with --regex
strip parentheses when parsing softdeps
2023-12-02 14:39:16 +00:00
c662852caf update the notes on FS#1843 2023-09-15 03:17:01 -04:00
19a3ba19ad use a common style to show missing or already-installed ports (FS#1843)
be more selective in applying the forceRebuild flag
2023-09-14 21:24:52 -04:00
4e0421bc32 add support for rmlog_on_uninst 2023-09-04 19:27:37 -04:00
ffe29e224e update man-page with fresh examples
drop from INSTALL the outdated autotools instructions
2023-09-03 16:11:29 -04:00
487060e496 update the man-page with fresh examples 2023-09-02 16:40:20 -04:00
92474ea81d update the man-page with fresh examples 2023-09-01 16:07:25 -04:00
482c8efb58 update the man-page with fresh examples
prune unreachable code paths; drop unneeded Makefiles
2023-08-28 07:54:50 -04:00
eeaea8ee89 revise the softdeps calculation 2023-08-22 10:14:52 -04:00
7175591b00 report pre- and post-install scripts in test mode
support more format codes in the argument to 'dup'

expand man-page to explain some asymmetries
2023-06-23 15:31:39 -04:00
8f71c4fe8b cache the pkgmk.conf settings to avoid repeated disk reads (FS#595)
fix the interaction between --install-root and 'runscripts yes'
2023-06-18 18:09:03 -04:00
e504cf66d3 fix misc compile warnings 2023-06-09 14:32:02 -04:00
211fe43fd9 Merge changes from 'master' into this feature branch. 2023-06-05 15:47:15 -04:00
8ac36484c5 expand the prt-get man-page with more examples
add more details to the prt-cache man-page
2023-03-13 14:37:34 -04:00
5d2b5e0ac0 fix FS#1910; merge Alan's patch for the --group flag; update shell completions
remove some anachronisms from the aliases file
2023-03-13 14:36:00 -04:00
24 changed files with 545 additions and 1835 deletions

View File

@ -1,3 +1,11 @@
* 31.08.2023 John McQuah
- allow prt-get to remove build log when uninstalling a package (feature
requested by samsep10l)
* 31.03.2023 John McQuah
- respect the user's choice of --install-root when running pre- or
post-install scripts
* 10.03.2023 John McQuah * 10.03.2023 John McQuah
- make it possible to consider optional dependencies when updating - make it possible to consider optional dependencies when updating
- bump version of the cache file format, to warn users about the - bump version of the cache file format, to warn users about the

View File

@ -1,6 +1,7 @@
Installing prt-get Installing prt-get
------------------ ------------------
Installing prt-get is just a matter of Installing prt-get is just a matter of
./configure meson setup bld --prefix=/usr
make cd bld && meson compile
make install meson install

92
doc/FS1843.md Normal file
View File

@ -0,0 +1,92 @@
# Flyspray 1843 notes
## Was: Re: Please make the output of prt-get --test more common
teodor observed that prt-get --test gives two different styles of output.
The output style was found to be affected by the number of packages requested
on the command line (one versus many), and by whether dependency resolution
was toggled (install versus depinst).
In the case when one package was requested for installation, an early check
of /var/lib/pkg/db for the existence of a previous installation would alert the
user to the malformed command. No such check of /var/lib/pkg/db was
being performed for multiple packages passed on the command line (FS#1910), and
so the program continued all the way through executeTransaction() and
evaluateResult(), which produced the more verbose output that teodor noted.
A similar discrepancy could be observed when requesting an **update** of **one**
package that was not previously installed, versus an update of **multiple**
packages among which there are some not yet installed. You would have seen a
terse warning in the first case, and a more verbose output in the second case.
The softdeps branch in this code base is now more consistent in performing the
scan of /var/lib/pkg/db, no matter how many packages are passed as argument.
But the mixed-upinst branch collapses the distinction between install and
update, always bringing up to date all the ports passed as argument (and their
dependencies, unless --nodeps is given), so it can postpone the scan of
/var/lib/pkg/db until the step of customizing pkgadd flags for each target.
Hence there is no corresponding code in the mixed-upinst branch to solve FS#1910
by exiting early with an error message.
teodor's second observation is more interesting. During dependency resolution,
the invalid arguments (ports not found in the active repos) were silently being
dropped, rather than being kept in memory for a post-transaction report. If
**all** ports passed to a ``depinst`` command are nowhere among the active
repositories, then the empty set is what gets used for executeTransaction(),
with the predictable result "no package specified for install". Why did we see
a different result when running ``install``? Because the calculateDependencies()
method was never called, and so executeTransaction() received the entire list
of nowhere-to-be-found ports! Iterating through this list of nonexistent ports
would populate the missingPackages list, which would then be displayed nicely
during the post-transaction summary. This side-effect of toggling dependency
resolution could be observed in both the softdeps and the mixed-upinst branch,
prior to the commits of 2023-09-15.
Although we do populate a missingPackages list during calculateDependencies(),
the contents of this list were not being included in the post-transaction
summary. As the code was originally conceived, executeTransaction() would get
a filtered list, with missing packages omitted. This side-effect of ``depinst``
violates the principle of least surprise, because users like teodor might
justifiably expect toggling dependency resolution to generate a superset of
**their argument list** @ARGV, not just a superset of the valid ports in @ARGV.
To be more faithful to the principle of least surprise, the softdeps branch now
propagates into executeTransaction() even the ports that are not in the repos,
so that the post-transaction summary can display them. The mixed-upinst branch
does the same, but because it merges ``install`` and ``update``, any requested
targets that are already installed and up-to-date will appear in the
post-transaction summary under the header "Packages already installed before
this run (ignored)".
With dependency resolution enabled, the list of "Packages already installed
before this run (ignored)" often fills up the entire height of a terminal.
If we implemented teodor's suggestion and united the list of
"Packages not found" with this list --- already often big enough on its own ---
then readability of the post-transaction summary would suffer.
Two separate lists would offer greater readability in most cases, both for
the human eye and for a shell script.
teodor's proposed heading for a united list, "The following ports were
not found/already installed:", did inspire a new way for the softdeps branch
to handle FS#1910. All arguments to ``install`` and ``depinst`` will be tested
against /var/lib/pkg/db to ensure that they're not already installed, and if
all the tests fail then the user is immediately alerted to the malformed
command. This preliminary check is simply jw's original design, but extended
from one port to many. However, if any of the requested ports is not yet
installed, we can go ahead with initRepo() and attempt a less ambitious
transaction (limited to a subset of the user's argument list). The program
will reach evaluateTransaction() and display what succeeded, as well as what
was wrong with the original command.
The softdeps branch has no corresponding leniency in handling an ``update``
command, because the typical scenario for using that command is after
running ``prt-get diff``, at which point the user can be expected to know
what's on their system and to pass as arguments only the names of packages
already installed. So the early exit behaviour of my previous solution to
FS#1910 is retained for the ``update`` command. But it's easy to imagine a
user passing invalid targets to an ``install`` command, in the absence of
any cues from running ``prt-get listinst | grep -E
(package1|package2|...|packageN)``, and to handle that possibility it
makes sense to parse leniently the arguments passed to ``install``. Users
then obtain on the first try, most of what they intended, while also getting
an informative list of already-installed packages in the post-transaction report.
If they really intended to force the rebuild of those already-installed
packages, they can issue a revised command after the first command succeeds.

View File

@ -1,10 +0,0 @@
man_MANS = prt-get.8 prt-cache.8 prt-get.conf.5
clean-local:
rm -rf *.log *.aux *.toc *.dvi *.idx *.pdf api
apidoc:
doxygen
EXTRA_DIST = $(man_MANS) coding

View File

@ -1,492 +0,0 @@
# Makefile.in generated by automake 1.12.2 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2012 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
am__make_dryrun = \
{ \
am__dry=no; \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
*) \
for am__flg in $$MAKEFLAGS; do \
case $$am__flg in \
*=*|--*) ;; \
*n*) am__dry=yes; break;; \
esac; \
done;; \
esac; \
test $$am__dry = yes; \
}
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
subdir = doc
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
$(top_srcdir)/mkinstalldirs
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
SOURCES =
DIST_SOURCES =
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
for p in $$list; do echo "$$p $$p"; done | \
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
if (++n[$$2] == $(am__install_max)) \
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
END { for (dir in files) print dir, files[dir] }'
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__uninstall_files_from_dir = { \
test -z "$$files" \
|| { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
man5dir = $(mandir)/man5
am__installdirs = "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"
man8dir = $(mandir)/man8
NROFF = nroff
MANS = $(man_MANS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build_alias = @build_alias@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
man_MANS = prt-get.8 prt-cache.8 prt-get.conf.5
EXTRA_DIST = $(man_MANS) coding
all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu doc/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
install-man5: $(man_MANS)
@$(NORMAL_INSTALL)
@list1=''; \
list2='$(man_MANS)'; \
test -n "$(man5dir)" \
&& test -n "`echo $$list1$$list2`" \
|| exit 0; \
echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \
$(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \
{ for i in $$list1; do echo "$$i"; done; \
if test -n "$$list2"; then \
for i in $$list2; do echo "$$i"; done \
| sed -n '/\.5[a-z]*$$/p'; \
fi; \
} | while read p; do \
if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; echo "$$p"; \
done | \
sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
sed 'N;N;s,\n, ,g' | { \
list=; while read file base inst; do \
if test "$$base" = "$$inst"; then list="$$list $$file"; else \
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \
fi; \
done; \
for i in $$list; do echo "$$i"; done | $(am__base_list) | \
while read files; do \
test -z "$$files" || { \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \
done; }
uninstall-man5:
@$(NORMAL_UNINSTALL)
@list=''; test -n "$(man5dir)" || exit 0; \
files=`{ for i in $$list; do echo "$$i"; done; \
l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
sed -n '/\.5[a-z]*$$/p'; \
} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir)
install-man8: $(man_MANS)
@$(NORMAL_INSTALL)
@list1=''; \
list2='$(man_MANS)'; \
test -n "$(man8dir)" \
&& test -n "`echo $$list1$$list2`" \
|| exit 0; \
echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
$(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \
{ for i in $$list1; do echo "$$i"; done; \
if test -n "$$list2"; then \
for i in $$list2; do echo "$$i"; done \
| sed -n '/\.8[a-z]*$$/p'; \
fi; \
} | while read p; do \
if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; echo "$$p"; \
done | \
sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
sed 'N;N;s,\n, ,g' | { \
list=; while read file base inst; do \
if test "$$base" = "$$inst"; then list="$$list $$file"; else \
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \
fi; \
done; \
for i in $$list; do echo "$$i"; done | $(am__base_list) | \
while read files; do \
test -z "$$files" || { \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \
done; }
uninstall-man8:
@$(NORMAL_UNINSTALL)
@list=''; test -n "$(man8dir)" || exit 0; \
files=`{ for i in $$list; do echo "$$i"; done; \
l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
sed -n '/\.8[a-z]*$$/p'; \
} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)
tags: TAGS
TAGS:
ctags: CTAGS
CTAGS:
cscope cscopelist:
distdir: $(DISTFILES)
@list='$(MANS)'; if test -n "$$list"; then \
list=`for p in $$list; do \
if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
if test -n "$$list" && \
grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
echo "error: found man pages containing the 'missing help2man' replacement text:" >&2; \
grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \
echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \
echo " typically 'make maintainer-clean' will remove them" >&2; \
exit 1; \
else :; fi; \
else :; fi
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(MANS)
installdirs:
for dir in "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-local mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am: install-man
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man: install-man5 install-man8
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-man
uninstall-man: uninstall-man5 uninstall-man8
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-local \
distclean distclean-generic distdir dvi dvi-am html html-am \
info info-am install install-am install-data install-data-am \
install-dvi install-dvi-am install-exec install-exec-am \
install-html install-html-am install-info install-info-am \
install-man install-man5 install-man8 install-pdf \
install-pdf-am install-ps install-ps-am install-strip \
installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
pdf-am ps ps-am uninstall uninstall-am uninstall-man \
uninstall-man5 uninstall-man8
clean-local:
rm -rf *.log *.aux *.toc *.dvi *.idx *.pdf api
apidoc:
doxygen
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@ -76,28 +76,36 @@ non-option argument passed. This is very similar to
.TP .TP
.B install [\-\-margs] [\-\-aargs] [\-\-log] <package1> [<package2> ...] .B install [\-\-margs] [\-\-aargs] [\-\-log] <package1> [<package2> ...]
install all packages in the listed order. Note that you can do this Install all packages in the listed order. Note that you can do this
from any directory. from any directory.
.TP .TP
.B depinst [\-\-margs] [\-\-aargs] [\-\-log] [\-\-softdeps] <package1> [<package2> ...] .B depinst [\-\-margs] [\-\-aargs] [\-\-log] [\-\-softdeps] <package1> [<package2> ...]
install all packages given on the command line, including their dependencies. Install all packages given on the command line, including their dependencies.
Note that already-installed packages will be left at their current version,
even if out of date. prt\-get depinst behaves this way because all of its
child pkgadd processes will \fBlack\fP the \-u flag, which is needed when
updating an already-installed package.
Passing the --softdeps flag tells \fBprt-get\fP to consider also the optional Passing the --softdeps flag tells \fBprt-get\fP to consider also the optional
dependencies when sorting. Note that already-installed packages will be left dependencies when sorting. The --softdeps flag does NOT affect the
at their current version, even if out of date. prt\-get depinst behaves this calculation of the minimal set of packages needed to satisfy the
way because all of its child pkgadd processes will \fBlack\fP the \-u flag, transaction; only hard dependencies are used when constructing this set. But
which is needed when updating an already-installed package. if there are any optional dependency relationships among the ports in the
resulting set, they will be respected when prt-get determines the sequence
in which to build.
.TP .TP
.B update [\-\-margs] [\-\-aargs] [\-\-log] <package1> [<package2> ...] .B update [\-\-margs] [\-\-aargs] [\-\-log] <package1> [<package2> ...]
update all packages listed in this order. Note: if the latest version of Update all packages listed in this order. Note: if the latest version of a
a package has acquired dependencies that were not needed by the currently-installed package has acquired dependencies that were not needed by the
version and are not present on the system, the update command will not attempt to currently-installed version and are not present on the system, the update
resolve this omission. prt-get update behaves this way because pkgadd invocations command will not attempt to resolve this omission. prt-get update behaves
inherit the flag -u for every package in the transaction, causing an error if this way because pkgadd invocations inherit the flag -u for every package in
the package is not already installed. You can follow the CRUX mailing list or the the transaction, causing an error if the package is not already installed.
IRC channels to stay informed of the situations where an update will require manual You can follow the CRUX mailing list or the IRC channels to stay informed of
intervention, or filter the output of the situations where an update will require manual intervention, or filter
the output of
.B prt\-get quickdep $(prt\-get quickdiff) .B prt\-get quickdep $(prt\-get quickdiff)
through \fBprt\-get isinst\fP to get a list of packages suitable for an through \fBprt\-get isinst\fP to get a list of packages suitable for an
\fBinstall\fP or \fBupdate\fP command. \fBinstall\fP or \fBupdate\fP command.
@ -105,7 +113,7 @@ See the \fBEXAMPLES\fP section below for details.
.TP .TP
.B remove <package1> [<package2> ...] .B remove <package1> [<package2> ...]
remove packages listed in this order Remove packages listed in this order
.TP .TP
.B sysup [\-\-softdeps] [\-\-nodeps] .B sysup [\-\-softdeps] [\-\-nodeps]
@ -150,7 +158,7 @@ switch will slow down the operation remarkably.
.TP .TP
.B diff [\-\-all] [\-\-prefer\-higher] [<package1> <package2> ...] .B diff [\-\-all] [\-\-prefer\-higher] [<package1> <package2> ...]
show differences between installed packages and ports in the ports Show differences between installed packages and ports in the ports
tree. If arguments are given, shows only differences for these tree. If arguments are given, shows only differences for these
packages, otherwise all differences are shown. It's also possible to use packages, otherwise all differences are shown. It's also possible to use
shell-like shell-like
@ -162,7 +170,7 @@ the ports tree, use the --prefer-higher option.
.TP .TP
.B quickdiff .B quickdiff
prints a simple list of packages which have a different version in the Print a simple list of packages which have a different version in the
ports tree than what is installed. The output is sorted alphabetically, ports tree than what is installed. The output is sorted alphabetically,
but you can generate a (larger) list sorted by dependencies using but you can generate a (larger) list sorted by dependencies using
.B prt\-get quickdep $(prt\-get quickdiff). .B prt\-get quickdep $(prt\-get quickdiff).
@ -188,19 +196,18 @@ Search the ports tree (both name and description) for the pattern
.B expr .B expr
(which can be a shell-like wildcard pattern or a regexp). The search in (which can be a shell-like wildcard pattern or a regexp). The search in
the description is not case sensitive. Note that this requires prt\-get the description is not case sensitive. Note that this requires prt\-get
to read every Pkgfile, which makes it rather slow; if you like this, to read every Pkgfile, which makes it rather slow. If you like searching by
consider using the cache functionality, so you only have to spend this description, consider using the cache functionality, so you only have to
time once after updating the ports tree has been updated. read all the Pkgfiles after each update of the ports tree.
.TP .TP
.B fsearch [\-\-full] [\-\-regex] <pattern> .B fsearch [\-\-full] [\-\-regex] <pattern>
Search the ports tree for Search the ports tree for
.B pattern .B pattern
as file name in their footprint. When called without '--full', strips as file name in their footprint. When called without '--full', strips
the directories from the file names before matching; this behaviour the directories from the file names before matching.
will change in prt-get 0.6, where full path search will be the Pattern can be a shell-like wildcard pattern (e.g. prt-get fsearch "*.h")
default. Pattern can be a shell-like wildcard pattern (e.g. prt-get or a regular expression (e.g. prt-get fsearch --regex 'liblz(o2|ma).*')
fsearch "*.h") or a regular expression (e.g. prt-get fsearch --regex 'liblz(o2|ma).*')
.TP .TP
@ -217,18 +224,19 @@ Print the port's README file if it exists; if set, uses $PAGER
.TP .TP
.B depends [\-\-softdeps] <package1> [<package2> ...] .B depends [\-\-softdeps] <package1> [<package2> ...]
print a recursive list of dependencies needed to install the packages passed Print a recursive list of dependencies needed to install the packages
as argument. It shows a list of the dependencies that were found in the ports tree, passed as argument. It shows a list of the dependencies that were found in
plus a list of the dependencies that could not be found. Pass the --softdeps flag the ports tree, plus a list of the dependencies that could not be found.
if you want the sorting algorithm to consider optional dependencies too. Pass the --softdeps flag if you want the sorting algorithm to consider
optional dependencies too.
.TP .TP
.B quickdep [\-\-softdeps] <package1> [<package2> ...] .B quickdep [\-\-softdeps] <package1> [<package2> ...]
same output as \fBdepends\fP, but separated by spaces rather than newlines, and Same output as \fBdepends\fP, but separated by spaces rather than newlines,
stripped of any dependencies that could not be found in the ports tree. and stripped of any dependencies that could not be found in the ports tree.
Useful in case the list of dependencies is too large to fit on one screen, or Useful in case the list of dependencies is too large to fit on one screen,
if you don't want to filter out manually the ports that are invalid targets for or if you don't want to filter out manually the ports that are invalid
installation. For example, instead of targets for installation. For example, instead of
.B prt\-get depinst xorg-server .B prt\-get depinst xorg-server
you might micromanage the process as follows: you might micromanage the process as follows:
.B for i in $(prt\-get quickdep xorg-server); do if prt\-get isinst $i 2>/dev/null; then prt\-get update \-fr $i; else prt\-get install $i; fi; done .B for i in $(prt\-get quickdep xorg-server); do if prt\-get isinst $i 2>/dev/null; then prt\-get update \-fr $i; else prt\-get install $i; fi; done
@ -241,55 +249,77 @@ for successful builds.
.TP .TP
.B deptree [\-\-softdeps] <package> .B deptree [\-\-softdeps] <package>
print a tree of the dependencies of the package Print a tree of the dependencies of the package
.B <package>. .B <package>.
Pass the --softdeps flag to also show the installed packages that mention Pass the --softdeps flag to also show the installed packages that might
have been eagerly linked, if they were present when
.B <package> .B <package>
as an optional dependency. (or its dependencies) were built.
Subtrees already shown are marked with '-->' to save some space. In Subtrees already shown are marked with '-->' to save some space. In
order to show them all, add the --all switch. order to show them all, add the --all switch.
.SH "" .SH ""
.TP .TP
.B dependent [\-\-softdeps] <package> .B dependent [\-\-recursive] [\-\-softdeps] [\-\-all] [\-\-tree] <package>
print a list of ports which have Print a list of ports whose "Depends on:" line contains
.B <package> .B <package>
in their "Depends on:" line. Use the --softdeps flag to also search the (or its dependents, if --recursive was passed). Use the --softdeps flag to
"Optional:" lines for \fB<package>\fP. also search the "Optional:" lines for \fB<package>\fP.
By default, output is restricted to ports that are installed. To see all By default, output is restricted to ports that are installed. To see all
the dependencies, add the --all switch; use --recursive to get a recursive the dependencies, use the --all switch. Use --tree to get a nicely indented
list (without duplication), and --tree to get a nicely indented one. list.
.TP .TP
.B dup [-v] [format] .B dup [-v] [format]
List ports which can be found in multiple directories configured in List ports which can be found in multiple directories configured in
.B /etc/prt-get.conf .B /etc/prt-get.conf
Use the verbose switch to simulate the output of version 5.12 and older (likely Use the \fB\-v\fP switch to see a verbose report, which will show for each
to go away in the future). The format string can be used to create user dup the port that takes precedence, and the port that is hidden (including
specified formats. The following symbols are currently replaced: full path and version info). The verbose switch is basically an alias for a
particular combination of the recognized format symbols, namely
.B '* %n\en %p1 %v1 precedes over\en %p2 %v2\en'.
You can customize the output by passing a different format string, whose
symbols will be replaced as follows.
.TP .TP
\ \ \ \(bu \ \ \ \(bu
%n \-> name of the port %n -> name of the port
.TP .TP
\ \ \ \(bu \ \ \ \(bu
%p1 \-> Full path (including name) to port taking precendence %p1 -> Full path (including name) to port taking precedence
.TP .TP
\ \ \ \(bu \ \ \ \(bu
%p2 \-> Full path (including name) to port being hidden %p2 -> Full path (including name) to port being hidden
.TP .TP
\ \ \ \(bu \ \ \ \(bu
%v1 \-> Version of port taking precendence %v1 -> Version of port taking precedence
.TP .TP
\ \ \ \(bu \ \ \ \(bu
%v2 \-> Version of port being hidden %v2 -> Version of port being hidden
.TP
\ \ \ \(bu
%M1 -> maintainer of port taking precedence
.TP
\ \ \ \(bu
%M2 -> maintainer of port being hidden
.TP
\ \ \ \(bu
%u1 -> URL of port taking precedence
.TP
\ \ \ \(bu
%u2 -> URL of port being hidden
.TP .TP
.B list [\-v|\-vv] [\-\-path] [\-\-regex] [filter] .B list [\-v|\-vv] [\-\-path] [\-\-regex] [filter]
@ -307,27 +337,27 @@ Print formatted port list format string can contain variables, which
are replaced like this: are replaced like this:
.TP .TP
\ \ \ \(bu \ \ \ \(bu
%n \-> name %n -> name
.TP .TP
\ \ \ \(bu \ \ \ \(bu
%p \-> path %p -> path
.TP .TP
\ \ \ \(bu \ \ \ \(bu
%v \-> version %v -> version
.TP .TP
\ \ \ \(bu \ \ \ \(bu
%r \-> release %r -> release
.TP .TP
\ \ \ \(bu \ \ \ \(bu
%d \-> description %d -> description
.TP .TP
\ \ \ \(bu \ \ \ \(bu
%e \-> dependencies %e -> dependencies
.TP .TP
\ \ \ \(bu \ \ \ \(bu
@ -335,7 +365,7 @@ are replaced like this:
.TP .TP
\ \ \ \(bu \ \ \ \(bu
%u \-> URL %u -> URL
.TP .TP
\ \ \ \(bu \ \ \ \(bu
@ -359,11 +389,11 @@ are replaced like this:
.TP .TP
\ \ \ \(bu \ \ \ \(bu
%i \-> "no" if not installed, "yes" if it's installed and %i -> "no" if not installed, "yes" if it's installed and
up to date and "diff" if it's installed and a new version is in the up to date and "diff" if it's installed and a new version is in the
ports tree. ports tree.
Use "\\n" and "\\t" to format your output (no additional format specified Use "\\n" and "\\t" to format your output (no additional format symbols
suported). The optional format string2 can contain the same variables suported). The optional format string2 can contain the same variables
as format string1 and is used to sort the output. You can specify a as format string1 and is used to sort the output. You can specify a
.B wildcard filter .B wildcard filter
@ -374,16 +404,16 @@ to filter by package name.
.B listinst [\-v|\-vv] [\-\-regex] [\-\-depsort] [filter] .B listinst [\-v|\-vv] [\-\-regex] [\-\-depsort] [filter]
List installed ports. It's basically the same as List installed ports. It's basically the same as
.B pkginfo \-i, .B pkginfo \-i,
but omits version when called without verbose (\-v, \-vv) switch. Plus but omits version when called without verbose (-v, -vv) switch. Plus
it is notably faster in my tests. \-v adds version information, \-vv it is notably faster in my tests. -v adds version information, -vv
adds version and description. adds version and description.
.B Warning: .B Warning:
\-vv will slow down the process because it requires prt\-get to scan -vv will slow down the process because it requires prt-get to scan
both the ports database and the ports tree. both the ports database and the ports tree.
It's also possible to use shell-like It's also possible to use shell-like
.B wildcards .B wildcards
for the listinst command. Make sure you escape where needed. By default for the listinst command. Make sure you escape where needed. By default
it's sorted alphabetically; use the \-\-depsort switch to sort by it's sorted alphabetically; use the --depsort switch to sort by
dependencies. dependencies.
.TP .TP
@ -410,7 +440,7 @@ greater than 0.
.TP .TP
.B current <package> .B current <package>
Shows the currently-installed version of <package>, or a message Show the currently-installed version of <package>, or a message
that <package> is not installed. Unlike that <package> is not installed. Unlike
.B prt\-get isinst package1 package2, .B prt\-get isinst package1 package2,
this command does \fBnot\fP accept more than one package as argument. Use this command does \fBnot\fP accept more than one package as argument. Use
@ -419,11 +449,11 @@ to work around this limitation.
.TP .TP
.B ls [\-\-path] <package> .B ls [\-\-path] <package>
Prints out a listing of the port's directory List the contents of the port's directory
.TP .TP
.B cat <package> [<file>] .B cat <package> [<file>]
Prints out the file to stdout. If <file> is not specified, 'Pkgfile' is used. If set, uses $PAGER. Print the file to stdout. If <file> is not specified, 'Pkgfile' is used. If set, uses $PAGER.
.TP .TP
.B edit <package> [<file>] .B edit <package> [<file>]
@ -433,7 +463,7 @@ If <file> is not specified, 'Pkgfile' is used.
.TP .TP
.B help .B help
Shows a help screen Show a help screen
.TP .TP
.B dumpconfig .B dumpconfig
@ -441,11 +471,11 @@ Dump the configuration to the current terminal
.TP .TP
.B version .B version
Shows the current version of prt-get Show the current version of prt-get
.TP .TP
.B cache .B cache
create a cache file from the ports tree to be used by prt-get using the Create a cache file from the ports tree to be used by prt-get using the
--cache option. Remember to run prt-get cache each time you update the --cache option. Remember to run prt-get cache each time you update the
ports tree. ports tree.
@ -542,6 +572,14 @@ Execute post-install script if it's there
.B \-\-install-scripts .B \-\-install-scripts
Execute pre-install and post-install script if they're there Execute pre-install and post-install script if they're there
The options --pre-install, --post-install, and --install-scripts offer a
convenient way to temporarily override the prt-get.conf directive 'runscripts
no', which was the historical default. Starting with CRUX 3.7, prt-get.conf is
being shipped with 'runscripts yes'. To override this default at the command
line, you have to pass the more cumbersome option --config-set=\(dqrunscripts
no\(dq, or point prt-get to an alternative configuration file using
--config=<file>. (see below for the documentation of these options)
.TP .TP
.B \-\-install-root=<dir> .B \-\-install-root=<dir>
Use <dir> as root directory for your installation; allows you to install Use <dir> as root directory for your installation; allows you to install
@ -549,30 +587,41 @@ the requested packages onto a different directory than '/'. In daily usage,
this option is not required; it's primarily interesting if you're developing this option is not required; it's primarily interesting if you're developing
an independent installation. an independent installation.
Some pre- or post-install scripts might not have the intended effect if Pre- and post-install scripts will not be executed if the target root directory
invoked as lacks a copy of the ports tree. So if you're maintaining an installation on a
.B chroot <dir> /bin/sh <path/to/script> volume mounted somewhere other than '/', it's not enough to have the
(the naive way to respect --install-root). line 'runscripts yes' in your prt-get.conf; you also have to ensure that
So if you're maintaining an installation on a volume mounted somewhere the pre- and post-install scripts can be found in the same location
other than '/', it might be safer to ensure that your \fBprt\-get.conf(5)\fP relative to <dir>.
has the line
.B runscripts no
and then run any pre- or post-install scripts by hand.
The setting for --install-root determines which package database is used for The setting for --install-root determines which package database is used for
reading/writing (so <dir>/var/lib/pkg/db must exist), and where the pkg.tar.?z reading/writing (so <dir>/var/lib/pkg/db must exist), and where the pkg.tar.?z
archives get unpacked, but the relevant prt\-get.conf and ports tree are those archives get unpacked, but the relevant prt-get.conf and ports tree are those
on the parent filesystem. Therefore it is not necessary for <dir> to contain on the parent filesystem. Therefore it is not necessary for <dir> to contain
its own copy of the ports tree, or even a copy of prt-get.conf. its own copy of the ports tree (unless 'runscripts yes' is desired, as
However, if <dir>/etc/pkgadd.conf exists and is different from /etc/pkgadd.conf, explained above). But each \fBpkgmk(8)\fP process will take place on the parent
then install or update commands might behave unexpectedly. In order to preserve filesystem, inspecting \fIthe parent filesystem\fP's environment for
the \fBpkgadd.conf(5)\fP settings from the host system, append the option information about installed ports and available shared libraries. The
--aargs='-c /etc/pkgadd.conf' to your \fBprt-get install\fP \fBpkgmk(8)\fP process might therefore draw the wrong conclusions about what
command, or just copy the desired directives into <dir>/etc/pkgadd.conf . functionality should be enabled for an installation to <dir>. If the parent
filesystem is more richly populated than <dir>, with respect to installed
packages, then the built package might exhibit breakage when \fBpkgadd\fP
unpacks it into <dir>.
When setting --install-root=<dir>, install or update commands might behave
unexpectedly if <dir>/etc/pkgadd.conf exists and is different from
/etc/pkgadd.conf . In order to preserve the \fBpkgadd.conf(5)\fP settings from
the host system, append the option --aargs='-c /etc/pkgadd.conf' to your
\fBprt-get install\fP command, or just copy the desired directives into
<dir>/etc/pkgadd.conf .
.TP .TP
.B \-\-log .B \-\-log
Write build output to log file Write build output to log file. Basically a convenient alias for
\fB\-\-config\-set=\(dqwritelog enabled\(dq\fP. Note that there is no similar
alias allowing you to temporarily override the one configuration directive
\(dqwritelog enabled\(dq; you have to resort to \fB\-\-config\-set=\(dqwritelog
disabled\(dq\fP if that is your intention.
.TP .TP
.B \-\-no-std-config .B \-\-no-std-config
@ -592,7 +641,7 @@ Set <string> in configuration, overriding configuration file
.TP .TP
.B \-\-config=<file> .B \-\-config=<file>
Use alternative configuration file to read ports directories from Use <file> to read configuration directives, rather than /etc/prt-get.conf.
.SH "" .SH ""
@ -637,31 +686,26 @@ Download, build and install irssi, with one simple command
.TP .TP
.B prt\-get install paper yasm .B prt\-get install paper yasm
Install paper and yasm. Abort with an informative error message if either package is already Install paper and yasm. Abort with an informative error message if either
installed, allowing you to issue a revised command. package is already installed, allowing you to issue a revised command.
.TP
.B prt\-get update bmake cmake
Update bmake and cmake. Abort with an informative error message if either package is not yet
installed, allowing you to issue a revised command.
.TP .TP
.B prt\-get update -fr openssh .B prt\-get update \-fr openssh
Update your current version of openssh, forcing a rebuild even if no version difference is detected. Update your current version of openssh, forcing a rebuild even if no version difference is detected.
Useful if there was a major version change in one of its dependencies, and \fBrevdep openssh\fP Useful if there was a major version change in one of its dependencies, and \fBrevdep openssh\fP
indicates a broken package. :\-) indicates a broken package. :\-)
.TP .TP
.B MISSLIBS=$(revdep -vvv mpv | awk -v FS=: '/(missing library)/ {print $3}'); [ -n \(dq${MISSLIBS[@]}\(dq ] && for i in ${MISSLIBS[@]}; do prt\-get fsearch $i; done .B MISSLIBS=$(revdep \-vvv mpv | awk \-v FS=: '/(missing library)/ {print $3}'); [ \-n \(dq${MISSLIBS[@]}\(dq ] && for i in ${MISSLIBS[@]}; do prt\-get fsearch $i; done
(adapted from a script by ppetrov^) Check for the presence of the runtime libraries needed by mpv. (adapted from a script by ppetrov^) Check for the presence of the runtime libraries needed by mpv.
If any are absent, search the footprints to determine which ports provide the missing libraries. If any are absent, search the footprints to determine which ports provide the missing libraries.
.TP .TP
.B prt\-get isinst $(prt-get info ffmpeg | awk -v FS=: '/^Optional/ {gsub(/,/,\(dq \(dq,$2); print $2}') | awk -v FS=\(dq \(dq '/not installed/ {print $2}' .B prt\-get isinst $(prt\-get info ffmpeg | awk \-v FS=: '/^Optional/ {gsub(/,/,\(dq \(dq,$2); print $2}') | awk \-v FS=\(dq \(dq '/not installed/ {print $2}'
Show all the optional dependencies of ffmpeg that are not currently installed. Show all the optional dependencies of ffmpeg that are not currently installed.
.TP .TP
.B prt\-get isinst $(prt-get info ffmpeg | awk -v FS=: '/^Optional/ {gsub(/,/,\(dq \(dq,$2); print $2}') | awk -v FS=\(dq \(dq '/not installed/ {print $2}' | xargs prt\-get depinst \-\-group \-\-softdeps ffmpeg .B prt\-get isinst $(prt\-get info ffmpeg | awk \-v FS=: '/^Optional/ {gsub(/,/,\(dq \(dq,$2); print $2}') | awk \-v FS=\(dq \(dq '/not installed/ {print $2}' | xargs prt\-get depinst \-\-group \-\-softdeps ffmpeg
Extension of the above. Installs ffmpeg and all its optional dependencies, in Extension of the above. Installs ffmpeg and all its optional dependencies, in
the order that guarantees a maximal feature set. The --group flag tells the order that guarantees a maximal feature set. The --group flag tells
\fBprt\-get\fP to abort the operation if any port fails to build, so as not to \fBprt\-get\fP to abort the operation if any port fails to build, so as not to
@ -669,7 +713,7 @@ spend any resources on ffmpeg until all of its optional dependencies are in
place. place.
.TP .TP
.B prt\-get isinst $(if grep -qE '^ffmpeg:' /etc/prt-get.softdeps 2>/dev/null; then grep -E '^ffmpeg:' /etc/prt-get.softdeps | cut -d: -f2 | tr ',' ' '; else prt-get info ffmpeg | awk -v FS=: '/^Optional/ {gsub(/,/,\(dq \(dq,$2); print $2}'; fi) | awk -v FS=\(dq \(dq '/not installed/ {print $2}' | xargs prt\-get depinst \-\-group \-\-softdeps ffmpeg .B prt\-get isinst $(if grep \-qE '^ffmpeg:' /etc/prt\-get.softdeps 2>/dev/null; then grep \-E '^ffmpeg:' /etc/prt\-get.softdeps | cut \-d: \-f2 | tr ',' ' '; else prt\-get info ffmpeg | awk \-v FS=: '/^Optional/ {gsub(/,/,\(dq \(dq,$2); print $2}'; fi) | awk \-v FS=\(dq \(dq '/not installed/ {print $2}' | xargs prt\-get depinst \-\-group \-\-softdeps ffmpeg
Extension of the above (addressing a use case envisioned by ivandi). The Extension of the above (addressing a use case envisioned by ivandi). The
user can create the file /etc/prt-get.softdeps containing a line like user can create the file /etc/prt-get.softdeps containing a line like
.B ffmpeg: x264 x265 .B ffmpeg: x264 x265
@ -689,12 +733,17 @@ Return a list of all ports whose names start with "mc", "nc", or "pc"
Return a list of all ports having "irc" in their name or description Return a list of all ports having "irc" in their name or description
.TP .TP
.B comm -13 <(ls /usr/ports/core) <(prt-get listorphans) .B prt\-get fsearch \-\-full \(dq/usr/etc/*\(dq | awk '/^Found in/ { $0=gensub(/Found in .*\e/(.+):/,\(dq\e\e1\(dq,\(dqg\(dq); print;}'
Return a list of all ports that store their configs in /usr/etc. Omit the
pipe to awk if you also want a detailed list of the files that matched.
.TP
.B comm \-13 <(ls /usr/ports/core) <(prt\-get listorphans)
(based on comments from Romster and jue) Filter out the core ports from the list of orphans, in (based on comments from Romster and jue) Filter out the core ports from the list of orphans, in
shells (like bash) that support process substitution shells (like bash) that support process substitution
.TP .TP
.B comm -13 <(cat ~/.keepers <(ls /usr/ports/core) | sort) <(prt\-get listorphans) | xargs prt\-get remove .B comm \-13 <(cat ~/.keepers <(ls /usr/ports/core) | sort) <(prt\-get listorphans) | xargs prt\-get remove
(system-hosing extension of the above) A one-liner inspired by \fBpkg\-clean\fP (system-hosing extension of the above) A one-liner inspired by \fBpkg\-clean\fP
and \fBpkgfoster\fP, but without the safeguard of interactivity. \fBDo not try this on a and \fBpkgfoster\fP, but without the safeguard of interactivity. \fBDo not try this on a
mission-critical system.\fP mission-critical system.\fP
@ -712,7 +761,15 @@ Same as above, but only print the dependencies that are already installed. The o
command is suitable for piping to \fBxargs prt\-get update\fP. command is suitable for piping to \fBxargs prt\-get update\fP.
.TP .TP
.B comm -3 <(prt\-get printf \(dq%i:%n %v-%r\en\(dq | grep -v ^no | cut -d: -f2 | sort) <(pkginfo -i | sort) .B prt\-get isinst $(prt\-get quickdep i3) | awk '/not installed/ { print $2 }' | xargs prt\-get depinst \-\-softdeps \-\-test
(inspired by a troubleshooting session with hestia) Assemble a set of install
targets needed to build the i3 window manager; sort the list, respecting both
hard and soft dependencies; then print how the installation would proceed. The
awk filter in the middle is needed to prevent the command from failing with the
error message "already installed".
.TP
.B comm \-3 <(prt\-get printf \(dq%i:%n %v\-%r\en\(dq | grep \-v ^no | cut \-d: \-f2 | sort) <(pkginfo \-i | sort)
(inspired by a bug report from teodor) an alternative to \fBprt\-get diff\fP. (inspired by a bug report from teodor) an alternative to \fBprt\-get diff\fP.
In the output, left-justified lines show the version available in the In the output, left-justified lines show the version available in the
repositories, while indented lines show the version installed. On a repositories, while indented lines show the version installed. On a
@ -720,22 +777,32 @@ reasonably up-to-date system, the two processes in the above command will
return many identical lines; these are suppressed by the -3 flag to return many identical lines; these are suppressed by the -3 flag to
\fBcomm(1)\fP. \fBcomm(1)\fP.
.TP
.B for L in /var/log/pkgbuild/*.log; do P=${L%__*}; P=${P##*/}; VR=${L##*__}; VR=${VR%.log}; if ! prt\-get isinst $P >/dev/null; then mv $L /var/log/uninstalled; elif [ \(dq$(prt\-get current $P)\(dq != \(dq$VR\(dq ]; then mv $L /var/log/oldbuild/; fi; done
(based on a feature request by samsep10l) a command you can put into a script
called by root's crontab, in order to mimic Slackware's tidy directory listings
(the main logdir only contains build logs of the latest installed packages;
other logs are moved to a separate directory). This particular command relies
on declaring \(dqlogfile /var/log/pkgbuild/%n__%v-%r.log\(dq and \(dqwritelog
enabled\(dq in \fBprt\-get.conf(5)\fP. Logs saved with a different filename
pattern will require slight adjustments to the command.
.TP .TP
.B prt\-get printf \(dq%p\et%u\en\(dq | awk '($1 ~ /\e/myrepo$/) { print $2 }' .B prt\-get printf \(dq%p\et%u\en\(dq | awk '($1 ~ /\e/myrepo$/) { print $2 }'
Print the upstream URL for each port in the collection \(dqmyrepo\(dq, perhaps Print the upstream URL for each port in the collection \(dqmyrepo\(dq, perhaps
as the first step in keeping your personal overlay up to date. as the first step in keeping your personal overlay up to date.
.TP .TP
.B prt\-get printf \(dq%M\et%n\en\(dq | grep ^Tim | wc -l .B prt\-get printf \(dq%M\et%n\en\(dq | grep \-c ^Tim
Count how many ports our most-overworked core team member claims responsibility for. Count how many ports our most-overworked core team member claims responsibility for.
.TP .TP
.B comm -13 <(prt\-get depends firefox-bin |tail -n +2 |sort) <(prt\-get depends firefox |tail -n +2 |sort) .B comm \-13 <(prt\-get depends firefox\-bin |tail \-n +2 |sort) <(prt\-get depends firefox |tail \-n +2 |sort)
Find the build-time dependencies of firefox. Runtime dependencies would also appear in the list generated by Find the build-time dependencies of firefox. Runtime dependencies would also appear in the list generated by
the first process substitution, and \fBcomm -13\fP will suppress what the two lists have in common. the first process substitution, and \fBcomm -13\fP will suppress what the two lists have in common.
.TP .TP
.B prt-get listinst \-\-depsort | xargs prt-get install \-\-install\-root=/mnt .B prt\-get listinst \-\-depsort | xargs prt\-get install \-\-install\-root=/mnt
Sort the list of installed packages by dependencies, and then install all Sort the list of installed packages by dependencies, and then install all
those packages onto a backup filesystem (mounted at /mnt). If you have a customized those packages onto a backup filesystem (mounted at /mnt). If you have a customized
pkgadd.conf that you want applied to this operation, either copy it to pkgadd.conf that you want applied to this operation, either copy it to
@ -743,7 +810,7 @@ pkgadd.conf that you want applied to this operation, either copy it to
/etc/pkgadd.conf\(dq to the install command. /etc/pkgadd.conf\(dq to the install command.
.TP .TP
.B prt-get list --path --regex '^xorg.*' | grep -v \(dq/usr/ports/xorg\(dq .B prt\-get list \-\-path \-\-regex '^xorg.*' | grep \-v \(dq/usr/ports/xorg\(dq
Show the ports whose names begin with xorg, but which appear outside the xorg port collection. Show the ports whose names begin with xorg, but which appear outside the xorg port collection.
(At the time of writing, this command returned at least two font ports.) (At the time of writing, this command returned at least two font ports.)

View File

@ -20,7 +20,7 @@ It might look like this:
# prt-get.conf # prt-get.conf
# root directories # root directories
prtdir /usr/ports/base prtdir /usr/ports/core
prtdir /usr/ports/opt prtdir /usr/ports/opt
prtdir /usr/ports/contrib prtdir /usr/ports/contrib
@ -128,13 +128,35 @@ replaced with the port's path, e.g. for port gcc in core, %p would be
and %n would be and %n would be
.B gcc. .B gcc.
This allows you to have separate log files per port. This allows you to have separate log files per port.
Separate log files for each version and release can be achieved
using the placeholders %v and %r, respectively. But if you want to enable
\fBrmlog_on_uninst\fP, it is best to avoid %p, %v, and %r when specifying
\fBlogfile\fP (as explained below).
.B rmlog_on_uninst
which can be set to 'yes' or 'no'; when set to yes, uninstalling a
package will also try to delete its build log. Replacements in the template
\fBlogfile\fP will be made using the \fIcurrent values\fP from the database
of installed packages, and from the active repositories. If log files exist
with different values of %p, %v, or %r than what the database and repositories
provide, then the pattern substitutions will fail to match the names of those
logs, and this feature will be a no-op. For example, suppose you specify the
logfile pattern \(dq%p/.buildlogs/%n-%v-%r.log\(dq, and you have a package
installed on your system through many versions, or after it has been
moved from opt to contrib. Uninstalling that package would leave behind all the
build logs except the latest. This pattern is also fragile with respect to
repository purges; if one of your installed ports is dropped from the official
repos, then either \(dq%p\(dq will expand to the path of your personal overlay
(you did make a copy, right?), or it will not expand at all! See the EXAMPLES
section of \fBprt\-get(8)\fP for an alternative way to tidy up your directory
of build logs.
.B readme .B readme
which can be set to 'disabled', to suppress the notification after can be set to 'disabled', to suppress the notification after
installing a port with a README file; 'compact', to collect all the READMEs installing a port with a README file; 'compact', to collect all the READMEs
into one post-transaction output; or 'verbose', to print separate into one post-transaction output; or 'verbose', to print separate
information about each port with a README file. See information about each port with a README file. See
.B prt-get(8) .B prt\-get(8)
and especially the readme command how to read those README files using and especially the readme command how to read those README files using
prt-get. prt-get.
@ -149,13 +171,13 @@ append a comma separated list of ports to be used after the path,
using a colon (':') character to separate the two components using a colon (':') character to separate the two components
.B path:package1, package2,... .B path:package1, package2,...
Note that this slows down prt-get a lot if you list a lot of packages. Note that this slows down prt-get a lot if you list a lot of packages.
If you become aware of speed problems due to this, create a separate If you become aware of speed problems due to this feature, create a separate
ports directory instead and use symlinks for the ports you want to use. ports directory instead and fill it with symlinks to the ports you want.
.LP .LP
You can write comments after a '#' character. If you have '#' You can write comments after a '#' character. If you have '#'
characters in your paths, there's no way to escape them (as there is no characters in your paths, there's no way to escape them (likewise there is
way to escape ':' characters). Complain to the author if this is a no way to escape ':' characters). Complain to the author if this is a
problem :-) problem :-)

View File

@ -1,4 +0,0 @@
EXTRA_DIST = prt-get_complete prt-get.aliases prt-get.deplist prt-get.conf
sysconf_DATA = prt-get.conf

View File

@ -1,403 +0,0 @@
# Makefile.in generated by automake 1.12.2 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2012 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
am__make_dryrun = \
{ \
am__dry=no; \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
*) \
for am__flg in $$MAKEFLAGS; do \
case $$am__flg in \
*=*|--*) ;; \
*n*) am__dry=yes; break;; \
esac; \
done;; \
esac; \
test $$am__dry = yes; \
}
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
subdir = misc
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
$(top_srcdir)/mkinstalldirs
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
SOURCES =
DIST_SOURCES =
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
for p in $$list; do echo "$$p $$p"; done | \
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
if (++n[$$2] == $(am__install_max)) \
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
END { for (dir in files) print dir, files[dir] }'
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__uninstall_files_from_dir = { \
test -z "$$files" \
|| { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
am__installdirs = "$(DESTDIR)$(sysconfdir)"
DATA = $(sysconf_DATA)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build_alias = @build_alias@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
EXTRA_DIST = prt-get_complete prt-get.aliases prt-get.deplist prt-get.conf
sysconf_DATA = prt-get.conf
all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu misc/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu misc/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
install-sysconfDATA: $(sysconf_DATA)
@$(NORMAL_INSTALL)
@list='$(sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \
$(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || exit 1; \
fi; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sysconfdir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \
done
uninstall-sysconfDATA:
@$(NORMAL_UNINSTALL)
@list='$(sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir)
tags: TAGS
TAGS:
ctags: CTAGS
CTAGS:
cscope cscopelist:
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(DATA)
installdirs:
for dir in "$(DESTDIR)$(sysconfdir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am: install-sysconfDATA
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-sysconfDATA
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic distclean \
distclean-generic distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip install-sysconfDATA installcheck installcheck-am \
installdirs maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \
uninstall-am uninstall-sysconfDATA
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@ -17,10 +17,11 @@ prtdir /usr/ports/opt
### log options: ### log options:
# writelog enabled # (enabled|disabled) # writelog enabled # (enabled|disabled)
# logmode overwrite # (append|overwrite) # logmode overwrite # (append|overwrite)
# rm_on_success no # (yes|no) # rmlog_on_success no # (yes|no)
# rmlog_on_uninst no # (yes|no)
logfile /var/log/pkgbuild/%n.log logfile /var/log/pkgbuild/%n.log
# path, %p=path to port dir, %n=port name # %n=port name, %v=version, %r=release
# %v=version, %r=release # %p=path to repository
### print README information: ### print README information:
# readme verbose # (verbose|compact|disabled) # readme verbose # (verbose|compact|disabled)

View File

@ -1,29 +0,0 @@
# Makefile.am for prt-get by Johannes Winkelmann
install-exec-local: install-binPROGRAMS
(cd $(DESTDIR)$(bindir); ln -sf prt-get prt-cache)
bin_PROGRAMS=prt-get
prt_get_SOURCES= argparser.cpp argparser.h\
depresolver.cpp depresolver.h \
installtransaction.cpp installtransaction.h \
main.cpp \
package.cpp package.h \
pkgdb.cpp pkgdb.h \
prtget.cpp prtget.h \
repository.cpp repository.h \
stringhelper.cpp stringhelper.h \
process.cpp process.h \
configuration.cpp configuration.h \
signaldispatcher.cpp signaldispatcher.h \
lockfile.cpp lockfile.h \
file.cpp file.h \
locker.cpp locker.h \
versioncomparator.cpp versioncomparator.h \
datafileparser.cpp datafileparser.h \
pg_regex.cpp pg_regex.h
AM_CPPFLAGS = -DSYSCONFDIR=\"$(sysconfdir)\" \
-DLOCALSTATEDIR=\"$(localstatedir)\"

View File

@ -1,552 +0,0 @@
# Makefile.in generated by automake 1.12.2 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2012 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
# Makefile.am for prt-get by Johannes Winkelmann
VPATH = @srcdir@
am__make_dryrun = \
{ \
am__dry=no; \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
*) \
for am__flg in $$MAKEFLAGS; do \
case $$am__flg in \
*=*|--*) ;; \
*n*) am__dry=yes; break;; \
esac; \
done;; \
esac; \
test $$am__dry = yes; \
}
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
bin_PROGRAMS = prt-get$(EXEEXT)
subdir = src
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
$(top_srcdir)/depcomp $(top_srcdir)/mkinstalldirs
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am__installdirs = "$(DESTDIR)$(bindir)"
PROGRAMS = $(bin_PROGRAMS)
am_prt_get_OBJECTS = argparser.$(OBJEXT) depresolver.$(OBJEXT) \
installtransaction.$(OBJEXT) main.$(OBJEXT) package.$(OBJEXT) \
pkgdb.$(OBJEXT) prtget.$(OBJEXT) repository.$(OBJEXT) \
stringhelper.$(OBJEXT) process.$(OBJEXT) \
configuration.$(OBJEXT) signaldispatcher.$(OBJEXT) \
lockfile.$(OBJEXT) file.$(OBJEXT) locker.$(OBJEXT) \
versioncomparator.$(OBJEXT) datafileparser.$(OBJEXT) \
pg_regex.$(OBJEXT)
prt_get_OBJECTS = $(am_prt_get_OBJECTS)
prt_get_LDADD = $(LDADD)
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
CXXLD = $(CXX)
CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
-o $@
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(prt_get_SOURCES)
DIST_SOURCES = $(prt_get_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build_alias = @build_alias@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
prt_get_SOURCES = argparser.cpp argparser.h\
depresolver.cpp depresolver.h \
installtransaction.cpp installtransaction.h \
main.cpp \
package.cpp package.h \
pkgdb.cpp pkgdb.h \
prtget.cpp prtget.h \
repository.cpp repository.h \
stringhelper.cpp stringhelper.h \
process.cpp process.h \
configuration.cpp configuration.h \
signaldispatcher.cpp signaldispatcher.h \
lockfile.cpp lockfile.h \
file.cpp file.h \
locker.cpp locker.h \
versioncomparator.cpp versioncomparator.h \
datafileparser.cpp datafileparser.h \
pg_regex.cpp pg_regex.h
AM_CPPFLAGS = -DSYSCONFDIR=\"$(sysconfdir)\" \
-DLOCALSTATEDIR=\"$(localstatedir)\"
all: all-am
.SUFFIXES:
.SUFFIXES: .cpp .o .obj
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu src/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
$(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
fi; \
for p in $$list; do echo "$$p $$p"; done | \
sed 's/$(EXEEXT)$$//' | \
while read p p1; do if test -f $$p; \
then echo "$$p"; echo "$$p"; else :; fi; \
done | \
sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
sed 'N;N;N;s,\n, ,g' | \
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
{ d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
if ($$2 == $$4) files[d] = files[d] " " $$1; \
else { print "f", $$3 "/" $$4, $$1; } } \
END { for (d in files) print "f", d, files[d] }' | \
while read type dir files; do \
if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
test -z "$$files" || { \
echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
$(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
} \
; done
uninstall-binPROGRAMS:
@$(NORMAL_UNINSTALL)
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
files=`for p in $$list; do echo "$$p"; done | \
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-e 's/$$/$(EXEEXT)/' `; \
test -n "$$list" || exit 0; \
echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(bindir)" && rm -f $$files
clean-binPROGRAMS:
-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
prt-get$(EXEEXT): $(prt_get_OBJECTS) $(prt_get_DEPENDENCIES) $(EXTRA_prt_get_DEPENDENCIES)
@rm -f prt-get$(EXEEXT)
$(CXXLINK) $(prt_get_OBJECTS) $(prt_get_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argparser.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/configuration.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/datafileparser.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/depresolver.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/installtransaction.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/locker.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lockfile.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/package.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pg_regex.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkgdb.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/process.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prtget.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/repository.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signaldispatcher.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stringhelper.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/versioncomparator.Po@am__quote@
.cpp.o:
@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
.cpp.obj:
@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
set x; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: $(HEADERS) $(SOURCES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(PROGRAMS)
installdirs:
for dir in "$(DESTDIR)$(bindir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am: install-binPROGRAMS install-exec-local
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-binPROGRAMS
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
clean-generic cscopelist ctags distclean distclean-compile \
distclean-generic distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-binPROGRAMS \
install-data install-data-am install-dvi install-dvi-am \
install-exec install-exec-am install-exec-local install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-binPROGRAMS
install-exec-local: install-binPROGRAMS
(cd $(DESTDIR)$(bindir); ln -sf prt-get prt-cache)
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@ -30,13 +30,15 @@ Configuration::Configuration( const std::string& configFile,
m_writeLog( false ), m_writeLog( false ),
m_appendLog( false ), m_appendLog( false ),
m_removeLogOnSuccess( false ), m_removeLogOnSuccess( false ),
m_removeLogOnUninst( false ),
m_readmeMode( VERBOSE_README ), m_readmeMode( VERBOSE_README ),
m_runScripts( false ), m_runScripts( false ),
m_preferHigher( false ), m_preferHigher( false ),
m_useRegex( false ), m_useRegex( false ),
m_followSoftdeps( false ), m_followSoftdeps( false ),
m_makeCommand( "" ), m_addCommand( "" ), m_makeCommand( "" ), m_addCommand( "" ),
m_removeCommand( "" ), m_runscriptCommand( "" ) m_removeCommand( "" ), m_runscriptCommand( "" ),
m_packageDir( "" ), m_compressionMode( "" )
{ {
} }
@ -84,11 +86,35 @@ bool Configuration::removeLogOnSuccess() const
return m_removeLogOnSuccess; return m_removeLogOnSuccess;
} }
bool Configuration::removeLogOnUninst() const
{
return m_removeLogOnUninst;
}
string Configuration::logFilePattern() const string Configuration::logFilePattern() const
{ {
return m_logFilePattern; return m_logFilePattern;
} }
string Configuration::packageDir() const
{
string value = "";
char line[256];
string cmd = "eval " + m_packageDir + " && echo \"$PKGMK_PACKAGE_DIR\"";
FILE* p = popen(cmd.c_str(), "r");
if (p) {
fgets(line, 256, p);
value = StringHelper::stripWhiteSpace(line);
pclose(p);
}
return value;
}
string Configuration::compressionMode() const
{
return ( m_compressionMode == "" ) ? "gz" : m_compressionMode;
}
const list< pair<string, string> >& Configuration::rootList() const const list< pair<string, string> >& Configuration::rootList() const
{ {
@ -171,6 +197,13 @@ void Configuration::parseLine(const string& line, bool prepend)
} else if ( s == "no" ) { } else if ( s == "no" ) {
m_removeLogOnSuccess = false; m_removeLogOnSuccess = false;
} }
} else if ( startsWithNoCase( s, "rmlog_on_uninst" ) ) {
s = stripWhiteSpace( s.replace( 0, 15, "" ) );
if ( s == "yes" ) {
m_removeLogOnUninst = true;
} else if ( s == "no" ) {
m_removeLogOnUninst = false;
}
} else if ( startsWithNoCase( s, "readme" ) ) { } else if ( startsWithNoCase( s, "readme" ) ) {
s = stripWhiteSpace( s.replace( 0, 6, "" ) ); s = stripWhiteSpace( s.replace( 0, 6, "" ) );
if ( s == "compact" ) { if ( s == "compact" ) {
@ -215,6 +248,32 @@ void Configuration::parseLine(const string& line, bool prepend)
} }
} }
bool Configuration::parsePkgmkConf(int readOrder)
{
string fileName = (readOrder == 1) ? "/etc/pkgmk.conf" : "/usr/bin/pkgmk";
FILE* fp = fopen(fileName.c_str(), "r");
if (!fp)
return false;
string s;
char line[256];
while (fgets(line, 256, fp)) {
s = StringHelper::stripWhiteSpace(getValueBefore(line,'#'));
if ( StringHelper::startsWith(s, "PKGMK_COMPRESSION_MODE=") &&
(readOrder==1 || m_compressionMode == "") ) {
m_compressionMode = s.substr(23);
StringHelper::replaceAll(m_compressionMode,"\"","");
StringHelper::replaceAll(m_compressionMode,"'","");
} else if ( StringHelper::startsWith(s, "PKGMK_PACKAGE_DIR=") &&
(readOrder==1 || m_packageDir == "" ) ) {
m_packageDir = s;
}
}
fclose(fp);
return ( m_compressionMode != "" && m_packageDir != "" );
}
bool Configuration::runScripts() const bool Configuration::runScripts() const
{ {
return m_runScripts; return m_runScripts;
@ -252,6 +311,6 @@ bool Configuration::useRegex() const
bool Configuration::followSoftdeps() const bool Configuration::followSoftdeps() const
{ {
return m_followSoftdeps; return ( m_followSoftdeps || m_parser->followSoftdeps() );
} }

View File

@ -30,6 +30,7 @@ public:
bool writeLog() const; bool writeLog() const;
bool appendLog() const; bool appendLog() const;
bool removeLogOnSuccess() const; bool removeLogOnSuccess() const;
bool removeLogOnUninst() const;
std::string logFilePattern() const; std::string logFilePattern() const;
const std::list< std::pair<std::string, std::string> >& rootList() const; const std::list< std::pair<std::string, std::string> >& rootList() const;
@ -45,6 +46,8 @@ public:
bool useRegex() const; bool useRegex() const;
bool followSoftdeps() const; bool followSoftdeps() const;
bool parsePkgmkConf(int readOrder);
void addConfig(const std::string& line, void addConfig(const std::string& line,
bool configSet, bool configSet,
bool configPrepend); bool configPrepend);
@ -53,6 +56,8 @@ public:
std::string addCommand() const; std::string addCommand() const;
std::string removeCommand() const; std::string removeCommand() const;
std::string runscriptCommand() const; std::string runscriptCommand() const;
std::string packageDir() const;
std::string compressionMode() const;
private: private:
std::string m_configFile; std::string m_configFile;
@ -67,6 +72,7 @@ private:
bool m_writeLog; bool m_writeLog;
bool m_appendLog; bool m_appendLog;
bool m_removeLogOnSuccess; bool m_removeLogOnSuccess;
bool m_removeLogOnUninst;
ReadmeMode m_readmeMode; ReadmeMode m_readmeMode;
@ -80,6 +86,8 @@ private:
std::string m_removeCommand; std::string m_removeCommand;
std::string m_runscriptCommand; std::string m_runscriptCommand;
std::string m_packageDir;
std::string m_compressionMode;
void parseLine(const std::string& line, bool prepend=false); void parseLine(const std::string& line, bool prepend=false);
}; };

View File

@ -184,8 +184,19 @@ InstallTransaction::install( const ArgParser* parser,
InstallTransaction::InstallResult result; InstallTransaction::InstallResult result;
InstallInfo info( package->hasReadme() ); InstallInfo info( package->hasReadme() );
if ( parser->isTest() || if ( parser->isTest() ) {
(result = installPackage( package, parser, update, info )) == SUCCESS) { info.preState = ( package->hasPreInstall() &&
(parser->execPreInstall() || m_config->runScripts())
) ? DEFERRED : NONEXISTENT;
info.postState = ( package->hasPostInstall() &&
(parser->execPostInstall() || m_config->runScripts())
) ? DEFERRED : NONEXISTENT;
m_installedPackages.push_back( make_pair(package->path()
+ "/" + package->name(), info) );
continue;
}
if ((result = installPackage( package, parser, update, info )) == SUCCESS) {
m_installedPackages.push_back( make_pair( package->path() m_installedPackages.push_back( make_pair( package->path()
+ "/" + package->name(), info)); + "/" + package->name(), info));
@ -241,7 +252,7 @@ InstallTransaction::installPackage( const Package* package,
commandName = "prt-cache"; commandName = "prt-cache";
} }
// - initial information about the package to be build // - initial information about the package to be built
string message; string message;
message = commandName + ": "; message = commandName + ": ";
if (update) { if (update) {
@ -313,10 +324,9 @@ InstallTransaction::installPackage( const Package* package,
// -- pre-install // -- pre-install
struct stat statData; struct stat statData;
if ((parser->execPreInstall() || m_config->runScripts()) && if ((parser->execPreInstall() || m_config->runScripts()) &&
stat((pkgdir + "/" + "pre-install").c_str(), &statData) == 0) { stat((parser->installRoot() + pkgdir + "/" + "pre-install").c_str(),
Process preProc( runscriptCommand, &statData) == 0) {
pkgdir + "/" + "pre-install", Process preProc( runscriptCommand, pkgdir + "/" + "pre-install", fdlog );
fdlog );
if (preProc.executeShell()) { if (preProc.executeShell()) {
info.preState = FAILED; info.preState = FAILED;
} else { } else {
@ -331,12 +341,18 @@ InstallTransaction::installPackage( const Package* package,
} }
string args = "-d " + parser->pkgmkArgs(); string args = "-d " + parser->pkgmkArgs();
// do not force a rebuild unless the port was given on the command line
if ( parser->pkgmkArgs().find(" -f")!=string::npos &&
find(parser->otherArgs().begin(), parser->otherArgs().end(),
package->name()) == parser->otherArgs().end() ) {
StringHelper::replaceAll(args," -f", "");
}
Process makeProc( cmd, args, fdlog ); Process makeProc( cmd, args, fdlog );
if ( makeProc.executeShell() ) { if ( makeProc.executeShell() ) {
result = PKGMK_FAILURE; result = PKGMK_FAILURE;
} else { } else {
// -- update // -- update
string pkgdest = getPkgmkPackageDir(); string pkgdest = m_config->packageDir();
if ( pkgdest != "" ) { if ( pkgdest != "" ) {
// TODO: don't manipulate pkgdir // TODO: don't manipulate pkgdir
pkgdir = pkgdest; pkgdir = pkgdest;
@ -374,7 +390,7 @@ InstallTransaction::installPackage( const Package* package,
args += args +=
package->name() + "#" + package->name() + "#" +
package->version() + "-" + package->version() + "-" +
package->release() + ".pkg.tar." + getPkgmkCompressionMode(); package->release() + ".pkg.tar." + m_config->compressionMode();
// - inform the user about what's happening // - inform the user about what's happening
@ -421,14 +437,12 @@ InstallTransaction::installPackage( const Package* package,
} else { } else {
// exec post install // exec post install
if ((parser->execPostInstall() || m_config->runScripts() ) && if ((parser->execPostInstall() || m_config->runScripts() ) &&
stat((package->path() + "/" + package->name() + stat((parser->installRoot() + "/" + package->path() + "/"
"/" + "post-install").c_str(), &statData) + package->name() + "/" + "post-install").c_str(),
== 0) { &statData) == 0) {
// Work around the pkgdir variable change // Work around the pkgdir variable change
Process postProc( runscriptCommand, Process postProc( runscriptCommand, package->path() + "/"
package->path() + "/" + package->name()+ + package->name() + "/post-install", fdlog );
"/" + "post-install",
fdlog );
if (postProc.executeShell()) { if (postProc.executeShell()) {
info.postState = FAILED; info.postState = FAILED;
} else { } else {
@ -470,7 +484,6 @@ bool InstallTransaction::calculateDependencies()
return false; return false;
} }
vector<string> treeWalk;
list< pair<string, const Package*> >::const_iterator it = list< pair<string, const Package*> >::const_iterator it =
m_packages.begin(); m_packages.begin();
for ( ; it != m_packages.end(); ++it ) { for ( ; it != m_packages.end(); ++it ) {
@ -516,8 +529,8 @@ void InstallTransaction::checkDependencies( bool greedy,
if ( index == -1 ) { if ( index == -1 ) {
index = m_depList.size(); index = m_depList.size();
if (( not greedy ) or ( m_pkgDB->isInstalled(package->name(),false) )) { if ( (!greedy) or isRequired( package->name() ) ) {
m_depList.push_back( package->name() ); m_depList.push_back( package->name() );
} }
} }
@ -545,41 +558,31 @@ void InstallTransaction::checkDependencies( bool greedy,
list<string>::iterator it = deps.begin(); list<string>::iterator it = deps.begin();
for ( ; it != deps.end(); ++it ) { for ( ; it != deps.end(); ++it ) {
string dep = *it; string dep = *it;
if ( !dep.empty() ) { if ( dep.empty() ) { continue; }
string::size_type pos = dep.find_last_of( '/' ); const Package* p = m_repo->getPackage( dep );
if ( pos != string::npos && (pos+1) < dep.length() ) { if ( p ) {
dep = dep.substr( pos + 1 ); checkDependencies( greedy, p, index );
} } else {
const Package* p = m_repo->getPackage( dep ); m_missingPackages.
if ( p ) { push_back( make_pair( dep, package->name() ) );
checkDependencies( greedy, p, index );
} else {
m_missingPackages.
push_back( make_pair( dep, package->name() ) );
}
} }
} }
} }
if ( (m_config->followSoftdeps()) and (!package->optionals().empty()) ) { if ( (m_config->followSoftdeps()) and (!package->optionals().empty()) ) {
list<string> softDeps; list<string> optionals;
split( package->optionals(), ',', softDeps ); split( package->optionals(), ',', optionals );
list<string>::iterator it = softDeps.begin(); list<string>::iterator it = optionals.begin();
for ( ; it != softDeps.end(); ++it ) { for ( ; it != optionals.end(); ++it ) {
string softdep = *it; string softdep = *it;
if ( !softdep.empty() ) { if ( softdep.empty() ) { continue; }
string::size_type pos = softdep.find_last_of( '/' ); if ( isRequired(softdep) ) {
if ( pos != string::npos && (pos+1) < softdep.length() ) { const Package* p = m_repo->getPackage( softdep );
softdep = softdep.substr( pos + 1 ); if ( p ) {
checkDependencies( true, p, index );
} else {
m_missingPackages.
push_back( make_pair( softdep, package->name() ) );
} }
if ( m_pkgDB->isInstalled(softdep, false) or isRequested(softdep) ) {
const Package* p = m_repo->getPackage( softdep );
if ( p ) {
checkDependencies( true, p, index );
} else {
m_missingPackages.
push_back( make_pair( softdep, package->name() ) );
}
}
} }
} }
} }
@ -590,12 +593,13 @@ void InstallTransaction::checkDependencies( bool greedy,
} }
/*! /*!
Method to determine whether a package was passed on the command line Method to determine whether a soft dependency should be part of the transaction
*/ */
bool InstallTransaction::isRequested(const string pname) { bool InstallTransaction::isRequired(const string &pname) {
if ( m_pkgDB->isInstalled(pname,false) ) { return true; }
list< pair<string, const Package*> >::iterator it = m_packages.begin(); list< pair<string, const Package*> >::iterator it = m_packages.begin();
for ( ; it != m_packages.end(); ++it ) { for ( ; it != m_packages.end(); ++it ) {
if ( it->first == pname ) { return true; } if ( pname == it->first ) { return true; }
} }
return false; return false;
} }
@ -669,7 +673,7 @@ InstallTransaction::calcDependencies( )
} }
} }
if ( !validPackages ) { if ( !validPackages ) {
return PACKAGE_NOT_FOUND; return NO_PACKAGE_GIVEN;
} }
if ( !calculateDependencies() ) { if ( !calculateDependencies() ) {
@ -679,64 +683,7 @@ InstallTransaction::calcDependencies( )
} }
/*
* getPkgDest assumes that you're in the build directory already
*/
string InstallTransaction::getPkgmkSetting(const string& setting)
{
string value = "";
value = getPkgmkSettingFromFile(setting, "/etc/pkgmk.conf");
if (value.size() == 0) {
value = getPkgmkSettingFromFile(setting, "/usr/bin/pkgmk");
}
return value;
}
string InstallTransaction::getPkgmkSettingFromFile(const string& setting, const string& fileName)
{
FILE* fp = fopen(fileName.c_str(), "r");
if (!fp)
return "";
string candidate;
string s;
char line[256];
while (fgets(line, 256, fp)) {
s = StringHelper::stripWhiteSpace(line);
if (StringHelper::startsWith(s, setting + "=")) {
candidate = s;
}
}
fclose(fp);
string value = "";
if (candidate.length() > 0) {
string cmd = "eval " + candidate + " && echo $" + setting;
FILE* p = popen(cmd.c_str(), "r");
if (p) {
fgets(line, 256, p);
value = StringHelper::stripWhiteSpace(line);
fclose(p);
}
}
return value;
}
const list<string>& InstallTransaction::ignoredPackages() const const list<string>& InstallTransaction::ignoredPackages() const
{ {
return m_ignoredPackages; return m_ignoredPackages;
} }
string InstallTransaction::getPkgmkPackageDir()
{
return getPkgmkSetting("PKGMK_PACKAGE_DIR");
}
string InstallTransaction::getPkgmkCompressionMode()
{
string value = getPkgmkSetting("PKGMK_COMPRESSION_MODE");
return value.size() ? value : "gz";
}

View File

@ -56,9 +56,7 @@ public:
SUCCESS, /*!< yeah, success */ SUCCESS, /*!< yeah, success */
NO_PACKAGE_GIVEN, /*!< no package give to install */ NO_PACKAGE_GIVEN, /*!< no package give to install */
PACKAGE_NOT_FOUND, /*!< package not found */ PACKAGE_NOT_FOUND, /*!< package not found */
PKGMK_EXEC_ERROR, /*!< can't execute pkgmk */
PKGMK_FAILURE, /*!< error while pkgmk */ PKGMK_FAILURE, /*!< error while pkgmk */
PKGADD_EXEC_ERROR, /*!< can't execute pkgadd */
PKGDEST_ERROR, /*!< can't change to PKGDEST */ PKGDEST_ERROR, /*!< can't change to PKGDEST */
PKGADD_FAILURE, /*!< error while pkgadd */ PKGADD_FAILURE, /*!< error while pkgadd */
CYCLIC_DEPEND, /*!< cyclic dependencies found */ CYCLIC_DEPEND, /*!< cyclic dependencies found */
@ -69,6 +67,7 @@ public:
}; };
enum State { enum State {
DEFERRED,
EXEC_SUCCESS, EXEC_SUCCESS,
FAILED, FAILED,
NONEXISTENT NONEXISTENT
@ -97,9 +96,6 @@ public:
const list< pair<string,string> >& missing() const; const list< pair<string,string> >& missing() const;
const list< pair<string, InstallInfo> >& installError() const; const list< pair<string, InstallInfo> >& installError() const;
static string getPkgmkPackageDir();
static string getPkgmkCompressionMode();
private: private:
bool calculateDependencies(); bool calculateDependencies();
void checkDependencies( bool greedy, const Package* package, int depends=-1 ); void checkDependencies( bool greedy, const Package* package, int depends=-1 );
@ -108,11 +104,7 @@ private:
const ArgParser* parser, const ArgParser* parser,
bool update, bool update,
InstallInfo& info ) const; InstallInfo& info ) const;
bool isRequested(const string pname); bool isRequired(const string &pname);
static string getPkgmkSetting(const string& setting);
static string getPkgmkSettingFromFile(const string& setting,
const string& fileName);
PkgDB* m_pkgDB; PkgDB* m_pkgDB;
DepResolver m_resolver; DepResolver m_resolver;

View File

@ -124,7 +124,7 @@ const string& Package::maintainer() const
} }
/*! \return whether or not this package has a readme file */ /*! \return whether or not this package has a readme file */
const bool Package::hasReadme() const bool Package::hasReadme() const
{ {
load(); load();
return m_data->hasReadme; return m_data->hasReadme;
@ -137,12 +137,12 @@ string Package::versionReleaseString() const
return m_data->versionReleaseString; return m_data->versionReleaseString;
} }
const bool Package::hasPreInstall() const bool Package::hasPreInstall() const
{ {
return m_data->hasPreInstall; return m_data->hasPreInstall;
} }
const bool Package::hasPostInstall() const bool Package::hasPostInstall() const
{ {
return m_data->hasPostInstall; return m_data->hasPostInstall;
} }
@ -213,50 +213,17 @@ void Package::load() const
StringHelper::replaceAll( softdeps, " ", "," ); StringHelper::replaceAll( softdeps, " ", "," );
StringHelper::replaceAll( softdeps, ",,", "," ); StringHelper::replaceAll( softdeps, ",,", "," );
StringHelper::replaceAll( softdeps, "(", "" );
StringHelper::replaceAll( softdeps, ")", "" );
// TODO: decide which one to use
#if 0
// remove commented out packages
list<string> softDepList = StringHelper::split( softdeps, ',' );
list<string>::iterator it = deps.begin();
for ( ; it != softDepList.end(); ++it ) {
if ( (*it)[0] == '#' ) {
cerr << "Commented dep: " << *it << endl;
} else {
if ( it != softDepsList.begin() ) {
m_data->optionals += ",";
}
m_data->optionals += *it;
}
}
#else
m_data->optionals = softdeps; m_data->optionals = softdeps;
#endif
} else if ( startsWithNoCase( line, "dep" ) ) { } else if ( startsWithNoCase( line, "dep" ) ) {
string depends = stripWhiteSpace( getValue( line, ':' ) ); string depends = stripWhiteSpace( getValue( line, ':' ) );
StringHelper::replaceAll( depends, " ", "," ); StringHelper::replaceAll( depends, " ", "," );
StringHelper::replaceAll( depends, ",,", "," ); StringHelper::replaceAll( depends, ",,", "," );
// TODO: decide which one to use
#if 0
// remove commented out packages
list<string> deps = StringHelper::split( depends, ',' );
list<string>::iterator it = deps.begin();
for ( ; it != deps.end(); ++it ) {
if ( (*it)[0] == '#' ) {
cerr << "Commented dep: " << *it << endl;
} else {
if ( it != deps.begin() ) {
m_data->depends += ",";
}
m_data->depends += *it;
}
}
#else
m_data->depends = depends; m_data->depends = depends;
#endif
} }
} }
} }
@ -345,11 +312,9 @@ void Package::expandShellCommands(std::string& input,
pos = 0; pos = 0;
while ((pos = input.find(startTag[i], pos)) != string::npos) { while ((pos = input.find(startTag[i], pos)) != string::npos) {
if (unameBuf.release) { input = replaceAll(input,
input = replaceAll(input, startTag[i] + "uname -r" + endTag[i],
startTag[i] + "uname -r" + endTag[i], unameBuf.release);
unameBuf.release);
}
dpos = input.find(startTag[i] + "date"); dpos = input.find(startTag[i] + "date");
if (dpos != string::npos) { if (dpos != string::npos) {

View File

@ -52,9 +52,9 @@ public:
const std::string& url() const; const std::string& url() const;
const std::string& optionals() const; const std::string& optionals() const;
const std::string& maintainer() const; const std::string& maintainer() const;
const bool hasReadme() const; bool hasReadme() const;
const bool hasPreInstall() const; bool hasPreInstall() const;
const bool hasPostInstall() const; bool hasPostInstall() const;
std::string versionReleaseString() const; std::string versionReleaseString() const;

View File

@ -68,9 +68,9 @@ int Process::execute()
int status = 0; int status = 0;
if ( m_fdlog > 0 ) { if ( m_fdlog > 0 ) {
status = execLog(argc, argv); status = execLog(argv);
} else { } else {
status = exec(argc, argv); status = exec(argv);
} }
delete [] argv; delete [] argv;
@ -78,7 +78,7 @@ int Process::execute()
} }
int Process::execLog(const int argc, char** argv) int Process::execLog(char** argv)
{ {
int status = 0; int status = 0;
int fdpipe[2]; int fdpipe[2];
@ -123,7 +123,7 @@ int Process::execLog(const int argc, char** argv)
} }
int Process::exec(const int argc, char** argv) int Process::exec(char** argv)
{ {
int status = 0; int status = 0;
pid_t pid = fork(); pid_t pid = fork();

View File

@ -32,8 +32,8 @@ public:
private: private:
int exec(const int argc, char** argv); int exec(char** argv);
int execLog(const int argc, char** argv); int execLog(char** argv);
int execShell(const char* shell); int execShell(const char* shell);
int execShellLog(const char* shell); int execShellLog(const char* shell);

View File

@ -70,8 +70,8 @@ PrtGet::PrtGet( const ArgParser* parser )
m_pkgDB = new PkgDB(m_parser->installRoot()); m_pkgDB = new PkgDB(m_parser->installRoot());
readConfig(); readConfig();
m_useRegex = m_config->useRegex() || m_parser->useRegex(); m_useRegex = ( m_config->useRegex() || m_parser->useRegex() );
m_followSoftdeps = m_config->followSoftdeps() || m_parser->followSoftdeps(); m_followSoftdeps = ( m_config->followSoftdeps() || m_parser->followSoftdeps() );
} }
/*! destruct PrtGet object */ /*! destruct PrtGet object */
@ -289,8 +289,13 @@ void PrtGet::listShadowed()
StringHelper::replaceAll(output, "%p2", p2->path() + "/" + p2->name()); StringHelper::replaceAll(output, "%p2", p2->path() + "/" + p2->name());
StringHelper::replaceAll(output, "%v1", p1->versionReleaseString()); StringHelper::replaceAll(output, "%v1", p1->versionReleaseString());
StringHelper::replaceAll(output, "%v2", p2->versionReleaseString()); StringHelper::replaceAll(output, "%v2", p2->versionReleaseString());
StringHelper::replaceAll(output, "%M1", p1->maintainer());
StringHelper::replaceAll(output, "%M2", p2->maintainer());
StringHelper::replaceAll(output, "%u1", p1->url());
StringHelper::replaceAll(output, "%u2", p2->url());
StringHelper::replaceAll(output, "\\n", "\n"); StringHelper::replaceAll(output, "\\n", "\n");
StringHelper::replaceAll(output, "\\t", "\t");
cout << output; cout << output;
} }
} }
@ -609,23 +614,29 @@ void PrtGet::install( bool update, bool dependencies )
} }
} else { } else {
for ( ; it != args.end(); ++it ) { for ( ; it != args.end(); ++it ) {
string s = *it; string s = *it;
if ( m_pkgDB->isInstalled( s ) ) { if ( m_pkgDB->isInstalled( s ) ) {
// pkgadd will fail on these, since it won't be given the -u flag // pkgadd will fail on these, since it won't be given the -u flag
invalidArgs.push_back( s ); invalidArgs.push_back( s );
} }
} }
} }
if ( invalidArgs.size() > 0 ) { if ( (invalidArgs.size() > 0 && update) ||
string attemptedOp = ( update ) ? "update" : "install"; (invalidArgs.size() == args.size() && !update) ) {
attemptedOp += " the following packages "; string invalidHeader = "-- Packages installed before this run (ignored)";
attemptedOp += ( update ) ? "(not yet installed)" : "(already installed)"; if (update) { invalidHeader = "-- Cannot update the following (not yet installed)"; }
cout << "cannot "<< attemptedOp <<endl; if (m_parser->isTest()) {
cout << "*** prt-get: test mode" << endl << endl;
}
cout << invalidHeader << endl;
list<string>::const_iterator it = invalidArgs.begin(); list<string>::const_iterator it = invalidArgs.begin();
for ( ; it != invalidArgs.end(); ++it ) { for ( ; it != invalidArgs.end(); ++it ) {
cout << *it << endl; cout << *it << endl;
} }
if (m_parser->isTest()) {
cout << "*** prt-get: test mode end" << endl;
}
m_returnValue = PG_GENERAL_ERROR ; m_returnValue = PG_GENERAL_ERROR ;
return; return;
} }
@ -644,18 +655,17 @@ void PrtGet::install( bool update, bool dependencies )
cerr << "prt-get: cyclic dependencies found" << endl; cerr << "prt-get: cyclic dependencies found" << endl;
m_returnValue = PG_GENERAL_ERROR; m_returnValue = PG_GENERAL_ERROR;
return; return;
} else if ( result == InstallTransaction::PACKAGE_NOT_FOUND ) {
warnPackageNotFound(depTransaction);
m_returnValue = PG_GENERAL_ERROR;
return;
} }
const list<string>& depRef = depTransaction.dependencies(); list<string> deps = depTransaction.dependencies();
list<string>::const_iterator it = depRef.begin(); const list< pair<string, string> >& depMissing = depTransaction.missing();
list< pair<string,string> >::const_iterator it = depMissing.begin();
list<string> deps; // ensure that missing ports are retained for the post-transaction
for (; it != depRef.end(); ++it) { // summary (FS#1843). Exempt any ports that were installed manually
if (!m_pkgDB->isInstalled(*it)) { // or from a repo that has since been deactivated.
deps.push_back(*it); for (; it != depMissing.end(); ++it) {
if (! m_pkgDB->isInstalled(it->first)) {
deps.push_back(it->first);
} }
} }
@ -692,11 +702,6 @@ void PrtGet::executeTransaction( InstallTransaction& transaction,
case InstallTransaction::PACKAGE_NOT_FOUND: case InstallTransaction::PACKAGE_NOT_FOUND:
cout << m_appName << ": package(s) not found" << endl; cout << m_appName << ": package(s) not found" << endl;
break; break;
case InstallTransaction::PKGMK_EXEC_ERROR:
cout << m_appName << " couldn't excecute pkgmk "
<< "(or alternative command). "
<< "Make sure it's installed properly" << endl;
break;
case InstallTransaction::PKGMK_FAILURE: case InstallTransaction::PKGMK_FAILURE:
cout << m_appName << ": error while " << command[0] << endl; cout << m_appName << ": error while " << command[0] << endl;
break; break;
@ -704,13 +709,9 @@ void PrtGet::executeTransaction( InstallTransaction& transaction,
cout << m_appName << ": no package specified for " cout << m_appName << ": no package specified for "
<< command[0] << endl; << command[0] << endl;
break; break;
case InstallTransaction::PKGADD_EXEC_ERROR:
cout << m_appName << " couldn't excecute pkgadd. "
<< "Make sure it's installed properly" << endl;
break;
case InstallTransaction::PKGDEST_ERROR: case InstallTransaction::PKGDEST_ERROR:
cout << m_appName << ": error changing to PKGDEST directory " cout << m_appName << ": error changing to PKGDEST directory "
<< transaction.getPkgmkPackageDir() << endl; << m_config->packageDir() << endl;
failed = true; failed = true;
break; break;
case InstallTransaction::PKGADD_FAILURE: case InstallTransaction::PKGADD_FAILURE:
@ -857,6 +858,10 @@ void PrtGet::readConfig()
} }
} }
if (!m_config->parsePkgmkConf(1)) {
m_config->parsePkgmkConf(0);
}
const list< pair<char*, ArgParser::ConfigArgType> >& configData = const list< pair<char*, ArgParser::ConfigArgType> >& configData =
m_parser->configData(); m_parser->configData();
list< pair<char*, ArgParser::ConfigArgType> >::const_iterator it = list< pair<char*, ArgParser::ConfigArgType> >::const_iterator it =
@ -1177,7 +1182,7 @@ void PrtGet::evaluateResult( InstallTransaction& transaction,
cout << endl; cout << endl;
if ( errors == 0 && !interrupted ) { if ( inst.size() && errors == 0 && !interrupted ) {
cout << "prt-get: " << command[1] << " successfully" << endl; cout << "prt-get: " << command[1] << " successfully" << endl;
} else { } else {
m_returnValue = PG_PARTIAL_INSTALL_ERROR; m_returnValue = PG_PARTIAL_INSTALL_ERROR;
@ -1186,20 +1191,21 @@ void PrtGet::evaluateResult( InstallTransaction& transaction,
void PrtGet::reportPrePost(const InstallTransaction::InstallInfo& info) { void PrtGet::reportPrePost(const InstallTransaction::InstallInfo& info) {
if (info.preState != InstallTransaction::NONEXISTENT) { if (info.preState != InstallTransaction::NONEXISTENT) {
string preString = "failed"; string preString =
if (info.preState == InstallTransaction::EXEC_SUCCESS) { (info.preState == InstallTransaction::FAILED) ? "failed" : "ok";
preString = "ok"; if (info.preState == InstallTransaction::DEFERRED) {
preString = "deferred";
} }
cout << " [pre: " << preString << "]"; cout << " [pre: " << preString << "]";
} }
if ( info.postState != InstallTransaction::NONEXISTENT) { if ( info.postState != InstallTransaction::NONEXISTENT) {
string postString = "failed"; string postString =
if (info.postState == InstallTransaction::EXEC_SUCCESS){ (info.postState == InstallTransaction::FAILED) ? "failed" : "ok";
postString = "ok"; if (info.postState == InstallTransaction::DEFERRED) {
postString = "deferred";
} }
cout << " [post: " << postString << "]"; cout << " [post: " << postString << "]";
} }
} }
/*! create a cache */ /*! create a cache */
@ -1268,7 +1274,7 @@ void PrtGet::printf()
assertExactArgCount(1); assertExactArgCount(1);
initRepo(); initRepo();
string filter = m_parser->useRegex() ? "." : "*"; string filter = m_useRegex ? ".*" : "*";
if ( m_parser->hasFilter() ) { if ( m_parser->hasFilter() ) {
filter = m_parser->filter(); filter = m_parser->filter();
} }
@ -1676,7 +1682,7 @@ void PrtGet::current()
m_returnValue = 1; m_returnValue = 1;
} }
SignalHandler::HandlerResult PrtGet::handleSignal( int signal ) SignalHandler::HandlerResult PrtGet::handleSignal()
{ {
// TODO: second argument could also be true: // TODO: second argument could also be true:
// TODO: kill installtransaction // TODO: kill installtransaction
@ -1926,12 +1932,17 @@ void PrtGet::remove()
{ {
assertMinArgCount(1); assertMinArgCount(1);
bool needRepo = false;
list<string> removed; list<string> removed;
list<string> failed; list<string> failed;
list<string> notInstalled; list<string> notInstalled;
if ( m_parser->isTest() ) { if ( m_parser->isTest() ) {
cout << "*** " << m_appName << ": test mode" << endl; cout << "*** " << m_appName << ": test mode" << endl;
} else if ( m_config->removeLogOnUninst()
&& m_config->logFilePattern().find("%p") != string::npos ) {
needRepo = true;
initRepo();
} }
string command = InstallTransaction::PKGRM_DEFAULT_COMMAND; string command = InstallTransaction::PKGRM_DEFAULT_COMMAND;
@ -1943,20 +1954,48 @@ void PrtGet::remove()
list<char*>::const_iterator it = args.begin(); list<char*>::const_iterator it = args.begin();
for ( ; it != args.end(); ++it ) { for ( ; it != args.end(); ++it ) {
if (m_pkgDB->isInstalled(*it)) { if (m_pkgDB->isInstalled(*it)) {
// TODO: prettify string rm_args = "";
string args = "";
if (m_parser->installRoot() != "") { if (m_parser->installRoot() != "") {
args = "-r " + m_parser->installRoot() + " "; rm_args = "-r " + m_parser->installRoot() + " ";
} }
args += (m_parser->pkgrmArgs() + " " + *it); rm_args += (m_parser->pkgrmArgs() + " " + *it);
Process proc(command, args); Process proc(command, rm_args);
if (m_parser->isTest() || proc.executeShell() == 0) { if (m_parser->isTest() || proc.executeShell() == 0) {
removed.push_back(*it); removed.push_back(*it);
if (m_locker.isLocked(*it)) { if (m_locker.isLocked(*it)) {
m_locker.unlock(*it); m_locker.unlock(*it);
m_locker.store(); m_locker.store();
} }
if (m_config->removeLogOnUninst() && !m_parser->isTest()) {
string rm_logFile = m_config->logFilePattern();
bool doneSubs=false;
const string pkgname = *it;
StringHelper::replaceAll( rm_logFile, "%n", pkgname );
const string rm_ver = m_pkgDB->getPackageVersion( pkgname );
size_t pos = rm_ver.find_last_of('-');
if (pos != string::npos) {
const string rm_v = rm_ver.substr(0,pos);
const string rm_r = rm_ver.substr(pos+1);
StringHelper::replaceAll( rm_logFile, "%v", rm_v );
StringHelper::replaceAll( rm_logFile, "%r", rm_r );
}
if (! needRepo) {
doneSubs=true;
} else if (m_repo->getPackage( pkgname )) {
StringHelper::replaceAll( rm_logFile, "%p",
m_repo->getPackage( pkgname )->path() );
doneSubs=true;
} else {
cout << "Warning: unable to determine the logfile for "
+ pkgname + "; log removal aborted." << endl;
}
struct stat slF;
if ( doneSubs && stat(rm_logFile.c_str(), &slF)==0
&& (slF.st_mode & S_IFMT)==S_IFREG ) {
unlink( rm_logFile.c_str() );
}
}
} else { } else {
failed.push_back(*it); failed.push_back(*it);
} }
@ -2240,18 +2279,17 @@ void PrtGet::dumpConfig()
cout.setf( ios::left, ios::adjustfield ); cout.setf( ios::left, ios::adjustfield );
cout.width( 20 ); cout.width( 20 );
cout.fill( ' ' ); cout.fill( ' ' );
cout << "Pkgmk settings: " << m_config->logFilePattern() << endl; cout << "Pkgmk settings: " << endl;
cout.setf( ios::left, ios::adjustfield ); cout.setf( ios::left, ios::adjustfield );
cout.width( 20 ); cout.width( 20 );
cout.fill( ' ' ); cout.fill( ' ' );
cout << " Package dir: " << InstallTransaction::getPkgmkPackageDir() cout << " Package dir: " << m_config->packageDir()
<< endl; << endl;
cout.setf( ios::left, ios::adjustfield ); cout.setf( ios::left, ios::adjustfield );
cout.width( 20 ); cout.width( 20 );
cout.fill( ' ' ); cout.fill( ' ' );
cout << " Compression mode: " cout << " Compression mode: " << m_config->compressionMode() << endl;
<< InstallTransaction::getPkgmkCompressionMode() << endl;
cout << endl; cout << endl;

View File

@ -92,7 +92,7 @@ public:
int returnValue() const; int returnValue() const;
SignalHandler::HandlerResult handleSignal( int signal ); SignalHandler::HandlerResult handleSignal();
protected: protected:

View File

@ -36,7 +36,7 @@ void SignalDispatcher::dispatch( int signalNumber )
map<int, SignalHandler*>::iterator it = map<int, SignalHandler*>::iterator it =
SignalDispatcher::instance()->m_signalHandlers.find( signalNumber ); SignalDispatcher::instance()->m_signalHandlers.find( signalNumber );
if ( it != SignalDispatcher::instance()->m_signalHandlers.end() ) { if ( it != SignalDispatcher::instance()->m_signalHandlers.end() ) {
it->second->handleSignal( signalNumber ); it->second->handleSignal();
} else { } else {
cerr << "prt-get: caught signal " << signalNumber << endl; cerr << "prt-get: caught signal " << signalNumber << endl;
} }

View File

@ -28,7 +28,7 @@ public:
EXIT, /*!< signal handled, exit now */ EXIT, /*!< signal handled, exit now */
CONTINUE /*!< signal handled, don't exit */ CONTINUE /*!< signal handled, don't exit */
}; };
virtual HandlerResult handleSignal( int signalNumber ) = 0; virtual HandlerResult handleSignal() = 0;
}; };
/*! /*!