Skip to content

Commit

Permalink
Use python-config to locate libpython
Browse files Browse the repository at this point in the history
Suggested by camlspotter.
#92
  • Loading branch information
thierry-martinez committed Oct 30, 2023
1 parent 68bf34b commit e275368
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 13 deletions.
4 changes: 3 additions & 1 deletion CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@
documented) (reported by Lindsay Errington, @dlindsaye,
https://github.com/thierry-martinez/pyml/issues/93)

- #94: Better search heuristics for `python` library
- #92, #94: Better search heuristics for `python` library
Suggested by camlspotter.
(https://github.com/thierry-martinez/pyml/issues/92)

# 2022-09-05

Expand Down
33 changes: 21 additions & 12 deletions py.ml
Original file line number Diff line number Diff line change
Expand Up @@ -420,6 +420,13 @@ let library_patterns : (int -> int -> string) list =
[Printf.sprintf "libpython%d.%dm.so";
Printf.sprintf "libpython%d.%d.so"]

let library_filenames_from_paths version_major version_minor paths =
let library_filenames =
List.map
(fun format -> format version_major version_minor)
library_patterns in
concat_library_filenames paths library_filenames

let libpython_from_python_config version_major version_minor =
let command =
Printf.sprintf "python%d.%d-config --ldflags" version_major version_minor in
Expand All @@ -437,24 +444,22 @@ let libpython_from_python_config version_major version_minor =
else library_paths in
let library_paths =
List.fold_left parse_word [] word_list in
let library_filenames =
List.map
(fun format -> format version_major version_minor)
library_patterns in
Some (concat_library_filenames library_paths library_filenames)
Some (library_filenames_from_paths version_major version_minor library_paths)
| _ -> None

let libpython_from_python_config_prefix version_major version_minor =
let command =
Printf.sprintf "python%d.%d-config --prefix" version_major version_minor in
match run_command_opt command false with
| Some (prefix :: _) ->
let library_paths = [Filename.concat prefix "lib"] in
Some (library_filenames_from_paths version_major version_minor library_paths)
| _ -> None

let getenv_opt var =
try Some (Sys.getenv var)
with Not_found -> None

let library_filenames_from_paths version_major version_minor paths =
let library_filenames =
List.map
(fun format -> format version_major version_minor)
library_patterns in
concat_library_filenames paths library_filenames

let libpython_from_pythonhome version_major version_minor python_full_path =
let library_paths =
match
Expand Down Expand Up @@ -496,6 +501,10 @@ let find_library_path version_major version_minor python_full_path =
Option.bind version_major (fun version_major ->
Option.bind version_minor (fun version_minor ->
libpython_from_pkg_config version_major version_minor)));
(fun () ->
Option.bind version_major (fun version_major ->
Option.bind version_minor (fun version_minor ->
libpython_from_python_config_prefix version_major version_minor)));
(fun () ->
Option.bind version_major (fun version_major ->
Option.bind version_minor (fun version_minor ->
Expand Down

0 comments on commit e275368

Please sign in to comment.