静态编译libpq,libffi参考
Closed this issue · 1 comments
jingjingxyk commented
function install_pgsql(Preprocessor $p)
{
$p->addLibrary(
(new Library('pgsql'))
->withHomePage('https://www.postgresql.org/')
->withLicense('https://www.postgresql.org/about/licence/', Library::LICENSE_SPEC)
->withUrl('https://ftp.postgresql.org/pub/source/v15.1/postgresql-15.1.tar.gz')
//https://www.postgresql.org/docs/devel/installation.html
//https://www.postgresql.org/docs/devel/install-make.html#INSTALL-PROCEDURE-MAKE
->withManual('https://www.postgresql.org/docs/')
->withCleanBuildDirectory()
->withScriptBeforeConfigure(
'
test -d /usr/pgsql && rm -rf /usr/pgsql
'
)
->withConfigure(
'
./configure --help
sed -i.backup "s/invokes exit\'; exit 1;/invokes exit\';/" src/interfaces/libpq/Makefile
# 替换指定行内容
sed -i.backup "102c all: all-lib" src/interfaces/libpq/Makefile
# export CPPFLAGS="-static -fPIE -fPIC -O2 -Wall "
# export CFLAGS="-static -fPIE -fPIC -O2 -Wall "
export CPPFLAGS=$(pkg-config --cflags --static icu-uc icu-io icu-i18n readline libxml-2.0)
export LIBS=$(pkg-config --libs --static icu-uc icu-io icu-i18n readline libxml-2.0)
./configure --prefix=/usr/pgsql \
--enable-coverage=no \
--with-ssl=openssl \
--with-readline \
--with-icu \
--without-ldap \
--with-libxml \
--with-libxslt \
--with-includes="/usr/openssl/include/:/usr/libxml2/include/:/usr/libxslt/include:/usr/readline/include/readline:/usr/icu/include:/usr/zlib/include:/usr/include" \
--with-libraries="/usr/openssl/lib:/usr/libxml2/lib/:/usr/libxslt/lib/:/usr/readline/lib:/usr/icu/lib:/usr/zlib/lib:/usr/lib"
make -C src/include install
result_code=$?
[[ $result_code -ne 0 ]] && echo "[make FAILURE]" && exit $result_code;
make -C src/bin/pg_config install
result_code=$?
[[ $result_code -ne 0 ]] && echo "[make FAILURE]" && exit $result_code;
make -C src/common -j $cpu_nums all
make -C src/common install
result_code=$?
[[ $result_code -ne 0 ]] && echo "[make FAILURE]" && exit $result_code;
make -C src/port -j $cpu_nums all
make -C src/port install
result_code=$?
[[ $result_code -ne 0 ]] && echo "[make FAILURE]" && exit $result_code;
make -C src/backend/libpq -j $cpu_nums all
make -C src/backend/libpq install
result_code=$?
[[ $result_code -ne 0 ]] && echo "[make FAILURE]" && exit $result_code;
make -C src/interfaces/ecpg -j $cpu_nums all-pgtypeslib-recurse all-ecpglib-recurse all-compatlib-recurse all-preproc-recurse
make -C src/interfaces/ecpg install-pgtypeslib-recurse install-ecpglib-recurse install-compatlib-recurse install-preproc-recurse
result_code=$?
[[ $result_code -ne 0 ]] && echo "[make FAILURE]" && exit $result_code;
# 静态编译 src/interfaces/libpq/Makefile 有静态配置 参考: all-static-lib
make -C src/interfaces/libpq -j $cpu_nums # soname=true
make -C src/interfaces/libpq install
result_code=$?
[[ $result_code -ne 0 ]] && echo "[make FAILURE]" && exit $result_code;
rm -rf /usr/pgsql/lib/*.so.*
rm -rf /usr/pgsql/lib/*.so
return 0
'
)
->withPkgName('libpq')
->withPkgConfig('/usr/pgsql/lib/pkgconfig')
->withLdflags('-L/usr/pgsql/lib/')
->withBinPath('/usr/pgsql/bin/')
);
}
静态编译libffi
function install_libffi($p)
{
$p->addLibrary(
(new Library('libffi'))
->withHomePage('https://sourceware.org/libffi/')
->withLicense('http://github.com/libffi/libffi/blob/master/LICENSE', Library::LICENSE_BSD)
->withUrl('https://github.com/libffi/libffi/releases/download/v3.4.4/libffi-3.4.4.tar.gz')
->withFile('libffi-3.4.4.tar.gz')
->withPrefix('/usr/libffi/')
->withScriptBeforeConfigure(
'test -d /usr/libffi && rm -rf /usr/libffi'
)
->withConfigure(
'
./configure --help ;
./configure \
--prefix=/usr/libffi \
--enable-shared=no \
--enable-static=yes
'
)
->withPkgName('libffi')
->withPkgConfig('/usr/libffi/lib/pkgconfig')
->withLdflags('-L/usr/libffi/lib/')
->withBinPath('/usr/libffi/bin/')
//->withSkipInstall()
//->disablePkgName()
//->disableDefaultPkgConfig()
//->disableDefaultLdflags()
);
}