Revision: 617 http://trac.macosforge.org/projects/darwinbuild/changeset/617 Author: wsiegrist@apple.com Date: 2009-11-02 10:35:12 -0800 (Mon, 02 Nov 2009) Log Message: ----------- Merge in archs.sh changes and -nosource changes. Roll back copyfile changes. Modified Paths: -------------- releases/Darwin8/common.mk releases/Darwin8/darwinbuild/darwinbuild.in releases/Darwin8/darwinup/Depot.cpp releases/Darwin8/darwinup/Digest.cpp releases/Darwin8/darwinup/File.cpp releases/Darwin8/darwinup/Makefile releases/Darwin8/darwinup/main.cpp Added Paths: ----------- releases/Darwin8/archs.sh Property Changed: ---------------- releases/Darwin8/ releases/Darwin8/common.mk releases/Darwin8/darwinbuild/darwinbuild.in releases/Darwin8/darwinbuild/darwinmaster.sh.in releases/Darwin8/darwinbuild/installXcode.in releases/Darwin8/darwinbuild/packageRoots.sh.in releases/Darwin8/darwinbuild/thinPackages.sh.in releases/Darwin8/darwinup/ Property changes on: releases/Darwin8 ___________________________________________________________________ Modified: svn:mergeinfo - /branches/PR-4841388:399-419 /branches/PR-6358021:442-443 /branches/PR-6392966:423-427 /branches/PR-6398060:433-434 /trunk:432-434 + /branches/PR-4841388:399-419 /branches/PR-6358021:442-443 /branches/PR-6392966:423-427 /branches/PR-6398060:433-434 /trunk:432-434,520 Copied: releases/Darwin8/archs.sh (from rev 615, trunk/archs.sh) =================================================================== --- releases/Darwin8/archs.sh (rev 0) +++ releases/Darwin8/archs.sh 2009-11-02 18:35:12 UTC (rev 617) @@ -0,0 +1,31 @@ +#!/bin/sh + +# +# Detect which arches we should build for +# + +CRYPTO_ARCHS=`lipo -info /usr/lib/libcrypto.dylib | cut -d : -f 3` +SQLITE_ARCHS=`lipo -info /usr/lib/libsqlite3.dylib | cut -d : -f 3` +TCL_ARCHS=`lipo -info /usr/lib/libtcl.dylib | cut -d : -f 3` +SYSTEM_ARCHS=`lipo -info /usr/lib/libSystem.dylib | cut -d : -f 3` + +# start with one set of archs +FINAL_ARCHS=$SYSTEM_ARCHS + +for ARCH in $SYSTEM_ARCHS; +do + # crosscheck against the remaining sets... + for ALIST in "$CRYPTO_ARCHS" "$SQLITE_ARCHS" "$TCL_ARCHS"; + do + # see if ARCH is not in ALIST + if [[ ${ALIST/$ARCH} == $ALIST ]]; + then + # ARCH was not found, so remove from final archs + FINAL_ARCHS="${FINAL_ARCHS/$ARCH}"; + fi + done; +done; + +# print what is left over +echo $FINAL_ARCHS + Property changes on: releases/Darwin8/archs.sh ___________________________________________________________________ Added: svn:executable + * Added: svn:mergeinfo + /branches/PR-4841388/archs.sh:399-419 /branches/PR-6358021/archs.sh:442-443 /branches/PR-6392966/archs.sh:423-427 /branches/PR-6398060/archs.sh:433-434 /branches/PR-6493844/archs.sh:460-461 /branches/PR-6497694/archs.sh:466-468,471 /branches/PR-6688645/archs.sh:479-490 /branches/PR-6722857/archs.sh:495-499 /trunk/archs.sh:432-434 Modified: releases/Darwin8/common.mk =================================================================== --- releases/Darwin8/common.mk 2009-11-02 18:32:39 UTC (rev 616) +++ releases/Darwin8/common.mk 2009-11-02 18:35:12 UTC (rev 617) @@ -5,6 +5,7 @@ DESTDIR?=$(DSTROOT) ### makefile variables normally set by XBS +SRCROOT?=. OBJROOT?=. SYMROOT?=. @@ -20,6 +21,6 @@ SED=/usr/bin/sed -RC_CFLAGS?=$(shell lipo -info /usr/lib/libSystem.dylib | cut -d : -f 3 | sed 's/ppc7400/ppc/' | awk '{ ORS=" "; for(i=1;i<=NF;i++) print "-arch", $$i}') +RC_CFLAGS?=$(shell ../archs.sh | awk '{ ORS=" "; for(i=1;i<=NF;i++) print "-arch", $$i}') CFLAGS+=$(RC_CFLAGS) Property changes on: releases/Darwin8/common.mk ___________________________________________________________________ Added: svn:mergeinfo + /branches/PR-4841388/common.mk:399-419 /branches/PR-6358021/common.mk:442-443 /branches/PR-6392966/common.mk:423-427 /branches/PR-6398060/common.mk:433-434 /trunk/common.mk:432-434,457-615 Modified: releases/Darwin8/darwinbuild/darwinbuild.in =================================================================== --- releases/Darwin8/darwinbuild/darwinbuild.in 2009-11-02 18:32:39 UTC (rev 616) +++ releases/Darwin8/darwinbuild/darwinbuild.in 2009-11-02 18:35:12 UTC (rev 617) @@ -101,6 +101,7 @@ logdeps="" nopatch="" noload="" +nosource="" loadonly="" projnam="" action="install" @@ -167,11 +168,12 @@ function PrintUsage() { cat <<-EOF 1>&2 - usage: $(basename $0) [flags] <project> [<version>] - usage: flags: [-headers] [-build=X] [-target=X] [-configuration=X] - [-logdeps] [-nochroot] [-nopatch] [-noload | -loadonly] - [-depsbuild=X [-depsbuild=Y]] - [-fetch] [-source] [-load] + usage: $(basename $0) [action] [options] <project> [<version>] + actions: [-headers] [-fetch] [-source] [-load] [-loadonly] + options: [-build=X] [-target=X] [-configuration=X] + [-logdeps] [-nochroot] [-nopatch] [-noload] + [-depsbuild=X [-depsbuild=Y]] [-nosource] + EOF exit 1 } @@ -210,21 +212,29 @@ ### ### Interpret our arguments: +### +### Actions: ### -headers Do the installhdrs phase, instead of install -### -fetch Download necessary source and patch files +### -fetch Only download necessary source and patch files ### -source Extract, patch, and stage source -### -nochroot Do not chroot into the BuildRoot when building ### -load Populate the BuildRoot with one project +### -loadonly Only load dependencies into the chroot, but +### don't build. +### +### Options: +### -nosource Do not fetch or stage source. This assumes that the +### source is already in place in the BuildRoot. +### -logdeps Do magic to log the build-time dependencies ### -nopatch Don't patch sources before building. ### -noload Don't load dependencies into the chroot. -### Has no effect if -nochroot is specified. -### -loadonly Only load dependencies into the chroot, but -### don't build. -### -logdeps Do magic to log the build-time dependencies +### Has no effect if -nochroot is specified. +### -nochroot Do not chroot into the BuildRoot when building ### -target=X The makefile or xcode target to build -### -configuration=X The build configuration to use -### -build=X X is the darwin build number to buld, e.g. 8B15 -### -depsbuild=X X is the darwin build number to populate the BuildRoot +### -configuration=X Specify the build configuration to use +### -build=X Specify the darwin build number to buld, e.g. 8B15 +### -depsbuild=X Specify the darwin build number to populate the BuildRoot +### +### Parameters: ### <project> The name of the project to build ### <version> If specified, the version of the project to build ### this will default to the version associated with the @@ -270,6 +280,9 @@ loadonly="YES" elif [ "$ARG" == "-logdeps" ]; then logdeps="YES" + elif [ "$ARG" == "-nosource" ]; then + nosource="YES" + nopatch="YES" elif [ "${ARG:0:1}" != "-" ]; then projnam="$ARG" else @@ -360,31 +373,29 @@ exit 1 fi - - - - ### ### Download the sources, ### and any applicable patches. ### -echo "*** Fetching Sources ..." -# project might be a build alias -if [ "$alias" != "" ]; then - filename="$alias-$version.tar.gz" -else - filename="$project.tar.gz" -fi -patchfilenames=$($DARWINXREF patchfiles $projnam) -#echo "patchfiles are $patchfilenames" -Download "$SourceCache" "$filename" "$($DARWINXREF source_sites $projnam)" -for p in $patchfilenames; do - Download "$SourceCache" "$p" "$($DARWINXREF source_sites $projnam)" -done +if [ "$nosource" != "YES" ]; then + echo "*** Fetching Sources ..." + # project might be a build alias + if [ "$alias" != "" ]; then + filename="$alias-$version.tar.gz" + else + filename="$project.tar.gz" + fi + patchfilenames=$($DARWINXREF patchfiles $projnam) + #echo "patchfiles are $patchfilenames" + Download "$SourceCache" "$filename" "$($DARWINXREF source_sites $projnam)" + for p in $patchfilenames; do + Download "$SourceCache" "$p" "$($DARWINXREF source_sites $projnam)" + done -### If we are doing a -fetch, stop here. -if [ "$action" == "fetch" ]; then - exit + ### If we are doing a -fetch, stop here. + if [ "$action" == "fetch" ]; then + exit + fi fi ### @@ -419,37 +430,39 @@ export SYMROOT="${REAL_SYMROOT/$prefix/}" export DSTROOT="${REAL_DSTROOT/$prefix/}" -### -### Remove any pre-existing directories that might be in the way -### and create new directories in their place. Make sure the -### directories have root:wheel ownership, otherwise things may -### not build correctly. -### -rm -Rf "$REAL_SRCROOT" "$REAL_OBJROOT" "$REAL_SYMROOT" "$REAL_DSTROOT" -mkdir -p "$REAL_SRCROOT" "$REAL_OBJROOT" "$REAL_SYMROOT" "$REAL_DSTROOT" -chown root:wheel "$REAL_SRCROOT" "$REAL_OBJROOT" "$REAL_SYMROOT" "$REAL_DSTROOT" - -### -### Install the sources and patches into the BuildRoot -### -cd "$REAL_SRCROOT/.." -echo "*** Copying Sources ..." -if [ -d "$SourceCache/$project" ]; then - tar c -C "$SourceCache" "$project" | tar xf - -elif [ "$alias" != "" -a -d "$SourceCache/$alias-$version" ]; then - tar c -C "$SourceCache" "$alias-$version" | tar xf - - rmdir "$REAL_SRCROOT" - ln -fhs "$alias-$version" "$project" -elif [ "$alias" != "" ]; then - tar xzf "$SourceCache/$alias-$version.tar.gz" - rmdir "$REAL_SRCROOT" - ln -fhs "$alias-$version" "$project" -else - tar xzf "$SourceCache/$filename" +if [ "$nosource" != "YES" ]; then + ### + ### Remove any pre-existing directories that might be in the way + ### and create new directories in their place. Make sure the + ### directories have root:wheel ownership, otherwise things may + ### not build correctly. + ### + rm -Rf "$REAL_SRCROOT" "$REAL_OBJROOT" "$REAL_SYMROOT" "$REAL_DSTROOT" + mkdir -p "$REAL_SRCROOT" "$REAL_OBJROOT" "$REAL_SYMROOT" "$REAL_DSTROOT" + chown root:wheel "$REAL_SRCROOT" "$REAL_OBJROOT" "$REAL_SYMROOT" "$REAL_DSTROOT" + + ### + ### Install the sources and patches into the BuildRoot + ### + cd "$REAL_SRCROOT/.." + echo "*** Copying Sources ..." + if [ -d "$SourceCache/$project" ]; then + tar c -C "$SourceCache" "$project" | tar xf - + elif [ "$alias" != "" -a -d "$SourceCache/$alias-$version" ]; then + tar c -C "$SourceCache" "$alias-$version" | tar xf - + rmdir "$REAL_SRCROOT" + ln -fhs "$alias-$version" "$project" + elif [ "$alias" != "" ]; then + tar xzf "$SourceCache/$alias-$version.tar.gz" + rmdir "$REAL_SRCROOT" + ln -fhs "$alias-$version" "$project" + else + tar xzf "$SourceCache/$filename" + fi fi # you can avoid registering patches in the DB by using "xnu-792--patches.tar.gz" -if [ -r "$SourceCache/$project-patches.tar.gz" ]; then +if [ -r "$SourceCache/$project-patches.tar.gz" -a "$nosource" != "YES" ]; then tar xzf "$SourceCache/$project-patches.tar.gz" fi Property changes on: releases/Darwin8/darwinbuild/darwinbuild.in ___________________________________________________________________ Modified: svn:mergeinfo - /branches/PR-4841388/darwinbuild/darwinbuild:399-419 /branches/PR-6358021/darwinbuild/darwinbuild:442-443 /branches/PR-6392966/darwinbuild/darwinbuild:423-427 /branches/PR-6398060/darwinbuild/darwinbuild:433-434 /trunk/darwinbuild/darwinbuild:432-434 + /branches/PR-4841388/darwinbuild/darwinbuild:399-419 /branches/PR-6358021/darwinbuild/darwinbuild:442-443 /branches/PR-6392966/darwinbuild/darwinbuild:423-427 /branches/PR-6398060/darwinbuild/darwinbuild:433-434 /trunk/darwinbuild/darwinbuild:432-434 /trunk/darwinbuild/darwinbuild.in:520 Property changes on: releases/Darwin8/darwinbuild/darwinmaster.sh.in ___________________________________________________________________ Modified: svn:mergeinfo - /branches/PR-4841388/darwinbuild/darwinmaster.sh:399-419 /branches/PR-6358021/darwinbuild/darwinmaster.sh:442-443 /branches/PR-6392966/darwinbuild/darwinmaster.sh:423-427 /branches/PR-6398060/darwinbuild/darwinmaster.sh:433-434 /trunk/darwinbuild/darwinmaster.sh:432-434 + /branches/PR-4841388/darwinbuild/darwinmaster.sh:399-419 /branches/PR-6358021/darwinbuild/darwinmaster.sh:442-443 /branches/PR-6392966/darwinbuild/darwinmaster.sh:423-427 /branches/PR-6398060/darwinbuild/darwinmaster.sh:433-434 /trunk/darwinbuild/darwinmaster.sh:432-434 /trunk/darwinbuild/darwinmaster.sh.in:520 Property changes on: releases/Darwin8/darwinbuild/installXcode.in ___________________________________________________________________ Modified: svn:mergeinfo - /branches/PR-4841388/darwinbuild/installXcode:399-419 /branches/PR-6358021/darwinbuild/installXcode:442-443 /branches/PR-6392966/darwinbuild/installXcode:423-427 /branches/PR-6398060/darwinbuild/installXcode:433-434 /trunk/darwinbuild/installXcode:432-434 + /branches/PR-4841388/darwinbuild/installXcode:399-419 /branches/PR-6358021/darwinbuild/installXcode:442-443 /branches/PR-6392966/darwinbuild/installXcode:423-427 /branches/PR-6398060/darwinbuild/installXcode:433-434 /trunk/darwinbuild/installXcode:432-434 /trunk/darwinbuild/installXcode.in:520 Property changes on: releases/Darwin8/darwinbuild/packageRoots.sh.in ___________________________________________________________________ Modified: svn:mergeinfo - /branches/PR-4841388/darwinbuild/packageRoots.sh:399-419 /branches/PR-6358021/darwinbuild/packageRoots.sh:442-443 /branches/PR-6392966/darwinbuild/packageRoots.sh:423-427 /branches/PR-6398060/darwinbuild/packageRoots.sh:433-434 /trunk/darwinbuild/packageRoots.sh:432-434 + /branches/PR-4841388/darwinbuild/packageRoots.sh:399-419 /branches/PR-6358021/darwinbuild/packageRoots.sh:442-443 /branches/PR-6392966/darwinbuild/packageRoots.sh:423-427 /branches/PR-6398060/darwinbuild/packageRoots.sh:433-434 /trunk/darwinbuild/packageRoots.sh:432-434 /trunk/darwinbuild/packageRoots.sh.in:520 Property changes on: releases/Darwin8/darwinbuild/thinPackages.sh.in ___________________________________________________________________ Modified: svn:mergeinfo - /branches/PR-4841388/darwinbuild/thinPackages.sh:399-419 /branches/PR-6358021/darwinbuild/thinPackages.sh:442-443 /branches/PR-6392966/darwinbuild/thinPackages.sh:423-427 /branches/PR-6398060/darwinbuild/thinPackages.sh:433-434 /trunk/darwinbuild/thinPackages.sh:432-434 + /branches/PR-4841388/darwinbuild/thinPackages.sh:399-419 /branches/PR-6358021/darwinbuild/thinPackages.sh:442-443 /branches/PR-6392966/darwinbuild/thinPackages.sh:423-427 /branches/PR-6398060/darwinbuild/thinPackages.sh:433-434 /trunk/darwinbuild/thinPackages.sh:432-434 /trunk/darwinbuild/thinPackages.sh.in:520 Property changes on: releases/Darwin8/darwinup ___________________________________________________________________ Added: svn:mergeinfo + /branches/PR-4841388/darwinup:399-419 /branches/PR-6358021/darwinup:442-443 /branches/PR-6392966/darwinup:423-427 /branches/PR-6398060/darwinup:433-434 /trunk/darwinup:520 Modified: releases/Darwin8/darwinup/Depot.cpp =================================================================== --- releases/Darwin8/darwinup/Depot.cpp 2009-11-02 18:32:39 UTC (rev 616) +++ releases/Darwin8/darwinup/Depot.cpp 2009-11-02 18:35:12 UTC (rev 617) @@ -28,7 +28,6 @@ #include "Utils.h" #include <assert.h> -#include <copyfile.h> #include <errno.h> #include <fcntl.h> #include <libgen.h> @@ -231,7 +230,7 @@ if (blobsize > 0) { digest = new Digest(); digest->m_size = blobsize; - memcpy(digest->m_data, blob, ((size_t)blobsize < sizeof(digest->m_data)) ? blobsize : sizeof(digest->m_data)); + memcpy(digest->m_data, blob, (blobsize < sizeof(digest->m_data)) ? blobsize : sizeof(digest->m_data)); } File* file = FileFactory(serial, archive, info, (const char*)path, mode, uid, gid, size, digest); @@ -422,27 +421,8 @@ ++context->files_modified; // XXX: res = file->backup() - - // Copy libraries gnutar uses since we need to use gnutar before they are replaced - int i = 0; - bool docopy = false; - const char* tarlibs[] = {"/usr/lib/libSystem.B.dylib", - "/usr/lib/libiconv.2.dylib", - "/usr/lib/libgcc_s.1.dylib"}; - for (i = 0; i < 3; i++) { - if (strncmp(tarlibs[i], file->path(), strlen(tarlibs[i])) == 0) { - docopy = true; - break; - } - } - if (docopy) { - IF_DEBUG("[backup] copyfile(%s, %s)\n", file->path(), dstpath); - res = copyfile(file->path(), dstpath, NULL, COPYFILE_ALL); - } else { - IF_DEBUG("[backup] rename(%s, %s)\n", file->path(), dstpath); - res = rename(file->path(), dstpath); - } - + IF_DEBUG("[backup] rename(%s, %s)\n", file->path(), dstpath); + res = rename(file->path(), dstpath); if (res != 0) fprintf(stderr, "%s:%d: backup failed: %s: %s (%d)\n", __FILE__, __LINE__, dstpath, strerror(errno), errno); free(dstpath); } @@ -696,7 +676,7 @@ if (res == 0) res = this->iterate_files(archive, &Depot::uninstall_file, &context); if (res == 0) res = this->begin_transaction(); - uint32_t i; + int i; for (i = 0; i < context.files_to_remove->count; ++i) { uint64_t serial = context.files_to_remove->values[i]; IF_DEBUG("deleting file %lld\n", serial); @@ -839,7 +819,7 @@ if (blobsize > 0) { digest = new Digest(); digest->m_size = blobsize; - memcpy(digest->m_data, blob, ((size_t)blobsize < sizeof(digest->m_data)) ? blobsize : sizeof(digest->m_data)); + memcpy(digest->m_data, blob, (blobsize < sizeof(digest->m_data)) ? blobsize : sizeof(digest->m_data)); } Archive* archive = this->archive(archive_serial); Modified: releases/Darwin8/darwinup/Digest.cpp =================================================================== --- releases/Darwin8/darwinup/Digest.cpp 2009-11-02 18:32:39 UTC (rev 616) +++ releases/Darwin8/darwinup/Digest.cpp 2009-11-02 18:35:12 UTC (rev 617) @@ -90,7 +90,7 @@ char* Digest::string() { static const char* hexabet = "0123456789abcdef"; char* result = (char*)malloc(2*m_size+1); - uint32_t i, j; + int i, j; for (i = 0, j = 0; i < m_size; ++i) { result[j++] = hexabet[(m_data[i] & 0xF0) >> 4]; @@ -105,7 +105,7 @@ if (a == b) return 1; if (a == NULL) return 0; if (b == NULL) return 0; - uint32_t a_size = a->size(); + int a_size = a->size(); if (a_size != b->size()) { return 0; } @@ -153,6 +153,7 @@ SHA1DigestMachO::SHA1DigestMachO(const char* filename) { + char* res = NULL; char* error = NULL; // Check for Mach-O Modified: releases/Darwin8/darwinup/File.cpp =================================================================== --- releases/Darwin8/darwinup/File.cpp 2009-11-02 18:32:39 UTC (rev 616) +++ releases/Darwin8/darwinup/File.cpp 2009-11-02 18:35:12 UTC (rev 617) @@ -142,7 +142,7 @@ const char* dstpath = this->path(); if (dirpath) { ssize_t len = snprintf(srcpath, sizeof(srcpath), "%s/%s", dirpath, dstpath); - if ((size_t)len > sizeof(srcpath)) { + if (len > sizeof(srcpath)) { fprintf(stderr, "ERROR: [install] path too long: %s/%s\n", dirpath, dstpath); return -1; } @@ -257,7 +257,7 @@ int Symlink::install_info() { int res = 0; const char* path = this->path(); - //mode_t mode = this->mode() & ALLPERMS; + mode_t mode = this->mode() & ALLPERMS; uid_t uid = this->uid(); gid_t gid = this->gid(); IF_DEBUG("[install] lchown(%d, %d)\n", uid, gid); @@ -348,7 +348,7 @@ break; case FTS_DEFAULT: case FTS_DNR: - fprintf(stderr, "%s:%d: could not read directory. Run as root.\n", __FILE__, __LINE__); + fprintf(stderr, "%s:%d: could not read directory. Run as root.\n", __FILE__, __LINE__, ent->fts_info); break; default: fprintf(stderr, "%s:%d: unexpected fts_info type %d\n", __FILE__, __LINE__, ent->fts_info); Modified: releases/Darwin8/darwinup/Makefile =================================================================== --- releases/Darwin8/darwinup/Makefile 2009-11-02 18:32:39 UTC (rev 616) +++ releases/Darwin8/darwinup/Makefile 2009-11-02 18:35:12 UTC (rev 617) @@ -1,6 +1,6 @@ include ../common.mk -CXXFLAGS=-g -Wall -Werror -Wno-non-virtual-dtor $(CFLAGS) +CXXFLAGS=-g # libredo.o is generated from cctools_ofiles REDO=$(shell if [ -f /usr/local/lib/libredo_prebinding.a ]; then \ echo /usr/local/lib/libredo_prebinding.a ; else \ @@ -11,14 +11,12 @@ [ -d $(BINDIR) ] || $(INSTALL) -d $(INSTALL_DIR_FLAGS) $(BINDIR) $(INSTALL) $(INSTALL_EXE_FLAGS) darwinup $(BINDIR) -uninstall: - rm -f $(BINDIR)/darwinup all: darwinup darwinup: Archive.o Depot.o Digest.o File.o SerialSet.o Utils.o main.o \ $(REDO) - g++ $(CXXFLAGS) -lcrypto -lsqlite3 -o $@ $^ + g++ -lcrypto -lsqlite3 -o $@ $^ Archive.o: Archive.cpp Archive.h Depot.h File.h Utils.h Depot.o: Depot.cpp Archive.h Depot.h File.h Utils.h Modified: releases/Darwin8/darwinup/main.cpp =================================================================== --- releases/Darwin8/darwinup/main.cpp 2009-11-02 18:32:39 UTC (rev 616) +++ releases/Darwin8/darwinup/main.cpp 2009-11-02 18:35:12 UTC (rev 617) @@ -33,14 +33,14 @@ void usage(char* progname) { char* pad = strdup(progname); - size_t i; + int i; for (i = 0; i < strlen(pad); ++i) pad[i] = ' '; fprintf(stderr, "usage: %s install <path>\n", progname); - fprintf(stderr, " %s list\n", pad); - fprintf(stderr, " %s files <uuid>\n", pad); - fprintf(stderr, " %s uninstall <uuid>\n", pad); - fprintf(stderr, " %s verify <uuid>\n", pad); + fprintf(stderr, " %s list\n", pad, progname); + fprintf(stderr, " %s files <uuid>\n", pad, progname); + fprintf(stderr, " %s uninstall <uuid>\n", pad, progname); + fprintf(stderr, " %s verify <uuid>\n", pad, progname); exit(1); }