From 88b346394054416213d3d4e81e0a213403eb2ff7 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Fri, 24 Nov 2017 12:55:58 +0200 Subject: Add extra library search paths as -L options --- build2/cc/compile.cxx | 37 ++++++++++++++++--------------------- build2/cc/link.cxx | 13 ++++++++++++- build2/cc/module.cxx | 32 +++++++++++++++++--------------- 3 files changed, 45 insertions(+), 37 deletions(-) (limited to 'build2/cc') diff --git a/build2/cc/compile.cxx b/build2/cc/compile.cxx index f3aaba5..1317fcb 100644 --- a/build2/cc/compile.cxx +++ b/build2/cc/compile.cxx @@ -761,9 +761,10 @@ namespace build2 // Extra system header dirs (last). // assert (sys_inc_dirs_extra <= sys_inc_dirs.size ()); - for (auto i (sys_inc_dirs.begin () + sys_inc_dirs_extra); - i != sys_inc_dirs.end (); ++i) - cs.append (i->string ()); + hash_option_values ( + cs, "-I", + sys_inc_dirs.begin () + sys_inc_dirs_extra, sys_inc_dirs.end (), + [] (const dir_path& d) {return d.string ();}); } hash_options (cs, t, c_coptions); @@ -1760,12 +1761,10 @@ namespace build2 // Extra system header dirs (last). // assert (sys_inc_dirs_extra <= sys_inc_dirs.size ()); - for (auto i (sys_inc_dirs.begin () + sys_inc_dirs_extra); - i != sys_inc_dirs.end (); ++i) - { - args.push_back ("-I"); - args.push_back (i->string ().c_str ()); - } + append_option_values ( + args, "-I", + sys_inc_dirs.begin () + sys_inc_dirs_extra, sys_inc_dirs.end (), + [] (const dir_path& d) {return d.string ().c_str ();}); if (md.symexport) append_symexport_options (args, t); @@ -2751,12 +2750,10 @@ namespace build2 append_options (args, t, x_poptions); assert (sys_inc_dirs_extra <= sys_inc_dirs.size ()); - for (auto i (sys_inc_dirs.begin () + sys_inc_dirs_extra); - i != sys_inc_dirs.end (); ++i) - { - args.push_back ("-I"); - args.push_back (i->string ().c_str ()); - } + append_option_values ( + args, "-I", + sys_inc_dirs.begin () + sys_inc_dirs_extra, sys_inc_dirs.end (), + [] (const dir_path& d) {return d.string ().c_str ();}); if (md.symexport) append_symexport_options (args, t); @@ -4042,12 +4039,10 @@ namespace build2 // Extra system header dirs (last). // assert (sys_inc_dirs_extra <= sys_inc_dirs.size ()); - for (auto i (sys_inc_dirs.begin () + sys_inc_dirs_extra); - i != sys_inc_dirs.end (); ++i) - { - args.push_back ("-I"); - args.push_back (i->string ().c_str ()); - } + append_option_values ( + args, "-I", + sys_inc_dirs.begin () + sys_inc_dirs_extra, sys_inc_dirs.end (), + [] (const dir_path& d) {return d.string ().c_str ();}); if (md.symexport) append_symexport_options (args, t); diff --git a/build2/cc/link.cxx b/build2/cc/link.cxx index 4f1eea5..2b70fe9 100644 --- a/build2/cc/link.cxx +++ b/build2/cc/link.cxx @@ -1421,6 +1421,17 @@ namespace build2 append_options (args, t, c_loptions); append_options (args, t, x_loptions); + // Extra system library dirs (last). + // + // @@ /LIBPATH:, not /LIBPATH + // + assert (sys_lib_dirs_extra <= sys_lib_dirs.size ()); + append_option_values ( + args, + cid == compiler_id::msvc ? "/LIBPATH:" : "-L", + sys_lib_dirs.begin () + sys_lib_dirs_extra, sys_lib_dirs.end (), + [] (const dir_path& d) {return d.string ().c_str ();}); + // Handle soname/rpath. // if (tclass == "windows") @@ -1562,7 +1573,7 @@ namespace build2 if (!manifest.empty ()) cs.append (manifest.string ()); - // Treat them as inputs, not options. + // Treat .libs as inputs, not options. // if (!lt.static_library ()) { diff --git a/build2/cc/module.cxx b/build2/cc/module.cxx index 9971b56..badd0ef 100644 --- a/build2/cc/module.cxx +++ b/build2/cc/module.cxx @@ -231,42 +231,44 @@ namespace build2 const string& ct (tt.string ()); // Canonical target. dr << " signature " << ci.signature << '\n' + << " checksum " << ci.checksum << '\n' << " target " << ct; if (ct != ci.target) dr << " (" << ci.target << ")"; - - dr << '\n'; } if (!tstd.empty ()) { - dr << " std "; // One less space. + dr << "\n std "; // One less space. for (const string& o: tstd) dr << ' ' << o; - dr << '\n'; } if (!ci.cc_pattern.empty ()) // bin_pattern printed by bin { - dr << " pattern " << ci.cc_pattern << '\n'; + dr << "\n pattern " << ci.cc_pattern; } if (verb >= 3 && !inc_dirs.empty ()) { - dr << " inc dirs\n"; - for (const dir_path& d: inc_dirs) - dr << " " << d << '\n'; + dr << "\n inc dirs"; + for (size_t i (0); i != inc_dirs.size (); ++i) + { + if (i == sys_inc_dirs_extra) + dr << "\n --"; + dr << "\n " << inc_dirs[i]; + } } if (verb >= 3 && !lib_dirs.empty ()) { - dr << " lib dirs\n"; - for (const dir_path& d: lib_dirs) - dr << " " << d << '\n'; - } - - { - dr << " checksum " << ci.checksum; + dr << "\n lib dirs"; + for (size_t i (0); i != lib_dirs.size (); ++i) + { + if (i == sys_lib_dirs_extra) + dr << "\n --"; + dr << "\n " << lib_dirs[i]; + } } } -- cgit v1.1