Skip to content
Permalink
master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
executable file 93 lines (68 sloc) 1.86 KB
#! /bin/bash
# case 1:
#
# main -----------------> libcommon
# \--- libmiddle ---> libcommon
#
# 1) update libcommon
# 2) rebuild libmiddle
#
# result: libmiddle compiled against new API, but calls old API
set -e
# install libcommon API 1
cat >libcommon.c <<"_EOF_"
#include <stdio.h>
void libcommon_test(char *caller) {
printf("libcommon_test V1 called by %s\n",caller);
}
_EOF_
cat >libcommon.h <<'_EOF_'
#define API_VERSION "1"
_EOF_
gcc -shared -fPIC -Wl,-soname=libcommon-1.so -o libcommon-1.so libcommon.c
ln -sf libcommon-1.so libcommon.so
# install libmiddle
cat >libmiddle.c <<_EOF_
#include <stdio.h>
#include "libcommon.h"
extern void libcommon_test(char *caller);
void libmiddle_test(char *caller) {
printf("libmiddle_test called by %s\n",caller);
libcommon_test("libmiddle expecting V" API_VERSION " API");
}
_EOF_
gcc -shared -fPIC -Wl,-soname=libmiddle-1.so -o libmiddle-1.so libmiddle.c
ln -sf libmiddle-1.so libmiddle.so
# install main
cat >main.c <<_EOF_
#include <stdio.h>
#include "libcommon.h"
extern void libcommon_test(char *caller);
extern void libmiddle_test(char *caller);
int main() {
libmiddle_test("main");
libcommon_test("main expecting V" API_VERSION " API");
}
_EOF_
gcc -o main -Wl,-rpath=. -lmiddle -L. -lcommon main.c
echo "########### run main"
./main
echo "########### update libcommon"
cat >libcommon.c <<"_EOF_"
#include <stdio.h>
void libcommon_test(char *caller) {
printf("libcommon_test V2 called by %s\n",caller);
}
_EOF_
cat >libcommon.h <<'_EOF_'
#define API_VERSION "2"
_EOF_
gcc -shared -fPIC -Wl,-soname=libcommon-2.so -o libcommon-2.so libcommon.c
ln -sf libcommon-2.so libcommon.so
echo "########### run main"
./main
echo "########### rebuild libmiddle"
gcc -shared -fPIC -Wl,-soname=libmiddle-1.so -o libmiddle-1.so libmiddle.c
ln -sf libmiddle-1.so libmiddle.so
echo "########### run main"
./main