From 7383214f317653f2313cb882bca8a0f8960435f2 Mon Sep 17 00:00:00 2001
From: midipix <writeonce@midipix.org>
Date: Thu, 30 Jun 2016 02:47:43 -0400
Subject: link mode: append '/.libs' to -L arguments as needed.

---
 src/logic/slbt_exec_link.c | 28 +++++++++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)

(limited to 'src/logic')

diff --git a/src/logic/slbt_exec_link.c b/src/logic/slbt_exec_link.c
index cdda42b..32da53a 100644
--- a/src/logic/slbt_exec_link.c
+++ b/src/logic/slbt_exec_link.c
@@ -244,6 +244,7 @@ static int slbt_exec_link_adjust_argument_vector(
 {
 	char ** carg;
 	char ** aarg;
+	char *	ldir;
 	char *	slash;
 	char *	mark;
 	char *	darg;
@@ -259,6 +260,7 @@ static int slbt_exec_link_adjust_argument_vector(
 	char	rpathlnk[PATH_MAX];
 	bool	fwholearchive = false;
 	struct	stat st;
+	int	fd;
 
 	for (argc=0,carg=ectx->cargv; *carg; carg++)
 		argc++;
@@ -294,7 +296,31 @@ static int slbt_exec_link_adjust_argument_vector(
 		}
 
 		/* argument translation */
-		if (**carg == '-') {
+		mark = *carg;
+
+		if ((mark[0] == '-') && (mark[1] == 'L')) {
+			if (mark[2]) {
+				ldir = &mark[2];
+			} else {
+				*aarg++ = *carg++;
+				ldir    = *carg;
+			}
+
+			mark = ldir + strlen(ldir);
+
+			if (mark[-1] == '/')
+				strcpy(mark,".libs");
+			else
+				strcpy(mark,"/.libs");
+
+			if ((fd = open(ldir,O_DIRECTORY,0)) < 0)
+				*mark = 0;
+			else
+				close(fd);
+
+			*aarg++ = *carg++;
+
+		} else if (**carg == '-') {
 			*aarg++ = *carg++;
 
 		} else if (!(dot = strrchr(*carg,'.'))) {
-- 
cgit v1.2.3