root / trunk / make.sh

Revision 317, 4.5 kB (checked in by saurik, 3 months ago)

Added .ar and .elc determinism.

  • 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
24for DEP_NAME in "${PKG_DEPS[@]}"; do
25    "${PKG_MAKE}" "${DEP_NAME}"
26done
27
28export PKG_HASH=$({
29    "${PKG_BASE}"/util/catdir.sh "${PKG_DATA}" -L \( -name '.svn' -o -name '_*' \) -prune -o
30
31    for DEP_NAME in "${PKG_DEPS[@]}"; do
32        "${PKG_BASE}"/util/catdir.sh "$(PKG_DEST_ "${DEP_NAME}")"
33    done
34} | md5sum | cut -d ' ' -f 1)
35
36echo "hashed data ${PKG_NAME} to: ${PKG_HASH}"
37
38if [[ -e "${PKG_STAT}/data-md5" && ${PKG_HASH} == $(cat "${PKG_STAT}/data-md5") ]]; then
39    echo "skipping re-build of ${PKG_NAME}"
40    exit
41fi
42
43mkdir -p "${PKG_STAT}"
44rm -f "${PKG_STAT}/data-md5"
45
46rm -rf "${PKG_DEST}"
47mkdir -p "${PKG_DEST}"
48
49rm -rf "${PKG_WORK}"
50mkdir -p "${PKG_WORK}"
51
52function pkg:patch() {
53    pkg:libtool_ libtool
54    pkg:libtool_ ltmain.sh
55
56    for diff in "${PKG_DATA}"/*.diff; do
57        echo "patching with ${diff}..."
58        patch -p1 <"${diff}"
59    done
60}
61
62export -f pkg:patch
63
64function pkg:bin() {
65    if [[ $# -eq 0 ]]; then
66        pushd "${PKG_DEST}/usr/bin"
67        set $(ls)
68        popd
69    fi
70
71    mkdir -p "${PKG_DEST}/bin"
72    for bin in "$@"; do
73        mv -v "${PKG_DEST}/usr/bin/${bin}" "${PKG_DEST}/bin/${bin}"
74    done
75
76    rmdir --ignore-fail-on-non-empty -p "${PKG_DEST}/usr/bin"
77}
78
79export -f pkg:bin
80
81function pkg:autoconf() {
82    for m4 in $(find -name "*.m4"); do
83        patch -r/dev/null "${m4}" "${PKG_BASE}/util/libtool.m4.diff" || true
84    done
85
86    autoconf
87}
88
89export -f pkg:autoconf
90
91export PKG_CONF=./configure
92
93function pkg:libtool_() {
94    for ltmain in $(find -name "$1"); do
95        patch -r/dev/null "${ltmain}" "${PKG_BASE}/util/libtool.diff" || true
96    done
97}
98
99export -f pkg:libtool_
100
101function pkg:setup() {
102    pkg:extract
103    cd *
104    pkg:patch
105}
106
107export -f pkg:setup
108
109function pkg:configure() {
110    PKG_CONFIG="$(realpath "${PKG_BASE}/util/pkg-config.sh")" \
111    ac_cv_prog_cc_g=no \
112    ac_cv_prog_cxx_g=no \
113    "${PKG_CONF}" \
114        --build=x86_64-unknown-linux-gnu \
115        --host="${PKG_TARG}" \
116        --enable-static=no \
117        --enable-shared=yes \
118        --prefix=$(cat "${PKG_BASE}/arch/${PKG_ARCH}/prefix") \
119        --localstatedir="/var/cache/${PKG_NAME}" \
120        "$@"
121}
122
123export -f pkg:configure
124
125function pkg:install() {
126    make install DESTDIR="${PKG_DEST}" "$@"
127}
128
129export -f pkg:install
130
131function pkg:extract() {
132    for tgz in "${PKG_DATA}"/{*.tar.gz,*.tgz}; do
133        tar -zxf "${tgz}"
134    done
135
136    for zip in "${PKG_DATA}"/*.zip; do
137        unzip "${zip}"
138    done
139
140    for tbz2 in "${PKG_DATA}"/*.tar.bz2; do
141        tar -jxf "${tbz2}"
142    done
143}
144
145export -f pkg:extract
146
147function pkg:usrbin() {
148    pkg: mkdir -p /usr/bin
149    pkg: cp -a "$@" /usr/bin
150}
151
152export -f pkg:usrbin
153
154cd "${PKG_WORK}"
155"${PKG_BASE}/exec.sh" "${PKG_NAME}" . "${PKG_DATA}/make.sh"
156
157function rmdir_() {
158    if [[ -d "$1" ]]; then
159        rmdir --ignore-fail-on-non-empty "$1"
160    fi
161}
162
163rm -rf "${PKG_DEST}/usr/share/locale"
164rm -rf "${PKG_DEST}/usr/share/man"
165rm -rf "${PKG_DEST}/usr/share/info"
166rm -rf "${PKG_DEST}/usr/share/gtk-doc"
167rm -rf "${PKG_DEST}/usr/share/doc"
168rm -rf "${PKG_DEST}/usr/man"
169rm -rf "${PKG_DEST}/usr/local/share/man"
170rm -rf "${PKG_DEST}/usr/local/OpenSourceVersions"
171rm -rf "${PKG_DEST}/usr/local/OpenSourceLicenses"
172rm -f "${PKG_DEST}/usr/lib/charset.alias"
173rm -rf "${PKG_DEST}/usr/info"
174rm -rf "${PKG_DEST}/usr/docs"
175rm -rf "${PKG_DEST}/usr/doc"
176
177rmdir_ "${PKG_DEST}/usr/share"
178rmdir_ "${PKG_DEST}/usr/local/share"
179rmdir_ "${PKG_DEST}/usr/local"
180rmdir_ "${PKG_DEST}/usr/lib"
181rmdir_ "${PKG_DEST}/usr"
182
183if [[ -e "${PKG_BASE}/arch/${PKG_ARCH}/strip" ]]; then
184    . "${PKG_BASE}/arch/${PKG_ARCH}/strip"
185fi
186
187find "${PKG_DEST}" -type f -name '*.elc' -print0 | while read -r -d $'\0' bin; do
188    sed -i -e '
189        s/^;;; Compiled by .*$//
190        s/^;;; from file .*$//
191        s/^;;; in Emacs version .*$//
192        s/^;;; with .*$//
193    ' "${bin}"
194done
195
196find "${PKG_DEST}" -type f -name '*.a' -print0 | while read -r -d $'\0' bin; do
197    "${PKG_BASE}/util/arid" "${bin}"
198done
199
200cp -a "${PKG_DATA}/_metadata/version" "${PKG_STAT}/data-ver"
201echo "${PKG_HASH}" >"${PKG_STAT}/data-md5"
Note: See TracBrowser for help on using the browser.