[haiku-commits] BRANCH HaikuPM-github.package-management [03d70b4] in src/bin: package package_repo

  • From: HaikuPM-github.package-management <community@xxxxxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 15 Jul 2013 14:00:33 +0200 (CEST)

added 4 changesets to branch 'refs/remotes/HaikuPM-github/package-management'
old head: 916e7e75a3308431155d900cf847693ea3d3ef58
new head: 03d70b4e58f04e54ed9d76a072a0b66750f7037c
overview: https://github.com/haiku/HaikuPM/compare/916e7e7...03d70b4

----------------------------------------------------------------------------

ed156ea: package[_repo] list: reduce code duplication
  
  Introduce helper class PackageInfoPrinter that does the printing and is
  used by both commands.

4e6141b: package list: add option '-i' to list only the meta info

4ce282c: package list: also support package info files

03d70b4: Add package architecture constant for x86-64

                                    [ Ingo Weinhold <ingo_weinhold@xxxxxx> ]

----------------------------------------------------------------------------

7 files changed, 493 insertions(+), 409 deletions(-)
headers/os/package/PackageArchitecture.h |   1 +
src/bin/package/PackageInfoPrinter.h     | 393 +++++++++++++++++++++++++++
src/bin/package/command_list.cpp         | 273 ++++++-------------
src/bin/package/package.cpp              |   1 +
src/bin/package_repo/Jamfile             |   3 +-
src/bin/package_repo/command_list.cpp    | 230 +---------------
src/kits/package/PackageInfo.cpp         |   1 +

############################################################################

Commit:      ed156ea6c830aad9386342372bfcaf743a853663
Author:      Ingo Weinhold <ingo_weinhold@xxxxxx>
Date:        Sat Jul 13 14:24:03 2013 UTC

package[_repo] list: reduce code duplication

Introduce helper class PackageInfoPrinter that does the printing and is
used by both commands.

----------------------------------------------------------------------------

