Skip to content

Commit 5b52516

Browse files
committed
invoke qmake+make from build.rs to build c++ code
1 parent 4186100 commit 5b52516

File tree

4 files changed

+33
-17
lines changed

4 files changed

+33
-17
lines changed

build.rs

+27-11
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use std::error::Error;
44
use std::fs;
55
use std::io::{BufRead, BufReader};
66
use std::path::{Path, PathBuf};
7+
use std::process::Command;
78

89
fn main() -> Result<(), Box<dyn Error>> {
910
let conf = {
@@ -12,7 +13,14 @@ fn main() -> Result<(), Box<dyn Error>> {
1213
let f = fs::File::open("conf.pri")?;
1314
let reader = BufReader::new(f);
1415

15-
const CONF_VARS: &[&str] = &["APP_VERSION", "CONFIGDIR", "LIBDIR", "QT_INSTALL_LIBS"];
16+
const CONF_VARS: &[&str] = &[
17+
"APP_VERSION",
18+
"CONFIGDIR",
19+
"LIBDIR",
20+
"QT_INSTALL_LIBS",
21+
"QMAKE_PATH",
22+
"MAKETOOL",
23+
];
1624

1725
for line in reader.lines() {
1826
let line = line?;
@@ -35,9 +43,25 @@ fn main() -> Result<(), Box<dyn Error>> {
3543
let config_dir = conf.get("CONFIGDIR").unwrap();
3644
let lib_dir = conf.get("LIBDIR").unwrap();
3745
let qt_install_libs = conf.get("QT_INSTALL_LIBS").unwrap();
46+
let qmake_path = fs::canonicalize(conf.get("QMAKE_PATH").unwrap())?;
47+
let maketool = fs::canonicalize(conf.get("MAKETOOL").unwrap())?;
3848

39-
let cpp_lib_dir =
40-
PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()).join(Path::new("target/cpp"));
49+
let root_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR")?);
50+
let cpp_src_dir = root_dir.join(Path::new("src/cpp"));
51+
let cpp_lib_dir = root_dir.join(Path::new("target/cpp"));
52+
53+
if !cpp_src_dir.join("Makefile").try_exists()? {
54+
assert!(Command::new(qmake_path)
55+
.args(["-o", "Makefile", "cpp.pro"])
56+
.current_dir(&cpp_src_dir)
57+
.status()?
58+
.success());
59+
}
60+
61+
assert!(Command::new(maketool)
62+
.current_dir(&cpp_src_dir)
63+
.status()?
64+
.success());
4165

4266
println!("cargo:rustc-env=APP_VERSION={}", app_version);
4367
println!("cargo:rustc-env=CONFIG_DIR={}", config_dir);
@@ -53,14 +77,6 @@ fn main() -> Result<(), Box<dyn Error>> {
5377

5478
println!("cargo:rerun-if-changed=conf.pri");
5579
println!("cargo:rerun-if-changed=src");
56-
println!(
57-
"cargo:rerun-if-changed={}/libpushpin-cpp.a",
58-
cpp_lib_dir.display()
59-
);
60-
println!(
61-
"cargo:rerun-if-changed={}/libpushpin-cpptest.a",
62-
cpp_lib_dir.display()
63-
);
6480

6581
Ok(())
6682
}

configure

+3
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,9 @@ public:
505505
QString qtlibdir = QString::fromUtf8(out).trimmed();
506506
conf->addExtra(QString("QT_INSTALL_LIBS = %1").arg(qtlibdir));
507507
508+
conf->addExtra(QString("QMAKE_PATH = %1").arg(conf->qmake_path));
509+
conf->addExtra(QString("MAKETOOL = %1").arg(conf->maketool));
510+
508511
QFile file("src/config.h");
509512
if(file.open(QIODevice::WriteOnly | QIODevice::Text))
510513
{

qcm/conf.qcm

+3
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,9 @@ public:
8585
QString qtlibdir = QString::fromUtf8(out).trimmed();
8686
conf->addExtra(QString("QT_INSTALL_LIBS = %1").arg(qtlibdir));
8787

88+
conf->addExtra(QString("QMAKE_PATH = %1").arg(conf->qmake_path));
89+
conf->addExtra(QString("MAKETOOL = %1").arg(conf->maketool));
90+
8891
QFile file("src/config.h");
8992
if(file.open(QIODevice::WriteOnly | QIODevice::Text))
9093
{

src/src.pro

-6
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,9 @@
11
TEMPLATE = subdirs
22

3-
include($$OUT_PWD/../conf.pri)
4-
5-
cpp.subdir = cpp
6-
73
rust.subdir = rust
8-
rust.depends = cpp
94

105
pushpin.subdir = pushpin
116

127
SUBDIRS += \
13-
cpp \
148
rust \
159
pushpin

0 commit comments

Comments
 (0)