Created attachment 175159 [details] patch USES=localbase currently adds -L${LOCALBASE}/lib to LDFLAGS but normally LDFLAGS appears too early on the command line causing some ports to link with their own libraries in LOCALBASE (if installed) instead of WRKSRC. An example is databases/firebird25-client. In its build log you can see -L${LOCALBASE}/lib appear before all other -L flags. The attached patch sets LIBS instead and allows LDFLAGS to be set with USES=localbase:ldflags. It also makes use of _USES_POST so -L${LOCALBASE}/lib is added as late as possible after anything a port Makefile might add. This also allows things like 'USES=libedit localbase:ldflags' to work correctly. An exp-run is needed to flush out ports that don't support LIBS.
Exp-run started at http://package18.nyi.freebsd.org/build.html?mastername=110amd64-default-PR212987&build=2016-09-25_19h17m10s
New failures: + {"origin"=>"archivers/pigz", "pkgname"=>"pigz-2.3.3_1", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"audio/fplib", "pkgname"=>"fplib-20121001_3", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"audio/listener", "pkgname"=>"listener-2.2_1", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"benchmarks/glmark2", "pkgname"=>"glmark2-2014.03", "phase"=>"configure", "errortype"=>"configure_error"} + {"origin"=>"databases/rocksdb", "pkgname"=>"rocksdb-4.6.1", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"devel/efivar", "pkgname"=>"efivar-0.15", "phase"=>"build", "errortype"=>"makefile"} + {"origin"=>"dns/dnscrypt-wrapper", "pkgname"=>"dnscrypt-wrapper-0.2.1_3", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"ftp/twoftpd", "pkgname"=>"twoftpd-1.42_1", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"games/corewars", "pkgname"=>"corewars-0.9.13_5", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"games/endless-sky", "pkgname"=>"endless-sky-0.9.2", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"games/motogt", "pkgname"=>"motogt-20110505_6", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"games/nighthawk", "pkgname"=>"nighthawk-3.0.0_4", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"graphics/bmeps", "pkgname"=>"bmpp-4.3.6", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"graphics/lcms", "pkgname"=>"lcms-1.19_6,1", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"graphics/lcms2", "pkgname"=>"lcms2-2.7_2", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"graphics/libprojectm", "pkgname"=>"libprojectM-2.0.1_3", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"graphics/pngrewrite", "pkgname"=>"pngrewrite-1.4.0_2", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"graphics/py-ming", "pkgname"=>"py27-ming-0.4.7_1", "phase"=>"configure", "errortype"=>"configure_error"} + {"origin"=>"mail/neomutt", "pkgname"=>"neomutt-20160916", "phase"=>"configure", "errortype"=>"configure_error"} + {"origin"=>"misc/getopt", "pkgname"=>"getopt-1.1.6", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"multimedia/oqtencoder", "pkgname"=>"OQTEncoder-0.1_6", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"net-p2p/transmission-cli", "pkgname"=>"transmission-cli-2.92", "phase"=>"build", "errortype"=>"missing_header"} + {"origin"=>"net-p2p/transmission-daemon", "pkgname"=>"transmission-daemon-2.92", "phase"=>"build", "errortype"=>"missing_header"} + {"origin"=>"net/gnu-dico", "pkgname"=>"gnu-dico-2.3", "phase"=>"package", "errortype"=>"???"} + {"origin"=>"net/ldap2dns", "pkgname"=>"ldap2dns-0.4.2_2", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"sysutils/fusefs-unionfs", "pkgname"=>"fusefs-unionfs-1.0", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"sysutils/pciutils", "pkgname"=>"pciutils-3.5.1", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"sysutils/xen-tools", "pkgname"=>"xen-tools-4.7.0_4", "phase"=>"build", "errortype"=>"linker_error"} Failure logs: http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-25_19h17m10s/logs/errors/pigz-2.3.3_1.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-25_19h17m10s/logs/errors/fplib-20121001_3.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-25_19h17m10s/logs/errors/listener-2.2_1.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-25_19h17m10s/logs/errors/glmark2-2014.03.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-25_19h17m10s/logs/errors/rocksdb-4.6.1.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-25_19h17m10s/logs/errors/efivar-0.15.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-25_19h17m10s/logs/errors/dnscrypt-wrapper-0.2.1_3.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-25_19h17m10s/logs/errors/twoftpd-1.42_1.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-25_19h17m10s/logs/errors/corewars-0.9.13_5.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-25_19h17m10s/logs/errors/endless-sky-0.9.2.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-25_19h17m10s/logs/errors/motogt-20110505_6.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-25_19h17m10s/logs/errors/nighthawk-3.0.0_4.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-25_19h17m10s/logs/errors/bmpp-4.3.6.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-25_19h17m10s/logs/errors/lcms-1.19_6,1.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-25_19h17m10s/logs/errors/lcms2-2.7_2.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-25_19h17m10s/logs/errors/libprojectM-2.0.1_3.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-25_19h17m10s/logs/errors/pngrewrite-1.4.0_2.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-25_19h17m10s/logs/errors/py27-ming-0.4.7_1.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-25_19h17m10s/logs/errors/neomutt-20160916.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-25_19h17m10s/logs/errors/getopt-1.1.6.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-25_19h17m10s/logs/errors/OQTEncoder-0.1_6.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-25_19h17m10s/logs/errors/transmission-cli-2.92.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-25_19h17m10s/logs/errors/transmission-daemon-2.92.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-25_19h17m10s/logs/errors/gnu-dico-2.3.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-25_19h17m10s/logs/errors/ldap2dns-0.4.2_2.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-25_19h17m10s/logs/errors/fusefs-unionfs-1.0.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-25_19h17m10s/logs/errors/pciutils-3.5.1.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-25_19h17m10s/logs/errors/xen-tools-4.7.0_4.log
Created attachment 175178 [details] patch2 Add :ldflags or fix problems with LIBS.
New failures: + {"origin"=>"deskutils/fbreader", "pkgname"=>"fbreader-0.99.6_2", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"deskutils/owncloudclient", "pkgname"=>"owncloudclient-2.2.3", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"games/vegastrike", "pkgname"=>"vegastrike-0.5.1.r1_4", "phase"=>"configure", "errortype"=>"configure_error"} + {"origin"=>"graphics/dcraw", "pkgname"=>"dcraw-9.26", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"graphics/poppler-qt4", "pkgname"=>"poppler-qt4-0.46.0", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"graphics/poppler-qt5", "pkgname"=>"poppler-qt5-0.46.0", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"graphics/poppler-utils", "pkgname"=>"poppler-utils-0.46.0", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"mail/wmmaiload", "pkgname"=>"wmmaiload-2.3.0", "phase"=>"stage", "errortype"=>"linker_error"} + {"origin"=>"multimedia/lives", "pkgname"=>"lives-2.8.0", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"net-mgmt/ettercap", "pkgname"=>"ettercap-0.8.2,1", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"net-p2p/gtk-gnutella", "pkgname"=>"gtk-gnutella-1.1.10", "phase"=>"package", "errortype"=>"???"} + {"origin"=>"x11/qterminal", "pkgname"=>"qterminal-0.6.0", "phase"=>"build", "errortype"=>"linker_error"} Failure logs: http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-26_14h33m03s/logs/errors/fbreader-0.99.6_2.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-26_14h33m03s/logs/errors/owncloudclient-2.2.3.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-26_14h33m03s/logs/errors/vegastrike-0.5.1.r1_4.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-26_14h33m03s/logs/errors/dcraw-9.26.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-26_14h33m03s/logs/errors/poppler-qt4-0.46.0.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-26_14h33m03s/logs/errors/poppler-qt5-0.46.0.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-26_14h33m03s/logs/errors/poppler-utils-0.46.0.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-26_14h33m03s/logs/errors/wmmaiload-2.3.0.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-26_14h33m03s/logs/errors/lives-2.8.0.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-26_14h33m03s/logs/errors/ettercap-0.8.2,1.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-26_14h33m03s/logs/errors/gtk-gnutella-1.1.10.log http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-26_14h33m03s/logs/errors/qterminal-0.6.0.log
Created attachment 175196 [details] patch3 Add :ldflags or fix problems with LIBS.
New failure: + {"origin"=>"games/vegastrike", "pkgname"=>"vegastrike-0.5.1.r1_4", "phase"=>"configure", "errortype"=>"configure_error"} Failure log: http://package18.nyi.freebsd.org/data/110amd64-default-PR212987/2016-09-27_13h47m54s/logs/errors/vegastrike-0.5.1.r1_4.log
Created attachment 175201 [details] patch4 Switch vegastrike to :ldflags.
A few issues I noticed: - archivers/unmakeself no longer uses libarchive from ports - net/axa no longer uses libedit from ports - security/ike no longer uses libedit from ports - net/ntp and net/ntp-devel no longer use libmd5 from ports - multimedia/mpv no longer uses libenca and libjpeg
Created attachment 175226 [details] patch5 Add :ldflags or fix problems with LIBS.
I have this extra failure on 11.0 i386: http://package18.nyi.freebsd.org/data/110i386-default-PR212987/2016-09-28_13h17m59s/logs/errors/ppsspp-1.3_1.log
New failures on 9.3 i386: + {"origin"=>"devel/sdl20", "pkgname"=>"sdl2-2.0.4", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"graphics/dcp2icc", "pkgname"=>"dcp2icc-0.1_1", "phase"=>"build", "errortype"=>"linker_error"} + {"origin"=>"mail/libetpan", "pkgname"=>"libetpan-1.7.2", "phase"=>"build", "errortype"=>"compiler_error"} + {"origin"=>"math/asymptote", "pkgname"=>"asymptote-2.37", "phase"=>"build", "errortype"=>"coredump"} Failure logs: http://package22.nyi.freebsd.org/data/93i386-default-PR212987/2016-09-29_12h24m04s/logs/errors/sdl2-2.0.4.log http://package22.nyi.freebsd.org/data/93i386-default-PR212987/2016-09-29_12h24m04s/logs/errors/dcp2icc-0.1_1.log http://package22.nyi.freebsd.org/data/93i386-default-PR212987/2016-09-29_12h24m04s/logs/errors/libetpan-1.7.2.log http://package22.nyi.freebsd.org/data/93i386-default-PR212987/2016-09-29_12h24m04s/logs/errors/asymptote-2.37.log
Another extra failure on 10.1 i386: http://package23.nyi.freebsd.org/data/101i386-default-PR212987/2016-09-28_13h23m55s/logs/errors/android-file-transfer-3.0.10_1.log
Created attachment 175276 [details] patch6 Add :ldflags or fix problems with LIBS. I haven't figured out the problem with math/asymptote on FreeBSD 9 i386. It doesn't use localbase nor do any of its direct dependencies. Are there any differences in linked libraries on FreeBSD 9 like you found on FreeBSD 11?
editors/texmacs no longer links against libiconv.so.2 on 9.3 i386 net/ocserv no longer links against libintl.so.8 on 9.3 i386 The rest looks similar
Created attachment 175284 [details] patch7 - Fix texmacs to link with libiconv - Remove gettext dependency from ocserv. It is configured with --disable-nls and doesn't need libintl.
Exp-run looks fine
A commit references this bug: Author: tijl Date: Fri Sep 30 19:24:37 UTC 2016 New revision: 423014 URL: https://svnweb.freebsd.org/changeset/ports/423014 Log: Let USES=localbase add -L${LOCALBASE}/lib to LIBS instead of LDFLAGS. USES=localbase:ldflags can be used to set LDFLAGS. Normally LDFLAGS appears too early on the command line causing some ports to link with their own libraries in LOCALBASE (if installed) instead of WRKSRC. Also make use of _USES_POST so -L${LOCALBASE}/lib is added as late as possible after anything a port Makefile might set. Use _USES_POST instead of .include in libedit.mk and libarchive.mk so things like 'USES=libedit localbase:ldflags' work correctly. Fix some issues with LIBS in some ports. Switch ports that don't support LIBS to localbase:ldflags. PR: 212987 Exp-run by: antoine Approved by: portmgr (antoine) Changes: head/Mk/Uses/libarchive.mk head/Mk/Uses/libedit.mk head/Mk/Uses/localbase.mk head/archivers/pigz/Makefile head/archivers/unmakeself/Makefile head/audio/fplib/Makefile head/audio/listener/Makefile head/benchmarks/glmark2/Makefile head/databases/firebird25-server/Makefile head/databases/rocksdb/Makefile head/deskutils/fbreader/Makefile head/deskutils/owncloudclient/Makefile head/devel/efivar/files/patch-Make.rules head/devel/efivar/files/patch-src-Makefile head/devel/efivar/files/patch-src-test-Makefile head/devel/sdl20/Makefile head/dns/dnscrypt-wrapper/Makefile head/editors/texmacs/Makefile head/emulators/ppsspp/Makefile head/ftp/twoftpd/Makefile head/games/corewars/Makefile head/games/endless-sky/Makefile head/games/motogt/Makefile head/games/nighthawk/Makefile head/games/vegastrike/Makefile head/graphics/bmeps/Makefile head/graphics/dcp2icc/Makefile head/graphics/dcraw/Makefile head/graphics/lcms/Makefile head/graphics/lcms2/Makefile head/graphics/libprojectm/Makefile head/graphics/pngrewrite/Makefile head/graphics/poppler/files/patch-configure head/graphics/py-ming/Makefile head/mail/libetpan/files/ head/mail/libetpan/files/patch-configure.ac head/mail/neomutt/Makefile head/mail/wmmaiload/Makefile head/misc/getopt/Makefile head/multimedia/lives/Makefile head/multimedia/mpv/Makefile head/multimedia/oqtencoder/Makefile head/net/axa/Makefile head/net/gnu-dico/Makefile head/net/ldap2dns/Makefile head/net/ntp/Makefile head/net/ntp-devel/Makefile head/net/ocserv/Makefile head/net/ocserv/files/patch-configure.ac head/net/ocserv/files/patch-libopts_m4_libopts.m4 head/net-mgmt/ettercap/Makefile head/net-p2p/gtk-gnutella/Makefile head/net-p2p/transmission-cli/files/patch-configure head/net-p2p/transmission-cli/files/patch-daemon_Makefile.in head/security/ike/Makefile head/sysutils/android-file-transfer/Makefile head/sysutils/fusefs-unionfs/Makefile head/sysutils/pciutils/Makefile head/sysutils/xen-tools/Makefile head/x11/qterminal/Makefile
Created attachment 175352 [details] Proposed patch (since 423014 revision) In my opinion, this proposal about "set LIBS instead of LDFLAGS" is wrong, because it based on half-truth: (comment #0): > USES=localbase currently adds -L${LOCALBASE}/lib to LDFLAGS but normally > LDFLAGS appears too early on the command line causing some ports to link with > their own libraries in LOCALBASE (if installed) instead of WRKSRC. An example > is databases/firebird25-client. In its build log you can see > -L${LOCALBASE}/lib appear before all other -L flags. For example, based on ports in /usr/ports/audio directory: -8<-- % cd /usr/ports && find audio/*/Makefile | xargs grep -e "^LIBS.*LOCALBASE}/lib" audio/adplay/Makefile:LIBS+= -L${LOCALBASE}/lib -lbinio audio/ario/Makefile:LIBS+= -L${LOCALBASE}/lib audio/deadbeef/Makefile:LIBS+= -L${LOCALBASE}/lib -lexecinfo -lintl audio/easytag/Makefile:LIBS+= -L${LOCALBASE}/lib audio/extace/Makefile:LIBS+= -L${LOCALBASE}/lib -lm audio/firefly/Makefile:LIBS+= -L${LOCALBASE}/lib audio/gbemol/Makefile:LIBS+= -L${LOCALBASE}/lib audio/gmpc-alarm/Makefile:LIBS+= -L${LOCALBASE}/lib audio/gmpc-discogs/Makefile:LIBS+= -L${LOCALBASE}/lib audio/gmpc-lastfm/Makefile:LIBS+= -L${LOCALBASE}/lib audio/gmpc-lyricwiki/Makefile:LIBS+= -L${LOCALBASE}/lib audio/gmpc-mdcover/Makefile:LIBS+= -L${LOCALBASE}/lib audio/gmpc-shout/Makefile:LIBS+= -L${LOCALBASE}/lib audio/gnomoradio/Makefile:LIBS+= -L${LOCALBASE}/lib audio/gqmpeg/Makefile:LIBS+= -L${LOCALBASE}/lib audio/gqradio/Makefile:LIBS+= -L${LOCALBASE}/lib -lm -lX11 audio/gvolwheel/Makefile:LIBS+= -L${LOCALBASE}/lib audio/jack-rack/Makefile:LIBS+= -L${LOCALBASE}/lib -lm audio/jack/Makefile:LIBS+= -L${LOCALBASE}/lib -L${BDB_LIB_DIR} audio/libcddb/Makefile:LIBS+= -L${LOCALBASE}/lib audio/mp3plot/Makefile:LIBS+= -L${LOCALBASE}/lib -lboost_system audio/paprefs/Makefile:LIBS+= -L${LOCALBASE}/lib audio/pms/Makefile:LIBS+= -L${LOCALBASE}/lib audio/rhythmbox/Makefile:LIBS+= -L${LOCALBASE}/lib audio/ripperx/Makefile:LIBS+= -L${LOCALBASE}/lib audio/rplay/Makefile:LIBS+= -L${LOCALBASE}/lib audio/spiralsynthmodular/Makefile:LIBS+= -L${LOCALBASE}/lib audio/volumeicon/Makefile:LIBS+= -L${LOCALBASE}/lib audio/wavpack/Makefile:LIBS+= -L${LOCALBASE}/lib -->8- The other part of truth is LDFLAGS usage: -8<-- % cd /usr/ports && find audio/*/Makefile | xargs grep -e "^LDFLAGS.*LOCALBASE}/lib" audio/audiere/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/aumix/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/beast/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/blop/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/calf/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/denemo/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/dssi/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/ecasound/Makefile:LDFLAGS+= -L${LOCALBASE}/lib -pthread audio/ezstream/Makefile:LDFLAGS+= -lpthread -L${LOCALBASE}/lib audio/faac/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/faad/Makefile:LDFLAGS+= -lpthread -L${LOCALBASE}/lib audio/freealut/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/ghostess/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/gigedit/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/glame/Makefile:LDFLAGS+= -L${LOCALBASE}/lib -lltdl audio/gmpc-mserver/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/gmtp/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/gnome-media/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/gnome-music/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/gogglesmm/Makefile:LDFLAGS+= -L${LOCALBASE}/lib -pthread audio/goobox/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/grip/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/gspeakers/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/gtick/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/gtkpod/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/icecast-kh/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/id3lib/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/idjc/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/julius/Makefile:LDFLAGS+= -L${LOCALBASE}/lib ${ICONV_LIB} audio/ksmp3play/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/lash/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/last.fm/Makefile:LDFLAGS+= -lz -L${LOCALBASE}/lib -lX11 audio/libcanberra/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/libebur128/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/libgig/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/libmp3splt/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/libnjb/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/libofa/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/libshairport/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/lingot/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/linuxsampler/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/madplay/Makefile:LDFLAGS+= -L${LOCALBASE}/lib -lz audio/mate-media/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/milkytracker/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/mixer.app/Makefile:LDFLAGS+= -L${LOCALBASE}/lib -lXpm -lXext -lX11 audio/mixmos/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/moc/Makefile:LDFLAGS+= -L${LOCALBASE}/lib -L${BDB_LIB_DIR} audio/mp-player/Makefile:LDFLAGS+= -L${LOCALBASE}/lib -lmikmod -lpthread -lncurses -lpanel audio/mp3blaster/Makefile:LDFLAGS+= -lpthread -L${LOCALBASE}/lib audio/mp3splt-gtk/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/mp3splt/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/mp3stat/Makefile:LDFLAGS+= -Wl,--rpath,${LOCALBASE}/lib audio/mpg321/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/mpiosh/Makefile:LDFLAGS+= -L${LOCALBASE}/lib ${ICONV_LIB} audio/muse/Makefile:LDFLAGS+= -lpthread -L${LOCALBASE}/lib -lintl audio/musicbox-tag-editor/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/musicpd/Makefile:LDFLAGS+= -L${LOCALBASE}/lib -L${LOCALBASE}/lib/sidplay/builders audio/normalize/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/ocp/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/openal/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/osalp/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/pd/Makefile:LDFLAGS+= -L${LOCALBASE}/lib -pthread audio/pianobar/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/pidgin-musictracker/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/playgsf/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/pocketsphinx/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/portaudio/Makefile:LDFLAGS+= -lpthread -L${LOCALBASE}/lib audio/pulseaudio/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/py-pyliblo/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/rosegarden/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/rubberband/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/scrobbler/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/sdl_mixer/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/sdl_sound/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/smasher/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/snd/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/sooperlooper/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/sound-juicer/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/soundtracker/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/sox/Makefile:LDFLAGS+= -lpthread -L${LOCALBASE}/lib audio/sphinx3/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/sphinxbase/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/streamripper/Makefile:LDFLAGS+= -Lcdk-${CDK_VERSION} -L${LOCALBASE}/lib audio/streamtranscoder/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/sweep/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/swhplugins/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/tagtool/Makefile:LDFLAGS+= -L${LOCALBASE}/lib -lpthread -logg -lm audio/terminatorx/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/timidity++/Makefile:LDFLAGS+= -L${LOCALBASE}/lib -Wl,--export-dynamic audio/umodplayer/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/umurmur/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/vorbis-tools/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/vorbisgain/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/whysynth/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/xhippo/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/xmixer/Makefile:LDFLAGS+= -L${LOCALBASE}/lib -lX11 audio/xmms-ahx/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/xmms-flac/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/xmms-wavpack/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/xmp/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/xsynth-dssi/Makefile:LDFLAGS+= -L${LOCALBASE}/lib audio/zinf/Makefile:LDFLAGS+= -lpthread -L${LOCALBASE}/lib -->8- Therefore, this is not uncommon to use LDFLAGS to add ${LOCALBASE}/lib to libraries search path. The comment #2 confirms above statement for some previously converted ports to USES+=localbase. Actually, the failures were indication of wrong proposal used by PR's submitter, but this didn's stop him to fix ports (i.e. adding localbase:ldflags instead of localbase), which were ok. Moreover, the importance of this proposal is not "Affects Only Me", but "Affects Some People" or even "Affects Many People". For example, the ports r423014 changes affected some my patches in following PRs, related to audio/pulseaudio: bug 210548 and bug 211684. If you look descriptions of LDFLAGS and LIBS for audio/pulseaudio port's configure script: -8<-- # cd /usr/ports/audio/pulseaudio # make extract # cd work/pulseaudio-8.0 # ./configure --help | grep -w -h1 -e LIBS -e LDFLAGS CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a nonstandard directory <lib dir> LIBS libraries to pass to the linker, e.g. -l<library> CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if -->8- Then you may understand, that LDFLAGS is proper place for -L flags. The assumption about LIBS for -L flags is wrong here, because USES+=localbase doesn't work after ports r423014 changes and requires to use USES+=localbase:ldflags instead. The more correct proposal, in my opinion, is to use LDFLAGS+=-L${LOCABASE}/lib in Mk/Uses/localbase.mk by implicit default, while proposing libs and ldflags arguments to add -L${LOCABASE}/lib for either case (e.g. possible usage of: USES+=localbase, USES+=localbase:ldflags, USES+=localbase:libs, USES+=localbase:ldflags,libs). I attached some variant of it, related to Mk/Uses/localbase.mk file. Since this PR already affected many ports, this may require either to revert committed changes and/or change concrete ports, which may require USES+=localbase:libs instead of USES+=localbase:ldflags (proposed implicit default, which used before this proposal).
(In reply to comment #18) > (proposed implicit default, which used before this proposal). (proposed explicit default, which used before this proposal).
(In reply to comment #18) > Moreover, the importance of this proposal is not "Affects Only Me", but > "Affects Some People" or even "Affects Many People". For example, the > ports r423014 changes affected some my patches in following PRs, related to > audio/pulseaudio: bug 210548 and bug 211684. I reverted USES+=localbase proposal in mentioned PRs to not depend on such unverified changes (i.e. which is POLA violation, based on changes for defaults).
(In reply to comment #20) > (i.e. which is POLA violation, based on changes for defaults). Maybe this is not POLA in its meaning, but ports r423014 changes for defaults might have description in port's CHANGES file, if you intended to propose new USES+=localbase usage.
Ports must be buildable while they are installed. That means the order of -L flags is important. It must always be -Lpath/in/workdir -L/usr/local/lib. If it's the other way around the linker may pick up installed libraries instead of freshly built ones. The typical linker command line is 'cc $upstream_LDFLAGS $LDFLAGS $upstream_LIBS $LIBS' where $upstream_LIBS may contain -Lpath/in/workdir. Therefore it is safest to add -L/usr/local/lib to LIBS and USES=localbase should do the safest thing by default. The reason more ports use LDFLAGS is because support for LIBS in bsd.port.mk is relatively recent. For pulseaudio I think the reason plain USES=localbase doesn't work is because CONFIGURE_ENV in the port Makefile overrides LIBS. Remove that and add 'LIBS+=-lm -lintl' below the CPPFLAGS+= line.
(In reply to comment #22) > Ports must be buildable while they are installed. That means the order of -L > flags is important. I aware, that such issue may exist, which may depend from concrete build system. (In reply to comment #22) > For pulseaudio I think the reason plain USES=localbase doesn't work is because > CONFIGURE_ENV in the port Makefile overrides LIBS. Remove that and add > 'LIBS+=-lm -lintl' below the CPPFLAGS+= line. Yes, the USES+=localbase after ports r423014 doesn't work, because of LIBS="-lm -lintl" define for CONFIGURE_ENV. If remove LIBS="-lm -lintl" from CONFIGURE_ENV and add LIBS+="-lm -lintl" to Makefile, it will work with new USES+=localbase, as well as without such changes (except for CPPFLAGS and LDFLAGS removal), but USES+=localbase:ldflags usage. Previously, it also worked with USES+=localbase, because of LDFLAGS+=-L${LOCALBASE}/lib defaults. Some excerpts for cases (based on audio/pulseadio v9.0): LIBS+=-L${LOCALBASE}/lib -lm -lintl -8<-- libtool: relink: cc -shared -fPIC -DPIC utils/.libs/libpulsedsp_la-padsp.o -Wl,-rpath -Wl,/usr/local/lib -Wl,-rpath -Wl,/usr/local/lib/pulseaudio ./.libs/libpulse.so -L/usr/local/lib /usr/ports/audio/pulseaudio/work/pulseaudio-9.0/src/.libs/libpulsecommon-9.0.so ./.libs/libpulsecommon-9.0.so -lX11-xcb -lX11 -lxcb -lICE -lSM -lXtst -ljson-c -lwrap -lsndfile -ldbus-1 /usr/local/lib/libgdbm.so -lexecinfo -lpthread -lrt -lm -lintl -O2 -fstack-protector -Wl,-z -Wl,nodelete -fstack-protector -Wl,-rpath -Wl,/usr/local/lib -Wl,-soname -Wl,libpulsedsp.so -o .libs/libpulsedsp.so -->8- LDFLAGS+=-L${LOCALBASE}/lib LIBS+=-lm -lintl -8<-- libtool: relink: cc -shared -fPIC -DPIC utils/.libs/libpulsedsp_la-padsp.o -Wl,-rpath -Wl,/usr/local/lib -Wl,-rpath -Wl,/usr/local/lib/pulseaudio -L/usr/local/lib ./.libs/libpulse.so /usr/ports/audio/pulseaudio/work/pulseaudio-9.0/src/.libs/libpulsecommon-9.0.so ./.libs/libpulsecommon-9.0.so -lX11-xcb -lX11 -lxcb -lICE -lSM -lXtst -ljson-c -lwrap -lsndfile -ldbus-1 /usr/local/lib/libgdbm.so -lexecinfo -lpthread -lrt -lm -lintl -O2 -fstack-protector -Wl,-z -Wl,nodelete -fstack-protector -Wl,-rpath -Wl,/usr/local/lib -Wl,-soname -Wl,libpulsedsp.so -o .libs/libpulsedsp.so -->8- As you may see, the place of -L/usr/local/lib (which is -L${LOCALBASE}/lib) doesn't matter in mentioned cases, because of ./.libs usage for *.so files (e.g. ./.libs/libpulse.so). The cause of comment #18 is your changes for defaults in Mk/Uses/localbase.mk file. If you proposed USES+=localbase:libs and didn't change defaults, then this might not happen (as well as USES+=localbase:ldflags, instead of USES+=localbase changes for other ports). I may adapt and use new USES+=localbase:ldflags instead, after ports r423014 changes, but I chose not to use it for currently proposed patches in PRs, where CPPFLAGS and LDFLAGS usage is fine already (according to `./configure --help` descriptions).
Comment on attachment 175352 [details] Proposed patch (since 423014 revision) (In reply to comment #18) > (e.g. possible usage of: USES+=localbase, USES+=localbase:ldflags, > USES+=localbase:libs, USES+=localbase:ldflags,libs) The "USES+=localbase:ldflags,libs" may be not practical. I just didn't want to contrapose LDFLAGS and LIBS to each other in description. I removed maintainer-approval request, because this is just variant of patch to support my opinion in comment #18, based on previous approach with using (committed) proposal in this PR.
(In reply to comment #23) > Some excerpts for cases (based on audio/pulseadio v9.0) Some other excerpts, without "relink" stage for cases: LIBS+=-L${LOCALBASE}/lib -lm -lintl -8<-- /bin/sh ../libtool --tag=CC --mode=link cc -std=gnu11 -D_THREAD_SAFE -O2 -pipe -DLIBICONV_PLUG -fstack-protector -fno-strict-aliasing -Wall -W -Wextra -Wno-long-long -Wno-overlength-strings -Wundef -Wformat=2 -Wsign-compare -Wformat-security -Wformat-nonliteral -Wold-style-definition -Wpointer-arith -Winit-self -Wdeclaration-after-statement -Wfloat-equal -Wmissing-prototypes -Wstrict-prototypes -Wredundant-decls -Wmissing-declarations -Wmissing-noreturn -Wshadow -Wendif-labels -Wcast-align -Wstrict-aliasing -Wwrite-strings -Wno-unused-parameter -ffast-math -fno-common -fdiagnostics-show-option -fdiagnostics-color=auto -Wl,-z,nodelete -avoid-version -disable-static -fstack-protector -o libpulsedsp.la -rpath /usr/local/lib/pulseaudio utils/libpulsedsp_la-padsp.lo -lpthread /usr/local/lib/libintl.so -Wl,-rpath -Wl,/usr/local/lib libpulse.la libpulsecommon-9.0.la -lgdbm -lexecinfo -lpthread -lrt -L/usr/local/lib -lm -lintl libtool: link: cc -shared -fPIC -DPIC utils/.libs/libpulsedsp_la-padsp.o -Wl,-rpath -Wl,/usr/ports/audio/pulseaudio/work/pulseaudio-9.0/src/.libs -Wl,-rpath -Wl,/usr/local/lib -Wl,-rpath -Wl,/usr/local/lib -Wl,-rpath -Wl,/usr/local/lib/pulseaudio ./.libs/libpulse.so -L/usr/local/lib /usr/ports/audio/pulseaudio/work/pulseaudio-9.0/src/.libs/libpulsecommon-9.0.so ./.libs/libpulsecommon-9.0.so -lX11-xcb -lX11 -lxcb -lICE -lSM -lXtst -ljson-c -lwrap -lsndfile -ldbus-1 /usr/local/lib/libgdbm.so -lexecinfo -lpthread -lrt -lm -lintl -O2 -fstack-protector -Wl,-z -Wl,nodelete -fstack-protector -Wl,-rpath -Wl,/usr/local/lib -Wl,-soname -Wl,libpulsedsp.so -o .libs/libpulsedsp.so -->8- LDFLAGS+=-L${LOCALBASE}/lib LIBS+=-lm -lintl -8<-- /bin/sh ../libtool --tag=CC --mode=link cc -std=gnu11 -D_THREAD_SAFE -O2 -pipe -DLIBICONV_PLUG -fstack-protector -fno-strict-aliasing -Wall -W -Wextra -Wno-long-long -Wno-overlength-strings -Wundef -Wformat=2 -Wsign-compare -Wformat-security -Wformat-nonliteral -Wold-style-definition -Wpointer-arith -Winit-self -Wdeclaration-after-statement -Wfloat-equal -Wmissing-prototypes -Wstrict-prototypes -Wredundant-decls -Wmissing-declarations -Wmissing-noreturn -Wshadow -Wendif-labels -Wcast-align -Wstrict-aliasing -Wwrite-strings -Wno-unused-parameter -ffast-math -fno-common -fdiagnostics-show-option -fdiagnostics-color=auto -Wl,-z,nodelete -avoid-version -disable-static -L/usr/local/lib -fstack-protector -o libpulsedsp.la -rpath /usr/local/lib/pulseaudio utils/libpulsedsp_la-padsp.lo -lpthread /usr/local/lib/libintl.so -Wl,-rpath -Wl,/usr/local/lib libpulse.la libpulsecommon-9.0.la -lgdbm -lexecinfo -lpthread -lrt -lm -lintl libtool: link: cc -shared -fPIC -DPIC utils/.libs/libpulsedsp_la-padsp.o -Wl,-rpath -Wl,/usr/ports/audio/pulseaudio/work/pulseaudio-9.0/src/.libs -Wl,-rpath -Wl,/usr/local/lib -Wl,-rpath -Wl,/usr/local/lib -Wl,-rpath -Wl,/usr/local/lib/pulseaudio -L/usr/local/lib ./.libs/libpulse.so /usr/ports/audio/pulseaudio/work/pulseaudio-9.0/src/.libs/libpulsecommon-9.0.so ./.libs/libpulsecommon-9.0.so -lX11-xcb -lX11 -lxcb -lICE -lSM -lXtst -ljson-c -lwrap -lsndfile -ldbus-1 /usr/local/lib/libgdbm.so -lexecinfo -lpthread -lrt -lm -lintl -O2 -fstack-protector -Wl,-z -Wl,nodelete -fstack-protector -Wl,-rpath -Wl,/usr/local/lib -Wl,-soname -Wl,libpulsedsp.so -o .libs/libpulsedsp.so -->8- If -L search path is for -l library, then this is not an issue for "libpulse.la libpulsecommon-9.0.la" files after -L/usr/local/lib. Also, the audio/pulseaudio port didn't install *.la files to /usr/local/lib directory to possible cause this, otherwise.
(In reply to comment #23) > If -L search path is for -l library, then this is not an issue for > "libpulse.la libpulsecommon-9.0.la" files after -L/usr/local/lib. Checked with empty (or with random contents) libpulse.la file in /usr/local/lib. This is not an issue. (In reply to comment #22) > The reason more ports use LDFLAGS is because support for LIBS in bsd.port.mk > is relatively recent. I think, this depends from concrete build system. See comment #18 for description of LDFLAGS and LIBS, for example.
(In reply to lightside from comment #23) > As you may see, the place of -L/usr/local/lib (which is -L${LOCALBASE}/lib) > doesn't matter in mentioned cases, because of ./.libs usage for *.so files > (e.g. ./.libs/libpulse.so). It's only using .so files here due to patching done by USES=libtool. In relink mode unpatched libtool uses "-Lpath/in/stagedir -lpulse". If you replace the .so files on the command line with something like that you can see that -L/usr/local/lib appears too early in the LDFLAGS case. Here it also appears too early in the LIBS case (before libpulsecommon-9.0.so) because libtool does all sorts of silly things (which is why USES=libtool patches it). > The cause of comment #18 is your changes for defaults in Mk/Uses/localbase.mk > file. If you proposed USES+=localbase:libs and didn't change defaults, then > this might not happen (as well as USES+=localbase:ldflags, instead of > USES+=localbase changes for other ports). LDFLAGS often works in clean test environments like poudriere so nobody would use localbase:libs. There would always have to be some poor user running into problems trying to build the port while an older version is installed and filing a bug for a maintainer to consider localbase:libs. Maintainers should try LIBS first and only use LDFLAGS if LIBS isn't supported by the build system. Letting USES=localbase set LIBS by default accomplishes that. > I may adapt and use new USES+=localbase:ldflags instead, after ports r423014 > changes, but I chose not to use it for currently proposed patches in PRs, > where CPPFLAGS and LDFLAGS usage is fine already (according to `./configure > --help` descriptions). You should take LIBS out of CONFIGURE_ENV and use regular USES+=localbase. Don't trust --help descriptions. The LDFLAGS description is wrong for an unpatched libtool. What matters is the code. And the code says LIBS is better than LDFLAGS for -L flags so that is what we use. Ports should use LIBS for both -L and -l flags except when the build system doesn't support LIBS.
(In reply to comment #27) > You should take LIBS out of CONFIGURE_ENV and use regular USES+=localbase. > Don't trust --help descriptions. The LDFLAGS description is wrong for an > unpatched libtool. What matters is the code. And the code says LIBS is better > than LDFLAGS for -L flags so that is what we use. Ports should use LIBS for > both -L and -l flags except when the build system doesn't support LIBS. Thanks for suggestion, but I disagree, if concrete build system is ok for LDFLAGS usage (with or without patched libtool). This is way better, than custom patches for LIBS, because of some (strong) opinion about this. The LDFLAGS and LIBS have their intended usage and shouldn't be opposite to each other, in my opinion (and based on some converted ports from USES+=localbase to USES+=localbase:ldflags).
Comment on attachment 175352 [details] Proposed patch (since 423014 revision) (In reply to comment #28) > This is way better, than custom patches for LIBS Need to note, that sometimes this is necessary, even for some reordering of linked libraries (like in devel/tig case, but some proposed patch fixes this in bug 211850). May be even patch(es) for LDFLAGS is possible, while LIBS is better to use instead. This depends from concrete case and how concrete build system was developed. This is different from opinion about conversion of LDFLAGS cases to LIBS in all costs. I think, no reaction from portmgr(s) speaks for itself. I did my own conclusions and do not force you to think otherwise. Thanks for attention and explanation about your position. I obsoleted attachment #175352 [details], because no point to propose it, when PR is closed (and no other people to support it).