--- /dev/null
+
+default: all
+
+appa1: app.o
+ gcc -o appa1 app.o ../liba1/liba.so
+
+all: appa1
+
+clean:
+ rm -f *.o *.so* appa1
+
--- /dev/null
+#include <stdio.h>
+#include <stdlib.h>
+#include "../liba1/liba.h"
+
+int main(int argc, const char *argv[])
+{
+ int ret;
+
+ printf("appa1: ...\n");
+ ret = libafunc1(1);
+ printf("appa1: ... %d\n", ret);
+
+ return 0;
+}
+
--- /dev/null
+
+default: all
+
+appa2: app.o
+ gcc -o appa2 app.o ../liba2/liba.so
+
+all: appa2
+
+clean:
+ rm -f *.o *.so* appa2
+
--- /dev/null
+#include <stdio.h>
+#include <stdlib.h>
+#include "../liba2/liba.h"
+
+int main(int argc, const char *argv[])
+{
+ int ret;
+
+ printf("appa2: ...\n");
+ ret = libafunc1(2);
+ printf("appa2: ... %d\n", ret);
+
+ printf("appa2: ...\n");
+ ret = libafunc2(2);
+ printf("appa2: ... %d\n", ret);
+
+ return 0;
+}
+
--- /dev/null
+
+default: all
+
+appa2b1: app.o
+ gcc -o appa2b1 app.o ../liba2/liba.so ../libb1/libb.so -Wl,-rpath-link,../liba1/
+
+all: appa2b1
+
+clean:
+ rm -f *.o *.so* appa2b1
+
--- /dev/null
+#include <stdio.h>
+#include <stdlib.h>
+#include "../liba2/liba.h"
+#include "../libb1/libb.h"
+
+int main(int argc, const char *argv[])
+{
+ int ret;
+
+ printf("appa2: ...\n");
+ ret = libafunc1(21);
+ printf("appa2: ... %d\n", ret);
+
+ printf("appa2: ...\n");
+ ret = libafunc2(21);
+ printf("appa2: ... %d\n", ret);
+
+ printf("appa2: ...\n");
+ ret = libbfunc1(21);
+ printf("appa2: ... %d\n", ret);
+
+ return 0;
+}
+
--- /dev/null
+
+default: all
+
+CFLAGS=-fPIC
+
+liba.so.1: liba.o
+ gcc -shared -o liba.so.1 -Wl,-soname=liba.so.1 liba.o
+
+liba.so: liba.so.1
+ rm -f liba.so
+ ln -s liba.so.1 liba.so
+
+all: liba.so
+
+clean:
+ rm -f *.o *.so*
+
--- /dev/null
+#include <stdio.h>
+#include <stdlib.h>
+#include "liba.h"
+
+int libafunc1(int arg)
+{
+ int ret = 0;
+ printf("liba1: libafunc1(%d) = %d\n", arg, ret);
+ return ret;
+}
+
--- /dev/null
+int libafunc1(int arg);
--- /dev/null
+
+default: all
+
+CFLAGS=-fPIC
+
+liba2-compat1.so: liba2-compat1.o
+ gcc -shared -o liba2-compat1.so -Wl,-soname=liba.so.1 liba2-compat1.o ../liba2/liba.so
+
+liba.so.1: liba2-compat1.so
+ rm -f liba.so.1
+ ln -s liba2-compat1.so liba.so.1
+
+all: liba.so.1
+
+clean:
+ rm -f *.o *.so*
+
--- /dev/null
+#include <stdio.h>
+#include <stdlib.h>
+#include "../liba2/liba.h"
+
+#undef libafunc1
+int libafunc1(int arg)
+{
+ int ret = 0;
+ int retc;
+ printf("liba2-compat1: libafunc1(%d) ...\n", arg);
+ retc = _libafunc1(arg, "liba2-compat1-location");
+ printf("liba2-compat1: ... %d => %d\n", retc, ret);
+ return ret;
+}
--- /dev/null
+
+default: all
+
+CFLAGS=-fPIC
+
+liba.so.2: liba.o
+ gcc -shared -o liba.so.2 -Wl,-soname=liba.so.2 liba.o
+
+liba.so: liba.so.2
+ rm -f liba.so
+ ln -s liba.so.2 liba.so
+
+all: liba.so
+
+clean:
+ rm -f *.o *.so*
+
--- /dev/null
+#include <stdio.h>
+#include <stdlib.h>
+#include "liba.h"
+
+#undef libafunc1
+int libafunc1(int arg)
+{
+ int ret = 0;
+ int retc;
+ printf("liba2-compat1: libafunc1(%d) ...\n", arg);
+ retc = _libafunc1(arg, "liba2-compat1-location");
+ printf("liba2-compat1: ... %d => %d\n", retc, ret);
+ return ret;
+}
--- /dev/null
+#include <stdio.h>
+#include <stdlib.h>
+#include "liba.h"
+
+int _libafunc1(int arg, const char *location)
+{
+ int ret = -1;
+ printf("liba2: _libafunc1(%d, %s) = %d\n", arg, location, ret);
+ return ret;
+}
+
+int libafunc2(int arg)
+{
+ int ret = 0;
+ printf("liba2: libafunc2(%d) = %d\n", arg, ret);
+ return ret;
+}
+
--- /dev/null
+
+#ifndef __STRING
+#define __STRING(x) #x
+#endif
+
+#ifndef __STRINGSTRING
+#define __STRINGSTRING(x) __STRING(x)
+#endif
+
+#ifndef __LINESTR__
+#define __LINESTR__ __STRINGSTRING(__LINE__)
+#endif
+
+#ifndef __location__
+#define __location__ __FILE__ ":" __LINESTR__
+#endif
+
+#define libafunc1(arg) _libafunc1(arg, __location__)
+
+int _libafunc1(int arg, const char *location);
+int libafunc2(int arg);
+
--- /dev/null
+
+default: all
+
+CFLAGS=-fPIC
+
+libb.so.1: libb.o
+ gcc -shared -o libb.so.1 -Wl,-soname=libb.so.1 libb.o ../liba1/liba.so
+
+libb.so: libb.so.1
+ rm -f libb.so
+ ln -s libb.so.1 libb.so
+
+all: libb.so
+
+clean:
+ rm -f *.o *.so*
+
--- /dev/null
+#include <stdio.h>
+#include <stdlib.h>
+#include "libb.h"
+#include "../liba1/liba.h"
+
+int libbfunc1(int arg)
+{
+ int ret = 0;
+ printf("libb1: libbfunc1(%d) ...\n", arg);
+ ret = libafunc1(arg);
+ printf("libb1: ... %d\n", ret);
+ return ret;
+}
+
--- /dev/null
+int libbfunc1(int arg);