Initial Commit.
This commit is contained in:
commit
2c6be797a3
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
/target
|
||||
Cargo.lock
|
17
Cargo.toml
Normal file
17
Cargo.toml
Normal file
|
@ -0,0 +1,17 @@
|
|||
[package]
|
||||
name = "ki18n-rs"
|
||||
version = "0.1.0"
|
||||
edition = "2018"
|
||||
links = "KF5I18n"
|
||||
|
||||
[dependencies]
|
||||
cpp = "0.5"
|
||||
qmetaobject = { git = "https://github.com/woboq/qmetaobject-rs" }
|
||||
qttypes = { git = "https://github.com/woboq/qmetaobject-rs", features = [
|
||||
"qtquick",
|
||||
] }
|
||||
|
||||
[build-dependencies]
|
||||
cpp_build = "0.5"
|
||||
semver = "1.0"
|
||||
pkg-config = "0.3"
|
74
build.rs
Normal file
74
build.rs
Normal file
|
@ -0,0 +1,74 @@
|
|||
/* Copyright (C) 2018 Olivier Goffart <ogoffart@woboq.com>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||
including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial
|
||||
portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
|
||||
NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES
|
||||
OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
use semver::Version;
|
||||
|
||||
fn main() {
|
||||
eprintln!("cargo:warning={:?}", std::env::vars().collect::<Vec<_>>());
|
||||
|
||||
let mut config = cpp_build::Config::new();
|
||||
|
||||
let qt_version = qt_setup(&mut config);
|
||||
ki18n_setup(&mut config);
|
||||
|
||||
config.build("src/lib.rs");
|
||||
|
||||
for minor in 7..=15 {
|
||||
if qt_version >= Version::new(5, minor, 0) {
|
||||
println!("cargo:rustc-cfg=qt_{}_{}", 5, minor);
|
||||
}
|
||||
}
|
||||
let mut minor = 0;
|
||||
while qt_version >= Version::new(6, minor, 0) {
|
||||
println!("cargo:rustc-cfg=qt_{}_{}", 6, minor);
|
||||
minor += 1;
|
||||
}
|
||||
}
|
||||
|
||||
fn qt_setup(config: &mut cpp_build::Config) -> Version {
|
||||
let qt_include_path = std::env::var("DEP_QT_INCLUDE_PATH").unwrap();
|
||||
let qt_library_path = std::env::var("DEP_QT_LIBRARY_PATH").unwrap();
|
||||
let qt_version = std::env::var("DEP_QT_VERSION")
|
||||
.unwrap()
|
||||
.parse::<Version>()
|
||||
.expect("Parsing Qt version failed");
|
||||
|
||||
if cfg!(target_os = "macos") {
|
||||
config.flag("-F");
|
||||
config.flag(&qt_library_path);
|
||||
}
|
||||
|
||||
if qt_version >= Version::new(6, 0, 0) {
|
||||
config.flag_if_supported("-std=c++17");
|
||||
config.flag_if_supported("/std:c++17");
|
||||
config.flag_if_supported("/Zc:__cplusplus");
|
||||
}
|
||||
|
||||
config.include(&qt_include_path);
|
||||
|
||||
qt_version
|
||||
}
|
||||
|
||||
fn ki18n_setup(config: &mut cpp_build::Config) {
|
||||
let kf5_i18n_path = "/usr/include/KF5/KI18n";
|
||||
let qt_core = "/usr/include/qt/QtCore";
|
||||
|
||||
config.include(kf5_i18n_path).include(qt_core);
|
||||
|
||||
println!("cargo:rustc-link-lib=KF5I18n");
|
||||
}
|
27
src/lib.rs
Normal file
27
src/lib.rs
Normal file
|
@ -0,0 +1,27 @@
|
|||
use cpp::{cpp, cpp_class};
|
||||
use qmetaobject::prelude::*;
|
||||
use qmetaobject::QObjectPinned;
|
||||
|
||||
cpp! {{
|
||||
#include <KLocalizedContext>
|
||||
#include <QtCore/QObject>
|
||||
#include <QtQml/QQmlEngine>
|
||||
#include <QtQuick/QtQuick>
|
||||
|
||||
struct KLocalizedContextHolder {
|
||||
std::unique_ptr<KLocalizedContext> klocalized;
|
||||
|
||||
KLocalizedContextHolder(QObject *parent) : klocalized(new KLocalizedContext(parent)) {}
|
||||
};
|
||||
}}
|
||||
|
||||
cpp_class!(pub unsafe struct KLocalizedContext as "KLocalizedContextHolder");
|
||||
|
||||
impl KLocalizedContext {
|
||||
pub fn init_from_engine(engine: &QmlEngine) {
|
||||
let engine_ptr = engine.cpp_ptr();
|
||||
cpp!(unsafe [engine_ptr as "QQmlEngine*"] {
|
||||
engine_ptr->rootContext()->setContextObject(new KLocalizedContext(engine_ptr));
|
||||
});
|
||||
}
|
||||
}
|
8
tests/tests.rs
Normal file
8
tests/tests.rs
Normal file
|
@ -0,0 +1,8 @@
|
|||
use ki18n_rs::*;
|
||||
use qmetaobject::prelude::*;
|
||||
|
||||
#[test]
|
||||
fn test_klocalized_init() {
|
||||
let mut engine = QmlEngine::new();
|
||||
KLocalizedContext::init_from_engine(&engine);
|
||||
}
|
Loading…
Reference in a new issue