1*4f52dfbbSDag-Erling Smørgrav#!/bin/sh 2*4f52dfbbSDag-Erling Smørgrav# 3*4f52dfbbSDag-Erling Smørgrav# Namespace munging inspired by an equivalent hack in NetBSD's tree: add 4*4f52dfbbSDag-Erling Smørgrav# the "Fssh_" prefix to every symbol in libssh which doesn't already have 5*4f52dfbbSDag-Erling Smørgrav# it. This prevents collisions between symbols in libssh and symbols in 6*4f52dfbbSDag-Erling Smørgrav# other libraries or applications which link with libssh, either directly 7*4f52dfbbSDag-Erling Smørgrav# or indirectly (e.g. through PAM loading pam_ssh). 8*4f52dfbbSDag-Erling Smørgrav# 9*4f52dfbbSDag-Erling Smørgrav# $FreeBSD$ 10*4f52dfbbSDag-Erling Smørgrav# 11*4f52dfbbSDag-Erling Smørgrav 12*4f52dfbbSDag-Erling Smørgravset -e 13*4f52dfbbSDag-Erling Smørgrav 14*4f52dfbbSDag-Erling Smørgraveval "unset $(env | sed -nE 's/^(LC_[A-Z]+)=.*$/\1/p')" 15*4f52dfbbSDag-Erling Smørgravexport LANG=C 16*4f52dfbbSDag-Erling Smørgrav 17*4f52dfbbSDag-Erling Smørgraverror() { 18*4f52dfbbSDag-Erling Smørgrav echo "$@" >&2 19*4f52dfbbSDag-Erling Smørgrav exit 1 20*4f52dfbbSDag-Erling Smørgrav} 21*4f52dfbbSDag-Erling Smørgrav 22*4f52dfbbSDag-Erling Smørgrav# Locate the source directories 23*4f52dfbbSDag-Erling Smørgravself=$(realpath ${0}) 24*4f52dfbbSDag-Erling Smørgravsrcdir=${self%/*} 25*4f52dfbbSDag-Erling Smørgravheader=${srcdir}/ssh_namespace.h 26*4f52dfbbSDag-Erling Smørgravtop_srcdir=${srcdir%/crypto/openssh} 27*4f52dfbbSDag-Erling Smørgravlibssh_srcdir=${top_srcdir}/secure/lib/libssh 28*4f52dfbbSDag-Erling Smørgrav 29*4f52dfbbSDag-Erling Smørgravif [ ! -d ${srcdir} -o \ 30*4f52dfbbSDag-Erling Smørgrav ! -f ${header} -o \ 31*4f52dfbbSDag-Erling Smørgrav ! -d ${libssh_srcdir} -o \ 32*4f52dfbbSDag-Erling Smørgrav ! -f ${libssh_srcdir}/Makefile ] ; then 33*4f52dfbbSDag-Erling Smørgrav error "Where is the libssh Makefile?" 34*4f52dfbbSDag-Erling Smørgravfi 35*4f52dfbbSDag-Erling Smørgrav 36*4f52dfbbSDag-Erling Smørgravncpu=$(sysctl -n hw.ncpu) 37*4f52dfbbSDag-Erling Smørgravssh_make() { 38*4f52dfbbSDag-Erling Smørgrav make -C${libssh_srcdir} -j$((ncpu + 1)) "$@" 39*4f52dfbbSDag-Erling Smørgrav} 40*4f52dfbbSDag-Erling Smørgrav 41*4f52dfbbSDag-Erling Smørgrav# Clear out, recreate and locate the libssh build directory 42*4f52dfbbSDag-Erling Smørgravssh_make cleandir 43*4f52dfbbSDag-Erling Smørgravssh_make cleandir 44*4f52dfbbSDag-Erling Smørgravssh_make obj 45*4f52dfbbSDag-Erling Smørgravlibssh_builddir=$(realpath $(ssh_make -V.OBJDIR)) 46*4f52dfbbSDag-Erling Smørgravlibssh=libprivatessh.a 47*4f52dfbbSDag-Erling Smørgrav 48*4f52dfbbSDag-Erling Smørgrav# Clear the existing header 49*4f52dfbbSDag-Erling Smørgravcat >${header} <<EOF 50*4f52dfbbSDag-Erling Smørgrav/* 51*4f52dfbbSDag-Erling Smørgrav * This file was machine-generated. Do not edit manually. 52*4f52dfbbSDag-Erling Smørgrav * Run crypto/openssh/freebsd-namespace.sh to regenerate. 53*4f52dfbbSDag-Erling Smørgrav */ 54*4f52dfbbSDag-Erling SmørgravEOF 55*4f52dfbbSDag-Erling Smørgrav 56*4f52dfbbSDag-Erling Smørgrav# Build libssh 57*4f52dfbbSDag-Erling Smørgravssh_make depend 58*4f52dfbbSDag-Erling Smørgravssh_make ${libssh} 59*4f52dfbbSDag-Erling Smørgravif [ ! -f ${libssh_builddir}/${libssh} ] ; then 60*4f52dfbbSDag-Erling Smørgrav error "Where is ${libssh}?" 61*4f52dfbbSDag-Erling Smørgravfi 62*4f52dfbbSDag-Erling Smørgrav 63*4f52dfbbSDag-Erling Smørgrav# Extract symbols 64*4f52dfbbSDag-Erling Smørgravnm ${libssh_builddir}/${libssh} | awk ' 65*4f52dfbbSDag-Erling Smørgrav /^[0-9a-z]+ [Tt] [A-Za-z_][0-9A-Za-z_]*$/ && $3 !~ /^Fssh_/ { 66*4f52dfbbSDag-Erling Smørgrav printf("#define %-39s Fssh_%s\n", $3, $3) 67*4f52dfbbSDag-Erling Smørgrav } 68*4f52dfbbSDag-Erling Smørgrav' | unexpand -a | sort -u >>${header} 69*4f52dfbbSDag-Erling Smørgrav 70*4f52dfbbSDag-Erling Smørgrav# Clean and rebuild the library 71*4f52dfbbSDag-Erling Smørgravssh_make clean 72*4f52dfbbSDag-Erling Smørgravssh_make ${libssh} 73*4f52dfbbSDag-Erling Smørgrav 74*4f52dfbbSDag-Erling Smørgrav# Double-check 75*4f52dfbbSDag-Erling Smørgravnm ${libssh_builddir}/${libssh} | awk ' 76*4f52dfbbSDag-Erling Smørgrav /^[0-9a-z]+ [Tt] [A-Za-z_][0-9A-Za-z_]*$/ && $3 !~ /^Fssh_/ { 77*4f52dfbbSDag-Erling Smørgrav printf("ERROR: %s was not renamed!\n", $3); 78*4f52dfbbSDag-Erling Smørgrav err++; 79*4f52dfbbSDag-Erling Smørgrav } 80*4f52dfbbSDag-Erling Smørgrav END { 81*4f52dfbbSDag-Erling Smørgrav if (err > 0) 82*4f52dfbbSDag-Erling Smørgrav exit(1); 83*4f52dfbbSDag-Erling Smørgrav } 84*4f52dfbbSDag-Erling Smørgrav' 85