diff --git a/.env.build.linux.example b/.env.build.linux.example new file mode 100644 index 0000000..e7ab058 --- /dev/null +++ b/.env.build.linux.example @@ -0,0 +1,3 @@ +SESAM_FSV_VERSION=1.40.13 +SESAM_FSV_LIB_PATH=/opt/santesocial/fsv/${SESAM_FSV_VERSION}/lib +SESAM_FSV_SSVLIB=ssvlux64 diff --git a/.env.build.win.example b/.env.build.win.example new file mode 100644 index 0000000..ab064bd --- /dev/null +++ b/.env.build.win.example @@ -0,0 +1,3 @@ +SESAM_FSV_VERSION=1.40.13 +SESAM_FSV_LIB_PATH=C:/Program Files/santesocial/fsv/${SESAM_FSV_VERSION}/lib +SESAM_FSV_SSVLIB=ssvw64 diff --git a/.gitignore b/.gitignore index e6bb1c8..33da66d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ # Ignore Rust target directory /target -# Ignore .env file +# Ignore .env files .env +.env.build \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml index 58903ea..a98c74a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,3 +7,6 @@ build = "build.rs" [dependencies] dotenv = "0.15" libc = "0.2" + +[build-dependencies] +dotenv = "0.15" diff --git a/README.md b/README.md index c5057f5..09cd736 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ ## Requirements - Installer le [package FSV](https://industriels.sesam-vitale.fr/group/fournitures-sesam-vitale) - - Les librairies dynamiques (.lib, .dll, ...) fournies ne sont pas installés dans les emplacements standard du système, il faudra donc, à la compilation et à l'exécution, fournir le chemin d'installation de ces librairies + - Les librairies dynamiques (.lib, .dll, ...) fournies ne sont pas installés dans les emplacements standard du système, il faudra donc configurer leur chemin d'installation dans le fichier de configuration `.env.build` (voir ci-dessous) - Le détail des chemins d'installation est donné dans la documentation du package FSV `fsv-mi-004_pack-FSV1.40.14_V2.3.pdf` - Linux - par défaut : `/opt/santesocial/fsv/1.40.13/lib` - Windows - par défaut : `C:\Program Files\santesocial\santesocial\fsv\1.40.14\lib` (ou dans Program Files (x86) si c'est le package 32bits qui a été installé) @@ -13,11 +13,10 @@ ## Setup -- Créer et éditer un fichier `.env` en s'inspirant d'un des fichiers d'exemple (`.env.linux.example`, `.env.win.example`...) - -### Windows - -- Ajouter le chemin d'installation des librairies dynamiques fournies par le package FSV dans le `PATH` +- Créer et éditer le fichier de configuration de build `.env.build` en s'inspirant d'un des fichiers d'exemple (`.env.build.linux.example`, `.env.build.win.example`...) + - Ce fichier est nécessaire pour le build du package Rust +- Créer et éditer le fichier de configuration de l'exécution `.env` en s'inspirant d'un des fichiers d'exemple (`.env.linux.example`, `.env.win.example`...) + - Ce fichier est nécessaire pour l'exécution du package Rust compilé, et doit donc être présent aux côtés de l'exécutable généré, le cas échéant ## Build @@ -42,20 +41,6 @@ Pour nettoyer le dossier `./lib` : `cargo build` -Comme précisé précédemment, il peut être nécessaire de fournir le chemin d'installation des librairies dynamiques fournies par le package FSV à la compilation, en utilisant la variable d'environnement `RUSTFLAGS`. - -- Par exemple - - Linux :`RUSTFLAGS="-L /opt/santesocial/fsv/1.40.13/lib" cargo build` - - Windows : `cargo build` (pas besoin de `RUSTFLAGS` à condition que le chemin d'installation des librairies dynamiques soit dans le `PATH`) - ## Run `cargo run` - -Comme précisé précédemment, il peut être nécessaire de fournir le chemin d'installation des librairies dynamiques fournies par le package FSV à l'exécution. - -La commande `cargo run` provoquant également un build, il faudra également fournir la variable d'environnement `RUSTFLAGS` le cas échéant. - -- Par exemple - - Linux : `RUSTFLAGS="-L /opt/santesocial/fsv/1.40.13/lib" LD_LIBRARY_PATH="/opt/santesocial/fsv/1.40.13/lib" cargo run` - - Windows : `cargo run` (pas besoin de `RUSTFLAGS` ni de `PATH` à condition que le chemin d'installation des librairies dynamiques soit dans le `PATH`) diff --git a/build.rs b/build.rs index f466ec9..9068903 100644 --- a/build.rs +++ b/build.rs @@ -1,20 +1,27 @@ +extern crate dotenv; + use std::env; use std::path::PathBuf; fn main() { + dotenv::from_filename(".env.build").ok(); + + let manifest_dir = env::var("CARGO_MANIFEST_DIR").unwrap(); + + let static_lib_path = PathBuf::from(manifest_dir).join("lib"); + println!("cargo::rustc-link-search=native={}", static_lib_path.display()); + println!("cargo::rustc-link-lib=static=p4pillondebuglib"); + + let fsv_lib_path = PathBuf::from(env::var("SESAM_FSV_LIB_PATH").unwrap()); + println!("cargo::rustc-link-search=native={}", fsv_lib_path.display()); + println!("cargo::rustc-link-lib=dylib={}", env::var("SESAM_FSV_SSVLIB").unwrap()); + if cfg!(target_os = "windows") { - let static_lib_path = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()).join("lib"); - println!("cargo::rustc-link-search=native={}", static_lib_path.display()); - - println!("cargo::rustc-link-lib=static=p4pillondebuglib"); - println!("cargo::rustc-link-lib=dylib=ssvw64"); + // Get PATH value + let path = env::var("PATH").unwrap_or(String::new()); + println!("PATH={}", path); + println!("cargo:rustc-env=PATH={}", fsv_lib_path.display()); } else if cfg!(target_os = "linux") { - let static_lib_path = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()).join("lib"); - println!("cargo::rustc-link-search=native={}", static_lib_path.display()); - println!("cargo::rustc-link-lib=static=p4pillondebuglib"); - - // let dynamic_lib_path = PathBuf::from("/opt/santesocial/fsv/1.40.13/lib"); - // println!("cargo::rustc-link-search=native={}", dynamic_lib_path.display()); - println!("cargo::rustc-link-lib=dylib=ssvlux64"); + println!("cargo:rustc-env=LD_LIBRARY_PATH={}", fsv_lib_path.display()); } }