root / trunk / make.sh

Revision 657, 5.2 kB (checked in by saurik, 1 year ago)

Add dependency building for jlanger's #191.

  • Property svn:executable set to *
Line 
1#!/bin/bash
2set -e
3shopt -s extglob nullglob
4
5if [[ $# == 0 ]]; then
6    echo "usage: $0 <package>"
7    exit
8fi
9
10export PKG_MAKE=$0
11export PKG_NAME=${1%_}
12export PKG_BASE=$(realpath "$(dirname "$0")")
13
14. "${PKG_BASE}/helper.sh"
15
16if [[ ! -x ${PKG_BASE}/util/arid || ${PKG_BASE}/util/arid -ot ${PKG_BASE}/util/arid.cpp ]]; then
17    g++ -I ~/menes -o "${PKG_BASE}"/util/arid{,.cpp}
18fi
19
20if [[ ! -x ${PKG_BASE}/util/ldid || ${PKG_BASE}/util/ldid -ot ${PKG_BASE}/util/ldid.cpp ]]; then
21    g++ -I ~/menes -o "${PKG_BASE}"/util/ldid{,.cpp} -x c "${PKG_BASE}"/util/{lookup2,sha1}.c
22fi
23
24export CODESIGN_ALLOCATE=$(which arm-apple-darwin9-codesign_allocate)
25
26for DEP_NAME in "${PKG_DEPS[@]}"; do
27    "${PKG_MAKE}" "${DEP_NAME}"
28done
29
30export PKG_HASH=$({
31    "${PKG_BASE}"/util/catdir.sh "${PKG_DATA}" -L \( -name '.svn' -o -name '_*' \) -prune -o
32
33    for DEP_NAME in "${PKG_DEPS[@]}"; do
34        "${PKG_BASE}"/util/catdir.sh "$(PKG_DEST_ "${DEP_NAME}")"
35        DEP_MORE="$(PKG_MORE_ "${DEP_NAME}")"
36        if [[ -d ${DEP_MORE} ]]; then
37            "${PKG_BASE}"/util/catdir.sh "${DEP_MORE}"
38        fi
39    done
40} | md5sum | cut -d ' ' -f 1)
41
42echo "hashed data ${PKG_NAME} to: ${PKG_HASH}"
43
44if [[ -e "${PKG_STAT}/data-md5" && ${PKG_HASH} == $(cat "${PKG_STAT}/data-md5") ]]; then
45    echo "skipping re-build of ${PKG_NAME}"
46    exit
47fi
48
49mkdir -p "${PKG_STAT}"
50rm -f "${PKG_STAT}/data-md5"
51
52rm -rf "${PKG_MORE}"
53mkdir -p "${PKG_MORE}"
54
55rm -rf "${PKG_DEST}"
56mkdir -p "${PKG_DEST}"
57
58rm -rf "${PKG_WORK}"
59mkdir -p "${PKG_WORK}"
60
61function pkg:patch() {
62    pkg:libtool_ libtool
63    pkg:libtool_ ltmain.sh
64
65    for diff in "${PKG_DATA}"/*.diff; do
66        if [[ ${diff} =~ .*/_[^/]*.diff$ ]]; then
67            continue;
68        fi
69
70        echo "patching with ${diff}..."
71        patch -p1 <"${diff}"
72    done
73}
74
75export -f pkg:patch
76
77function pkg:bin() {
78    if [[ $# -eq 0 ]]; then
79        pushd "${PKG_DEST}/usr/bin"
80        set $(ls)
81        popd
82    fi
83
84    mkdir -p "${PKG_DEST}/bin"
85    for bin in "$@"; do
86        mv -v "${PKG_DEST}/usr/bin/${bin}" "${PKG_DEST}/bin/${bin}"
87    done
88
89    rmdir --ignore-fail-on-non-empty -p "${PKG_DEST}/usr/bin"
90}
91
92export -f pkg:bin
93
94function pkg:autoconf() {
95    for m4 in $(find -name "*.m4"); do
96        patch -r/dev/null "${m4}" "${PKG_BASE}/util/libtool.m4.diff" || true
97    done
98
99    autoconf
100}
101
102export -f pkg:autoconf
103
104export PKG_CONF=./configure
105
106function pkg:libtool_() {
107    for ltmain in $(find -name "$1"); do
108        patch -r/dev/null "${ltmain}" "${PKG_BASE}/util/libtool.diff" || true
109    done
110}
111
112export -f pkg:libtool_
113
114function pkg:setup() {
115    pkg:extract
116    cd */
117    pkg:patch
118}
119
120export -f pkg:setup
121
122function pkg:configure() {
123    PKG_CONFIG="$(realpath "${PKG_BASE}/util/pkg-config.sh")" \
124    ac_cv_prog_cc_g=no ac_cv_prog_cxx_g=no \
125    cfg=("${PKG_CONF}" \
126        ac_cv_prog_cc_g=no ac_cv_prog_cxx_g=no \
127        --build="$(${PKG_BASE}/util/config.guess)" \
128        --host="${PKG_TARG}" \
129        --enable-static=no \
130        --enable-shared=yes \
131        --prefix=$(cat "${PKG_BASE}/arch/${PKG_ARCH}/prefix") \
132        --localstatedir="/var/cache/${PKG_NAME}" \
133        "$@")
134    echo "${cfg[@]}"
135    "${cfg[@]}"
136}
137
138export -f pkg:configure
139
140function pkg:make() {
141    make AR="${PKG_TARG}-ar" CFLAGS='-O2 -mthumb'
142}
143
144export -f pkg:make
145
146function pkg:install() {
147    make install DESTDIR="${PKG_DEST}" "$@"
148}
149
150export -f pkg:install
151
152function pkg:extract() {
153    for tgz in "${PKG_DATA}"/*.{tar.gz,tgz}; do
154        tar -zxf "${tgz}"
155    done
156
157    for zip in "${PKG_DATA}"/*.zip; do
158        unzip "${zip}"
159    done
160
161    for tbz2 in "${PKG_DATA}"/*.tar.bz2; do
162        tar -jxf "${tbz2}"
163    done
164}
165
166export -f pkg:extract
167
168function pkg:usrbin() {
169    pkg: mkdir -p /usr/bin
170    pkg: cp -a "$@" /usr/bin
171}
172
173export -f pkg:usrbin
174
175cd "${PKG_WORK}"
176"${PKG_BASE}/exec.sh" "${PKG_NAME}" . "${PKG_DATA}/make.sh"
177
178function rmdir_() {
179    if [[ -d "$1" ]]; then
180        rmdir --ignore-fail-on-non-empty "$1"
181    fi
182}
183
184rm -rf "${PKG_DEST}/usr/share/man"
185rm -rf "${PKG_DEST}/usr/share/info"
186rm -rf "${PKG_DEST}/usr/share/gtk-doc"
187rm -rf "${PKG_DEST}/usr/share/doc"
188rm -rf "${PKG_DEST}/usr/share/locale"
189rm -rf "${PKG_DEST}/usr/man"
190rm -rf "${PKG_DEST}/usr/local/share/man"
191rm -rf "${PKG_DEST}/usr/local/OpenSourceVersions"
192rm -rf "${PKG_DEST}/usr/local/OpenSourceLicenses"
193rm -f "${PKG_DEST}/usr/lib/charset.alias"
194rm -rf "${PKG_DEST}/usr/info"
195rm -rf "${PKG_DEST}/usr/docs"
196rm -rf "${PKG_DEST}/usr/doc"
197
198rmdir_ "${PKG_DEST}/usr/share"
199rmdir_ "${PKG_DEST}/usr/local/share"
200rmdir_ "${PKG_DEST}/usr/local"
201rmdir_ "${PKG_DEST}/usr/lib"
202rmdir_ "${PKG_DEST}/usr"
203
204if [[ -e "${PKG_BASE}/arch/${PKG_ARCH}/strip" ]]; then
205    . "${PKG_BASE}/arch/${PKG_ARCH}/strip"
206fi
207
208find "${PKG_DEST}" -type f -name '*.elc' -print0 | while read -r -d $'\0' bin; do
209    sed -i -e '
210        s/^;;; Compiled by .*$//
211        s/^;;; from file .*$//
212        s/^;;; in Emacs version .*$//
213        s/^;;; with .*$//
214    ' "${bin}"
215done
216
217find "${PKG_DEST}" -type f -name '*.a' -print0 | while read -r -d $'\0' bin; do
218    "${PKG_BASE}/util/arid" "${bin}"
219done
220
221cp -aL "${PKG_DATA}/_metadata/version" "${PKG_STAT}/data-ver"
222echo "${PKG_HASH}" >"${PKG_STAT}/data-md5"
223
224echo "hashed code ${PKG_NAME} to: $("${PKG_BASE}"/util/catdir.sh "${PKG_DEST}" | md5sum | cut -d ' ' -f 1)"
Note: See TracBrowser for help on using the browser.