[darwinbuild] xar subdoc usage

Shantonu Sen ssen at opendarwin.org
Sat Oct 1 19:55:20 PDT 2005


Great Rob!

I'll take a look at this and commit it ASAP, probably tomorrow (Sunday).

Shantonu

On Sep 30, 2005, at 10:39 AM, Rob Braun wrote:

> I've made a first pass at trying to include some of the darwinbuild
> related metadata in the xar archives created by packageRoots.
> Basically, I've added a darwinxref module that just takes the
> project information that is in the plist from the database and
> exports it in either plist or xml style like exportIndex does.
> Then packageRoots calls this, exports the information in xml format,
> and has xar add it as a subdoc in the archive named 'darwinbuild'.
>
> Rob
-------------- next part --------------
/*
 * Copyright (c) 2005 Apple Computer, Inc. All rights reserved.
 *
 * @APPLE_BSD_LICENSE_HEADER_START@
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 
 * 1.  Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer. 
 * 2.  Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution. 
 * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
 *     its contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission. 
 * 
 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * 
 * @APPLE_BSD_LICENSE_HEADER_END@
 */

#include "DBPlugin.h"
#include <CoreFoundation/CoreFoundation.h>
#include <sys/stat.h>
#include <unistd.h>

static int run(CFArrayRef argv) {
	int res = 0;
	CFIndex count = CFArrayGetCount(argv);
	if (count > 2)  return -1;
	int xml = 0, i;
	CFMutableDictionaryRef dict, preplist;
	CFDictionaryRef project;
	char *cproj;
	CFStringRef projname;
	CFArrayRef builds;
	const void *ssites, *bsites;
	CFStringRef build = DBGetCurrentBuild();

	if (count == 2) {
		CFStringRef arg = CFArrayGetValueAtIndex(argv, 0);
		xml = CFEqual(arg, CFSTR("-xml"));
		// -xml is the only supported option
		if (!xml) return -1;
		projname = CFArrayGetValueAtIndex(argv, 1);
	} else if (count == 1 ) {
		projname = CFArrayGetValueAtIndex(argv, 0);
	} else
		return -1;

	builds = DBCopyBuildInheritance(build);
	dict = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks,&kCFTypeDictionaryValueCallBacks);

	preplist = (CFMutableDictionaryRef)DBCopyProjectPlist(build, NULL);
	ssites = CFDictionaryGetValue(preplist, CFSTR("source_sites"));
	bsites = CFDictionaryGetValue(preplist, CFSTR("binary_sites"));

	preplist = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks,&kCFTypeDictionaryValueCallBacks);
	for( i = 0; i < CFArrayGetCount(builds); i++ ) {
		build = CFArrayGetValueAtIndex(builds, i);
		project = DBCopyProjectPlist(build, projname);
		if( CFDictionaryGetCount(project) > 0 )
			break;
	}
	if( CFDictionaryGetCount(project) < 1 )
		return -1;
	CFDictionaryAddValue(dict, projname, project);
	CFRelease(project);
	CFDictionarySetValue(preplist, CFSTR("build"), build);
	CFDictionarySetValue(preplist, CFSTR("projects"), dict);
	if(ssites) CFDictionarySetValue(preplist, CFSTR("source_sites"), ssites);
	if(bsites) CFDictionarySetValue(preplist, CFSTR("binary_sites"), bsites);

	CFPropertyListRef plist = preplist;
	if (xml) {
		CFDataRef data = CFPropertyListCreateXMLData(NULL, plist);
		res = write(STDOUT_FILENO, CFDataGetBytePtr(data), CFDataGetLength(data));
	} else {
		res = writePlist(stdout, plist, 0);
	}
	return res;
}

static CFStringRef usage() {
	return CFRetain(CFSTR("[-xml] project"));
}

int initialize(int version) {
	//if ( version < kDBPluginCurrentVersion ) return -1;
	
	DBPluginSetType(kDBPluginBasicType);
	DBPluginSetName(CFSTR("exportProject"));
	DBPluginSetRunFunc(&run);
	DBPluginSetUsageFunc(&usage);
	return 0;
}

-------------- next part --------------
? darwinbuild/.packageRoots.sh.swp
? darwinbuild/manifest
? darwintrace/darwintrace.dylib
? darwinxref/darwinxref
? darwinxref/upgrade_plist
? darwinxref/plugins/.exportProject.c.swp
? darwinxref/plugins/exportProject.c
Index: darwinbuild/packageRoots.sh
===================================================================
RCS file: /cvs/od/proj/darwinbuild/darwinbuild/packageRoots.sh,v
retrieving revision 1.5
diff -u -d -r1.5 packageRoots.sh
--- darwinbuild/packageRoots.sh	18 Sep 2005 07:25:06 -0000	1.5
+++ darwinbuild/packageRoots.sh	30 Sep 2005 17:33:36 -0000
@@ -118,7 +118,7 @@
 		;;
 	    xar)
 		FILE="$DARWIN_BUILDROOT/Packages/$PROJ$SFX.xar"
-		ARGS="-c -f"
+		ARGS="-s /tmp/$$.xml -n darwinbuild -c -f"
 		SRCARG="."
 		;;
 	    *)
@@ -131,10 +131,15 @@
 	if [ -n "$build_version" -a \
 	    "$SOURCEDIR" -nt "$FILE" ]; then
 	    echo "$PROJVERS~$build_version"
+	    $VERBOSE cd "$DARWIN_BUILDROOT"
+	    cd "$DARWIN_BUILDROOT"
+	    $VERBOSE "$DARWINXREF" exportProject -xml $PROJ 
+	    "$DARWINXREF" exportProject -xml $PROJ > /tmp/$$.xml
 	    $VERBOSE cd "$SOURCEDIR"
 	    cd "$SOURCEDIR"
 	    $VERBOSE $TOOL $ARGS "$FILE" "$SRCARG"
 	    $NORUN $TOOL $ARGS "$FILE" "$SRCARG"
+	    rm -f /tmp/$$.xml
 	fi
 	done
 }
-------------- next part --------------
> _______________________________________________
> darwinbuild mailing list
> darwinbuild at opendarwin.org
> http://www.opendarwin.org/mailman/listinfo/darwinbuild



More information about the darwinbuild-dev mailing list