[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: RFC: different/multiple LOCALBASEs



Hi again!

The previous diff did not give LOCALBASE to the next instance, when
recursively installing dependencies, thus it only worked when defining
LOCALBASE in mk.conf.

This is a new version of the diff, dealing with this problem and
automatically creating PKG_DBDIR when installing a port. So, now it is
possible to specify LOCALBASE on the command line for a port and all its
dependencies.

bye,

Nikolay

-- 
OpenPGP: 0x5C0878D2 - BB55 EDCF A1F6 8057 B953  4C66 EFBD BA73 5C08 78D2
Index: db/fake.mtree
===================================================================
RCS file: /cvs/ports/infrastructure/db/fake.mtree,v
retrieving revision 1.8
diff -u -r1.8 fake.mtree
--- db/fake.mtree	18 Jan 2002 16:48:19 -0000	1.8
+++ db/fake.mtree	21 Apr 2003 19:08:11 -0000
@@ -2,8 +2,7 @@
 .
     etc
     ..
-    usr
-	local
+    ${PREFIX}PREFIX_MARK
 	    bin
 	    ..
 	    include
@@ -204,8 +203,7 @@
 		skel
 		..
 	    ..
-	..
-    ..
+    PREFIX_DOTDOT
     var
 	db
 	..
Index: install/mtree_path_subst
===================================================================
RCS file: install/mtree_path_subst
diff -N install/mtree_path_subst
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ install/mtree_path_subst	21 Apr 2003 19:08:11 -0000
@@ -0,0 +1,23 @@
+#!/usr/bin/perl -w
+
+use strict;
+
+my $number=1;
+
+while (<STDIN>) {
+	if (/PREFIX_MARK/) {
+		s,PREFIX_MARK,,;
+		# strip leading '/' from path
+		s,\s+/,,;
+		# strip trailing '/' from path
+		s,/$,,;
+		$number += s,/,\n,g;
+	} elsif (/PREFIX_DOTDOT/) {
+		s,PREFIX_DOTDOT,,;
+		for (my $i = 0; $i < $number; $i++) {
+			print "..\n"
+		}
+		next;
+	}
+	print $_;
+}
Index: mk/bsd.port.mk
===================================================================
RCS file: /cvs/ports/infrastructure/mk/bsd.port.mk,v
retrieving revision 1.544
diff -u -r1.544 bsd.port.mk
--- mk/bsd.port.mk	6 Apr 2003 14:34:36 -0000	1.544
+++ mk/bsd.port.mk	21 Apr 2003 19:08:15 -0000
@@ -455,7 +455,11 @@
 PKGREPOSITORYSUBDIR?=	All
 PKG_SUFX?=		.tgz
 PKGREPOSITORY?=		${PACKAGES}/${PKGREPOSITORYSUBDIR}
+.if ${LOCALBASE} == "/usr/local"
 PKG_DBDIR?=		/var/db/pkg
+.else
+PKG_DBDIR?=		/var/db/pkg${LOCALBASE:S-/-_-g}
+.endif
 BULK_COOKIES_DIR?= ${PORTSDIR}/bulk/${MACHINE_ARCH}
 
 PKGNAME?=${DISTNAME}
@@ -805,12 +809,16 @@
 	@fgrep -q '$${HOMEPAGE}' $? || echo "\nWWW: ${HOMEPAGE}" >>$@
 .endif
 
+_MTREE_PATH_SUBST=${PORTSDIR}/infrastructure/install/mtree_path_subst
+
 ${WRKPKG}/mtree.spec: ${MTREE_FILE}
-	@${_SED_SUBST} ${MTREE_FILE}>$_(_at_)__(_dot_)_tmp && mv -f $_(_at_)__(_dot_)_tmp $@
+	@${_SED_SUBST} ${MTREE_FILE}|${_MTREE_PATH_SUBST}>$_(_at_)__(_dot_)_tmp && mv -f $_(_at_)__(_dot_)_tmp $@
 
 PKG_TMPDIR?=	/var/tmp
 PKG_CMD?=		/usr/sbin/pkg_create
 PKG_DELETE?=	/usr/sbin/pkg_delete
+_PKG=			${SETENV} PKG_DBDIR='${PKG_DBDIR}' /usr/sbin/pkg
+_PKG_DELETE=	${SETENV} PKG_DBDIR='${PKG_DBDIR}' ${PKG_DELETE}
 _SORT_DEPENDS?=tsort|tail -r
 
 # Fill out package command, and package dependencies
@@ -1233,7 +1241,7 @@
 # Various dependency styles
 
 _fetch_depends_fragment= \
-	if pkg dependencies check $$pkg; then \
+	if ${_PKG} dependencies check $$pkg; then \
 		found=true; \
 	fi
 
@@ -1863,19 +1871,20 @@
 ${_INSTALL_COOKIE}:  ${_PACKAGE_COOKIES}
 	@cd ${.CURDIR} && DEPENDS_TARGET=package exec ${MAKE} run-depends lib-depends
 	@${ECHO_MSG} "===>  Installing ${FULLPKGNAME${SUBPACKAGE}} from ${PKGFILE${SUBPACKAGE}}"
+	@${SUDO} mkdir -p ${PKG_DBDIR}
 .  for _m in ${MODULES}
 .    if defined(MOD${_m:U}_pre_install)
 	@${MOD${_m:U}_pre_install}
 .    endif
 .  endfor
 .  if ${TRUST_PACKAGES:L} == "yes"
-	@if pkg dependencies check ${FULLPKGNAME${SUBPACKAGE}}; then \
+	@if ${_PKG} dependencies check ${FULLPKGNAME${SUBPACKAGE}}; then \
 		echo "Package ${FULLPKGNAME${SUBPACKAGE}} is already installed"; \
 	else \
-		${SUDO} ${SETENV} PKG_PATH=${PKGREPOSITORY}:${PKG_PATH} PKG_TMPDIR=${PKG_TMPDIR} pkg_add ${PKGFILE${SUBPACKAGE}}; \
+		${SUDO} ${SETENV} PKG_PATH=${PKGREPOSITORY}:${PKG_PATH} PKG_TMPDIR=${PKG_TMPDIR} PKG_DBDIR=${PKG_DBDIR} pkg_add ${PKGFILE${SUBPACKAGE}}; \
 	fi
 .  else
-	@${SUDO} ${SETENV} PKG_PATH=${PKGREPOSITORY}:${PKG_PATH} PKG_TMPDIR=${PKG_TMPDIR} pkg_add ${PKGFILE${SUBPACKAGE}}
+	@${SUDO} ${SETENV} PKG_PATH=${PKGREPOSITORY}:${PKG_PATH} PKG_TMPDIR=${PKG_TMPDIR} PKG_DBDIR=${PKG_DBDIR} pkg_add ${PKGFILE${SUBPACKAGE}}
 .  endif
 	@-${SUDO} ${_MAKE_COOKIE} $@
 .endif 
@@ -2045,7 +2054,7 @@
 # Special target to re-run install
 
 reinstall:
-	@${SUDO} ${PKG_DELETE} -f ${FULLPKGNAME${SUBPACKAGE}}
+	@${SUDO} ${_PKG_DELETE} -f ${FULLPKGNAME${SUBPACKAGE}}
 	@cd ${.CURDIR} && DEPENDS_TARGET=${DEPENDS_TARGET} exec ${MAKE} install
 
 # Rebuild
@@ -2061,7 +2070,7 @@
 
 uninstall deinstall:
 	@${ECHO_MSG} "===> Deinstalling for ${FULLPKGNAME${SUBPACKAGE}}"
-	@${SUDO} ${PKG_DELETE} -f ${FULLPKGNAME${SUBPACKAGE}}
+	@${SUDO} ${_PKG_DELETE} -f ${FULLPKGNAME${SUBPACKAGE}}
 
 
 ################################################################
@@ -2108,10 +2117,10 @@
 .  if ${clean:L:Minstall}
 .    if ${clean:L:Msub}
 .	   for _s in ${MULTI_PACKAGES}
-	-${SUDO} ${PKG_DELETE} ${clean:M-f} ${FULLPKGNAME${_s}}
+	-${SUDO} ${_PKG_DELETE} ${clean:M-f} ${FULLPKGNAME${_s}}
 .      endfor
 .    else
-	-${SUDO} ${PKG_DELETE} ${clean:M-f} ${FULLPKGNAME${SUBPACKAGE}}
+	-${SUDO} ${_PKG_DELETE} ${clean:M-f} ${FULLPKGNAME${SUBPACKAGE}}
 .    endif
 .  endif
 .  if ${clean:L:Mpackages} || ${clean:L:Mpackage} && ${clean:L:Msub}
@@ -2246,7 +2255,8 @@
 FULL_PACKAGE_NAME?=No
 
 # Make variables to pass along on recursive builds
-_DEPEND_THRU=FULL_PACKAGE_NAME=${FULL_PACKAGE_NAME}
+_DEPEND_THRU=FULL_PACKAGE_NAME=${FULL_PACKAGE_NAME} LOCALBASE=${LOCALBASE} \
+	PKG_DBDIR=${PKG_DBDIR}
 
 # XXX
 package-name:
@@ -2643,7 +2653,7 @@
 			libspecs='';comma=''; \
 			default=`eval $$toset ${MAKE} _print-packagename`; \
 			case "X$$pkg" in X) pkg=`echo $$default|sed -e 's,-[0-9].*,-*,'`;; esac; \
-			if pkg dependencies check $$pkg; then \
+			if ${_PKG} dependencies check $$pkg; then \
 				listlibs='ls $$shdir 2>/dev/null'; \
 			else \
 				eval $$toset ${MAKE} ${PKGREPOSITORY}/$$default.tgz; \

Visit your host, monkey.org