#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you 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.

path_classifiers:
  3rd-party:
    - "lib/fastlz"
    - "lib/yamlcpp"
    - "tests/include/catch.hpp"
queries:
  - exclude:
      tags:
        - "3rd-party"
extraction:
  cpp:
    prepare:
      packages:
      - "libcjose-dev"
      - "libcjose0"
      - "libjansson-dev"
      - "libluajit-5.1-dev"
      - "libpcre3-dev"
      - "zlib1g-dev"
    after_prepare: "autoreconf -fiv"
    configure:
      command: "./configure --enable-experimental-plugins"
    index:
      build_command: "make"