diff --git a/src/bin/package/PackageInfoPrinter.h 
b/src/bin/package/PackageInfoPrinter.h
new file mode 100644
index 0000000..7bc6f39
--- /dev/null
+++ b/src/bin/package/PackageInfoPrinter.h
@@ -0,0 +1,326 @@
+/*
+ * Copyright 2009-2013, Ingo Weinhold, ingo_weinhold@xxxxxx.
+ * Distributed under the terms of the MIT License.
+ */
+#ifndef PACKAGE_INFO_PRINTER_H
+#define PACKAGE_INFO_PRINTER_H
+
+
+#include <stdio.h>
+
+#include <package/hpkg/PackageInfoAttributeValue.h>
+#include <package/PackageInfo.h>
+
+
+using namespace BPackageKit;
+using BPackageKit::BHPKG::BGlobalWritableFileInfoData;
+using BPackageKit::BHPKG::BPackageInfoAttributeValue;
+using BPackageKit::BHPKG::BUserData;
+using BPackageKit::BHPKG::BUserSettingsFileInfoData;
+
+
+class PackageInfoPrinter {
+public:
+       bool PrintAttribute(const BPackageInfoAttributeValue& value)
+       {
+               switch (value.attributeID) {
+                       case B_PACKAGE_INFO_NAME:
+                               PrintName(value.string);
+                               break;
+
+                       case B_PACKAGE_INFO_SUMMARY:
+                               PrintSummary(value.string);
+                               break;
+
+                       case B_PACKAGE_INFO_DESCRIPTION:
+                               PrintDescription(value.string);
+                               break;
+
+                       case B_PACKAGE_INFO_VENDOR:
+                               PrintVendor(value.string);
+                               break;
+
+                       case B_PACKAGE_INFO_PACKAGER:
+                               PrintPackager(value.string);
+                               break;
+
+                       case B_PACKAGE_INFO_BASE_PACKAGE:
+                               PrintBasePackage(value.string);
+                               break;
+
+                       case B_PACKAGE_INFO_FLAGS:
+                               PrintFlags(value.unsignedInt);
+                               break;
+
+                       case B_PACKAGE_INFO_ARCHITECTURE:
+                               PrintArchitecture(value.unsignedInt);
+                               break;
+
+                       case B_PACKAGE_INFO_VERSION:
+                               PrintVersion(value.version);
+                               break;
+
+                       case B_PACKAGE_INFO_COPYRIGHTS:
+                               PrintCopyright(value.string);
+                               break;
+
+                       case B_PACKAGE_INFO_LICENSES:
+                               PrintLicense(value.string);
+                               break;
+
+                       case B_PACKAGE_INFO_URLS:
+                               PrintUrl(value.string);
+                               break;
+
+                       case B_PACKAGE_INFO_SOURCE_URLS:
+                               PrintSourceUrl(value.string);
+                               break;
+
+                       case B_PACKAGE_INFO_PROVIDES:
+                               PrintProvides(value.resolvable);
+                               break;
+
+                       case B_PACKAGE_INFO_REQUIRES:
+                               PrintRequires(value.resolvableExpression);
+                               break;
+
+                       case B_PACKAGE_INFO_SUPPLEMENTS:
+                               PrintSupplements(value.resolvableExpression);
+                               break;
+
+                       case B_PACKAGE_INFO_CONFLICTS:
+                               PrintConflicts(value.resolvableExpression);
+                               break;
+
+                       case B_PACKAGE_INFO_FRESHENS:
+                               PrintFreshens(value.resolvableExpression);
+                               break;
+
+                       case B_PACKAGE_INFO_REPLACES:
+                               PrintReplaces(value.string);
+                               break;
+
+                       case B_PACKAGE_INFO_GLOBAL_WRITABLE_FILES:
+                               
PrintGlobalWritableFile(value.globalWritableFileInfo);
+                               break;
+
+                       case B_PACKAGE_INFO_USER_SETTINGS_FILES:
+                               
PrintUserSettingsFile(value.userSettingsFileInfo);
+                               break;
+
+                       case B_PACKAGE_INFO_USERS:
+                               PrintUser(value.user);
+                               break;
+
+                       case B_PACKAGE_INFO_GROUPS:
+                               PrintGroup(value.string);
+                               break;
+
+                       case B_PACKAGE_INFO_POST_INSTALL_SCRIPTS:
+                               PrintPostInstallScript(value.string);
+                               break;
+
+                       case B_PACKAGE_INFO_INSTALL_PATH:
+                               PrintInstallPath(value.string);
+                               break;
+
+                       default:
+                               return false;
+               }
+
+               return true;
+       }
+
+       void PrintName(const char* name) const
+       {
+               printf("\tname: %s\n", name);
+       }
+
+       void PrintSummary(const char* summary) const
+       {
+               printf("\tsummary: %s\n", summary);
+       }
+
+       void PrintDescription(const char* description) const
+       {
+               printf("\tdescription: %s\n", description);
+       }
+
+       void PrintVendor(const char* vendor) const
+       {
+               printf("\tvendor: %s\n", vendor);
+       }
+
+       void PrintPackager(const char* packager) const
+       {
+               printf("\tpackager: %s\n", packager);
+       }
+
+       void PrintBasePackage(const char* basePackage) const
+       {
+               printf("\tbase package: %s\n", basePackage);
+       }
+
+       void PrintFlags(uint32 flags) const
+       {
+               if (flags == 0)
+                       return;
+
+               printf("\tflags:\n");
+               if ((flags & B_PACKAGE_FLAG_APPROVE_LICENSE) != 0)
+                       printf("\t\tapprove_license\n");
+               if ((flags & B_PACKAGE_FLAG_SYSTEM_PACKAGE) != 0)
+                       printf("\t\tsystem_package\n");
+       }
+
+       void PrintArchitecture(uint32 architecture) const
+       {
+               printf("\tarchitecture: %s\n",
+                       architecture < B_PACKAGE_ARCHITECTURE_ENUM_COUNT
+                               ? BPackageInfo::kArchitectureNames[architecture]
+                               : "<invalid>");
+       }
+
+       void PrintVersion(const BPackageVersionData& version) const
+       {
+               printf("\tversion: ");
+               _PrintPackageVersion(version);
+               printf("\n");
+       }
+
+       void PrintCopyright(const char* copyright) const
+       {
+               printf("\tcopyright: %s\n", copyright);
+       }
+
+       void PrintLicense(const char* license) const
+       {
+               printf("\tlicense: %s\n", license);
+       }
+
+       void PrintUrl(const char* url) const
+       {
+               printf("\tURL: %s\n", url);
+       }
+
+       void PrintSourceUrl(const char* sourceUrl) const
+       {
+               printf("\tsource URL: %s\n", sourceUrl);
+       }
+
+       void PrintProvides(const BPackageResolvableData& provides) const
+       {
+               printf("\tprovides: %s", provides.name);
+               if (provides.haveVersion) {
+                       printf(" = ");
+                       _PrintPackageVersion(provides.version);
+               }
+               if (provides.haveCompatibleVersion) {
+                       printf(" (compatible >= ");
+                       _PrintPackageVersion(provides.compatibleVersion);
+                       printf(")");
+               }
+               printf("\n");
+       }
+
+       void PrintRequires(const BPackageResolvableExpressionData& requires) 
const
+       {
+               _PrintResolvableExpression("requires", requires);
+       }
+
+       void PrintSupplements(const BPackageResolvableExpressionData& 
supplements)
+               const
+       {
+               _PrintResolvableExpression("supplements", supplements);
+       }
+
+       void PrintConflicts(const BPackageResolvableExpressionData& conflicts) 
const
+       {
+               _PrintResolvableExpression("conflicts", conflicts);
+       }
+
+       void PrintFreshens(const BPackageResolvableExpressionData& freshens) 
const
+       {
+               _PrintResolvableExpression("freshens", freshens);
+       }
+
+       void PrintReplaces(const char* replaces) const
+       {
+               printf("\treplaces: %s\n", replaces);
+       }
+
+       void PrintGlobalWritableFile(const BGlobalWritableFileInfoData& info) 
const
+       {
+               printf("\tglobal writable file: %s", info.path);
+               if (info.isDirectory)
+                       printf( " directory");
+               if (info.updateType < B_WRITABLE_FILE_UPDATE_TYPE_ENUM_COUNT) {
+                       printf(" %s\n",
+                               
BPackageInfo::kWritableFileUpdateTypes[info.updateType]);
+               } else
+                       printf("\n");
+       }
+
+       void PrintUserSettingsFile(const BUserSettingsFileInfoData& info) const
+       {
+               printf("\tuser settings file: %s", info.path);
+               if (info.isDirectory)
+                       printf( " directory\n");
+               else if (info.templatePath != NULL)
+                       printf(" template %s\n", info.templatePath);
+               else
+                       printf("\n");
+       }
+
+       void PrintUser(const BUserData& user) const
+       {
+               printf("\tuser: %s\n", user.name);
+               if (user.realName != NULL)
+                       printf("\t\treal name: %s\n", user.realName);
+               if (user.home != NULL)
+                       printf("\t\thome:      %s\n", user.home);
+               if (user.shell != NULL)
+                       printf("\t\tshell:     %s\n", user.shell);
+               for (size_t i = 0; i < user.groupCount; i++)
+                       printf("\t\tgroup:     %s\n", user.groups[i]);
+       }
+
+       void PrintGroup(const char* group) const
+       {
+               printf("\tgroup: %s\n", group);
+       }
+
+       void PrintPostInstallScript(const char* script) const
+       {
+               printf("\tpost install script: %s\n", script);
+       }
+
+       void PrintInstallPath(const char* path) const
+       {
+               printf("\tinstall path: %s\n", path);
+       }
+
+private:
+       static void _PrintPackageVersion(const BPackageVersionData& version)
+       {
+               printf("%s", BPackageVersion(version).ToString().String());
+       }
+
+       void _PrintResolvableExpression(const char* fieldName,
+               const BPackageResolvableExpressionData& expression) const
+       {
+               printf("\t%s: %s", fieldName, expression.name);
+               if (expression.haveOpAndVersion) {
+                       printf(" %s ",
+                               expression.op < 
B_PACKAGE_RESOLVABLE_OP_ENUM_COUNT
+                                       ? 
BPackageResolvableExpression::kOperatorNames[
+                                               expression.op]
+                                       : "<invalid operator>");
+                       _PrintPackageVersion(expression.version);
+               }
+               printf("\n");
+       }
+};
+
+
+#endif // PACKAGE_INFO_PRINTER_H
diff --git a/src/bin/package/command_list.cpp b/src/bin/package/command_list.cpp
index dee0452..fc84b07 100644
--- a/src/bin/package/command_list.cpp
+++ b/src/bin/package/command_list.cpp
@@ -26,6 +26,7 @@
 #include <package/PackageInfo.h>
 
 #include "package.h"
+#include "PackageInfoPrinter.h"
 
 
 using namespace BPackageKit;
