2018-06-05 17:43:10 +00:00
|
|
|
|
#!/usr/bin/env bash
|
2015-01-08 21:41:35 +00:00
|
|
|
|
|
2018-06-05 17:43:10 +00:00
|
|
|
|
set -e
|
2018-06-04 20:26:17 +00:00
|
|
|
|
#set -x
|
2018-06-05 17:43:10 +00:00
|
|
|
|
#echo "Args: $*"; env | sort
|
2018-05-28 22:17:10 +00:00
|
|
|
|
|
2015-01-08 21:41:35 +00:00
|
|
|
|
# Этот скрипт собирает все заголовочные файлы, нужные для компиляции некоторого translation unit-а
|
|
|
|
|
# и копирует их с сохранением путей в директорию DST.
|
|
|
|
|
# Это затем может быть использовано, чтобы скомпилировать translation unit на другом сервере,
|
|
|
|
|
# используя ровно такой же набор заголовочных файлов.
|
2015-01-11 00:57:21 +00:00
|
|
|
|
#
|
|
|
|
|
# Требуется clang, желательно наиболее свежий (trunk).
|
|
|
|
|
#
|
|
|
|
|
# Используется при сборке пакетов.
|
2018-04-01 12:33:39 +00:00
|
|
|
|
# Заголовочные файлы записываются в пакет clickhouse-common, в директорию /usr/share/clickhouse/headers.
|
2015-01-11 00:57:21 +00:00
|
|
|
|
#
|
|
|
|
|
# Если вы хотите установить их самостоятельно, без сборки пакета,
|
|
|
|
|
# чтобы clickhouse-server видел их там, где ожидается, выполните:
|
|
|
|
|
#
|
|
|
|
|
# sudo ./copy_headers.sh . /usr/share/clickhouse/headers/
|
2015-01-08 21:41:35 +00:00
|
|
|
|
|
2015-01-08 22:10:30 +00:00
|
|
|
|
SOURCE_PATH=${1:-.}
|
2017-09-17 20:22:39 +00:00
|
|
|
|
DST=${2:-$SOURCE_PATH/../headers}
|
2018-05-25 18:13:48 +00:00
|
|
|
|
BUILD_PATH=${BUILD_PATH=${3:-$SOURCE_PATH/build}}
|
2015-01-08 21:41:35 +00:00
|
|
|
|
|
2015-01-15 20:46:21 +00:00
|
|
|
|
PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:$PATH"
|
|
|
|
|
|
2017-07-14 14:36:26 +00:00
|
|
|
|
if [[ -z $CLANG ]]; then
|
|
|
|
|
CLANG="clang"
|
|
|
|
|
fi
|
|
|
|
|
|
2017-09-17 20:22:39 +00:00
|
|
|
|
START_HEADERS=$(echo \
|
|
|
|
|
$BUILD_PATH/dbms/src/Common/config_version.h \
|
|
|
|
|
$SOURCE_PATH/dbms/src/Interpreters/SpecializedAggregator.h \
|
|
|
|
|
$SOURCE_PATH/dbms/src/AggregateFunctions/AggregateFunction*.h)
|
|
|
|
|
|
2018-05-25 18:13:48 +00:00
|
|
|
|
for header in $START_HEADERS; do
|
|
|
|
|
START_HEADERS_INCLUDE+="-include $header "
|
|
|
|
|
done
|
|
|
|
|
|
2015-02-05 00:33:58 +00:00
|
|
|
|
# Опция -mcx16 для того, чтобы выбиралось больше заголовочных файлов (с запасом).
|
2017-11-13 19:19:31 +00:00
|
|
|
|
# The latter options are the same that are added while building packages.
|
2015-01-19 07:25:02 +00:00
|
|
|
|
|
2018-05-25 18:13:48 +00:00
|
|
|
|
# TODO: Does not work on macos:
|
2017-12-11 18:48:05 +00:00
|
|
|
|
GCC_ROOT=`$CLANG -v 2>&1 | grep "Selected GCC installation"| sed -n -e 's/^.*: //p'`
|
|
|
|
|
|
2017-12-01 18:58:18 +00:00
|
|
|
|
for src_file in $(echo | $CLANG -M -xc++ -std=c++1z -Wall -Werror -msse4 -mcx16 -mpopcnt -O3 -g -fPIC -fstack-protector -D_FORTIFY_SOURCE=2 \
|
2017-12-11 18:48:05 +00:00
|
|
|
|
-I $GCC_ROOT/include \
|
|
|
|
|
-I $GCC_ROOT/include-fixed \
|
2017-09-17 20:22:39 +00:00
|
|
|
|
$(cat "$BUILD_PATH/include_directories.txt") \
|
2018-05-25 18:13:48 +00:00
|
|
|
|
$START_HEADERS_INCLUDE \
|
2017-09-17 20:22:39 +00:00
|
|
|
|
- |
|
2017-04-05 11:52:23 +00:00
|
|
|
|
tr -d '\\' |
|
2018-06-05 17:43:10 +00:00
|
|
|
|
sed --posix -E -e 's/^-\.o://');
|
2015-01-08 21:41:35 +00:00
|
|
|
|
do
|
2017-04-05 11:57:24 +00:00
|
|
|
|
dst_file=$src_file;
|
2018-06-05 17:43:10 +00:00
|
|
|
|
[ -n $BUILD_PATH ] && dst_file=$(echo $dst_file | sed --posix -E -e "s!^$BUILD_PATH!!")
|
|
|
|
|
[ -n $DESTDIR ] && dst_file=$(echo $dst_file | sed --posix -E -e "s!^$DESTDIR!!")
|
|
|
|
|
dst_file=$(echo $dst_file | sed --posix -E -e 's/build\///') # for simplicity reasons, will put generated headers near the rest.
|
|
|
|
|
mkdir -p "$DST/$(echo $dst_file | sed --posix -E -e 's/\/[^/]*$/\//')";
|
2017-04-05 11:52:23 +00:00
|
|
|
|
cp "$src_file" "$DST/$dst_file";
|
2015-01-08 21:41:35 +00:00
|
|
|
|
done
|
2015-01-23 20:03:22 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Копируем больше заголовочных файлов с интринсиками, так как на серверах, куда будут устанавливаться
|
|
|
|
|
# заголовочные файлы, будет использоваться опция -march=native.
|
|
|
|
|
|
2017-12-19 13:49:17 +00:00
|
|
|
|
for src_file in $(ls -1 $($CLANG -v -xc++ - <<<'' 2>&1 | grep '^ /' | grep 'include' | grep -E '/lib/clang/|/include/clang/')/*.h | grep -vE 'arm|altivec|Intrin');
|
2015-01-23 20:03:22 +00:00
|
|
|
|
do
|
2018-05-24 12:40:02 +00:00
|
|
|
|
dst_file=$src_file;
|
2018-06-05 17:43:10 +00:00
|
|
|
|
[ -n $BUILD_PATH ] && dst_file=$(echo $dst_file | sed --posix -E -e "s!^$BUILD_PATH!!")
|
|
|
|
|
[ -n $DESTDIR ] && dst_file=$(echo $dst_file | sed --posix -E -e "s!^$DESTDIR!!")
|
|
|
|
|
mkdir -p "$DST/$(echo $dst_file | sed --posix -E -e 's/\/[^/]*$/\//')";
|
2018-05-24 12:40:02 +00:00
|
|
|
|
cp "$src_file" "$DST/$dst_file";
|
2017-12-19 13:49:17 +00:00
|
|
|
|
done
|
|
|
|
|
|
2018-06-05 17:43:10 +00:00
|
|
|
|
if [ -d "$SOURCE_PATH/contrib/boost/libs/smart_ptr/include/boost/smart_ptr/detail" ]; then
|
|
|
|
|
# Even more platform-specific headers
|
|
|
|
|
for src_file in $(ls -1 $SOURCE_PATH/contrib/boost/libs/smart_ptr/include/boost/smart_ptr/detail/*);
|
|
|
|
|
do
|
|
|
|
|
dst_file=$src_file;
|
|
|
|
|
[ -n $BUILD_PATH ] && dst_file=$(echo $dst_file | sed --posix -E -e "s!^$BUILD_PATH!!")
|
|
|
|
|
[ -n $DESTDIR ] && dst_file=$(echo $dst_file | sed --posix -E -e "s!^$DESTDIR!!")
|
|
|
|
|
mkdir -p "$DST/$(echo $dst_file | sed --posix -E -e 's/\/[^/]*$/\//')";
|
|
|
|
|
cp "$src_file" "$DST/$dst_file";
|
|
|
|
|
done
|
|
|
|
|
fi
|
2018-03-02 20:01:54 +00:00
|
|
|
|
|
2018-06-05 17:43:10 +00:00
|
|
|
|
if [ -d "$SOURCE_PATH/contrib/boost/boost/smart_ptr/detail" ]; then
|
|
|
|
|
for src_file in $(ls -1 $SOURCE_PATH/contrib/boost/boost/smart_ptr/detail/*);
|
|
|
|
|
do
|
|
|
|
|
dst_file=$src_file;
|
|
|
|
|
[ -n $BUILD_PATH ] && dst_file=$(echo $dst_file | sed --posix -E -e "s!^$BUILD_PATH!!")
|
|
|
|
|
[ -n $DESTDIR ] && dst_file=$(echo $dst_file | sed --posix -E -e "s!^$DESTDIR!!")
|
|
|
|
|
mkdir -p "$DST/$(echo $dst_file | sed --posix -E -e 's/\/[^/]*$/\//')";
|
|
|
|
|
cp "$src_file" "$DST/$dst_file";
|
|
|
|
|
done
|
|
|
|
|
fi
|