diff options
-rw-r--r-- | bootstrap-mingw.bat | 1 | ||||
-rw-r--r-- | bootstrap-msvc.bat | 1 | ||||
-rw-r--r-- | bootstrap.gmake | 3 | ||||
-rwxr-xr-x | bootstrap.sh | 1 | ||||
-rw-r--r-- | build2/b.cxx | 4 | ||||
-rw-r--r-- | build2/c/init.cxx | 1 | ||||
-rw-r--r-- | build2/cc/common.cxx | 3 | ||||
-rw-r--r-- | build2/cc/common.hxx | 4 | ||||
-rw-r--r-- | build2/cc/init.cxx | 24 | ||||
-rw-r--r-- | build2/cc/link.cxx | 7 | ||||
-rw-r--r-- | build2/cc/module.cxx | 16 | ||||
-rw-r--r-- | build2/cc/pkgconfig.cxx | 13 | ||||
-rw-r--r-- | build2/cc/target.cxx | 40 | ||||
-rw-r--r-- | build2/cc/target.hxx | 31 | ||||
-rw-r--r-- | build2/cxx/init.cxx | 1 | ||||
-rw-r--r-- | build2/pkgconfig/init.cxx | 175 | ||||
-rw-r--r-- | build2/pkgconfig/init.hxx | 37 | ||||
-rw-r--r-- | build2/pkgconfig/target.cxx | 54 | ||||
-rw-r--r-- | build2/pkgconfig/target.hxx | 48 |
19 files changed, 94 insertions, 370 deletions
diff --git a/bootstrap-mingw.bat b/bootstrap-mingw.bat index fbec68a..7ed5fcf 100644 --- a/bootstrap-mingw.bat +++ b/bootstrap-mingw.bat @@ -72,7 +72,6 @@ set "src=%src% build2\test\*.cxx" set "src=%src% build2\test\script\*.cxx" set "src=%src% build2\version\*.cxx" set "src=%src% build2\install\*.cxx" -set "src=%src% build2\pkgconfig\*.cxx" set "src=%src% %libbutl%\libbutl\*.cxx" rem Get the compile options. diff --git a/bootstrap-msvc.bat b/bootstrap-msvc.bat index a83bb5b..b5a84f4 100644 --- a/bootstrap-msvc.bat +++ b/bootstrap-msvc.bat @@ -103,7 +103,6 @@ set "src=%src% build2\test" set "src=%src% build2\test\script" set "src=%src% build2\version" set "src=%src% build2\install" -set "src=%src% build2\pkgconfig" set "src=%src% %libbutl%\libbutl" rem Get the compile options. diff --git a/bootstrap.gmake b/bootstrap.gmake index 0b2c43f..980b90e 100644 --- a/bootstrap.gmake +++ b/bootstrap.gmake @@ -126,8 +126,7 @@ cli \ test/script \ test \ version \ -install \ -pkgconfig +install build2_src := $(wildcard $(src_root)/build2/*.cxx) build2_src += $(foreach d,$(sub_dirs),$(wildcard $(src_root)/build2/$d/*.cxx)) diff --git a/bootstrap.sh b/bootstrap.sh index 49b0494..0b33156 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -128,7 +128,6 @@ src="$src build2/test/*.cxx" src="$src build2/test/script/*.cxx" src="$src build2/version/*.cxx" src="$src build2/install/*.cxx" -src="$src build2/pkgconfig/*.cxx" src="$src $libbutl/libbutl/*.cxx" # Note that for as long as we support GCC 4.9 we have to compile in the C++14 diff --git a/build2/b.cxx b/build2/b.cxx index 0520bd8..746d5fd 100644 --- a/build2/b.cxx +++ b/build2/b.cxx @@ -51,7 +51,6 @@ using namespace std; #include <build2/cli/init.hxx> #include <build2/test/init.hxx> #include <build2/install/init.hxx> -#include <build2/pkgconfig/init.hxx> #include <build2/version/init.hxx> namespace build2 @@ -324,9 +323,6 @@ main (int argc, char* argv[]) bm["bin.rc.config"] = mf {nullptr, &bin::rc_config_init}; bm["bin.rc"] = mf {nullptr, &bin::rc_init}; - bm["pkgconfig.config"] = mf {nullptr, &pkgconfig::config_init}; - bm["pkgconfig"] = mf {nullptr, &pkgconfig::init}; - bm["cc.core.vars"] = mf {nullptr, &cc::core_vars_init}; bm["cc.core.config"] = mf {nullptr, &cc::core_config_init}; bm["cc.core"] = mf {nullptr, &cc::core_init}; diff --git a/build2/c/init.cxx b/build2/c/init.cxx index 1190eae..45097bb 100644 --- a/build2/c/init.cxx +++ b/build2/c/init.cxx @@ -298,7 +298,6 @@ namespace build2 false, // No C modules yet. false, // No __symexport support since no modules. - cast_null<process_path> (rs["pkgconfig.path"]), cast<dir_paths> (rs[cm.x_sys_lib_dirs]), cast<dir_paths> (rs[cm.x_sys_inc_dirs]), diff --git a/build2/cc/common.cxx b/build2/cc/common.cxx index e06898e..e022abb 100644 --- a/build2/cc/common.cxx +++ b/build2/cc/common.cxx @@ -869,8 +869,7 @@ namespace build2 // information. The idea is that when we auto-generate .pc files, we // will copy those macros (or custom ones) from *.export.poptions. // - if (pkgconfig == nullptr || - !pkgconfig_load (act, *p.scope, + if (!pkgconfig_load (act, *p.scope, *lt, a, s, p.proj, name, *pd, sysd, *usrd)) diff --git a/build2/cc/common.hxx b/build2/cc/common.hxx index 5a245ca..3c4b693 100644 --- a/build2/cc/common.hxx +++ b/build2/cc/common.hxx @@ -120,7 +120,6 @@ namespace build2 bool modules; // x.features.modules bool symexport; // x.features.symexport - const process_path* pkgconfig; // pkgconfig.path (can be NULL). const dir_paths& sys_lib_dirs; // x.sys_lib_dirs const dir_paths& sys_inc_dirs; // x.sys_inc_dirs @@ -163,7 +162,6 @@ namespace build2 const strings& std, bool fm, bool fs, - const process_path* pkgc, const dir_paths& sld, const dir_paths& sid, const target_type& src, @@ -180,7 +178,7 @@ namespace build2 tstd (std), modules (fm), symexport (fs), - pkgconfig (pkgc), sys_lib_dirs (sld), sys_inc_dirs (sid), + sys_lib_dirs (sld), sys_inc_dirs (sid), x_src (src), x_mod (mod), x_hdr (hdr), x_inc (inc) {} }; diff --git a/build2/cc/init.cxx b/build2/cc/init.cxx index 733280a..7669add 100644 --- a/build2/cc/init.cxx +++ b/build2/cc/init.cxx @@ -105,8 +105,6 @@ namespace build2 assert (first); - auto& vp (var_pool.rw (rs)); - // Load cc.core.vars. // if (!cast_false<bool> (rs["cc.core.vars.loaded"])) @@ -237,28 +235,6 @@ namespace build2 load_module (rs, rs, "bin.rc.config", loc); } - // Load (optionally) the pkgconfig module. Note that it registers the - // pc{} target whether the pkg-config utility is found or not. - // - // @@ At some point we may also want to verify that targets matched - // if it has already been loaded (by someone) else. Currently it - // doesn't set pkgconfig.target. Perhaps only set if it was used - // to derive the program name? - // - if (!cast_false<bool> (rs["pkgconfig.loaded"])) - { - // Prepare configuration hints. - // - variable_map h; - - // Note that this variable has not yet been registered. - // - const variable& t (vp.insert ("config.pkgconfig.target")); - h.assign (t) = cast<target_triplet> (rs["cc.target"]); - - load_module (rs, rs, "pkgconfig", loc, true, h); - } - return true; } diff --git a/build2/cc/link.cxx b/build2/cc/link.cxx index 06c4bee..2f2ff76 100644 --- a/build2/cc/link.cxx +++ b/build2/cc/link.cxx @@ -19,9 +19,8 @@ #include <build2/diagnostics.hxx> #include <build2/bin/target.hxx> -#include <build2/pkgconfig/target.hxx> -#include <build2/cc/target.hxx> // c +#include <build2/cc/target.hxx> // c, pc* #include <build2/cc/utility.hxx> using namespace std; @@ -464,9 +463,7 @@ namespace build2 target_lock pc ( add_adhoc_member ( act, t, - ot == otype::a - ? pkgconfig::pca::static_type - : pkgconfig::pcs::static_type)); + ot == otype::a ? pca::static_type : pcs::static_type)); // Note that here we always use the lib name prefix, even on // Windows with VC. The reason is the user needs a consistent name diff --git a/build2/cc/module.cxx b/build2/cc/module.cxx index a18271c..0245def 100644 --- a/build2/cc/module.cxx +++ b/build2/cc/module.cxx @@ -12,6 +12,8 @@ #include <build2/bin/target.hxx> +#include <build2/cc/target.hxx> // pc* + #include <build2/config/utility.hxx> #include <build2/install/utility.hxx> @@ -77,10 +79,10 @@ namespace build2 // Figure out which compiler we are dealing with, its target, etc. // const path& xc (cast<path> (*p.first)); - ci = cc::guess (x_lang, - xc, - cast_null<strings> (rs[config_c_coptions]), - cast_null<strings> (rs[config_x_coptions])); + ci = build2::cc::guess (x_lang, + xc, + cast_null<strings> (rs[config_c_coptions]), + cast_null<strings> (rs[config_x_coptions])); // Split/canonicalize the target. First see if the user asked us to // use config.sub. @@ -366,6 +368,12 @@ namespace build2 if (install_loaded) install_path (rs, **ht, dir_path ("include")); } + + t.insert<pca> (); + t.insert<pcs> (); + + if (install_loaded) + install_path<pc> (rs, dir_path ("pkgconfig")); } // Register rules. diff --git a/build2/cc/pkgconfig.cxx b/build2/cc/pkgconfig.cxx index 22ab774..f920dbd 100644 --- a/build2/cc/pkgconfig.cxx +++ b/build2/cc/pkgconfig.cxx @@ -20,9 +20,9 @@ #include <build2/install/utility.hxx> #include <build2/bin/target.hxx> -#include <build2/pkgconfig/target.hxx> #include <build2/cc/types.hxx> +#include <build2/cc/target.hxx> // pc #include <build2/cc/utility.hxx> #include <build2/cc/common.hxx> @@ -464,7 +464,6 @@ namespace build2 { tracer trace (x, "pkgconfig_load"); - assert (pkgconfig != nullptr); assert (at != nullptr || st != nullptr); // Iterate over pkgconf directories that correspond to the specified @@ -1128,10 +1127,10 @@ namespace build2 const scope& bs (l.base_scope ()); const scope& rs (*bs.root_scope ()); - auto* pc (find_adhoc_member<pkgconfig::pc> (l)); - assert (pc != nullptr); + auto* t (find_adhoc_member<pc> (l)); + assert (t != nullptr); - const path& p (pc->path ()); + const path& p (t->path ()); if (verb >= 2) text << "cat >" << p; @@ -1207,12 +1206,12 @@ namespace build2 n.erase (0, 3); }; - if (auto* pc = find_adhoc_member<pkgconfig::pc> (l)) + if (auto* t = find_adhoc_member<pc> (l)) { // We also want to strip the lib prefix unless it is part of the // target name while keeping custom library prefix/suffix, if any. // - n = pc->path ().leaf ().base ().base ().string (); + n = t->path ().leaf ().base ().base ().string (); if (path::traits::compare (n.c_str (), n.size (), l.name.c_str (), l.name.size ()) != 0) diff --git a/build2/cc/target.cxx b/build2/cc/target.cxx index 5fbf67d..6f8d541 100644 --- a/build2/cc/target.cxx +++ b/build2/cc/target.cxx @@ -49,5 +49,45 @@ namespace build2 &file_search, false }; + + const target_type pc::static_type + { + "pc", + &file::static_type, + nullptr, + nullptr, + nullptr, + nullptr, + &target_search, + false + }; + + extern const char pca_ext[] = "static.pc"; // VC14 rejects constexpr. + + const target_type pca::static_type + { + "pca", + &pc::static_type, + &file_factory<pca, pca_ext>, + &target_extension_fix<pca_ext>, + &target_pattern_fix<pca_ext>, + &target_print_0_ext_verb, // Fixed extension, no use printing. + &file_search, + false + }; + + extern const char pcs_ext[] = "shared.pc"; // VC14 rejects constexpr. + + const target_type pcs::static_type + { + "pcs", + &pc::static_type, + &file_factory<pcs, pcs_ext>, + &target_extension_fix<pcs_ext>, + &target_pattern_fix<pcs_ext>, + &target_print_0_ext_verb, // Fixed extension, no use printing. + &file_search, + false + }; } } diff --git a/build2/cc/target.hxx b/build2/cc/target.hxx index 4c9e4cb..a7fb7d4 100644 --- a/build2/cc/target.hxx +++ b/build2/cc/target.hxx @@ -57,6 +57,37 @@ namespace build2 static const target_type static_type; virtual const target_type& dynamic_type () const {return static_type;} }; + + // pkg-config file targets. + // + class pc: public file + { + public: + using file::file; + + public: + static const target_type static_type; + }; + + class pca: public pc // .static.pc + { + public: + using pc::pc; + + public: + static const target_type static_type; + virtual const target_type& dynamic_type () const {return static_type;} + }; + + class pcs: public pc // .shared.pc + { + public: + using pc::pc; + + public: + static const target_type static_type; + virtual const target_type& dynamic_type () const {return static_type;} + }; } } diff --git a/build2/cxx/init.cxx b/build2/cxx/init.cxx index 4a72c90..ca75de3 100644 --- a/build2/cxx/init.cxx +++ b/build2/cxx/init.cxx @@ -508,7 +508,6 @@ namespace build2 modules, symexport, - cast_null<process_path> (rs["pkgconfig.path"]), cast<dir_paths> (rs[cm.x_sys_lib_dirs]), cast<dir_paths> (rs[cm.x_sys_inc_dirs]), diff --git a/build2/pkgconfig/init.cxx b/build2/pkgconfig/init.cxx deleted file mode 100644 index 9526aa7..0000000 --- a/build2/pkgconfig/init.cxx +++ /dev/null @@ -1,175 +0,0 @@ -// file : build2/pkgconfig/init.cxx -*- C++ -*- -// copyright : Copyright (c) 2014-2017 Code Synthesis Ltd -// license : MIT; see accompanying LICENSE file - -#include <build2/pkgconfig/init.hxx> - -#include <build2/scope.hxx> -#include <build2/target.hxx> -#include <build2/variable.hxx> -#include <build2/diagnostics.hxx> - -#include <build2/config/utility.hxx> -#include <build2/install/utility.hxx> - -#include <build2/pkgconfig/target.hxx> - -using namespace std; -using namespace butl; - -namespace build2 -{ - namespace pkgconfig - { - bool - config_init (scope& rs, - scope& bs, - const location& l, - unique_ptr<module_base>&, - bool, - bool optional, - const variable_map& hints) - { - tracer trace ("pkgconfig::config_init"); - l5 ([&]{trace << "for " << bs.out_path ();}); - - // We only support root loading (which means there can only be one). - // - if (&rs != &bs) - fail (l) << "pkgconfig.config module must be loaded in project root"; - - // Enter variables. - // - // config.pkgconfig.target is a hint. - // - auto& vp (var_pool.rw (rs)); - - const variable& c_x (vp.insert<path> ("config.pkgconfig", true)); - const variable& x_path (vp.insert<process_path> ("pkgconfig.path")); - - const variable& c_x_tgt ( - vp.insert<target_triplet> ("config.pkgconfig.target")); - - // Configure. - // - - // Adjust module priority (between compilers and binutils). - // - config::save_module (rs, "pkgconfig", 325); - - process_path pp; - bool new_val (false); // Set any new values? - - auto p (config::omitted (rs, c_x)); - - if (p.first) - { - const path& x (cast<path> (p.first)); - - try - { - // If this is a user-specified value, then it's non-optional. - // - pp = process::path_search (x, true); - new_val = p.second; - } - catch (const process_error& e) - { - fail << "unable to execute " << x << ": " << e; - } - } - - string d; // Default name (pp.initial may be its shallow copy). - - // If we have a target hint, then next try <triplet>-pkg-config. - // - if (pp.empty ()) - { - if (const auto* t = cast_null<target_triplet> (hints[c_x_tgt])) - { - d = t->string (); - d += "-pkg-config"; - - l5 ([&]{trace << "trying " << d;}); - pp = process::try_path_search (d, true); - } - } - - // Finallly, try just pkg-config. - // - if (pp.empty ()) - { - d = "pkg-config"; - - l5 ([&]{trace << "trying " << d;}); - pp = process::try_path_search (d, true); - } - - bool conf (!pp.empty ()); - - if (!conf && !optional) - fail (l) << "unable to find pkg-config program"; - - // Config report. - // - if (verb >= (new_val ? 2 : 3)) - { - diag_record dr (text); - dr << "pkgconfig " << project (rs) << '@' << rs.out_path () << '\n'; - - if (conf) - dr << " pkg-config " << pp; - else - dr << " pkg-config " << "not found, leaving unconfigured"; - } - - if (conf) - rs.assign (x_path) = move (pp); - - return conf; - } - - bool - init (scope& rs, - scope&, - const location& loc, - unique_ptr<module_base>&, - bool, - bool optional, - const variable_map& hints) - { - tracer trace ("pkgconfig::init"); - l5 ([&]{trace << "for " << rs.out_path ();}); - - // Load pkgconfig.config. - // - bool conf (true); - if (!cast_false<bool> (rs["pkgconfig.config.loaded"])) - { - if (!load_module (rs, rs, "pkgconfig.config", loc, optional, hints)) - conf = false; - } - else if (!cast_false<bool> (rs["pkgconfig.config.configured"])) - { - if (!optional) - fail << "pkgconfig module could not be configured" << - info << "re-run with -V option for more information"; - - conf = false; - } - - // Register the target type and configure its default "installability". - // - // Note that we do it whether we found pkg-config or not since these are - // used to produce .pc files which we do regardless. - // - rs.target_types.insert<pca> (); - rs.target_types.insert<pcs> (); - - if (cast_false<bool> (rs["install.loaded"])) - install::install_path<pc> (rs, dir_path ("pkgconfig")); - - return conf; - } - } -} diff --git a/build2/pkgconfig/init.hxx b/build2/pkgconfig/init.hxx deleted file mode 100644 index eed224f..0000000 --- a/build2/pkgconfig/init.hxx +++ /dev/null @@ -1,37 +0,0 @@ -// file : build2/pkgconfig/init.hxx -*- C++ -*- -// copyright : Copyright (c) 2014-2017 Code Synthesis Ltd -// license : MIT; see accompanying LICENSE file - -#ifndef BUILD2_PKGCONFIG_INIT_HXX -#define BUILD2_PKGCONFIG_INIT_HXX - -#include <build2/types.hxx> -#include <build2/utility.hxx> - -#include <build2/module.hxx> - -namespace build2 -{ - namespace pkgconfig - { - bool - config_init (scope&, - scope&, - const location&, - unique_ptr<module_base>&, - bool, - bool, - const variable_map&); - - bool - init (scope&, - scope&, - const location&, - unique_ptr<module_base>&, - bool, - bool, - const variable_map&); - } -} - -#endif // BUILD2_PKGCONFIG_INIT_HXX diff --git a/build2/pkgconfig/target.cxx b/build2/pkgconfig/target.cxx deleted file mode 100644 index 7752f58..0000000 --- a/build2/pkgconfig/target.cxx +++ /dev/null @@ -1,54 +0,0 @@ -// file : build2/pkgconfig/target.cxx -*- C++ -*- -// copyright : Copyright (c) 2014-2017 Code Synthesis Ltd -// license : MIT; see accompanying LICENSE file - -#include <build2/pkgconfig/target.hxx> - -using namespace std; -using namespace butl; - -namespace build2 -{ - namespace pkgconfig - { - const target_type pc::static_type - { - "pc", - &file::static_type, - nullptr, - nullptr, - nullptr, - nullptr, - &target_search, - false - }; - - extern const char pca_ext[] = "static.pc"; // VC14 rejects constexpr. - - const target_type pca::static_type - { - "pca", - &pc::static_type, - &file_factory<pca, pca_ext>, - &target_extension_fix<pca_ext>, - &target_pattern_fix<pca_ext>, - &target_print_0_ext_verb, // Fixed extension, no use printing. - &file_search, - false - }; - - extern const char pcs_ext[] = "shared.pc"; // VC14 rejects constexpr. - - const target_type pcs::static_type - { - "pcs", - &pc::static_type, - &file_factory<pcs, pcs_ext>, - &target_extension_fix<pcs_ext>, - &target_pattern_fix<pcs_ext>, - &target_print_0_ext_verb, // Fixed extension, no use printing. - &file_search, - false - }; - } -} diff --git a/build2/pkgconfig/target.hxx b/build2/pkgconfig/target.hxx deleted file mode 100644 index feb8d80..0000000 --- a/build2/pkgconfig/target.hxx +++ /dev/null @@ -1,48 +0,0 @@ -// file : build2/pkgconfig/target.hxx -*- C++ -*- -// copyright : Copyright (c) 2014-2017 Code Synthesis Ltd -// license : MIT; see accompanying LICENSE file - -#ifndef BUILD2_PKGCONFIG_TARGET_HXX -#define BUILD2_PKGCONFIG_TARGET_HXX - -#include <build2/types.hxx> -#include <build2/utility.hxx> - -#include <build2/target.hxx> - -namespace build2 -{ - namespace pkgconfig - { - class pc: public file - { - public: - using file::file; - - public: - static const target_type static_type; - }; - - class pca: public pc // .static.pc - { - public: - using pc::pc; - - public: - static const target_type static_type; - virtual const target_type& dynamic_type () const {return static_type;} - }; - - class pcs: public pc // .shared.pc - { - public: - using pc::pc; - - public: - static const target_type static_type; - virtual const target_type& dynamic_type () const {return static_type;} - }; - } -} - -#endif // BUILD2_PKGCONFIG_TARGET_HXX |