14f52dfbbSDag-Erling Smørgrav#!/bin/sh 24f52dfbbSDag-Erling Smørgrav# 34f52dfbbSDag-Erling Smørgrav# Namespace munging inspired by an equivalent hack in NetBSD's tree: add 44f52dfbbSDag-Erling Smørgrav# the "Fssh_" prefix to every symbol in libssh which doesn't already have 54f52dfbbSDag-Erling Smørgrav# it. This prevents collisions between symbols in libssh and symbols in 64f52dfbbSDag-Erling Smørgrav# other libraries or applications which link with libssh, either directly 74f52dfbbSDag-Erling Smørgrav# or indirectly (e.g. through PAM loading pam_ssh). 84f52dfbbSDag-Erling Smørgrav# 94f52dfbbSDag-Erling Smørgrav# $FreeBSD$ 104f52dfbbSDag-Erling Smørgrav# 114f52dfbbSDag-Erling Smørgrav 124f52dfbbSDag-Erling Smørgravset -e 134f52dfbbSDag-Erling Smørgrav 144f52dfbbSDag-Erling Smørgraveval "unset $(env | sed -nE 's/^(LC_[A-Z]+)=.*$/\1/p')" 154f52dfbbSDag-Erling Smørgravexport LANG=C 164f52dfbbSDag-Erling Smørgrav 174f52dfbbSDag-Erling Smørgraverror() { 184f52dfbbSDag-Erling Smørgrav echo "$@" >&2 194f52dfbbSDag-Erling Smørgrav exit 1 204f52dfbbSDag-Erling Smørgrav} 214f52dfbbSDag-Erling Smørgrav 224f52dfbbSDag-Erling Smørgrav# Locate the source directories 234f52dfbbSDag-Erling Smørgravself=$(realpath ${0}) 244f52dfbbSDag-Erling Smørgravsrcdir=${self%/*} 254f52dfbbSDag-Erling Smørgravheader=${srcdir}/ssh_namespace.h 264f52dfbbSDag-Erling Smørgravtop_srcdir=${srcdir%/crypto/openssh} 274f52dfbbSDag-Erling Smørgravlibssh_srcdir=${top_srcdir}/secure/lib/libssh 284f52dfbbSDag-Erling Smørgrav 294f52dfbbSDag-Erling Smørgravif [ ! -d ${srcdir} -o \ 304f52dfbbSDag-Erling Smørgrav ! -f ${header} -o \ 314f52dfbbSDag-Erling Smørgrav ! -d ${libssh_srcdir} -o \ 324f52dfbbSDag-Erling Smørgrav ! -f ${libssh_srcdir}/Makefile ] ; then 334f52dfbbSDag-Erling Smørgrav error "Where is the libssh Makefile?" 344f52dfbbSDag-Erling Smørgravfi 354f52dfbbSDag-Erling Smørgrav 364f52dfbbSDag-Erling Smørgravncpu=$(sysctl -n hw.ncpu) 374f52dfbbSDag-Erling Smørgravssh_make() { 384f52dfbbSDag-Erling Smørgrav make -C${libssh_srcdir} -j$((ncpu + 1)) "$@" 394f52dfbbSDag-Erling Smørgrav} 404f52dfbbSDag-Erling Smørgrav 414f52dfbbSDag-Erling Smørgrav# Clear out, recreate and locate the libssh build directory 424f52dfbbSDag-Erling Smørgravssh_make cleandir 434f52dfbbSDag-Erling Smørgravssh_make cleandir 444f52dfbbSDag-Erling Smørgravssh_make obj 454f52dfbbSDag-Erling Smørgravlibssh_builddir=$(realpath $(ssh_make -V.OBJDIR)) 464f52dfbbSDag-Erling Smørgravlibssh=libprivatessh.a 474f52dfbbSDag-Erling Smørgrav 484f52dfbbSDag-Erling Smørgrav# Clear the existing header 49*b3e858f7SEd Mastegenerated="@""generated" 504f52dfbbSDag-Erling Smørgravcat >${header} <<EOF 514f52dfbbSDag-Erling Smørgrav/* 52*b3e858f7SEd Maste * This file was machine-$generated. Do not edit manually. 534f52dfbbSDag-Erling Smørgrav * Run crypto/openssh/freebsd-namespace.sh to regenerate. 544f52dfbbSDag-Erling Smørgrav */ 554f52dfbbSDag-Erling SmørgravEOF 564f52dfbbSDag-Erling Smørgrav 574f52dfbbSDag-Erling Smørgrav# Build libssh 584f52dfbbSDag-Erling Smørgravssh_make depend 594f52dfbbSDag-Erling Smørgravssh_make ${libssh} 604f52dfbbSDag-Erling Smørgravif [ ! -f ${libssh_builddir}/${libssh} ] ; then 614f52dfbbSDag-Erling Smørgrav error "Where is ${libssh}?" 624f52dfbbSDag-Erling Smørgravfi 634f52dfbbSDag-Erling Smørgrav 644f52dfbbSDag-Erling Smørgrav# Extract symbols 654f52dfbbSDag-Erling Smørgravnm ${libssh_builddir}/${libssh} | awk ' 664f52dfbbSDag-Erling Smørgrav /^[0-9a-z]+ [Tt] [A-Za-z_][0-9A-Za-z_]*$/ && $3 !~ /^Fssh_/ { 674f52dfbbSDag-Erling Smørgrav printf("#define %-39s Fssh_%s\n", $3, $3) 684f52dfbbSDag-Erling Smørgrav } 694f52dfbbSDag-Erling Smørgrav' | unexpand -a | sort -u >>${header} 704f52dfbbSDag-Erling Smørgrav 714f52dfbbSDag-Erling Smørgrav# Clean and rebuild the library 724f52dfbbSDag-Erling Smørgravssh_make clean 734f52dfbbSDag-Erling Smørgravssh_make ${libssh} 744f52dfbbSDag-Erling Smørgrav 754f52dfbbSDag-Erling Smørgrav# Double-check 764f52dfbbSDag-Erling Smørgravnm ${libssh_builddir}/${libssh} | awk ' 774f52dfbbSDag-Erling Smørgrav /^[0-9a-z]+ [Tt] [A-Za-z_][0-9A-Za-z_]*$/ && $3 !~ /^Fssh_/ { 784f52dfbbSDag-Erling Smørgrav printf("ERROR: %s was not renamed!\n", $3); 794f52dfbbSDag-Erling Smørgrav err++; 804f52dfbbSDag-Erling Smørgrav } 814f52dfbbSDag-Erling Smørgrav END { 824f52dfbbSDag-Erling Smørgrav if (err > 0) 834f52dfbbSDag-Erling Smørgrav exit(1); 844f52dfbbSDag-Erling Smørgrav } 854f52dfbbSDag-Erling Smørgrav' 86