@@ -81,6 +82,7 @@ template<typename VersionPolicy>
 struct PackageContentListHandler : VersionPolicy::PackageContentHandler {
        PackageContentListHandler(bool listAttributes)
                :
+               fPrinter(),
                fLevel(0),
                fListAttribute(listAttributes)
        {
@@ -167,182 +169,13 @@ struct PackageContentListHandler : 
VersionPolicy::PackageContentHandler {
        virtual status_t HandlePackageAttribute(
                const BPackageInfoAttributeValue& value)
        {
-               switch (value.attributeID) {
-                       case B_PACKAGE_INFO_NAME:
-                               printf("package-attributes:\n");
-                               printf("\tname: %s\n", value.string);
-                               break;
-
-                       case B_PACKAGE_INFO_SUMMARY:
-                               printf("\tsummary: %s\n", value.string);
-                               break;
-
-                       case B_PACKAGE_INFO_DESCRIPTION:
-                               printf("\tdescription: %s\n", value.string);
-                               break;
-
-                       case B_PACKAGE_INFO_VENDOR:
-                               printf("\tvendor: %s\n", value.string);
-                               break;
-
-                       case B_PACKAGE_INFO_PACKAGER:
-                               printf("\tpackager: %s\n", value.string);
-                               break;
-
-                       case B_PACKAGE_INFO_BASE_PACKAGE:
-                               printf("\tbase package: %s\n", value.string);
-                               break;
-
-                       case B_PACKAGE_INFO_FLAGS:
-                               if (value.unsignedInt == 0)
-                                       break;
-                               printf("\tflags:\n");
-                               if ((value.unsignedInt & 
B_PACKAGE_FLAG_APPROVE_LICENSE) != 0)
-                                       printf("\t\tapprove_license\n");
-                               if ((value.unsignedInt & 
B_PACKAGE_FLAG_SYSTEM_PACKAGE) != 0)
-                                       printf("\t\tsystem_package\n");
-                               break;
-
-                       case B_PACKAGE_INFO_ARCHITECTURE:
-                               printf("\tarchitecture: %s\n",
-                                       
BPackageInfo::kArchitectureNames[value.unsignedInt]);
-                               break;
-
-                       case B_PACKAGE_INFO_VERSION:
-                               printf("\tversion: ");
-                               _PrintPackageVersion(value.version);
-                               printf("\n");
-                               break;
-
-                       case B_PACKAGE_INFO_COPYRIGHTS:
-                               printf("\tcopyright: %s\n", value.string);
-                               break;
-
-                       case B_PACKAGE_INFO_LICENSES:
-                               printf("\tlicense: %s\n", value.string);
-                               break;
-
-                       case B_PACKAGE_INFO_URLS:
-                               printf("\tURL: %s\n", value.string);
-                               break;
-
-                       case B_PACKAGE_INFO_SOURCE_URLS:
-                               printf("\tsource URL: %s\n", value.string);
-                               break;
+               if (value.attributeID == B_PACKAGE_INFO_NAME)
+                       printf("package-attributes:\n");
 
-                       case B_PACKAGE_INFO_PROVIDES:
-                               printf("\tprovides: %s", value.resolvable.name);
-                               if (value.resolvable.haveVersion) {
-                                       printf(" = ");
-                                       
_PrintPackageVersion(value.resolvable.version);
-                               }
-                               if (value.resolvable.haveCompatibleVersion) {
-                                       printf(" (compatible >= ");
-                                       
_PrintPackageVersion(value.resolvable.compatibleVersion);
-                                       printf(")");
-                               }
-                               printf("\n");
-                               break;
-
-                       case B_PACKAGE_INFO_REQUIRES:
-                               printf("\trequires: %s", 
value.resolvableExpression.name);
-                               if 
(value.resolvableExpression.haveOpAndVersion) {
-                                       printf(" %s ", 
BPackageResolvableExpression::kOperatorNames[
-                                                       
value.resolvableExpression.op]);
-                                       
_PrintPackageVersion(value.resolvableExpression.version);
-                               }
-                               printf("\n");
-                               break;
-
-                       case B_PACKAGE_INFO_SUPPLEMENTS:
-                               printf("\tsupplements: %s", 
value.resolvableExpression.name);
-                               if 
(value.resolvableExpression.haveOpAndVersion) {
-                                       printf(" %s ", 
BPackageResolvableExpression::kOperatorNames[
-                                                       
value.resolvableExpression.op]);
-                                       
_PrintPackageVersion(value.resolvableExpression.version);
-                               }
-                               printf("\n");
-                               break;
-
-                       case B_PACKAGE_INFO_CONFLICTS:
-                               printf("\tconflicts: %s", 
value.resolvableExpression.name);
-                               if 
(value.resolvableExpression.haveOpAndVersion) {
-                                       printf(" %s ", 
BPackageResolvableExpression::kOperatorNames[
-                                                       
value.resolvableExpression.op]);
-                                       
_PrintPackageVersion(value.resolvableExpression.version);
-                               }
-                               printf("\n");
-                               break;
-
-                       case B_PACKAGE_INFO_FRESHENS:
-                               printf("\tfreshens: %s", 
value.resolvableExpression.name);
-                               if 
(value.resolvableExpression.haveOpAndVersion) {
-                                       printf(" %s ", 
BPackageResolvableExpression::kOperatorNames[
-                                                       
value.resolvableExpression.op]);
-                                       
_PrintPackageVersion(value.resolvableExpression.version);
-                               }
-                               printf("\n");
-                               break;
-
-                       case B_PACKAGE_INFO_REPLACES:
-                               printf("\treplaces: %s\n", value.string);
-                               break;
-
-                       case B_PACKAGE_INFO_GLOBAL_WRITABLE_FILES:
-                               printf("\tglobal writable file: %s",
-                                       value.globalWritableFileInfo.path);
-                               if (value.globalWritableFileInfo.isDirectory)
-                                       printf( " directory");
-                               if (value.globalWritableFileInfo.updateType
-                                               < 
B_WRITABLE_FILE_UPDATE_TYPE_ENUM_COUNT) {
-                                       printf(" %s\n",
-                                               
BPackageInfo::kWritableFileUpdateTypes[
-                                                       
value.globalWritableFileInfo.updateType]);
-                               } else
-                                       printf("\n");
-                               break;
-
-                       case B_PACKAGE_INFO_USER_SETTINGS_FILES:
-                               printf("\tuser settings file: %s",
-                                       value.userSettingsFileInfo.path);
-                               if (value.globalWritableFileInfo.isDirectory) {
-                                       printf( " directory\n");
-                               } else if 
(value.userSettingsFileInfo.templatePath != NULL) {
-                                       printf(" template %s\n",
-                                               
value.userSettingsFileInfo.templatePath);
-                               } else
-                                       printf("\n");
-                               break;
-
-                       case B_PACKAGE_INFO_USERS:
-                               printf("\tuser: %s\n", value.user.name);
-                               if (value.user.realName != NULL)
-                                       printf("\t\treal name: %s\n", 
value.user.realName);
-                               if (value.user.home != NULL)
-                                       printf("\t\thome:      %s\n", 
value.user.home);
-                               if (value.user.shell != NULL)
-                                       printf("\t\tshell:     %s\n", 
value.user.shell);
-                               for (size_t i = 0; i < value.user.groupCount; 
i++)
-                                       printf("\t\tgroup:     %s\n", 
value.user.groups[i]);
-                               break;
-
-                       case B_PACKAGE_INFO_GROUPS:
-                               printf("\tgroup: %s\n", value.string);
-                               break;
-
-                       case B_PACKAGE_INFO_POST_INSTALL_SCRIPTS:
-                               printf("\tpost install script: %s\n", 
value.string);
-                               break;
-
-                       case B_PACKAGE_INFO_INSTALL_PATH:
-                               printf("\tinstall path: %s\n", value.string);
-                               break;
-
-                       default:
-                               printf(
-                                       "*** Invalid package attribute section: 
unexpected "
-                                       "package attribute id %d 
encountered\n", value.attributeID);
-                               return B_BAD_DATA;
+               if (!fPrinter.PrintAttribute(value)) {
+                       printf("*** Invalid package attribute section: 
unexpected "
+                               "package attribute id %d encountered\n", 
value.attributeID);
+                       return B_BAD_DATA;
                }
 
                return B_OK;
@@ -373,8 +206,9 @@ private:
        }
 
 private:
-       int             fLevel;
-       bool    fListAttribute;
+       PackageInfoPrinter      fPrinter;
+       int                                     fLevel;
+       bool                            fListAttribute;
 };
 
 
diff --git a/src/bin/package_repo/Jamfile b/src/bin/package_repo/Jamfile
index fe07930..7122a15 100644
--- a/src/bin/package_repo/Jamfile
+++ b/src/bin/package_repo/Jamfile
@@ -2,6 +2,8 @@ SubDir HAIKU_TOP src bin package_repo ;
 
 UsePrivateHeaders kernel shared ;
 
+UseHeaders [ FDirName $(HAIKU_TOP) src bin package ] ;
+
 DEFINES += B_ENABLE_INCOMPLETE_POSIX_AT_SUPPORT ;
        # TODO: Remove when it is complete!
 
@@ -13,4 +15,3 @@ BinCommand package_repo :
        package be
        $(TARGET_LIBSUPC++)
 ;
-
diff --git a/src/bin/package_repo/command_list.cpp 
b/src/bin/package_repo/command_list.cpp
index 3b95f3e..48570c5 100644
--- a/src/bin/package_repo/command_list.cpp
+++ b/src/bin/package_repo/command_list.cpp
@@ -19,6 +19,7 @@
 #include <package/RepositoryInfo.h>
 
 #include "package_repo.h"
+#include "PackageInfoPrinter.h"
 
 
 using namespace BPackageKit::BHPKG;
@@ -27,6 +28,7 @@ using namespace BPackageKit;
 struct RepositoryContentListHandler : BRepositoryContentHandler {
        RepositoryContentListHandler(bool verbose)
                :
+               fPrinter(),
                fLevel(0),
                fVerbose(verbose)
        {
@@ -40,221 +42,18 @@ struct RepositoryContentListHandler : 
BRepositoryContentHandler {
        virtual status_t HandlePackageAttribute(
                const BPackageInfoAttributeValue& value)
        {
-               switch (value.attributeID) {
-                       case B_PACKAGE_INFO_NAME:
-                               if (fVerbose) {
-                                       printf("package-attributes:\n");
-                                       printf("\tname: %s\n", value.string);
-                               } else
-                                       printf("package: %s", value.string);
-                               break;
-
-                       case B_PACKAGE_INFO_SUMMARY:
-                               if (fVerbose)
-                                       printf("\tsummary: %s\n", value.string);
-                               break;
-
-                       case B_PACKAGE_INFO_DESCRIPTION:
-                               if (fVerbose)
-                                       printf("\tdescription: %s\n", 
value.string);
-                               break;
-
-                       case B_PACKAGE_INFO_VENDOR:
-                               if (fVerbose)
-                                       printf("\tvendor: %s\n", value.string);
-                               break;
-
-                       case B_PACKAGE_INFO_PACKAGER:
-                               if (fVerbose)
-                                       printf("\tpackager: %s\n", 
value.string);
-                               break;
-
-                       case B_PACKAGE_INFO_BASE_PACKAGE:
-                               if (fVerbose)
-                                       printf("\tbase package: %s\n", 
value.string);
-                               break;
-
-                       case B_PACKAGE_INFO_FLAGS:
-                               if (value.unsignedInt == 0 || !fVerbose)
-                                       break;
-                               printf("\tflags:\n");
-                               if ((value.unsignedInt & 
B_PACKAGE_FLAG_APPROVE_LICENSE) != 0)
-                                       printf("\t\tapprove_license\n");
-                               if ((value.unsignedInt & 
B_PACKAGE_FLAG_SYSTEM_PACKAGE) != 0)
-                                       printf("\t\tsystem_package\n");
-                               break;
-
-                       case B_PACKAGE_INFO_ARCHITECTURE:
-                               if (fVerbose) {
-                                       printf("\tarchitecture: %s\n",
-                                               
BPackageInfo::kArchitectureNames[value.unsignedInt]);
-                               }
-                               break;
-
-                       case B_PACKAGE_INFO_VERSION:
-                               if (!fVerbose)
-                                       printf("(");
-                               _PrintPackageVersion(value.version);
-                               if (!fVerbose)
-                                       printf(")\n");
-                               break;
-
-                       case B_PACKAGE_INFO_COPYRIGHTS:
-                               if (fVerbose)
-                                       printf("\tcopyright: %s\n", 
value.string);
-                               break;
-
-                       case B_PACKAGE_INFO_LICENSES:
-                               if (fVerbose)
-                                       printf("\tlicense: %s\n", value.string);
-                               break;
-
-                       case B_PACKAGE_INFO_URLS:
-                               if (fVerbose)
-                                       printf("\tURL: %s\n", value.string);
-                               break;
-
-                       case B_PACKAGE_INFO_SOURCE_URLS:
-                               if (fVerbose)
-                                       printf("\tsource URL: %s\n", 
value.string);
-                               break;
-
-                       case B_PACKAGE_INFO_PROVIDES:
-                               if (!fVerbose)
-                                       break;
-                               printf("\tprovides: %s", value.resolvable.name);
-                               if (value.resolvable.haveVersion) {
-                                       printf(" = ");
-                                       
_PrintPackageVersion(value.resolvable.version);
-                               }
-                               printf("\n");
-                               break;
-
-                       case B_PACKAGE_INFO_REQUIRES:
-                               if (!fVerbose)
-                                       break;
-                               printf("\trequires: %s", 
value.resolvableExpression.name);
-                               if 
(value.resolvableExpression.haveOpAndVersion) {
-                                       printf(" %s ", 
BPackageResolvableExpression::kOperatorNames[
-                                                       
value.resolvableExpression.op]);
-                                       
_PrintPackageVersion(value.resolvableExpression.version);
-                               }
-                               printf("\n");
-                               break;
-
-                       case B_PACKAGE_INFO_SUPPLEMENTS:
-                               if (!fVerbose)
-                                       break;
-                               printf("\tsupplements: %s", 
value.resolvableExpression.name);
-                               if 
(value.resolvableExpression.haveOpAndVersion) {
-                                       printf(" %s ", 
BPackageResolvableExpression::kOperatorNames[
-                                                       
value.resolvableExpression.op]);
-                                       
_PrintPackageVersion(value.resolvableExpression.version);
-                               }
-                               printf("\n");
-                               break;
-
-                       case B_PACKAGE_INFO_CONFLICTS:
-                               if (!fVerbose)
-                                       break;
-                               printf("\tconflicts: %s", 
value.resolvableExpression.name);
-                               if 
(value.resolvableExpression.haveOpAndVersion) {
-                                       printf(" %s ", 
BPackageResolvableExpression::kOperatorNames[
-                                                       
value.resolvableExpression.op]);
-                                       
_PrintPackageVersion(value.resolvableExpression.version);
-                               }
-                               printf("\n");
-                               break;
-
-                       case B_PACKAGE_INFO_FRESHENS:
-                               if (!fVerbose)
-                                       break;
-                               printf("\tfreshens: %s", 
value.resolvableExpression.name);
-                               if 
(value.resolvableExpression.haveOpAndVersion) {
-                                       printf(" %s ", 
BPackageResolvableExpression::kOperatorNames[
-                                                       
value.resolvableExpression.op]);
-                                       
_PrintPackageVersion(value.resolvableExpression.version);
-                               }
-                               printf("\n");
-                               break;
-
-                       case B_PACKAGE_INFO_REPLACES:
-                               if (!fVerbose)
-                                       break;
-                               printf("\treplaces: %s\n", value.string);
-                               break;
-
-                       case B_PACKAGE_INFO_CHECKSUM:
-                               printf("\tchecksum: %s\n", value.string);
-                               break;
-
-                       case B_PACKAGE_INFO_GLOBAL_WRITABLE_FILES:
-                               if (!fVerbose)
-                                       break;
-                               printf("\tglobal writable file: %s",
-                                       value.globalWritableFileInfo.path);
-                               if (value.globalWritableFileInfo.isDirectory)
-                                       printf( " directory");
-                               if (value.globalWritableFileInfo.updateType
-                                               < 
B_WRITABLE_FILE_UPDATE_TYPE_ENUM_COUNT) {
-                                       printf(" %s\n",
-                                               
BPackageInfo::kWritableFileUpdateTypes[
-                                                       
value.globalWritableFileInfo.updateType]);
-                               } else
-                                       printf("\n");
-                               break;
-
-                       case B_PACKAGE_INFO_USER_SETTINGS_FILES:
-                               if (!fVerbose)
-                                       break;
-                               printf("\tuser settings file: %s",
-                                       value.userSettingsFileInfo.path);
-                               if (value.globalWritableFileInfo.isDirectory) {
-                                       printf( " directory\n");
-                               } else if 
(value.userSettingsFileInfo.templatePath != NULL) {
-                                       printf(" template %s\n",
-                                               
value.userSettingsFileInfo.templatePath);
-                               } else
-                                       printf("\n");
-                               break;
-
-                       case B_PACKAGE_INFO_USERS:
-                               if (!fVerbose)
-                                       break;
-                               printf("\tuser: %s\n", value.user.name);
-                               if (value.user.realName != NULL)
-                                       printf("\t\treal name: %s\n", 
value.user.realName);
-                               if (value.user.home != NULL)
-                                       printf("\t\thome:      %s\n", 
value.user.home);
-                               if (value.user.shell != NULL)
-                                       printf("\t\tshell:     %s\n", 
value.user.shell);
-                               for (size_t i = 0; i < value.user.groupCount; 
i++)
-                                       printf("\t\tgroup:     %s\n", 
value.user.groups[i]);
-                               break;
-
-                       case B_PACKAGE_INFO_GROUPS:
-                               if (!fVerbose)
-                                       break;
-                               printf("\tgroup: %s\n", value.string);
-                               break;
-
-                       case B_PACKAGE_INFO_POST_INSTALL_SCRIPTS:
-                               if (!fVerbose)
-                                       break;
-                               printf("\tpost install script: %s\n", 
value.string);
-                               break;
-
-                       case B_PACKAGE_INFO_INSTALL_PATH:
-                               if (!fVerbose)
-                                       break;
-                               printf("\tinstall path: %s\n", value.string);
-                               break;
-
-                       default:
-                               printf(
-                                       "*** Invalid package attribute section: 
unexpected "
+               if (value.attributeID == B_PACKAGE_INFO_NAME) {
+                       if (fVerbose) {
+                               printf("package-attributes:\n");
+                               fPrinter.PrintName(value.string);
+                       } else
+                               printf("package: %s", value.string);
+               } else {
+                       if (fVerbose && !fPrinter.PrintAttribute(value)) {
+                               printf("*** Invalid package attribute section: 
unexpected "
                                        "package attribute id %d 
encountered\n", value.attributeID);
                                return B_BAD_DATA;
+                       }
                }
 
                return B_OK;
@@ -296,8 +95,9 @@ private:
        }
 
 private:
-       int             fLevel;
-       bool    fVerbose;
+       PackageInfoPrinter      fPrinter;
+       int                                     fLevel;
+       bool                            fVerbose;
 };
 
 

############################################################################

Commit:      4e6141b823043abc3e48acb48e45e43b8fa680fe
Author:      Ingo Weinhold <ingo_weinhold@xxxxxx>
Date:        Sat Jul 13 14:25:15 2013 UTC

package list: add option '-i' to list only the meta info

----------------------------------------------------------------------------

diff --git a/src/bin/package/command_list.cpp b/src/bin/package/command_list.cpp
index fc84b07..1862316 100644
--- a/src/bin/package/command_list.cpp
+++ b/src/bin/package/command_list.cpp
@@ -78,18 +78,29 @@ struct VersionPolicyV2 {
 };
 
 
+enum ListMode {
+       LIST_ALL,
+       LIST_PATHS_ONLY,
+       LIST_META_INFO_ONLY
+};
+
+
 template<typename VersionPolicy>
 struct PackageContentListHandler : VersionPolicy::PackageContentHandler {
-       PackageContentListHandler(bool listAttributes)
+       PackageContentListHandler(bool listEntries, bool listAttributes)
                :
                fPrinter(),
                fLevel(0),
-               fListAttribute(listAttributes)
+               fListEntries(listEntries),
+               fListAttribute(listEntries && listAttributes)
        {
        }
 
        virtual status_t HandleEntry(typename VersionPolicy::PackageEntry* 
entry)
        {
+               if (!fListEntries)
+                       return B_OK;
+
                fLevel++;
 
                int indentation = (fLevel - 1) * 2;
@@ -162,6 +173,9 @@ struct PackageContentListHandler : 
VersionPolicy::PackageContentHandler {
        virtual status_t HandleEntryDone(
                typename VersionPolicy::PackageEntry* entry)
        {
+               if (!fListEntries)
+                       return B_OK;
+
                fLevel--;
                return B_OK;
        }
@@ -208,6 +222,7 @@ private:
 private:
        PackageInfoPrinter      fPrinter;
        int                                     fLevel;
+       bool                            fListEntries;
        bool                            fListAttribute;
 };
 
@@ -258,7 +273,7 @@ private:
 
 template<typename VersionPolicy>
 static void
-do_list(const char* packageFileName, bool listAttributes, bool filePathsOnly,
+do_list(const char* packageFileName, bool listAttributes, ListMode listMode,
        bool ignoreVersionError)
 {
        // open package
@@ -272,13 +287,23 @@ do_list(const char* packageFileName, bool listAttributes, 
bool filePathsOnly,
        }
 
        // list
-       if (filePathsOnly) {
-               PackageContentListPathsHandler<VersionPolicy> handler;
-               error = packageReader.ParseContent(&handler);
-       } else {
-               PackageContentListHandler<VersionPolicy> 
handler(listAttributes);
-               error = packageReader.ParseContent(&handler);
+       switch (listMode) {
+               case LIST_PATHS_ONLY:
+               {
+                       PackageContentListPathsHandler<VersionPolicy> handler;
+                       error = packageReader.ParseContent(&handler);
+                       break;
+               }
+
+               case LIST_ALL:
+               case LIST_META_INFO_ONLY:
+               {
+                       PackageContentListHandler<VersionPolicy> handler(
+                               listMode != LIST_META_INFO_ONLY, 
listAttributes);
+                       error = packageReader.ParseContent(&handler);
+               }
        }
+
        if (error != B_OK)
                exit(1);
 
@@ -289,8 +314,8 @@ do_list(const char* packageFileName, bool listAttributes, 
bool filePathsOnly,
 int
 command_list(int argc, const char* const* argv)
 {
+       ListMode listMode = LIST_ALL;
        bool listAttributes = false;
-       bool filePathsOnly = false;
 
        while (true) {
                static struct option sLongOptions[] = {
@@ -299,7 +324,7 @@ command_list(int argc, const char* const* argv)
                };
 
                opterr = 0; // don't print errors
-               int c = getopt_long(argc, (char**)argv, "+hap", sLongOptions, 
NULL);
+               int c = getopt_long(argc, (char**)argv, "+ahip", sLongOptions, 
NULL);
                if (c == -1)
                        break;
 
@@ -308,12 +333,16 @@ command_list(int argc, const char* const* argv)
                                listAttributes = true;
                                break;
 
+                       case 'i':
+                               listMode = LIST_META_INFO_ONLY;
+                               break;
+
                        case 'h':
                                print_usage_and_exit(false);
                                break;
 
                        case 'p':
-                               filePathsOnly = true;
+                               listMode = LIST_PATHS_ONLY;
                                break;
 
                        default:
@@ -331,10 +360,8 @@ command_list(int argc, const char* const* argv)
        BHPKG::BStandardErrorOutput errorOutput;
 
        // current package file format version
-       do_list<VersionPolicyV2>(packageFileName, listAttributes, filePathsOnly,
-               true);
-       do_list<VersionPolicyV1>(packageFileName, listAttributes, filePathsOnly,
-               false);
+       do_list<VersionPolicyV2>(packageFileName, listAttributes, listMode, 
true);
+       do_list<VersionPolicyV1>(packageFileName, listAttributes, listMode, 
false);
 
        return 0;
 }
diff --git a/src/bin/package/package.cpp b/src/bin/package/package.cpp
index 240517b..180169c 100644
--- a/src/bin/package/package.cpp
+++ b/src/bin/package/package.cpp
@@ -80,6 +80,7 @@ static const char* kUsage =
        "    Lists the contents of package file <package>.\n"
        "\n"
        "    -a         - Also list the file attributes.\n"
+       "    -i         - Only print the meta information, not the files.\n"
        "    -p         - Only print a list of file paths.\n"
        "\n"
        "Common Options:\n"

############################################################################

Commit:      4ce282c7cc1e57d73459881ecb6c913c1f25a65d
Author:      Ingo Weinhold <ingo_weinhold@xxxxxx>
Date:        Sat Jul 13 15:03:44 2013 UTC

package list: also support package info files

----------------------------------------------------------------------------

diff --git a/src/bin/package/PackageInfoPrinter.h 
b/src/bin/package/PackageInfoPrinter.h
index 7bc6f39..5358657 100644
--- a/src/bin/package/PackageInfoPrinter.h
+++ b/src/bin/package/PackageInfoPrinter.h
@@ -21,6 +21,89 @@ using BPackageKit::BHPKG::BUserSettingsFileInfoData;
 
 class PackageInfoPrinter {
 public:
+       void PrintPackageInfo(const BPackageInfo& info)
+       {
+               PrintName(info.Name());
+               PrintSummary(info.Summary());
+               PrintDescription(info.Description());
+               PrintVendor(info.Vendor());
+               PrintPackager(info.Packager());
+
+               if (!info.BasePackage().IsEmpty())
+                       PrintBasePackage(info.BasePackage());
+
+               PrintFlags(info.Flags());
+               PrintArchitecture((uint32)info.Architecture());
+               PrintVersion(info.Version());
+
+               int32 count = info.CopyrightList().CountStrings();
+               for (int32 i = 0; i < count; i++)
+                       PrintCopyright(info.CopyrightList().StringAt(i));
+
+               count = info.LicenseList().CountStrings();
+               for (int32 i = 0; i < count; i++)
+                       PrintLicense(info.LicenseList().StringAt(i));
+
+               count = info.URLList().CountStrings();
+               for (int32 i = 0; i < count; i++)
+                       PrintUrl(info.URLList().StringAt(i));
+
+               count = info.SourceURLList().CountStrings();
+               for (int32 i = 0; i < count; i++)
+                       PrintSourceUrl(info.SourceURLList().StringAt(i));
+
+               count = info.ProvidesList().CountItems();
+               for (int32 i = 0; i < count; i++)
+                       PrintProvides(*info.ProvidesList().ItemAt(i));
+
+               count = info.RequiresList().CountItems();
+               for (int32 i = 0; i < count; i++)
+                       PrintRequires(*info.RequiresList().ItemAt(i));
+
+               count = info.SupplementsList().CountItems();
+               for (int32 i = 0; i < count; i++)
+                       PrintSupplements(*info.SupplementsList().ItemAt(i));
+
+               count = info.ConflictsList().CountItems();
+               for (int32 i = 0; i < count; i++)
+                       PrintConflicts(*info.ConflictsList().ItemAt(i));
+
+               count = info.FreshensList().CountItems();
+               for (int32 i = 0; i < count; i++)
+                       PrintFreshens(*info.FreshensList().ItemAt(i));
+
+               count = info.ReplacesList().CountStrings();
+               for (int32 i = 0; i < count; i++)
+                       PrintReplaces(info.ReplacesList().StringAt(i));
+
+               count = info.GlobalWritableFileInfos().CountItems();
+               for (int32 i = 0; i < count; i++)
+                       
PrintGlobalWritableFile(*info.GlobalWritableFileInfos().ItemAt(i));
+
+               count = info.UserSettingsFileInfos().CountItems();
+               for (int32 i = 0; i < count; i++)
+                       
PrintUserSettingsFile(*info.UserSettingsFileInfos().ItemAt(i));
+
+               count = info.Users().CountItems();
+               for (int32 i = 0; i < count; i++)
+                       PrintUser(*info.Users().ItemAt(i));
+
+               count = info.Groups().CountStrings();
+               for (int32 i = 0; i < count; i++)
+                       PrintGroup(info.Groups().StringAt(i));
+
+               count = info.PostInstallScripts().CountStrings();
+               for (int32 i = 0; i < count; i++)
+                       
PrintPostInstallScript(info.PostInstallScripts().StringAt(i));
+
+               count = info.PostInstallScripts().CountStrings();
+               for (int32 i = 0; i < count; i++)
+                       
PrintPostInstallScript(info.PostInstallScripts().StringAt(i));
+
+               if (!info.InstallPath().IsEmpty())
+                       PrintInstallPath(info.InstallPath());
+       }
+
        bool PrintAttribute(const BPackageInfoAttributeValue& value)
        {
                switch (value.attributeID) {
@@ -181,11 +264,9 @@ public:
                                : "<invalid>");
        }
 
-       void PrintVersion(const BPackageVersionData& version) const
+       void PrintVersion(const BPackageVersion& version) const
        {
-               printf("\tversion: ");
-               _PrintPackageVersion(version);
-               printf("\n");
+               printf("\tversion: %s\n", version.ToString().String());
        }
 
        void PrintCopyright(const char* copyright) const
@@ -208,38 +289,36 @@ public:
                printf("\tsource URL: %s\n", sourceUrl);
        }
 
-       void PrintProvides(const BPackageResolvableData& provides) const
+       void PrintProvides(const BPackageResolvable& provides) const
        {
-               printf("\tprovides: %s", provides.name);
-               if (provides.haveVersion) {
-                       printf(" = ");
-                       _PrintPackageVersion(provides.version);
-               }
-               if (provides.haveCompatibleVersion) {
-                       printf(" (compatible >= ");
-                       _PrintPackageVersion(provides.compatibleVersion);
-                       printf(")");
+               printf("\tprovides: %s", provides.Name().String());
+               if (provides.Version().InitCheck() == B_OK)
+                       printf(" = %s", provides.Version().ToString().String());
+
+               if (provides.CompatibleVersion().InitCheck() == B_OK) {
+                       printf(" (compatible >= %s)",
+                               
provides.CompatibleVersion().ToString().String());
                }
                printf("\n");
        }
 
-       void PrintRequires(const BPackageResolvableExpressionData& requires) 
const
+       void PrintRequires(const BPackageResolvableExpression& requires) const
        {
                _PrintResolvableExpression("requires", requires);
        }
 
-       void PrintSupplements(const BPackageResolvableExpressionData& 
supplements)
+       void PrintSupplements(const BPackageResolvableExpression& supplements)
                const
        {
                _PrintResolvableExpression("supplements", supplements);
        }
 
-       void PrintConflicts(const BPackageResolvableExpressionData& conflicts) 
const
+       void PrintConflicts(const BPackageResolvableExpression& conflicts) const
        {
                _PrintResolvableExpression("conflicts", conflicts);
        }
 
-       void PrintFreshens(const BPackageResolvableExpressionData& freshens) 
const
+       void PrintFreshens(const BPackageResolvableExpression& freshens) const
        {
                _PrintResolvableExpression("freshens", freshens);
        }
@@ -249,40 +328,42 @@ public:
                printf("\treplaces: %s\n", replaces);
        }
 
-       void PrintGlobalWritableFile(const BGlobalWritableFileInfoData& info) 
const
+       void PrintGlobalWritableFile(const BGlobalWritableFileInfo& info) const
        {
-               printf("\tglobal writable file: %s", info.path);
-               if (info.isDirectory)
+               printf("\tglobal writable file: %s", info.Path().String());
+               if (info.IsDirectory())
                        printf( " directory");
-               if (info.updateType < B_WRITABLE_FILE_UPDATE_TYPE_ENUM_COUNT) {
+               if (info.UpdateType() < B_WRITABLE_FILE_UPDATE_TYPE_ENUM_COUNT) 
{
                        printf(" %s\n",
-                               
BPackageInfo::kWritableFileUpdateTypes[info.updateType]);
+                               
BPackageInfo::kWritableFileUpdateTypes[info.UpdateType()]);
                } else
                        printf("\n");
        }
 
-       void PrintUserSettingsFile(const BUserSettingsFileInfoData& info) const
+       void PrintUserSettingsFile(const BUserSettingsFileInfo& info) const
        {
-               printf("\tuser settings file: %s", info.path);
-               if (info.isDirectory)
+               printf("\tuser settings file: %s", info.Path().String());
+               if (info.IsDirectory())
                        printf( " directory\n");
-               else if (info.templatePath != NULL)
-                       printf(" template %s\n", info.templatePath);
+               else if (!info.TemplatePath().IsEmpty())
+                       printf(" template %s\n", info.TemplatePath().String());
                else
                        printf("\n");
        }
 
-       void PrintUser(const BUserData& user) const
+       void PrintUser(const BUser& user) const
        {
-               printf("\tuser: %s\n", user.name);
-               if (user.realName != NULL)
-                       printf("\t\treal name: %s\n", user.realName);
-               if (user.home != NULL)
-                       printf("\t\thome:      %s\n", user.home);
-               if (user.shell != NULL)
-                       printf("\t\tshell:     %s\n", user.shell);
-               for (size_t i = 0; i < user.groupCount; i++)
-                       printf("\t\tgroup:     %s\n", user.groups[i]);
+               printf("\tuser: %s\n", user.Name().String());
+               if (!user.RealName().IsEmpty())
+                       printf("\t\treal name: %s\n", user.RealName().String());
+               if (!user.Home().IsEmpty())
+                       printf("\t\thome:      %s\n", user.Home().String());
+               if (!user.Shell().IsEmpty())
+                       printf("\t\tshell:     %s\n", user.Shell().String());
+
+               int32 groupCount = user.Groups().CountStrings();
+               for (int32 i = 0; i < groupCount; i++)
+                       printf("\t\tgroup:     %s\n", 
user.Groups().StringAt(i).String());
        }
 
        void PrintGroup(const char* group) const
@@ -301,24 +382,10 @@ public:
        }
 
 private:
-       static void _PrintPackageVersion(const BPackageVersionData& version)
-       {
-               printf("%s", BPackageVersion(version).ToString().String());
-       }
-
        void _PrintResolvableExpression(const char* fieldName,
-               const BPackageResolvableExpressionData& expression) const
+               const BPackageResolvableExpression& expression) const
        {
-               printf("\t%s: %s", fieldName, expression.name);
-               if (expression.haveOpAndVersion) {
-                       printf(" %s ",
-                               expression.op < 
B_PACKAGE_RESOLVABLE_OP_ENUM_COUNT
-                                       ? 
BPackageResolvableExpression::kOperatorNames[
-                                               expression.op]
-                                       : "<invalid operator>");
-                       _PrintPackageVersion(expression.version);
-               }
-               printf("\n");
+               printf("\t%s: %s\n", fieldName, expression.ToString().String());
        }
 };
 
diff --git a/src/bin/package/command_list.cpp b/src/bin/package/command_list.cpp
index 1862316..9670fa5 100644
--- a/src/bin/package/command_list.cpp
+++ b/src/bin/package/command_list.cpp
@@ -12,6 +12,7 @@
 #include <string.h>
 #include <time.h>
 
+#include <Entry.h>
 #include <package/hpkg/PackageContentHandler.h>
 #include <package/hpkg/PackageEntry.h>
 #include <package/hpkg/PackageEntryAttribute.h>
@@ -357,6 +358,31 @@ command_list(int argc, const char* const* argv)
 
        const char* packageFileName = argv[optind++];
 
+       // If the file doesn't look like a package file, try to load it as a
+       // package info file.
+       if (!BString(packageFileName).EndsWith(".hpkg")) {
+               struct ErrorListener : BPackageInfo::ParseErrorListener {
+                       virtual void OnError(const BString& msg, int line, int 
col)
+                       {
+                               fprintf(stderr, "%s:%d:%d: %s\n", fPath, line, 
col,
+                                       msg.String());
+                       }
+
+                       const char*     fPath;
+               } errorListener;
+               errorListener.fPath = packageFileName;
+
+               BPackageInfo info;
+               if (info.ReadFromConfigFile(BEntry(packageFileName), 
&errorListener)
+                               != B_OK) {
+                       return 1;
+               }
+
+               printf("package-attributes:\n");
+               PackageInfoPrinter().PrintPackageInfo(info);
+               return 0;
+       }
+
        BHPKG::BStandardErrorOutput errorOutput;
 
        // current package file format version

############################################################################

Commit:      03d70b4e58f04e54ed9d76a072a0b66750f7037c
Author:      Ingo Weinhold <ingo_weinhold@xxxxxx>
Date:        Sat Jul 13 19:17:02 2013 UTC

Add package architecture constant for x86-64

----------------------------------------------------------------------------

diff --git a/headers/os/package/PackageArchitecture.h 
b/headers/os/package/PackageArchitecture.h
index 2527e1b..da2739f 100644
--- a/headers/os/package/PackageArchitecture.h
+++ b/headers/os/package/PackageArchitecture.h
@@ -14,6 +14,7 @@ enum BPackageArchitecture {
        B_PACKAGE_ARCHITECTURE_X86              = 1,
        B_PACKAGE_ARCHITECTURE_X86_GCC2 = 2,
        B_PACKAGE_ARCHITECTURE_SOURCE   = 3,
+       B_PACKAGE_ARCHITECTURE_X86_64   = 4,
        //
        B_PACKAGE_ARCHITECTURE_ENUM_COUNT,
 };
diff --git a/src/kits/package/PackageInfo.cpp b/src/kits/package/PackageInfo.cpp
index 7de8cf2..de50705 100644
--- a/src/kits/package/PackageInfo.cpp
+++ b/src/kits/package/PackageInfo.cpp
@@ -65,6 +65,7 @@ 
BPackageInfo::kArchitectureNames[B_PACKAGE_ARCHITECTURE_ENUM_COUNT] = {
        "x86",
        "x86_gcc2",
        "source",
+       "x86_64",
 };
 
 


Other related posts:

  • » [haiku-commits] BRANCH HaikuPM-github.package-management [03d70b4] in src/bin: package package_repo - HaikuPM-github . package-management