Skip to content

Commit 5bc8c27

Browse files
author
Thiago Macieira
committed
Add LIBS_PRIVATE to qmake.
The difference between LIBS and LIBS_PRIVATE is that private libraries are those that are not part of the public interface of a library. For example, if you're writing a Qt application and link to QtGui, you definitely need the development files for QtCore, but not necessarily for Glib and GThread, or maybe even X11. The private libraries are necessary only in static builds, so the information should still be published in .prl and pkg-config files. Reviewed-By: Marius Storm-Olsen
1 parent 8096d2b commit 5bc8c27

File tree

8 files changed

+27
-13
lines changed

8 files changed

+27
-13
lines changed

qmake/generators/makefile.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -967,6 +967,8 @@ MakefileGenerator::writePrlFile(QTextStream &t)
967967
libs = project->values("QMAKE_INTERNAL_PRL_LIBS");
968968
else
969969
libs << "QMAKE_LIBS"; //obvious one
970+
if(project->isActiveConfig("staticlib"))
971+
libs << "QMAKE_LIBS_PRIVATE";
970972
t << "QMAKE_PRL_LIBS = ";
971973
for(QStringList::Iterator it = libs.begin(); it != libs.end(); ++it)
972974
t << project->values((*it)).join(" ") << " ";

qmake/generators/unix/unixmake.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ UnixMakefileGenerator::init()
127127
project->values("QMAKE_ORIG_TARGET") = project->values("TARGET");
128128
project->values("QMAKE_ORIG_DESTDIR") = project->values("DESTDIR");
129129
project->values("QMAKE_LIBS") += escapeFilePaths(project->values("LIBS"));
130+
project->values("QMAKE_LIBS_PRIVATE") += escapeFilePaths(project->values("LIBS_PRIVATE"));
130131
if((!project->isEmpty("QMAKE_LIB_FLAG") && !project->isActiveConfig("staticlib")) ||
131132
(project->isActiveConfig("qt") && project->isActiveConfig("plugin"))) {
132133
if(configs.indexOf("dll") == -1) configs.append("dll");
@@ -441,7 +442,7 @@ UnixMakefileGenerator::findLibraries()
441442
QList<QMakeLocalFileName> libdirs, frameworkdirs;
442443
frameworkdirs.append(QMakeLocalFileName("/System/Library/Frameworks"));
443444
frameworkdirs.append(QMakeLocalFileName("/Library/Frameworks"));
444-
const QString lflags[] = { "QMAKE_LIBDIR_FLAGS", "QMAKE_FRAMEWORKPATH_FLAGS", "QMAKE_LFLAGS", "QMAKE_LIBS", QString() };
445+
const QString lflags[] = { "QMAKE_LIBDIR_FLAGS", "QMAKE_FRAMEWORKPATH_FLAGS", "QMAKE_LFLAGS", "QMAKE_LIBS", "QMAKE_LIBS_PRIVATE", QString() };
445446
for(int i = 0; !lflags[i].isNull(); i++) {
446447
QStringList &l = project->values(lflags[i]);
447448
for(QStringList::Iterator it = l.begin(); it != l.end(); ++it) {

qmake/generators/unix/unixmake2.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
149149
t << "LINK = " << var("QMAKE_LINK") << endl;
150150
t << "LFLAGS = " << var("QMAKE_LFLAGS") << endl;
151151
t << "LIBS = " << "$(SUBLIBS) " << var("QMAKE_FRAMEWORKDIR_FLAGS") << " "
152-
<< var("QMAKE_LIBDIR_FLAGS") << " " << var("QMAKE_LIBS") << endl;
152+
<< var("QMAKE_LIBDIR_FLAGS") << " " << var("QMAKE_LIBS") << " " << var("QMAKE_LIBS_PRIVATE") << endl;
153153
}
154154

155155
t << "AR = " << var("QMAKE_AR") << endl;
@@ -1424,13 +1424,6 @@ UnixMakefileGenerator::writePkgConfigFile()
14241424
t << "Version: " << project->first("VERSION") << endl;
14251425

14261426
// libs
1427-
QStringList libs;
1428-
if(!project->isEmpty("QMAKE_INTERNAL_PRL_LIBS")) {
1429-
libs = project->values("QMAKE_INTERNAL_PRL_LIBS");
1430-
} else {
1431-
libs << "QMAKE_LIBS"; //obvious one
1432-
}
1433-
libs << "QMAKE_LFLAGS_THREAD"; //not sure about this one, but what about things like -pthread?
14341427
t << "Libs: ";
14351428
QString pkgConfiglibDir;
14361429
QString pkgConfiglibName;
@@ -1450,6 +1443,15 @@ UnixMakefileGenerator::writePkgConfigFile()
14501443
pkgConfiglibName = "-l" + lname.left(lname.length()-Option::libtool_ext.length());
14511444
}
14521445
t << pkgConfiglibDir << " " << pkgConfiglibName << " " << endl;
1446+
1447+
QStringList libs;
1448+
if(!project->isEmpty("QMAKE_INTERNAL_PRL_LIBS")) {
1449+
libs = project->values("QMAKE_INTERNAL_PRL_LIBS");
1450+
} else {
1451+
libs << "QMAKE_LIBS"; //obvious one
1452+
}
1453+
libs << "QMAKE_LIBS_PRIVATE";
1454+
libs << "QMAKE_LFLAGS_THREAD"; //not sure about this one, but what about things like -pthread?
14531455
t << "Libs.private: ";
14541456
for(QStringList::ConstIterator it = libs.begin(); it != libs.end(); ++it) {
14551457
t << project->values((*it)).join(" ") << " ";

qmake/generators/win32/mingw_make.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,12 @@ QString MingwMakefileGenerator::getLibTarget()
8282

8383
bool MingwMakefileGenerator::findLibraries()
8484
{
85-
QStringList &l = project->values("QMAKE_LIBS");
85+
return findLibraries("QMAKE_LIBS") && findLibraries("QMAKE_LIBS_PRIVATE");
86+
}
87+
88+
bool MingwMakefileGenerator::findLibraries(const QString &where)
89+
{
90+
QStringList &l = project->values(where);
8691

8792
QList<QMakeLocalFileName> dirs;
8893
{
@@ -258,6 +263,7 @@ void MingwMakefileGenerator::init()
258263

259264
// LIBS defined in Profile comes first for gcc
260265
project->values("QMAKE_LIBS") += escapeFilePaths(project->values("LIBS"));
266+
project->values("QMAKE_LIBS_PRIVATE") += escapeFilePaths(project->values("LIBS_PRIVATE"));
261267

262268
QString targetfilename = project->values("TARGET").first();
263269
QStringList &configs = project->values("CONFIG");
@@ -344,7 +350,8 @@ void MingwMakefileGenerator::writeLibsPart(QTextStream &t)
344350
t << "LIBS = ";
345351
if(!project->values("QMAKE_LIBDIR").isEmpty())
346352
writeLibDirPart(t);
347-
t << var("QMAKE_LIBS").replace(QRegExp("(\\slib|^lib)")," -l") << endl;
353+
t << var("QMAKE_LIBS").replace(QRegExp("(\\slib|^lib)")," -l") << ' '
354+
<< var("QMAKE_LIBS_PRIVATE").replace(QRegExp("(\\slib|^lib)")," -l") << endl;
348355
}
349356
}
350357

qmake/generators/win32/mingw_make.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ class MingwMakefileGenerator : public Win32MakefileGenerator
7272
QString preCompHeaderOut;
7373

7474
virtual bool findLibraries();
75+
bool findLibraries(const QString &where);
7576
void fixTargetExt();
7677

7778
bool init_flag;

qmake/generators/win32/msvc_nmake.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ void NmakeMakefileGenerator::init()
172172
}
173173

174174
project->values("QMAKE_LIBS") += escapeFilePaths(project->values("LIBS"));
175+
project->values("QMAKE_LIBS_PRIVATE") += escapeFilePaths(project->values("LIBS_PRIVATE"));
175176
processVars();
176177

177178
if (!project->values("RES_FILE").isEmpty()) {

qmake/generators/win32/winmakefile.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -708,7 +708,7 @@ void Win32MakefileGenerator::writeLibsPart(QTextStream &t)
708708
if(!project->values("QMAKE_LIBDIR").isEmpty())
709709
writeLibDirPart(t);
710710
t << var("QMAKE_LFLAGS") << endl;
711-
t << "LIBS = " << var("QMAKE_LIBS") << endl;
711+
t << "LIBS = " << var("QMAKE_LIBS") << " " << var("QMAKE_LIBS_PRIVATE") << endl;
712712
}
713713
}
714714

qmake/generators/win32/winmakefile.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ inline Win32MakefileGenerator::~Win32MakefileGenerator()
8989
{ }
9090

9191
inline bool Win32MakefileGenerator::findLibraries()
92-
{ return findLibraries("QMAKE_LIBS"); }
92+
{ return findLibraries("QMAKE_LIBS") && findLibraries("QMAKE_LIBS_PRIVATE"); }
9393

9494
QT_END_NAMESPACE
9595

0 commit comments

Comments
 (0)