xref: /freebsd/crypto/openssh/freebsd-namespace.sh (revision 4f52dfbb8d6c4d446500c5b097e3806ec219fbd4)
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