Merge pull request #354 from djmitche/tc-lib-rlib

export taskchampion-lib as an rlib, too
This commit is contained in:
Dustin J. Mitchell 2022-04-24 19:17:22 -04:00 committed by GitHub
commit 73baefa0a5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 24 additions and 5 deletions

View file

@ -32,6 +32,9 @@ To regenerate this file, run `cargo xtask codegen`.
## C libraries
NOTE: support for linking against taskchampion is a work in progress.
Contributions and pointers to best practices are appreciated!
The `taskchampion-lib` crate generates libraries suitable for use from C (or any C-compatible language).
The necessary bits are:
@ -44,8 +47,12 @@ Downstream consumers may use either the static or dynamic library, as they prefe
NOTE: on Windows, the "BCrypt" library must be included when linking to taskchampion.
### As a Rust dependency
If you would prefer to build Taskchampion directly into your project, and have a build system capable of building Rust libraries (such as CMake), the `taskchampion-lib` crate can be referenced as an `rlib` dependency.
## Documentation Generation
The `mdbook` configuration contains a "preprocessor" implemented in the `taskchampion-cli` crate in order to reflect CLI usage information into the generated book.
Tihs preprocessor is not built by default.
This preprocessor is not built by default.
To (re)build it, run `cargo build -p taskchampion-cli --features usage-docs --bin usage-docs`.

View file

@ -18,7 +18,7 @@ fn link_libtaskchampion() {
let libtc_dir = libtc_dir.to_str().expect("path is valid utf-8");
println!("cargo:rustc-link-search={}", libtc_dir);
println!("cargo:rustc-link-lib=dylib=taskchampion");
println!("cargo:rustc-link-lib=dylib=taskchampionlib");
// on windows, it appears that rust std requires BCrypt
if cfg!(target_os = "windows") {

View file

@ -4,8 +4,8 @@ version = "0.1.0"
edition = "2018"
[lib]
name = "taskchampion"
crate-type = ["staticlib", "cdylib"]
name = "taskchampionlib"
crate-type = ["staticlib", "cdylib", "rlib"]
[dependencies]
libc = "0.2.113"

View file

@ -17,17 +17,29 @@ mod traits;
mod util;
pub mod annotation;
pub use annotation::*;
pub mod atomic;
pub use atomic::*;
pub mod kv;
pub use kv::*;
pub mod replica;
pub use replica::*;
pub mod result;
pub use result::*;
pub mod server;
pub use server::*;
pub mod status;
pub use status::*;
pub mod string;
pub use string::*;
pub mod task;
pub use task::*;
pub mod uda;
pub use uda::*;
pub mod uuid;
pub use uuid::*;
pub mod workingset;
pub use workingset::*;
pub(crate) mod types {
pub(crate) use crate::annotation::{TCAnnotation, TCAnnotationList};

View file

@ -411,7 +411,7 @@ impl CList for TCStringList {
///
/// For example:
///
/// ```
/// ```text
/// char *url = get_item_url(..); // dynamically allocate C string
/// tc_task_annotate(task, tc_string_borrow(url)); // TCString created, passed, and freed
/// free(url); // string is no longer referenced and can be freed