aboutsummaryrefslogtreecommitdiff
path: root/build2/cc
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2017-08-01 10:49:09 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2017-08-01 10:49:09 +0200
commita2cad68fe340a66ad54b93f88e39f97898fc462e (patch)
treebe9033f82e650fe574d0149383121d700568247b /build2/cc
parenta84ff43b183181e0a12c6d5e31c1f366d39ce2fe (diff)
Reimplement pkg-config generation with more conservative approach for now
Diffstat (limited to 'build2/cc')
-rw-r--r--build2/cc/install.cxx24
-rw-r--r--build2/cc/install.hxx9
-rw-r--r--build2/cc/link.cxx27
-rw-r--r--build2/cc/link.hxx5
-rw-r--r--build2/cc/pkgconfig.cxx4
5 files changed, 33 insertions, 36 deletions
diff --git a/build2/cc/install.cxx b/build2/cc/install.cxx
index c65e7f6..72d9218 100644
--- a/build2/cc/install.cxx
+++ b/build2/cc/install.cxx
@@ -107,30 +107,6 @@ namespace build2
return r;
}
- target_state file_install::
- update_extra (action act, const target& t) const
- {
- // (Re)generate pkg-config's .pc file. While the target itself might be
- // up-to-date from a previous run, there is no guarantee that .pc exists
- // or also up-to-date. So to keep things simple we just regenerate it
- // unconditionally.
- //
- // Also, if you are wondering why don't we just always produce this .pc,
- // install or no install, the reason is unless and until we are updating
- // for install, we have no idea where to things will be installed.
- //
- bool a;
- const file* f;
-
- if ((a = (f = t.is_a<liba> ())) ||
- ( f = t.is_a<libs> ()))
- {
- pkgconfig_save (act, *f, a);
- }
-
- return target_state::unchanged;
- }
-
void file_install::
install_extra (const file& t, const install_dir& id) const
{
diff --git a/build2/cc/install.hxx b/build2/cc/install.hxx
index 2dd2b71..a846fc8 100644
--- a/build2/cc/install.hxx
+++ b/build2/cc/install.hxx
@@ -41,15 +41,6 @@ namespace build2
virtual bool
uninstall_extra (const file&, const install_dir&) const override;
- virtual target_state
- update_extra (action, const target&) const override;
-
- private:
- // pkg-config's .pc file generation (in pkgconfig.cxx).
- //
- void
- pkgconfig_save (action, const file&, bool) const;
-
private:
const link& link_;
};
diff --git a/build2/cc/link.cxx b/build2/cc/link.cxx
index 08b5314..41455e5 100644
--- a/build2/cc/link.cxx
+++ b/build2/cc/link.cxx
@@ -1564,6 +1564,31 @@ namespace build2
dd.close ();
+ // (Re)generate pkg-config's .pc file. While the target itself might be
+ // up-to-date from a previous run, there is no guarantee that .pc exists
+ // or also up-to-date. So to keep things simple we just regenerate it
+ // unconditionally.
+ //
+ // Also, if you are wondering why don't we just always produce this .pc,
+ // install or no install, the reason is unless and until we are updating
+ // for install, we have no idea where to things will be installed.
+ //
+ if (for_install)
+ {
+ bool a;
+ const file* f;
+
+ if ((a = (f = t.is_a<liba> ())) ||
+ ( f = t.is_a<libs> ()))
+ {
+ // @@ Hack: this should really be in install:update_extra() where we
+ // (should) what we are installing and what not.
+ //
+ if (rs["install.root"])
+ pkgconfig_save (act, *f, a);
+ }
+ }
+
// If nothing changed, then we are done.
//
if (!update)
@@ -1945,7 +1970,7 @@ namespace build2
if (tclass == "windows")
{
- // For Windows generate rpath-emulating assembly (unless updaing for
+ // For Windows generate rpath-emulating assembly (unless updating for
// install).
//
if (lt.executable () && !for_install)
diff --git a/build2/cc/link.hxx b/build2/cc/link.hxx
index cadc82c..dc5f70a 100644
--- a/build2/cc/link.hxx
+++ b/build2/cc/link.hxx
@@ -122,6 +122,11 @@ namespace build2
pair<path, bool>
windows_manifest (const file&, bool rpath_assembly) const;
+ // pkg-config's .pc file generation (pkgconfig.cxx).
+ //
+ void
+ pkgconfig_save (action, const file&, bool) const;
+
private:
const string rule_id;
};
diff --git a/build2/cc/pkgconfig.cxx b/build2/cc/pkgconfig.cxx
index 3fc40ad..0a7bf8f 100644
--- a/build2/cc/pkgconfig.cxx
+++ b/build2/cc/pkgconfig.cxx
@@ -19,7 +19,7 @@
#include <build2/cc/utility.hxx>
#include <build2/cc/common.hxx>
-#include <build2/cc/install.hxx>
+#include <build2/cc/link.hxx>
using namespace std;
using namespace butl;
@@ -537,7 +537,7 @@ namespace build2
return true;
}
- void file_install::
+ void link::
pkgconfig_save (action act, const file& l, bool la) const
{
tracer trace (x, "pkgconfig_save");