72 строки
2.9 KiB
Bash
Исполняемый файл
72 строки
2.9 KiB
Bash
Исполняемый файл
#!/bin/bash
|
|
|
|
# Script to extract exported symbols and rename them
|
|
# to avoid clashing with other older libproj
|
|
#
|
|
# This is done in provision for the integration of PROJ master with GDAL. GDAL is
|
|
# a complex library that links with many libraries, a number of them linking with
|
|
# PROJ. However in the continuous integration setups used by GDAL, it would be
|
|
# impractical to recompile all those libraries that use the system libproj (4.X or 5.X)
|
|
# that comes with the distribution. Linking GDAL directly against PROJ master
|
|
# and this system libproj with potential different ABI is prone to clash/crash
|
|
# (we experimented that painfully in GDAL with its internal libtiff 4.X copy whereas
|
|
# systems shipped with libtiff 3.X)
|
|
# Hence this solution to rename the symbols of PROJ master so that PROJ master
|
|
# can be used by GDAL without conflicting with the system PROJ.
|
|
# The renaming only happens if -DPROJ_RENAME_SYMBOLS is passed in CFLAGS and CXXFLAGS.
|
|
#
|
|
# Note: we potentially should do the same for C++ symbols, but that is not needed
|
|
# for now, and we would just set the NS_PROJ existing macro to change the C++ base
|
|
# namespace which defaults to osgeo::proj currently.
|
|
|
|
# To be run from a 'build' subdir after running configure
|
|
|
|
PROJ_ROOT=$(cd $(dirname ${BASH_SOURCE[0]})/..; pwd)
|
|
|
|
rm -rf tmp_alias
|
|
mkdir tmp_alias
|
|
for i in ${PROJ_ROOT}/src/*.c; do
|
|
echo $i
|
|
(cd tmp_alias; gcc -fvisibility=hidden ${i} -I../src -I${PROJ_ROOT}/src -I${PROJ_ROOT}/include -fPIC -c)
|
|
done
|
|
for i in ${PROJ_ROOT}/src/*.cpp ${PROJ_ROOT}/src/iso19111/*.cpp; do
|
|
echo $i
|
|
(cd tmp_alias; g++ -fvisibility=hidden -std=c++11 ${i} -I../src -I${PROJ_ROOT}/src -I${PROJ_ROOT}/include -fPIC -c)
|
|
done
|
|
|
|
(cd tmp_alias; g++ -fvisibility=hidden -std=c++11 *.o -shared -o libproj.so)
|
|
|
|
OUT_FILE=proj_symbol_rename.h
|
|
|
|
rm $OUT_FILE 2>/dev/null
|
|
|
|
echo "/* This is a generated file by create_proj_symbol_rename.sh. *DO NOT EDIT MANUALLY !* */" >> $OUT_FILE
|
|
echo "#ifndef PROJ_SYMBOL_RENAME_H" >> $OUT_FILE
|
|
echo "#define PROJ_SYMBOL_RENAME_H" >> $OUT_FILE
|
|
|
|
symbol_list=$(objdump -t tmp_alias/libproj.so | grep " g " | grep .text | awk '{print $6}' | grep -v -e _Z | sort)
|
|
for symbol in $symbol_list
|
|
do
|
|
echo "#define $symbol internal_$symbol" >> $OUT_FILE
|
|
done
|
|
|
|
rodata_symbol_list=$(objdump -t tmp_alias/libproj.so | grep " g O \\.rodata" | awk '{print $6}')
|
|
for symbol in $rodata_symbol_list
|
|
do
|
|
echo "#define $symbol internal_$symbol" >> $OUT_FILE
|
|
done
|
|
|
|
#data_symbol_list=$(objdump -t tmp_alias/libproj.so | grep "\\.data" | grep -v -e __dso_handle -e __TMC_END__ | awk '{print $6}' | grep -v "\\."| grep -v _Z)
|
|
#for symbol in $data_symbol_list
|
|
#do
|
|
# echo "#define $symbol internal_$symbol" >> $OUT_FILE
|
|
#done
|
|
|
|
bss_symbol_list=$(objdump -t tmp_alias/libproj.so | grep "g O \\.bss" | awk '{print $6}' | grep -v "\\."| grep -v _Z)
|
|
for symbol in $bss_symbol_list
|
|
do
|
|
echo "#define $symbol internal_$symbol" >> $OUT_FILE
|
|
done
|
|
|
|
echo "#endif /* PROJ_SYMBOL_RENAME_H */" >> $OUT_FILE
|