Files
BagheeraSearch/setup.py
Ignacio Serantes 6207cab27a v1.1.0
2026-05-09 10:26:57 +02:00

205 lines
6.1 KiB
Python

import os
import subprocess
import sys
from setuptools import setup
from setuptools.command.install import install
from setuptools.command.develop import develop
from setuptools.command.build_ext import build_ext
def compile_wrapper():
base_path = os.path.abspath(os.path.dirname(__file__))
source_file = os.path.join(base_path, 'baloo_wrapper', 'baloo_wrapper.cpp')
output_lib = os.path.join(base_path, 'libbaloo_wrapper.so')
if not os.path.exists(source_file):
print(f"✘ Error: Source file not found at {source_file}")
sys.exit(1)
packages = ['KF6Baloo', 'KF6BalooEngine', 'KF6FileMetadata', 'KF6CoreAddons', 'Qt6Core']
cflags = []
libs = []
for pkg in packages:
try:
cf = subprocess.check_output(['pkg-config', '--cflags', pkg], text=True).split()
lb = subprocess.check_output(['pkg-config', '--libs', pkg], text=True).split()
cflags.extend(cf)
libs.extend(lb)
except subprocess.CalledProcessError:
print(f" [!] Warning: pkg-config could not find {pkg}")
extra_includes = [
'-I/usr/include/KF6',
'-I/usr/include/KF6/KFileMetaData',
'-I/usr/include/qt6',
'-I/usr/include/qt6/QtCore'
]
cflags = list(set(cflags + extra_includes))
libs = list(set(libs))
compile_cmd = [
'g++', '-shared', '-o', output_lib,
'-fPIC', '-std=c++17',
source_file
] + cflags + libs
try:
print(f"Executing compilation:\n{' '.join(compile_cmd)}")
subprocess.check_call(compile_cmd)
except subprocess.CalledProcessError as e:
print(f"\n✘ Compilation failed.")
sys.exit(1)
class CustomInstall(install):
def run(self):
compile_wrapper()
super().run()
class CustomDevelop(develop):
def run(self):
compile_wrapper()
super().run()
class CustomBuildExt(build_ext):
def run(self):
compile_wrapper()
super().run()
# Solo dejamos cmdclass, el resto se lee de pyproject.toml
setup(
cmdclass={
'install': CustomInstall,
'develop': CustomDevelop,
'build_ext': CustomBuildExt,
}
)
# import os
# import subprocess
# import sys
# from setuptools import setup
# from setuptools.command.install import install
# from setuptools.command.develop import develop
# from setuptools.command.build_ext import build_ext
#
#
# def compile_wrapper():
# """
# Compila libbaloo_wrapper.so forzando la ruta de inclusión profunda
# detectada para KFileMetaData en KF6.
# """
# base_path = os.path.abspath(os.path.dirname(__file__))
# source_file = os.path.join(base_path, 'baloo_wrapper', 'baloo_wrapper.cpp')
# output_lib = os.path.join(base_path, 'libbaloo_wrapper.so')
#
# if not os.path.exists(source_file):
# print(f"✘ Error: Source file not found at {source_file}")
# sys.exit(1)
#
# # Paquetes para pkg-config (nombres comunes en KF6)
# packages = [
# 'KF6Baloo',
# 'KF6BalooEngine',
# 'KF6FileMetadata',
# 'KF6CoreAddons',
# 'Qt6Core'
# ]
#
# cflags = []
# libs = []
#
# print("Detecting KF6 dependencies...")
# for pkg in packages:
# try:
# cf = subprocess.check_output(['pkg-config', '--cflags', pkg],
# text=True).split()
# lb = subprocess.check_output(['pkg-config', '--libs', pkg],
# text=True).split()
# cflags.extend(cf)
# libs.extend(lb)
# print(f" [OK] {pkg}")
# except subprocess.CalledProcessError:
# print(f" [!] Warning: pkg-config could not find {pkg}")
#
# # CONFIGURACIÓN DE RUTAS SEGÚN TU SISTEMA:
# # Añadimos el nivel intermedio para que <KFileMetaData/ExtractorCollection>
# # se encuentre en /usr/include/KF6/KFileMetaData/KFileMetaData/
# extra_includes = [
# '-I/usr/include/KF6',
# '-I/usr/include/KF6/KFileMetaData', # Permite resolver KFileMetaData/
# '-I/usr/include/qt6',
# '-I/usr/include/qt6/QtCore'
# ]
#
# cflags = list(set(cflags + extra_includes))
# libs = list(set(libs))
#
# # Comando de compilación C++17 replicando tu CMakeLists.txt [cite: 1, 2]
# compile_cmd = [
# 'g++', '-shared', '-o', output_lib,
# '-fPIC', '-std=c++17',
# source_file
# ] + cflags + libs
#
# try:
# print(f"Executing compilation:\n{' '.join(compile_cmd)}")
# subprocess.check_call(compile_cmd)
#
# if os.path.exists(output_lib):
# print(f"✔ Successfully compiled: {output_lib}")
# else:
# raise FileNotFoundError("Compilation finished but .so file is missing.")
#
# except subprocess.CalledProcessError as e:
# print(f"\n✘ Compilation failed (Exit code {e.returncode}).")
# sys.exit(1)
#
#
# class CustomInstall(install):
# def run(self):
# compile_wrapper()
# super().run()
#
#
# class CustomDevelop(develop):
# def run(self):
# compile_wrapper()
# super().run()
#
#
# class CustomBuildExt(build_ext):
# def run(self):
# compile_wrapper()
# super().run()
#
#
# setup(
# name="bagheerasearch",
# version="1.0.0",
# author="Ignacio Serantes",
# description="Bagheera Search Tool & Lib (KF6/C++17)",
# py_modules=["bagheerasearch"],
# package_dir={
# "": ".",
# "bagheera_query_parser_lib": "bagheera_query_parser_lib",
# "bagheera_search_lib": "bagheera_search_lib",
# "baloo_tools": "baloo_tools",
# },
# packages=[
# "bagheera_query_parser_lib",
# "bagheera_search_lib",
# "baloo_tools"
# ],
# install_requires=["lmdb"],
# entry_points={'console_scripts': ['bagheerasearch=bagheerasearch:main']},
# cmdclass={
# 'install': CustomInstall,
# 'develop': CustomDevelop,
# 'build_ext': CustomBuildExt,
# },
# data_files=[('lib', ['libbaloo_wrapper.so'])],
# include_package_data=True,
# zip_safe=False,
# )