7013265 userland could use a tool to aid in SUNW package generation
authorNorm Jacobs <Norm.Jacobs@Oracle.COM>
Mon, 24 Jan 2011 13:48:56 -0800
changeset 62 519e6e3788ce
parent 61 7684fe2a9eb5
child 63 7d2e9f451dff
7013265 userland could use a tool to aid in SUNW package generation 7013732 userland should allow 32/64 bit specific configuration options/environment
make-rules/configure.mk
make-rules/setup.py.mk
make-rules/shared-macros.mk
tools/sunw-history-package
--- a/make-rules/configure.mk	Thu Jan 20 14:23:47 2011 -0800
+++ b/make-rules/configure.mk	Mon Jan 24 13:48:56 2011 -0800
@@ -70,12 +70,18 @@
 CONFIGURE_OPTIONS += --mandir=$(CONFIGURE_MANDIR)
 CONFIGURE_OPTIONS += --bindir=$(CONFIGURE_BINDIR.$(BITS))
 CONFIGURE_OPTIONS += --libdir=$(CONFIGURE_LIBDIR.$(BITS))
+CONFIGURE_OPTIONS += $(CONFIGURE_OPTIONS.$(BITS))
 
 COMPONENT_INSTALL_ARGS +=	DESTDIR=$(PROTO_DIR)
 
 $(BUILD_DIR)/$(MACH32)/.configured:	BITS=32
 $(BUILD_DIR)/$(MACH64)/.configured:	BITS=64
+$(BUILD_DIR)/$(MACH32)/.built:		BITS=32
+$(BUILD_DIR)/$(MACH64)/.built:		BITS=64
+$(BUILD_DIR)/$(MACH32)/.installed:	BITS=32
+$(BUILD_DIR)/$(MACH64)/.installed:	BITS=64
 
+CONFIGURE_ENV += $(CONFIGURE_ENV.$(BITS))
 CONFIGURE_OPTIONS += $(CONFIGURE_OPTIONS.$(BITS))
 
 # set the default target for installation of the component
--- a/make-rules/setup.py.mk	Thu Jan 20 14:23:47 2011 -0800
+++ b/make-rules/setup.py.mk	Mon Jan 24 13:48:56 2011 -0800
@@ -41,7 +41,8 @@
 	$(COMPONENT_PRE_BUILD_ACTION)
 	(cd $(SOURCE_DIR) ; $(ENV) $(PYTHON_ENV) \
 		$(PYTHON.$(BITS)) ./setup.py build \
-			--build-temp $(@D:$(BUILD_DIR)/%=%))
+			--build-temp $(@D:$(BUILD_DIR)/%=%) \
+			$(COMPONENT_INSTALL_ARGS))
 	$(COMPONENT_POST_BUILD_ACTION)
 	$(TOUCH) $@
 
@@ -50,11 +51,14 @@
 # belong in vendor-packages.
 PYTHON_LIB= /usr/lib/python$(PYTHON_VERSION)/vendor-packages
 
+COMPONENT_INSTALL_ARGS +=	--root $(PROTO_DIR) 
+COMPONENT_INSTALL_ARGS +=	--install-lib=$(PYTHON_LIB)
+
 # install the built source into a prototype area
 $(BUILD_DIR)/%/.installed:	$(BUILD_DIR)/%/.built
 	$(COMPONENT_PRE_INSTALL_ACTION)
-	(cd $(SOURCE_DIR) ; $(ENV) $(PYTHON_ENV) \
-		$(PYTHON.$(BITS)) ./setup.py install --root $(PROTO_DIR) \
-			--install-lib=$(PYTHON_LIB))
+	(cd $(SOURCE_DIR) ; $(ENV) $(COMPONENT_INSTALL_ENV) \
+		$(PYTHON.$(BITS)) ./setup.py install $(COMPONENT_INSTALL_ARGS))
 	$(COMPONENT_POST_INSTALL_ACTION)
 	$(TOUCH) $@
+
--- a/make-rules/shared-macros.mk	Thu Jan 20 14:23:47 2011 -0800
+++ b/make-rules/shared-macros.mk	Mon Jan 24 13:48:56 2011 -0800
@@ -236,3 +236,11 @@
 	$(COPTFLAG64) $($(MACH64)_CFLAGS) $(CCMODE64) \
 	$(ILDOFF) $(C99MODE) $(IROPTFLAG64)
 
+#
+# Environment variables and arguments passed into the build and install
+# environment(s).  These specifically add the bit-specific data
+#
+COMPONENT_BUILD_ENV += $(COMPONENT_BUILD_ENV.$(BITS))
+COMPONENT_BUILD_ARGS += $(COMPONENT_BUILD_ARGS.$(BITS))
+COMPONENT_INSTALL_ENV += $(COMPONENT_INSTALL_ENV.$(BITS))
+COMPONENT_INSTALL_ARGS += $(COMPONENT_INSTALL_ARGS.$(BITS))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/sunw-history-package	Mon Jan 24 13:48:56 2011 -0800
@@ -0,0 +1,108 @@
+#!/usr/perl5/bin/perl
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+#
+# sunw-history-package
+#  A simple program to generate the actions contained in the SUNW package
+#  that maps between the old (pre build-133) and new ips package names.
+#
+
+$|=1;
+
+use Getopt::Long;
+use File::Basename /qw basename/;
+
+my $PKG = '/usr/bin/pkg';
+
+sub generate_manifest {
+	local ($package_name) = @_;
+	my ($package, %depends) = ();
+
+	# gather some data
+	open($FP, "$PKG contents -r -H -o action.raw $package_name |");
+
+	while (<$FP>) {	# save what we want
+		if (m{set\s+name=pkg.fmri\s+value=pkg://.+/(.+):.+$}) {
+			$package = $1;
+		} elsif (m{depend fmri=(.+)\s+type=require$}) {
+			$depends{$1} = 1;
+		}
+	}
+
+	close($FP);
+
+	# generate the manifest actions
+	print <<EOF;
+set name=pkg.fmri value=pkg:/$package
+set name=pkg.renamed value=true
+
+set name=org.opensolaris.consolidation value=\$(CONSOLIDATION)
+
+set name=variant.opensolaris.zone value=global value=nonglobal
+set name=variant.arch value=\$(ARCH)
+
+EOF
+	foreach (sort keys %depends) {
+		(m{^consolidation/}) ||
+			print "depend fmri=$_ type=require\n"
+	}
+}
+
+sub usage {
+	my $program = basename($0);
+	print <<EOF;
+Usage: $program (--package (new-ips-name)) ...
+
+EOF
+	exit(1);
+}
+
+sub main {
+	my (@current_packages, %SUNWpackages) = ();
+
+	GetOptions('package:s' => \@current_packages);
+
+	($#current_packages == -1) && usage();
+
+	# find all SUNW packages that require the supplied packages
+	foreach (@current_packages) {
+		open($FP, "$PKG search -r -H -o pkg.name 'SUNW*:depend::*/$_' |");
+	
+		while (<$FP>) {
+			chomp;
+			$SUNWpackages{$_} = 1;
+		}
+	
+		close($FP);
+	}
+
+	# generate manifests for each SUNWpackage
+	foreach (sort keys %SUNWpackages) {
+		print "\n\n$_.p5m actions:\n";
+		generate_manifest($_);
+	}
+}
+
+#
+# Main execution starts here.
+#
+main();