Check-in [2ae580efcd]
Overview
SHA1:2ae580efcd7d99ff7427235e9f5b8869cbca859b
Date: 2015-10-15 14:21:18
User: rkeene
Comment:Added NSF build script
Timelines: family | ancestors | descendants | both | trunk
Downloads: Tarball | ZIP archive
Other Links: files | file ages | folders | manifest
Tags And Properties
Context
2015-10-23
20:09
[40706ce9b4] Use TCLSH_NATIVE only when cross-compiling (as indicated by KC_CROSSCOMPILE) (user: ssoberni, tags: trunk)
2015-10-15
14:21
[2ae580efcd] Added NSF build script (user: rkeene, tags: trunk)
2015-10-08
18:32
[78bb12c14d] Simplify change in the previous check-in. (user: mistachkin, tags: trunk)
Changes

Added nsf/build.sh version [15ddc9112c].





























































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#! /usr/bin/env bash

if [ ! -f 'build.sh' ]; then
    echo 'ERROR: This script must be run from the directory it is in' >&2
    
    exit 1
fi
if [ -z "${TCLVERS}" ]; then
    echo 'ERROR: The TCLVERS environment variable is not set' >&2
    
    exit 1
fi

NSFVERS="2.0.0"
NSFVERSEXTRA=""
SRC="src/nsf${NSFVERS}.tar.gz"
SRCURL="http://sourceforge.net/projects/next-scripting/files/${NSFVERS}/nsf${NSFVERS}.tar.gz/download"
BUILDDIR="$(pwd)/build/nsf${NSFVERS}"
OUTDIR="$(pwd)/out"
INSTDIR="$(pwd)/inst"
export NSFVERS SRC SRCURL BUILDDIR OUTDIR INSTDIR

# Set configure options for this sub-project
LDFLAGS="${LDFLAGS} ${KC_NSF_LDFLAGS}"
CFLAGS="${CFLAGS} ${KC_NSF_CFLAGS}"
CPPFLAGS="${CPPFLAGS} ${KC_NSF_CPPFLAGS}"
LIBS="${LIBS} ${KC_NSF_LIBS}"
export LDFLAGS CFLAGS CPPFLAGS LIBS

rm -rf 'build' 'out' 'inst'
mkdir 'build' 'out' 'inst' || exit 1

if [ ! -f "${SRC}" ]; then
    mkdir 'src' >/dev/null 2>/dev/null
    
    if [ ! -d 'buildsrc' ]; then
	rm -f "${SRC}.tmp"
	wget -O "${SRC}.tmp" "${SRCURL}" || exit 1
	mv "${SRC}.tmp" "${SRC}"
    fi
fi

(
    cd 'build' || exit 1
    
    if [ ! -d '../buildsrc' ]; then
	gzip -dc "../${SRC}" | tar -xf -
    else    
	cp -rp ../buildsrc/* './'
    fi
    
    cd "${BUILDDIR}" || exit 1

    # There's a STATIC<packageInAllUpperCase>=-1,0,1
    # ... where -1 means no (i.e., shared),
    # ... 0 means try not to (try shared first, if that
    # 	  doesn't work do static),
    # ... and 1 means try to (try only static)
    
    if [ "${STATICNSF}" = "0" ]; then
	tryopts="--enable-shared --disable-shared"
    elif [ "${STATICNSF}" = "1" ]; then
	tryopts="--disable-shared"
    else
	# -1
	tryopts="--enable-shared"
    fi
    
    SAVE_CFLAGS="${CFLAGS}"
    for tryopt in $tryopts __fail__; do
	# Clean up, if needed
	make distclean >/dev/null 2>/dev/null
	rm -rf "${INSTDIR}"
	mkdir "${INSTDIR}"
	
	if [ "${tryopt}" = "__fail__" ]; then
	    exit 1
	fi
	
	if [ "${tryopt}" == "--enable-shared" ]; then
	    isshared="1"
	else
	    isshared="0"
	fi
	
	# If build a static NSF for KitDLL, ensure that we use PIC
	# so that it can be linked into the shared object
	if [ "${isshared}" = "0" -a "${KITTARGET}" = "kitdll" ]; then
	    CFLAGS="${SAVE_CFLAGS} -fPIC"
	else
	    CFLAGS="${SAVE_CFLAGS}"
	fi
	export CFLAGS
	
	if [ "${isshared}" = '0' ]; then
	    sed 's@USE_TCL_STUBS@XXX_TCL_STUBS@g' configure > configure.new
	else
	    sed 's@XXX_TCL_STUBS@USE_TCL_STUBS@g' configure > configure.new
	fi
	cat configure.new > configure
	rm -f configure.new
	
	(
	    # Build
	    echo "Running: ./configure $tryopt --disable-symbols --prefix=\"${INSTDIR}\" --exec-prefix=\"${INSTDIR}\" --libdir=\"${INSTDIR}/lib\" --with-tcl=\"${TCLCONFIGDIR}\" ${CONFIGUREEXTRA}"
	    ./configure $tryopt --disable-symbols --prefix="${INSTDIR}" --exec-prefix="${INSTDIR}" --libdir="${INSTDIR}/lib" --with-tcl="${TCLCONFIGDIR}" ${CONFIGUREEXTRA}
	    
	    echo "Running: ${MAKE:-make} TCLSH=${TCLSH_NATIVE}"
	    ${MAKE:-make} TCLSH=${TCLSH_NATIVE} || exit 1
	    
	    echo "Running: ${MAKE:-make} install TCLSH=${TCLSH_NATIVE}"
	    ${MAKE:-make} install TCLSH=${TCLSH_NATIVE}
	    
	) || continue
	
	break
    done
    
    mkdir "${OUTDIR}/lib" || exit 1
    cp -r "${INSTDIR}/lib"/nsf*/serialize "${OUTDIR}/lib/nsf${NSFVERS}-serialize"
    cp -r "${INSTDIR}/lib"/nsf*/lib "${OUTDIR}/lib/nsf${NSFVERS}-lib"
    cp -r "${INSTDIR}/lib"/nsf*/nx "${OUTDIR}/lib/nsf${NSFVERS}-nx"
    cp -r "${INSTDIR}/lib"/nsf*/xotcl "${OUTDIR}/lib/nsf${NSFVERS}-xotcl"
    
    mkdir "${OUTDIR}/lib/nsf${NSFVERS}" || exit 1
    
    if [ "${isshared}" = '0' ]; then
	cat << _EOF_ > "${OUTDIR}/lib/nsf${NSFVERS}/pkgIndex.tcl"
package ifneeded nsf ${NSFVERS} "[list load "" nsf]; package provide nsf ${NSFVERS}"
_EOF_
    else
	cp -r "${INSTDIR}/lib"/nsf*/*nsf*.* "${OUTDIR}/lib/nsf${NSFVERS}/"
	cp -r "${INSTDIR}/lib"/nsf*/pkgIndex.tcl "${OUTDIR}/lib/nsf${NSFVERS}/"
    fi
    
    rm -f "${OUTDIR}"/lib/nsf*/*.a
    
    "${STRIP:-strip}" -g "${OUTDIR}"/lib/nsf*/*.so >/dev/null 2>/dev/null
    
    exit 0
) || exit 1
exit 0