Merge branch 'main' into prov2
diff --git a/MODULE.bazel b/MODULE.bazel
index 84e1dc3..2c7fef4 100644
--- a/MODULE.bazel
+++ b/MODULE.bazel
@@ -7,12 +7,12 @@
 
 # Do not update to newer versions until you need a specific new feature.
 bazel_dep(name = "rules_license", version = "1.0.0")
-bazel_dep(name = "rules_python", version = "1.0.0")
+bazel_dep(name = "rules_python", version = "1.7.0")
 bazel_dep(name = "bazel_skylib", version = "1.9.0")
 
 # Only for development
 bazel_dep(name = "platforms", version = "1.0.0", dev_dependency = True)
-bazel_dep(name = "rules_cc", version = "0.1.1", dev_dependency = True)
+bazel_dep(name = "rules_cc", version = "0.2.16", dev_dependency = True)
 bazel_dep(name = "rules_shell", version = "0.6.1", dev_dependency = True)
 bazel_dep(name = "stardoc", version = "0.7.2", dev_dependency = True)
 
diff --git a/doc_build/BUILD b/doc_build/BUILD
index 44d559c..55837af 100644
--- a/doc_build/BUILD
+++ b/doc_build/BUILD
@@ -19,7 +19,6 @@
    git commit -m 'update docs' docs/latest.md
 """
 
-load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
 load("@rules_python//python:defs.bzl", "py_binary")
 load("@stardoc//stardoc:stardoc.bzl", "stardoc")
 load("//:version.bzl", "version")
@@ -50,6 +49,11 @@
     ("pkg_zip", "//pkg/private/zip:zip.bzl"),
     ("pkg_zip_impl", "//pkg/private/zip:zip.bzl"),
     ("mappings", None),
+    ("PackageArtifactInfo", "//providers:providers.bzl"),
+    ("PackageDirsInfo", "//providers:providers.bzl"),
+    ("PackageFilegroupInfo", "//providers:providers.bzl"),
+    ("PackageFilesInfo", "//providers:providers.bzl"),
+    ("PackageSymlinkInfo", "//providers:providers.bzl"),
     ("pkg_install", None),
     ("legacy_pkg_rpm", None),
 ]
@@ -71,7 +75,7 @@
             rule,
         ],
         deps = [
-            ":rules_pkg_lib",
+            "//pkg:rules_pkg_lib",
             "//toolchains/rpm:standard_package",
         ],
     )
@@ -91,7 +95,7 @@
     name = "docs_legacy_rpm",
     out = "legacy_pkg_rpm.md",
     input = "//pkg/legacy:rpm.bzl",
-    deps = [":rules_pkg_lib"],
+    deps = ["//pkg:rules_pkg_lib"],
 )
 
 # Mappings has a lot of pure rules, so it is mostly in a good order.
@@ -100,27 +104,16 @@
     out = "mappings.md",
     input = "//pkg:mappings.bzl",
     deps = [
-        ":rules_pkg_lib",
+        "//pkg:rules_pkg_lib",
     ],
 )
 
-# gather all rules that should be documented
-bzl_library(
-    name = "rules_pkg_lib",
-    srcs = [
-        "//:version.bzl",
-        "//pkg:bzl_srcs",
-        "@bazel_skylib//lib:paths",
-    ],
-    visibility = ["//visibility:public"],
-)
-
 stardoc(
     name = "pkg_install",
     out = "pkg_install.md",
     input = "//pkg:install.bzl",
     deps = [
-        ":rules_pkg_lib",
+        "//pkg:rules_pkg_lib",
         "@bazel_skylib//rules:common_settings",
         "@rules_python//python:defs_bzl",
     ],
diff --git a/docs/latest.md b/docs/latest.md
index 98d2334..4f10cf4 100755
--- a/docs/latest.md
+++ b/docs/latest.md
@@ -759,6 +759,139 @@
 
 <!-- Generated with Stardoc: http://skydoc.bazel.build -->
 
+Packaging related providers.
+
+<a id="PackageArtifactInfo"></a>
+
+## PackageArtifactInfo
+
+<pre>
+load("@rules_pkg//providers:providers.bzl", "PackageArtifactInfo")
+
+PackageArtifactInfo(<a href="#PackageArtifactInfo-file">file</a>, <a href="#PackageArtifactInfo-file_name">file_name</a>, <a href="#PackageArtifactInfo-label">label</a>)
+</pre>
+
+Metadata about a package artifact.
+
+**FIELDS**
+
+| Name  | Description |
+| :------------- | :------------- |
+| <a id="PackageArtifactInfo-file"></a>file |  File object for said artifact    |
+| <a id="PackageArtifactInfo-file_name"></a>file_name |  DEPRECATED (use fields of file instead): The file name of the artifact.    |
+| <a id="PackageArtifactInfo-label"></a>label |  Label which produced it    |
+
+
+
+<!-- Generated with Stardoc: http://skydoc.bazel.build -->
+
+Packaging related providers.
+
+<a id="PackageDirsInfo"></a>
+
+## PackageDirsInfo
+
+<pre>
+load("@rules_pkg//providers:providers.bzl", "PackageDirsInfo")
+
+PackageDirsInfo(<a href="#PackageDirsInfo-attributes">attributes</a>, <a href="#PackageDirsInfo-dirs">dirs</a>)
+</pre>
+
+Provider representing the creation of one or more directories in a package
+
+**FIELDS**
+
+| Name  | Description |
+| :------------- | :------------- |
+| <a id="PackageDirsInfo-attributes"></a>attributes |  See `attributes` in PackageFilesInfo.    |
+| <a id="PackageDirsInfo-dirs"></a>dirs |  string list: installed directory names    |
+
+
+
+<!-- Generated with Stardoc: http://skydoc.bazel.build -->
+
+Packaging related providers.
+
+<a id="PackageFilegroupInfo"></a>
+
+## PackageFilegroupInfo
+
+<pre>
+load("@rules_pkg//providers:providers.bzl", "PackageFilegroupInfo")
+
+PackageFilegroupInfo(<a href="#PackageFilegroupInfo-pkg_files">pkg_files</a>, <a href="#PackageFilegroupInfo-pkg_dirs">pkg_dirs</a>, <a href="#PackageFilegroupInfo-pkg_symlinks">pkg_symlinks</a>)
+</pre>
+
+Provider representing a collection of related packaging providers,
+
+In the "fields" documentation, "origin" refers to the label identifying the
+where the provider was originally defined.  This can be used by packaging
+rules to provide better diagnostics related to where packaging rules were
+created.
+
+**FIELDS**
+
+| Name  | Description |
+| :------------- | :------------- |
+| <a id="PackageFilegroupInfo-pkg_files"></a>pkg_files |  list of tuples of (PackageFilesInfo, origin)    |
+| <a id="PackageFilegroupInfo-pkg_dirs"></a>pkg_dirs |  list of tuples of (PackageDirsInfo, origin)    |
+| <a id="PackageFilegroupInfo-pkg_symlinks"></a>pkg_symlinks |  list of tuples of (PackageSymlinkInfo, origin)    |
+
+
+
+<!-- Generated with Stardoc: http://skydoc.bazel.build -->
+
+Packaging related providers.
+
+<a id="PackageFilesInfo"></a>
+
+## PackageFilesInfo
+
+<pre>
+load("@rules_pkg//providers:providers.bzl", "PackageFilesInfo")
+
+PackageFilesInfo(<a href="#PackageFilesInfo-attributes">attributes</a>, <a href="#PackageFilesInfo-dest_src_map">dest_src_map</a>)
+</pre>
+
+Provider representing the installation of one or more files to destination with attributes
+
+**FIELDS**
+
+| Name  | Description |
+| :------------- | :------------- |
+| <a id="PackageFilesInfo-attributes"></a>attributes |  Attribute information, represented as a `dict`.<br><br>Keys are strings representing attribute identifiers, values are arbitrary data structures that represent the associated data.  These are most often strings, but are not explicitly defined.<br><br>For known attributes and data type expectations, see the Common Attributes documentation in the `rules_pkg` reference.    |
+| <a id="PackageFilesInfo-dest_src_map"></a>dest_src_map |  Map of file destinations to sources.<br><br>Sources are represented by bazel `File` structures.    |
+
+
+
+<!-- Generated with Stardoc: http://skydoc.bazel.build -->
+
+Packaging related providers.
+
+<a id="PackageSymlinkInfo"></a>
+
+## PackageSymlinkInfo
+
+<pre>
+load("@rules_pkg//providers:providers.bzl", "PackageSymlinkInfo")
+
+PackageSymlinkInfo(<a href="#PackageSymlinkInfo-attributes">attributes</a>, <a href="#PackageSymlinkInfo-destination">destination</a>, <a href="#PackageSymlinkInfo-target">target</a>)
+</pre>
+
+Provider representing the creation of a single symbolic link in a package
+
+**FIELDS**
+
+| Name  | Description |
+| :------------- | :------------- |
+| <a id="PackageSymlinkInfo-attributes"></a>attributes |  See `attributes` in PackageFilesInfo.    |
+| <a id="PackageSymlinkInfo-destination"></a>destination |  string: Filesystem link 'name'    |
+| <a id="PackageSymlinkInfo-target"></a>target |  string or Label: Filesystem link 'target'.<br><br>TODO(nacl): Label sources not yet supported.    |
+
+
+
+<!-- Generated with Stardoc: http://skydoc.bazel.build -->
+
 Rules for creating install scripts from pkg_filegroups and friends.
 
 This module provides an interface (`pkg_install`) for creating a `bazel
diff --git a/pkg/BUILD b/pkg/BUILD
index 01d9994..0de5b7b 100644
--- a/pkg/BUILD
+++ b/pkg/BUILD
@@ -12,8 +12,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-load("@rules_pkg//pkg/private:make_starlark_library.bzl", "starlark_library")
-
 # -*- coding: utf-8 -*-
 load("@rules_python//python:defs.bzl", "py_binary", "py_library")
 
@@ -51,10 +49,11 @@
     ],
 )
 
-starlark_library(
-    name = "bzl_srcs",
+filegroup(
+    name = "rules_pkg_lib",
     srcs = [
         ":standard_package",
+        "//pkg:install.bzl",
         "//pkg:pkg.bzl",
         "//pkg:rpm_pfg.bzl",
         "//pkg/private:standard_package",
@@ -62,6 +61,8 @@
         "//pkg/private/tar:standard_package",
         "//pkg/private/zip:standard_package",
         "//pkg/releasing:standard_package",
+        "@bazel_skylib//lib:paths",
+        "@rules_python//python:defs.bzl",
     ],
     visibility = ["//visibility:public"],
 )
diff --git a/pkg/private/make_starlark_library.bzl b/pkg/private/make_starlark_library.bzl
deleted file mode 100644
index c6b0dee..0000000
--- a/pkg/private/make_starlark_library.bzl
+++ /dev/null
@@ -1,35 +0,0 @@
-"""Turn a label_list of mixed sources and bzl_library's into a bzl_library.
-
-The sources can be anything. Only the ones that end in ".bzl" will be added.
-"""
-
-load("@bazel_skylib//:bzl_library.bzl", "StarlarkLibraryInfo")
-
-def _make_starlark_library(ctx):
-    direct = []
-    transitive = []
-    for src in ctx.attr.srcs:
-        if StarlarkLibraryInfo in src:
-            transitive.append(src[StarlarkLibraryInfo])
-        else:
-            for file in src[DefaultInfo].files.to_list():
-                if file.path.endswith(".bzl"):
-                    # print(file.path)
-                    direct.append(file)
-    all_files = depset(direct, transitive = transitive)
-    return [
-        DefaultInfo(files = all_files, runfiles = ctx.runfiles(transitive_files = all_files)),
-        StarlarkLibraryInfo(srcs = direct, transitive_srcs = all_files),
-    ]
-
-starlark_library = rule(
-    implementation = _make_starlark_library,
-    attrs = {
-        "srcs": attr.label_list(
-            doc = "Any mix of source files. Only .bzl files will be used.",
-            allow_files = True,
-            cfg = "exec",
-            mandatory = True,
-        ),
-    },
-)