A Common Package Specification: Getting Build Tools to Talk to Each Other - Lessons Learned CppCon

Learn how to enable seamless interoperability between different build tools and systems, exploring the Common Package Specification and its role in defining what a package contains and how it can be used.

Key takeaways
  • A package specification is needed to allow build tools to interoperate.
  • A component is a part of the package, and properties are extensions that can be used.
  • The CPS (Common Package Specification) is a file that defines what a package contains.
  • The CPS is not intrinsic, and the build system needs to generate it.
  • Each component can have its own include directories and header files.
  • A single component can have multiple variants (e.g., debug and release).
  • The CPS should be able to handle scenarios with multiple configurations.
  • Interoperability between different build systems is important.
  • Debian package maintainers have experience with package specification.
  • The protoc executable from the Linux package can be used.
  • Conan packages have their own package specification.
  • The scope of CPS is the library, not the entire package.
  • Packaging is important for library distribution.
  • Common names for components can be problematic.
  • Package specification should not cover version information.
  • Consumers should be able to use the library’s headers directly.
  • Dynamic languages should be able to consume the package.
  • SBOM (Software Bill of Materials) generation is important.
  • Interoperability between different build systems is important for scalability.
  • Users should be able to select which configuration to use.
  • Version information needs to be present in the package specification.
  • Libraries should be able to be used in different environments.
  • The CPS should be looked for in the include directory.
  • Transparency between components is important.
  • The CPS can be used to specify properties of components.
  • Libraries should be able to be used in different configurations.
  • Debug and release configurations should be separate.
  • Interoperability with different build systems is essential.
  • Library information needs to be present in the package specification.
  • The CPS should be a file that defines what a package contains.
  • The package specification should not be a single file.
  • Interoperability between different systems is important.
  • The library contains the proto executable.
  • Consumers should be able to use the library’s artifacts.
  • Conan packages should be able to consume the package specification.
  • The CPS should be used to specify properties of components.
  • Libraries should be able to be used in different configurations.
  • The package specification should be looked for in the include directory.
  • Transparency between components is important.