// Copyright (C) 2019 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.


package {
    // http://go/android-license-faq
    // A large-scale-change added 'default_applicable_licenses' to import
    // the below license kinds from "system_sepolicy_license":
    //   legacy_unencumbered
    default_applicable_licenses: ["system_sepolicy_license"],
}

filegroup {
  name: "apex_file_contexts_files",
  srcs: ["*-file_contexts"],
}

filegroup {
  name: "apex.test-file_contexts",
  srcs: [
    "apex.test-file_contexts",
  ],
}

filegroup {
  name: "com.android.adbd-file_contexts",
  srcs: [
    "com.android.adbd-file_contexts",
  ],
}

filegroup {
  name: "com.android.sdkext-file_contexts",
  srcs: [
    "com.android.sdkext-file_contexts",
  ],
}

filegroup {
  name: "com.android.art-file_contexts",
  srcs: [
    "com.android.art-file_contexts",
  ],
}

filegroup {
  name: "com.android.art.debug-file_contexts",
  srcs: [
    "com.android.art.debug-file_contexts",
  ],
}

filegroup {
  name: "com.android.bootanimation-file_contexts",
  srcs: [
    "com.android.bootanimation-file_contexts",
  ],
}

filegroup {
  name: "com.android.cellbroadcast-file_contexts",
  srcs: [
    "com.android.cellbroadcast-file_contexts",
  ],
}

filegroup {
  name: "com.android.compos-file_contexts",
  srcs: [
    "com.android.compos-file_contexts",
  ],
}

filegroup {
  name: "com.android.conscrypt-file_contexts",
  srcs: [
    "com.android.conscrypt-file_contexts",
  ],
}

filegroup {
  name: "com.android.cronet-file_contexts",
  srcs: [
    "com.android.cronet-file_contexts",
  ],
}

filegroup {
  name: "com.android.geotz-file_contexts",
  srcs: [
    "com.android.geotz-file_contexts",
  ],
}

filegroup {
  name: "com.android.gki-file_contexts",
  srcs: [
    "com.android.gki-file_contexts",
  ],
}

filegroup {
  name: "com.android.ipsec-file_contexts",
  srcs: [
    "com.android.ipsec-file_contexts",
  ],
}

filegroup {
  name: "com.android.i18n-file_contexts",
  srcs: [
    "com.android.i18n-file_contexts",
  ],
}

filegroup {
  name: "com.android.media-file_contexts",
  srcs: [
    "com.android.media-file_contexts",
  ],
}

filegroup {
  name: "com.android.mediaprovider-file_contexts",
  srcs: [
    "com.android.mediaprovider-file_contexts",
  ],
}

filegroup {
  name: "com.android.media.swcodec-file_contexts",
  srcs: [
    "com.android.media.swcodec-file_contexts",
  ],
}

filegroup {
  name: "com.android.neuralnetworks-file_contexts",
  srcs: [
    "com.android.neuralnetworks-file_contexts",
  ],
}

filegroup {
  name: "com.android.os.statsd-file_contexts",
  srcs: [
    "com.android.os.statsd-file_contexts",
  ],
}

filegroup {
  name: "com.android.permission-file_contexts",
  srcs: [
    "com.android.permission-file_contexts",
  ],
}

filegroup {
  name: "com.android.resolv-file_contexts",
  srcs: [
    "com.android.resolv-file_contexts",
  ],
}

filegroup {
  name: "com.android.runtime-file_contexts",
  srcs: [
    "com.android.runtime-file_contexts",
  ],
}

filegroup {
  name: "com.android.scheduling-file_contexts",
  srcs: [
    "com.android.scheduling-file_contexts",
  ],
}

filegroup {
  name: "com.android.sepolicy-file_contexts",
  srcs: [
    "com.android.sepolicy-file_contexts",
  ],
}

filegroup {
  name: "com.android.telephony-file_contexts",
  srcs: [
    "com.android.telephony-file_contexts",
  ],
}

filegroup {
  name: "com.android.tzdata-file_contexts",
  srcs: [
    "com.android.tzdata-file_contexts",
  ],
}

filegroup {
  name: "com.android.uwb-file_contexts",
  srcs: [
    "com.android.uwb-file_contexts",
  ],
}

filegroup {
  name: "com.android.virt-file_contexts",
  srcs: [
    "com.android.virt-file_contexts",
  ],
}

filegroup {
  name: "com.android.vndk-file_contexts",
  srcs: [
    "com.android.vndk-file_contexts",
  ],
}

filegroup {
  name: "com.android.wifi-file_contexts",
  srcs: [
    "com.android.wifi-file_contexts",
  ],
}

filegroup {
  name: "com.android.tethering-file_contexts",
  srcs: [
    "com.android.tethering-file_contexts",
  ],
}

filegroup {
  name: "com.android.extservices-file_contexts",
  srcs: [
    "com.android.extservices-file_contexts",
  ],
}

filegroup {
  name: "com.android.car.framework-file_contexts",
  srcs: [
    "com.android.car.framework-file_contexts",
  ],
}
