#!/usr/bin/env python3
from conan import ConanFile
from conan.tools.cmake import CMake, CMakeToolchain
from conan.tools.files import copy, load, replace_in_file
import re
import os

def cmake_version(source_dir=os.path.dirname(__file__)):
    f = open(os.path.join(source_dir, "CMakeLists.txt"), 'r', encoding="utf-8")
    content = f.read()
    version = re.search(r"^\s+VERSION ([\d.]+)$", content, re.MULTILINE).group(1)
    return version.strip()


class DotcircleCmakeModulesConan(ConanFile):
    name = "dcm"
    license = "MIT"
    url = "https://git.dotcircle.dev/dotcircle/cmake-modules"
    homepage = "https://git.dotcircle.dev/dotcircle/cmake-modules"
    topics = ("conan", "cmake", "toolchain", "build-settings")
    description = "dotcircle CMake modules"
    settings = "build_type"
    generators = "CMakeDeps"
    exports_sources = "modules/*", "toolchain/*", "find-modules/*", "CMakeLists.txt", "dcmConfig.cmake.in"

    def set_version(self):
        self.version = cmake_version(self.recipe_folder)

    def generate(self):
        replace_in_file(self, os.path.join(self.build_folder, "CMakeLists.txt"),
                        "add_subdirectory(docs)", "")

        toolchain = CMakeToolchain(self)
        toolchain.variables["SHARE_INSTALL_DIR"] = os.path.join(self.package_folder, "res")
        toolchain.generate()

    def build(self):
        cmake = CMake(self)
        cmake.configure()
        cmake.build()

    def package(self):
        cmake = CMake(self)
        cmake.install()
        copy(self, "LICENSE", self.source_folder, os.path.join(self.package_folder, "licenses"))

    def package_info(self):
        self.cpp_info.resdirs = ["res"]
        self.cpp_info.builddirs = [
            "res/dcm/cmake",
            "res/dcm/modules",
            "res/dcm/toolchain",
            "res/dcm/find-modules"
        ]

    def package_id(self):
        self.info.clear()


def main(argv=None):
    import argparse

    parser = argparse.ArgumentParser(
        usage=f'%(prog)s [options]',
        description='Get conan information',
    )

    parser.add_argument('-v', '--version', action='store_true',
                        help='Get the current package version',
                        )

    args = parser.parse_args(argv)
    if args.version:
        print(cmake_version())

    else:
        parser.print_help()
        return 1

    return 0


if __name__ == '__main__':
    exit(main())
