# Copyright 2022 ByteDance Ltd. and/or its affiliates.
#
# 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.
import os
import sys
from .._ffi.libinfo import find_include_path, find_lib_path
from .._ffi.base import USE_CXX11_ABI
def get_json_inc_path():
    try:
        rapidjson_path = find_include_path("rapidjson")
    except:
        return None
    if not rapidjson_path or len(rapidjson_path) == 0:
        return None
    real_path = os.path.join(rapidjson_path[0], "include")
    if os.path.exists(real_path) and os.path.isdir(real_path):
        return real_path
    return None
[文档]def get_cflags():
    inc_paths = find_include_path()
    cflags = []
    assert inc_paths is not None and len(inc_paths) > 0
    cflags.append("-I" + inc_paths[0].strip())
    thirdparty_json_path = get_json_inc_path()
    if thirdparty_json_path:
        cflags.append("-I" + thirdparty_json_path)
    if USE_CXX11_ABI():
        cflags.append("-D_GLIBCXX_USE_CXX11_ABI=1")
    else:
        cflags.append("-D_GLIBCXX_USE_CXX11_ABI=0")
    return cflags 
[文档]def get_link_flags():
    """ lib layout
    - lib/
      - libmatx.so
      - pcre/
        libpcre.so
    """
    ldflags = []
    ldflags.append("-ldl")
    ldflags.append("-lpthread")
    # ---------libmatx.so-------------------#
    lib_path = find_lib_path()
    libdir = os.path.dirname(lib_path[0])
    sofile = os.path.basename(lib_path[0])
    assert sofile.startswith("lib")
    soname = sofile.split('.')[0][3:]
    ldflags.append("-L" + libdir)
    ldflags.append("-l" + soname)
    # -------libpcre.so-------------------#
    if sys.platform.startswith('win32'):
        pcre_soname = "libpcre.dll"
    elif sys.platform.startswith('darwin'):
        pcre_soname = "libpcre.dylib"
    else:
        pcre_soname = "libpcre.so"
    pcrepath = find_lib_path(pcre_soname, [libdir, os.path.join(libdir, "pcre/lib")])
    pcre_dir = os.path.dirname(pcrepath[0])
    ldflags.append("-L" + pcre_dir)
    ldflags.append("-lpcre")
    return ldflags 
def include_paths():
    incs = find_include_path()
    incs.append(get_json_inc_path())
    return incs
def library_paths():
    lib_paths = []
    # ---------libmatx.so-------------------#
    lib_location = find_lib_path()
    lib_dir = os.path.dirname(lib_location[0])
    lib_paths.append(lib_dir)
    # -------libpcre.so-------------------#
    if sys.platform.startswith('win32'):
        pcre_soname = "libpcre.dll"
    elif sys.platform.startswith('darwin'):
        pcre_soname = "libpcre.dylib"
    else:
        pcre_soname = "libpcre.so"
    pcre_lib_location = find_lib_path(pcre_soname, [lib_dir, os.path.join(lib_dir, "pcre/lib")])
    pcre_dir = os.path.dirname(pcre_lib_location[0])
    if pcre_dir != lib_paths:
        lib_paths.append(pcre_dir)
    return lib_paths