Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,4 @@ MANIFEST
.project
.pydevproject
*.so

.idea/*
82 changes: 82 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
cmake_minimum_required(VERSION 3.15)
project(prosail_model_fortran LANGUAGES Fortran C) # Langages utilisés

# Trouvez Python
find_package(Python COMPONENTS Interpreter Development REQUIRED)

# Obtenir le répertoire des en-têtes NumPy en exécutant un script Python
execute_process(
COMMAND ${Python_EXECUTABLE} -c "import numpy; print(numpy.get_include())"
OUTPUT_VARIABLE NumPy_INCLUDE_DIR
OUTPUT_STRIP_TRAILING_WHITESPACE
RESULT_VARIABLE _numpy_include_result
ERROR_QUIET # Pour ne pas afficher d'erreur si numpy n'est pas là, on le gère après
)

if(NOT _numpy_include_result EQUAL "0" OR NOT NumPy_INCLUDE_DIR)
message(FATAL_ERROR "Impossible d'obtenir le répertoire d'inclusion de NumPy via Python. Assurez-vous que NumPy est installé dans l'environnement de build. Output: ${NumPy_INCLUDE_DIR}")
endif()

message(STATUS "Répertoire d'inclusion NumPy trouvé : ${NumPy_INCLUDE_DIR}") # Pour le débogage

# Ajoutez le répertoire d'inclusion de NumPy aux chemins d'inclusion de CMake
# Ceci est utile si vous avez du code C/C++ qui inclut directement des en-têtes NumPy
# ou si f2py a besoin d'un indice, bien que f2py le trouve souvent par lui-même.
include_directories(${NumPy_INCLUDE_DIR})

# Obtenir le suffixe d'extension Python (ex: .cpython-312-darwin.so)
execute_process(
COMMAND ${Python_EXECUTABLE} -c "import sysconfig; print(sysconfig.get_config_var('EXT_SUFFIX'))"
OUTPUT_VARIABLE PYTHON_EXTENSION_SUFFIX
OUTPUT_STRIP_TRAILING_WHITESPACE
RESULT_VARIABLE _python_ext_suffix_result
ERROR_QUIET
)
if(NOT _python_ext_suffix_result EQUAL "0" OR NOT PYTHON_EXTENSION_SUFFIX)
message(FATAL_ERROR "Impossible d'obtenir le suffixe d'extension Python via sysconfig. Output: ${PYTHON_EXTENSION_SUFFIX}")
endif()
message(STATUS "Suffixe d'extension Python trouvé : ${PYTHON_EXTENSION_SUFFIX}")

# Définition des fichiers source Fortran
set(FORTRAN_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/pyprosail/MODULE_PRO4SAIL.f90
${CMAKE_CURRENT_SOURCE_DIR}/pyprosail/dataSpec_P5B.f90
${CMAKE_CURRENT_SOURCE_DIR}/pyprosail/LIDF.f90
${CMAKE_CURRENT_SOURCE_DIR}/pyprosail/dladgen.f
${CMAKE_CURRENT_SOURCE_DIR}/pyprosail/PRO4SAIL.f90
${CMAKE_CURRENT_SOURCE_DIR}/pyprosail/prospect_5B.f90
${CMAKE_CURRENT_SOURCE_DIR}/pyprosail/tav_abs.f90
${CMAKE_CURRENT_SOURCE_DIR}/pyprosail/volscatt.f90
${CMAKE_CURRENT_SOURCE_DIR}/pyprosail/PyPROSAIL.f90
)

# Nom du module (doit correspondre à -m _prosail_model)
set(MODULE_NAME _prosail_model)

# Définir le chemin attendu pour le module compilé
set(F2PY_WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
file(MAKE_DIRECTORY ${F2PY_WORKING_DIRECTORY})
set(COMPILED_MODULE_PATH ${F2PY_WORKING_DIRECTORY}/${MODULE_NAME}${PYTHON_EXTENSION_SUFFIX})

# Commande f2py
add_custom_command(
OUTPUT ${COMPILED_MODULE_PATH}
COMMAND ${Python_EXECUTABLE} -m numpy.f2py -c
-m ${MODULE_NAME}
${FORTRAN_SOURCES}
--build-dir ${CMAKE_CURRENT_BINARY_DIR}/f2py_build_temp
DEPENDS ${FORTRAN_SOURCES}
WORKING_DIRECTORY ${F2PY_WORKING_DIRECTORY}
COMMENT "Construction du module Fortran ${MODULE_NAME} avec f2py"
VERBATIM
)

# La cible personnalisée dépend du chemin de sortie mis à jour
add_custom_target(f2py_build ALL DEPENDS ${COMPILED_MODULE_PATH})

# Installer le module depuis CMAKE_CURRENT_SOURCE_DIR vers le paquet pyprosail
install(FILES ${COMPILED_MODULE_PATH}
DESTINATION pyprosail
COMPONENT Runtime)

message(STATUS "Chemin attendu du module compilé : ${COMPILED_MODULE_PATH}")
50 changes: 50 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
[build-system]
requires = [
"scikit-build-core>=0.10.0",
"numpy",
"setuptools",
"meson",
"ninja"
]
build-backend = "scikit_build_core.build"

[project]
name = "pyprosail"
version = "1.1.2"
authors = [
{ name = "Robin Wilson", email = "robin@rtwilson.com" },
{ name = "Lukas Valentin Graf" }
]
description = "PyProSAIL is a Python interface to the ProSAIL combined leaf and canopy optical model."
readme = "README.md"
requires-python = ">=3.8"
license = { file = "COPYING" }
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Science/Research",
"Topic :: Scientific/Engineering :: Atmospheric Science",
"Topic :: Scientific/Engineering :: Physics",
"Topic :: Software Development :: Libraries :: Python Modules",
"License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
]
dependencies = [
"numpy",
]

[project.urls]
Repository = "https://github.com/EOA-team/PyProSAIL"
Documentation = "https://pyprosail.readthedocs.io/en/latest/"

[tool.scikit-build]
wheel.packages = ["pyprosail"]
build-dir = "build/{wheel_tag}"
install.components = ["Runtime", "Development"]
cmake.build-type = "Release"
cmake.minimum-version = "3.15"
cmake.verbose = true
4 changes: 0 additions & 4 deletions pyprosail.egg-info/.gitignore

This file was deleted.

2 changes: 1 addition & 1 deletion pyprosail/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
from __future__ import annotations

import numpy as np
from _prosail_model import run as run_fortran
from ._prosail_model import run as run_fortran

# Common leaf distributions
Planophile = (1, 0)
Expand Down
6 changes: 6 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
cmake==4.0.0
meson==1.8.0
ninja==1.11.1.4
numpy==2.2.5
setuptools==78.1.1
scikit_build_core==0.11.2
40 changes: 0 additions & 40 deletions setup.py

This file was deleted.