summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorLucio Andrés Illanes Albornoz (arab, vxp) <l.illanes@gmx.de>2016-02-12 12:43:29 +0100
committerLucio Andrés Illanes Albornoz (arab, vxp) <l.illanes@gmx.de>2016-02-12 16:10:21 +0100
commit1d0876af1f6b526a930d39d9b6a3e053d218e981 (patch)
treec732473dd87dfcb5ec93f3a4354d528cdabe4bec
parentf16d357f6f9528a4fac2e14f7b882f5a455faea2 (diff)
downloadmidipix_build-1d0876af1f6b526a930d39d9b6a3e053d218e981.tar.bz2
midipix_build-1d0876af1f6b526a930d39d9b6a3e053d218e981.tar.xz
- Major cleanup in general.
- Added --{build-{scripts,steps},help,tarball}. Variables can now be overriden on the command-line. - Integrated bzip2, dash, less, ncurses, popt, rsync, tar, util-linux, which, and xz; as there are no patches in portage/ for util-linux just yet, this presently requires integrated local patches. Git is included in build.vars only as it requires OpenSSL. - Include ntapi.local.patch and psxscl.local.patch in the repository.
-rw-r--r--.gitignore1
-rw-r--r--000.fetch_git.build16
l---------[-rw-r--r--]003.psxstub.build11
-rw-r--r--003.psxstub.vars16
l---------004.musl.no-complex.build2
-rw-r--r--006.musl.full.build (renamed from 006.musl.build)38
-rw-r--r--007.gcc.full.build66
-rw-r--r--100.perk.build44
-rw-r--r--104.libelf.vars8
l---------106.musl.native.build2
-rw-r--r--200.psxtypes.vars6
l---------300.bzip2.build (renamed from 300.coreutils.build)0
l---------301.coreutils.build (renamed from 301.diffutils.build)0
l---------302.diffutils.build (renamed from 302.findutils.build)0
l---------303.findutils.build (renamed from 302.patch.build)0
l---------304.gawk.build (renamed from 303.gawk.build)0
l---------305.gzip.build (renamed from 304.bash.build)0
-rw-r--r--305.gzip.vars11
l---------306.grep.build (renamed from 305.make.build)0
-rw-r--r--306.libz.build42
l---------307.gzip.build1
l---------307.libz.build (renamed from 308.grep.build)0
l---------308.make.build (renamed from 309.sed.build)0
l---------309.patch.build1
l---------310.tar.build1
l---------311.sed.build1
l---------312.xz.build1
l---------313.which.build1
l---------340.popt.build1
l---------341.rsync.build1
l---------350.ncurses.build1
l---------351.bash.build1
-rw-r--r--351.bash.vars (renamed from 304.bash.vars)4
l---------352.dash.build1
l---------353.less.build1
l---------354.util_linux.build1
-rw-r--r--LICENSE2
-rwxr-xr-xbuild.sh85
-rw-r--r--build.subr253
-rw-r--r--build.usage22
-rw-r--r--build.vars84
-rw-r--r--ncurses-6.0.local.patch21
-rw-r--r--ntapi.local.patch67
-rw-r--r--pkg.build161
-rw-r--r--popt-1.16.local.patch21
-rw-r--r--psxscl.local.patch150
-rw-r--r--rsync-3.1.2.local.patch21
-rw-r--r--util-linux-2.27.1.local.patch21
-rw-r--r--xz-5.2.2.local.patch21
49 files changed, 896 insertions, 313 deletions
diff --git a/.gitignore b/.gitignore
index 751b1d07..5953a191 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
build.log
+*.sw[op]
diff --git a/000.fetch_git.build b/000.fetch_git.build
index d66f195e..27c0282f 100644
--- a/000.fetch_git.build
+++ b/000.fetch_git.build
@@ -1,8 +1,12 @@
-# Git clone what we need.
-fetch_git cbb-gcc-${PKG_GCC_VERSION} ${GITROOT}/cbb/cbb-gcc-${PKG_GCC_VERSION};
-fetch_git lazy ${GITROOT}/lazy;
-fetch_git mmglue ${GITROOT}/mmglue;
-fetch_git portage ${GITROOT}/ports/portage;
-fetch_git psxstub ${GITROOT}/psxstub;
+#
+# . ./build.vars and set -o errexit are assumed.
+#
+
+if ! is_build_script_done fetch; then
+ # Git clone what we need.
+ fetch_git lazy ${GITROOT}/lazy;
+ fetch_git portage ${GITROOT}/ports/portage;
+ set_build_script_done fetch finish;
+fi;
# vim:filetype=sh
diff --git a/003.psxstub.build b/003.psxstub.build
index 535c0080..52bb82e5 100644..120000
--- a/003.psxstub.build
+++ b/003.psxstub.build
@@ -1,10 +1 @@
-if is_build_script_done finished; then
- exit 212;
-elif [ "x${TARGET}" = "xi686-nt32-midipix" ]\
-|| [ "x${TARGET}" = "xx86_64-nt64-midipix" ]; then
- cd psxstub;
- make ${MAKEFLAGS} DESTDIR=${PREFIX_LVL} TARGET=${TARGET} install;
- set_build_script_done finished;
-fi;
-
-# vim:filetype=sh
+pkg.build \ No newline at end of file
diff --git a/003.psxstub.vars b/003.psxstub.vars
new file mode 100644
index 00000000..4683b7ab
--- /dev/null
+++ b/003.psxstub.vars
@@ -0,0 +1,16 @@
+#
+# . ./build.vars and set -o errexit are assumed.
+#
+
+pkg_psxstub_finish() {
+ if ! is_build_script_done install; then
+ if [ "x${TARGET}" = "xi686-nt32-midipix" ]\
+ || [ "x${TARGET}" = "xx86_64-nt64-midipix" ]; then
+ cd psxstub;
+ make ${MAKEFLAGS} DESTDIR=${PREFIX_LVL} TARGET=${TARGET} install;
+ set_build_script_done install finish;
+ fi;
+ fi;
+};
+
+# vim:filetype=sh
diff --git a/004.musl.no-complex.build b/004.musl.no-complex.build
index 6e7a82b0..59c5eff4 120000
--- a/004.musl.no-complex.build
+++ b/004.musl.no-complex.build
@@ -1 +1 @@
-006.musl.build \ No newline at end of file
+006.musl.full.build \ No newline at end of file
diff --git a/006.musl.build b/006.musl.full.build
index d34f5b00..0b97e62e 100644
--- a/006.musl.build
+++ b/006.musl.full.build
@@ -1,29 +1,39 @@
+#
+# . ./build.vars and set -o errexit are assumed.
+#
+
+# Order: no-complex, native
+
export lz_arch=${ARCH} lz_cflags_debug=-O2 lz_target=${TARGET};
-if is_build_script_done finished; then
- exit 212;
-elif [ "x${3}" = "xno-complex" ]; then
+if [ "x${3}" = "xno-complex" ]; then
# Musl: build (no-complex)
_install=install_no_complex;
set_build_dir musl-${PKG_MUSL_VERSION}-${3} cross;
- fetch http://www.musl-libc.org/releases/musl-${PKG_MUSL_VERSION}.tar.gz \
- ${PKG_MUSL_SHA256SUM};
- if ! is_build_script_done extracted; then
+ if ! is_build_script_done fetch; then
+ rm_if_exists musl-${PKG_MUSL_VERSION}.tar.gz;
+ fetch http://www.musl-libc.org/releases/musl-${PKG_MUSL_VERSION}.tar.gz \
+ ${PKG_MUSL_SHA256SUM};
+ rm_if_exists mmglue;
+ fetch_git mmglue ${GITROOT}/mmglue;
+ set_build_script_done fetch -extract;
+ fi;
+ if ! is_build_script_done extract; then
rm_if_exists musl-${PKG_MUSL_VERSION};
tar -xf musl-${PKG_MUSL_VERSION}.tar.gz;
cp -R mmglue/* musl-${PKG_MUSL_VERSION}/;
- set_build_script_done extracted -configured;
+ set_build_script_done extract -configure;
fi;
elif [ "x${3}" = "xnative" ]; then
# Musl: build (full)
_install=install;
set_build_dir musl-${PKG_MUSL_VERSION} ${3};
-else
+elif [ "x${3}" = "xfull" ]; then
# Musl: build (full)
_install=install;
set_build_dir musl-${PKG_MUSL_VERSION} cross;
fi;
-if ! is_build_script_done configured; then
+if ! is_build_script_done configure; then
rm_if_exists -m -c ${BUILD_DIR};
../lazy/lazy \
-a ${ARCH} \
@@ -33,14 +43,18 @@ if ! is_build_script_done configured; then
-p ../musl-${PKG_MUSL_VERSION} \
-t ${lz_target} \
-x config;
- set_build_script_done configured -built;
+ set_build_script_done configure clean -build;
else
cd ${BUILD_DIR};
fi;
-if ! is_build_script_done built; then
+if ! is_build_script_done clean; then
+ make ${MAKEFLAGS} clean;
+ set_build_script_done clean -build;
+fi;
+if ! is_build_script_done build; then
./lazy -e ${_install} \
-x build;
- set_build_script_done built finished;
+ set_build_script_done build finish;
fi;
# vim:filetype=sh
diff --git a/007.gcc.full.build b/007.gcc.full.build
index 73eccbb9..3af5c15c 100644
--- a/007.gcc.full.build
+++ b/007.gcc.full.build
@@ -1,43 +1,51 @@
+#
+# . ./build.vars and set -o errexit are assumed.
+#
+
# Order: stage1, runtime, full, native
-if is_build_script_done finished; then
- exit 212;
-elif [ "x${3}" = "xruntime" ]\
+if [ "x${3}" = "xruntime" ]\
|| [ "x${3}" = "xfull" ]; then
set_build_dir cbb-gcc-${PKG_GCC_VERSION} cross;
cd ${BUILD_DIR};
if [ "x${3}" = "xruntime" ]; then
# GCC, compiler runtime.
- if ! is_build_script_done built; then
+ if ! is_build_script_done build; then
make ${MAKEFLAGS} all-target-libgcc;
- set_build_script_done built -installed;
+ set_build_script_done build -install;
fi;
- if ! is_build_script_done installed; then
+ if ! is_build_script_done install; then
make ${MAKEFLAGS} install-target-libgcc;
- set_build_script_done installed finished;
+ set_build_script_done install finish;
fi;
elif [ "x${3}" = "xfull" ]; then
# GCC, everything else.
- if ! is_build_script_done built1; then
+ if ! is_build_script_done build1; then
make ${MAKEFLAGS} all-target-libstdc++-v3;
- set_build_script_done built1 -installed1;
+ set_build_script_done build1 -install1;
fi;
- if ! is_build_script_done installed1; then
+ if ! is_build_script_done install1; then
make ${MAKEFLAGS} install-target-libstdc++-v3;
- set_build_script_done installed1 -built2;
+ set_build_script_done install1 -build2;
fi;
- if ! is_build_script_done built2; then
+ if ! is_build_script_done build2; then
make ${MAKEFLAGS};
- set_build_script_done built2 -installed2;
+ set_build_script_done build2 -install2;
fi;
- if ! is_build_script_done installed2; then
+ if ! is_build_script_done install2; then
make ${MAKEFLAGS} install;
- set_build_script_done installed2 finished;
+ set_build_script_done install2 finish;
fi;
fi;
else
if [ "x${3}" = "xstage1" ]; then
# GCC, stage1.
+ if ! is_build_script_done fetch; then
+ rm_if_exists cbb-gcc-${PKG_GCC_VERSION};
+ fetch_git cbb-gcc-${PKG_GCC_VERSION} \
+ ${GITROOT}/cbb/cbb-gcc-${PKG_GCC_VERSION};
+ set_build_script_done fetch -configure;
+ fi;
set_build_dir cbb-gcc-${PKG_GCC_VERSION} cross;
export cbb_ldflags_for_target=--sysroot=${PREFIX_LVL} \
cbb_sysroot_for_libgcc=${PREFIX_LVL} \
@@ -56,10 +64,10 @@ else
fi;
GCCFLAGS="${CFLAGS:+${CFLAGS} }--include $(readlink -f ${WORKDIR}/cbb-gcc-${PKG_GCC_VERSION}/libc/cbb-musl-pe.h)";
set_env_vars "${GCCFLAGS}" CFLAGS CFLAGS_FOR_BUILD CPPFLAGS_FOR_BUILD CXXFLAGS CXXFLAGS_FOR_BUILD;
- set_env_vars "${CFLAGS_FOR_BUILD}" cbb_cflags_for_stage1 cbb_cflags_for_stage2 cbb_cflags_for_stage3 cbb_cflags_for_stage4;
set_env_vars "${GCCTARGET_FLAGS}" CFLAGS_FOR_TARGET CPPFLAGS_FOR_TARGET CXXFLAGS_FOR_TARGET LIBCFLAGS_FOR_TARGET XGCC_FLAGS_FOR_TARGET;
+ set_env_vars "${CFLAGS_FOR_BUILD}" cbb_cflags_for_stage1 cbb_cflags_for_stage2 cbb_cflags_for_stage3 cbb_cflags_for_stage4;
export CFLAGS CXXFLAGS CFLAGS_FOR_BUILD CPPFLAGS_FOR_BUILD CXXFLAGS_FOR_BUILD CFLAGS_FOR_TARGET XGCC_FLAGS_FOR_TARGET CPPFLAGS_FOR_TARGET CXXFLAGS_FOR_TARGET LIBCFLAGS_FOR_TARGET;
- if ! is_build_script_done configured; then
+ if ! is_build_script_done configure; then
if [ "x${3}" = "xstage1" ]; then
mkdir -p ${PREFIX_LVL}/include;
[ \! -d ${PREFIX_LVL}/usr ] && \
@@ -104,28 +112,32 @@ else
--target=${TARGET} \
--with-fpmath=sse \
${_configure_args};
- set_build_script_done configured -built;
+ set_build_script_done configure clean -build;
else
cd ${BUILD_DIR};
fi;
- if ! is_build_script_done built; then
+ if ! is_build_script_done clean; then
+ make ${MAKEFLAGS} clean;
+ set_build_script_done clean -build;
+ fi;
+ if ! is_build_script_done build; then
if [ "x${3}" = "xstage1" ]; then
make ${MAKEFLAGS} all-gcc;
elif [ "x${3}" = "xnative" ]; then
- make -j18 all-gcc;
- make -j18 all-target-libgcc;
- make -j18 all-target-libstdc++-v3;
- make -j18 all;
+ make ${MAKEFLAGS} all-gcc;
+ make ${MAKEFLAGS} all-target-libgcc;
+ make ${MAKEFLAGS} all-target-libstdc++-v3;
+ make ${MAKEFLAGS} all;
fi;
- set_build_script_done built -installed;
+ set_build_script_done build -install;
fi;
- if ! is_build_script_done installed; then
+ if ! is_build_script_done install; then
if [ "x${3}" = "xstage1" ]; then
make ${MAKEFLAGS} install-gcc;
elif [ "x${3}" = "xnative" ]; then
- make -j18 DESTDIR=${PREFIX_LVL} install;
+ make ${MAKEFLAGS} DESTDIR=${PREFIX_LVL} install;
fi;
- set_build_script_done installed finished;
+ set_build_script_done install finish;
fi;
fi;
diff --git a/100.perk.build b/100.perk.build
index dd9d9c85..cded5a9a 100644
--- a/100.perk.build
+++ b/100.perk.build
@@ -1,39 +1,51 @@
-if is_build_script_done finished; then
- exit 212;
-else
+#
+# . ./build.vars and set -o errexit are assumed.
+#
+
+if ! is_build_script_done fetch; then
+ rm_if_exists perk;
fetch_git perk ${GITROOT}/perk;
- set_build_dir ${2} native;
+ set_build_script_done fetch -configure1;
fi;
-if ! is_build_script_done configured1; then
+set_build_dir ${2} native;
+if ! is_build_script_done configure1; then
rm_if_exists -m -c ${BUILD_DIR};
../perk/configure;
- set_build_script_done configured1 -built1;
+ set_build_script_done configure1 clean1 -build1;
else
cd ${BUILD_DIR};
fi;
-if ! is_build_script_done built1; then
+if ! is_build_script_done clean1; then
+ make ${MAKEFLAGS} clean;
+ set_build_script_done clean1 -build1;
+fi;
+if ! is_build_script_done build1; then
make;
- set_build_script_done built1 -installed1;
+ set_build_script_done build1 -install1;
fi;
-if ! is_build_script_done installed1; then
+if ! is_build_script_done install1; then
make DESTDIR=${PREFIX} install;
- set_build_script_done installed1 -configured2;
+ set_build_script_done install1 -configure2;
fi;
set_build_dir ${2} cross;
-if ! is_build_script_done configured2; then
+if ! is_build_script_done configure2; then
rm_if_exists -m -c ../${BUILD_DIR};
../perk/configure --target=${TARGET};
- set_build_script_done configured2 -built2;
+ set_build_script_done configure2 clean2 -build2;
else
cd ../${BUILD_DIR};
fi;
-if ! is_build_script_done built2; then
+if ! is_build_script_done clean2; then
+ make ${MAKEFLAGS} clean;
+ set_build_script_done clean2 -build2;
+fi;
+if ! is_build_script_done build2; then
make;
- set_build_script_done built2 -installed2;
+ set_build_script_done build2 -install2;
fi;
-if ! is_build_script_done installed2; then
+if ! is_build_script_done install2; then
make DESTDIR=${PREFIX_LVL} install;
- set_build_script_done installed2 finished;
+ set_build_script_done install2 finish;
fi;
# vim:filetype=sh
diff --git a/104.libelf.vars b/104.libelf.vars
index 786e691e..4b654137 100644
--- a/104.libelf.vars
+++ b/104.libelf.vars
@@ -1,5 +1,9 @@
+#
+# . ./build.vars and set -o errexit are assumed.
+#
+
pkg_libelf_install_post() {
- if ! is_build_script_done installed2; then
+ if ! is_build_script_done install2; then
rm -f lib/libelf.def;
echo EXPORTS > lib/libelf.def;
perk -e lib/libelf.so >> lib/libelf.def;
@@ -8,7 +12,7 @@ pkg_libelf_install_post() {
--dllname libelf.so \
--input-def lib/libelf.def;
cp lib/libelf.lib.a ${PREFIX}/lib;
- set_build_script_done installed2 -finished;
+ set_build_script_done install2 -finish;
fi;
};
diff --git a/106.musl.native.build b/106.musl.native.build
index 6e7a82b0..59c5eff4 120000
--- a/106.musl.native.build
+++ b/106.musl.native.build
@@ -1 +1 @@
-006.musl.build \ No newline at end of file
+006.musl.full.build \ No newline at end of file
diff --git a/200.psxtypes.vars b/200.psxtypes.vars
index 493d9c11..b58a0946 100644
--- a/200.psxtypes.vars
+++ b/200.psxtypes.vars
@@ -1,7 +1,11 @@
+#
+# . ./build.vars and set -o errexit are assumed.
+#
+
pkg_psxtypes_finish() {
if ! is_build_script_done installed; then
make -C ${PKG_SUBDIR} ${MAKEFLAGS} DESTDIR=${PREFIX_LVL};
- set_build_script_done installed finished;
+ set_build_script_done installed finish;
fi;
};
diff --git a/300.coreutils.build b/300.bzip2.build
index 52bb82e5..52bb82e5 120000
--- a/300.coreutils.build
+++ b/300.bzip2.build
diff --git a/301.diffutils.build b/301.coreutils.build
index 52bb82e5..52bb82e5 120000
--- a/301.diffutils.build
+++ b/301.coreutils.build
diff --git a/302.findutils.build b/302.diffutils.build
index 52bb82e5..52bb82e5 120000
--- a/302.findutils.build
+++ b/302.diffutils.build
diff --git a/302.patch.build b/303.findutils.build
index 52bb82e5..52bb82e5 120000
--- a/302.patch.build
+++ b/303.findutils.build
diff --git a/303.gawk.build b/304.gawk.build
index 52bb82e5..52bb82e5 120000
--- a/303.gawk.build
+++ b/304.gawk.build
diff --git a/304.bash.build b/305.gzip.build
index 52bb82e5..52bb82e5 120000
--- a/304.bash.build
+++ b/305.gzip.build
diff --git a/305.gzip.vars b/305.gzip.vars
new file mode 100644
index 00000000..0e234422
--- /dev/null
+++ b/305.gzip.vars
@@ -0,0 +1,11 @@
+#
+# . ./build.vars and set -o errexit are assumed.
+#
+
+pkg_gzip_install() {
+ tar -cpf - gunzip gzip zcat |\
+ tar -C ${PREFIX_LVL}/bin -xpf -;
+ set_build_script_done install1 -finish;
+};
+
+# vim:filetype=sh
diff --git a/305.make.build b/306.grep.build
index 52bb82e5..52bb82e5 120000
--- a/305.make.build
+++ b/306.grep.build
diff --git a/306.libz.build b/306.libz.build
deleted file mode 100644
index a1678bf4..00000000
--- a/306.libz.build
+++ /dev/null
@@ -1,42 +0,0 @@
-parse_with_pkg_name ${2} libz gzip;
-if is_build_script_done finished; then
- exit 212;
-else
- fetch ${PKG_URL} ${PKG_SHA256SUM};
-fi;
-if ! is_build_script_done extracted; then
- rm_if_exists ${PKG_FNAME%%.tar*};
- tar -axf ${PKG_FNAME};
- set_build_script_done extracted -configured;
-fi;
-if ! is_build_script_done configured; then
- set_build_dir ${PKG_FNAME%%-*} native;
- rm_if_exists -c -m ${BUILD_DIR};
- cp ../portage/config.cache .;
- ../${PKG_SUBDIR}/configure \
- --host=${HOST_NATIVE} \
- --prefix= \
- --target=${TARGET};
- set_build_script_done configured -built;
-else
- cd ${BUILD_DIR};
-fi;
-if ! is_build_script_done built; then
- if [ "x${2}" = "xlibz" ]; then
- make -j18;
- elif [ "x${2}" = "xgzip" ]; then
- make clean;
- make;
- fi;
- set_build_script_done built -installed;
-fi;
-if ! is_build_script_done installed; then
- if [ "x${2}" = "xlibz" ]; then
- make -j18 DESTDIR=${PREFIX_LVL} install;
- elif [ "x${2}" = "xgzip" ]; then
- cp gunzip gzip zcat ${PREFIX_LVL}/bin;
- fi;
- set_build_script_done installed finished;
-fi;
-
-# vim:filetype=sh
diff --git a/307.gzip.build b/307.gzip.build
deleted file mode 120000
index bee571a6..00000000
--- a/307.gzip.build
+++ /dev/null
@@ -1 +0,0 @@
-306.libz.build \ No newline at end of file
diff --git a/308.grep.build b/307.libz.build
index 52bb82e5..52bb82e5 120000
--- a/308.grep.build
+++ b/307.libz.build
diff --git a/309.sed.build b/308.make.build
index 52bb82e5..52bb82e5 120000
--- a/309.sed.build
+++ b/308.make.build
diff --git a/309.patch.build b/309.patch.build
new file mode 120000
index 00000000..52bb82e5
--- /dev/null
+++ b/309.patch.build
@@ -0,0 +1 @@
+pkg.build \ No newline at end of file
diff --git a/310.tar.build b/310.tar.build
new file mode 120000
index 00000000..52bb82e5
--- /dev/null
+++ b/310.tar.build
@@ -0,0 +1 @@
+pkg.build \ No newline at end of file
diff --git a/311.sed.build b/311.sed.build
new file mode 120000
index 00000000..52bb82e5
--- /dev/null
+++ b/311.sed.build
@@ -0,0 +1 @@
+pkg.build \ No newline at end of file
diff --git a/312.xz.build b/312.xz.build
new file mode 120000
index 00000000..52bb82e5
--- /dev/null
+++ b/312.xz.build
@@ -0,0 +1 @@
+pkg.build \ No newline at end of file
diff --git a/313.which.build b/313.which.build
new file mode 120000
index 00000000..52bb82e5
--- /dev/null
+++ b/313.which.build
@@ -0,0 +1 @@
+pkg.build \ No newline at end of file
diff --git a/340.popt.build b/340.popt.build
new file mode 120000
index 00000000..52bb82e5
--- /dev/null
+++ b/340.popt.build
@@ -0,0 +1 @@
+pkg.build \ No newline at end of file
diff --git a/341.rsync.build b/341.rsync.build
new file mode 120000
index 00000000..52bb82e5
--- /dev/null
+++ b/341.rsync.build
@@ -0,0 +1 @@
+pkg.build \ No newline at end of file
diff --git a/350.ncurses.build b/350.ncurses.build
new file mode 120000
index 00000000..52bb82e5
--- /dev/null
+++ b/350.ncurses.build
@@ -0,0 +1 @@
+pkg.build \ No newline at end of file
diff --git a/351.bash.build b/351.bash.build
new file mode 120000
index 00000000..52bb82e5
--- /dev/null
+++ b/351.bash.build
@@ -0,0 +1 @@
+pkg.build \ No newline at end of file
diff --git a/304.bash.vars b/351.bash.vars
index b1333b3c..8ab081a0 100644
--- a/304.bash.vars
+++ b/351.bash.vars
@@ -1,3 +1,7 @@
+#
+# . ./build.vars and set -o errexit are assumed.
+#
+
PKG_BASH_PATCHES_EXTRA_MANIFEST="
bash43-001 ecb3dff2648667513e31554b3ad054ccd89fce38e33367c9459ac3a285153742
bash43-002 eee7cd7062ab29a9e4f02924d9c367264dcb8b162703f74ff6eb8f175a91502b
diff --git a/352.dash.build b/352.dash.build
new file mode 120000
index 00000000..52bb82e5
--- /dev/null
+++ b/352.dash.build
@@ -0,0 +1 @@
+pkg.build \ No newline at end of file
diff --git a/353.less.build b/353.less.build
new file mode 120000
index 00000000..52bb82e5
--- /dev/null
+++ b/353.less.build
@@ -0,0 +1 @@
+pkg.build \ No newline at end of file
diff --git a/354.util_linux.build b/354.util_linux.build
new file mode 120000
index 00000000..52bb82e5
--- /dev/null
+++ b/354.util_linux.build
@@ -0,0 +1 @@
+pkg.build \ No newline at end of file
diff --git a/LICENSE b/LICENSE
index de0c557c..3d401651 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
The MIT License (MIT)
-Copyright (c) 2016 lalbornoz
+Copyright (c) 2016 Lucio Andrés Illanes Albornoz <l.illanes@gmx.de>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/build.sh b/build.sh
index eb219701..4f0dbfc6 100755
--- a/build.sh
+++ b/build.sh
@@ -1,73 +1,82 @@
#!/bin/sh
-
+#
{
-#clear_env_with_except HOME PATH SHELL TERM USER;
-unset AR ARFLAGS CC CFLAGS CXX CXXFLAGS LD LDFLAGS;
-. ./build.vars; . ./build.subr;
+. ./build.subr;
+parse_args_into_vars "${0}" build-scripts,build-steps,help,tarball "${@}";
+[ -n "${ARG_HELP}" ] && { exec cat build.usage; } || . ./build.vars;
+clear_env_with_except HOME PATH SHELL TERM USER;
check_path_vars PREFIX PREFIX_NATIVE WORKDIR;
-check_prereqs git make openssl sed sort tar tr wget;
-set_env_vars "" LANG LANGUAGE LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES LC_PAPER LC_NAME LC_ADDRESS \
-LC_TELEPHONE LC_MEASUREMENT LC_IDENTIFICATION LC_ALL;
+check_prereqs git make mktemp openssl sed sort tar tr wget;
log_msg info "Build started by ${BUILD_USER:=${USER}}@${BUILD_HNAME:=$(hostname)} at ${BUILD_DATE:=$(date %Y-%m-%d-%H-%M-%S)}.";
-#trap
-(set -o errexit; mkdir -p ${PREFIX} ${WORKDIR});
+log_env_vars ${LOG_ENV_VARS};
+(mkdir -p ${PREFIX} ${PREFIX_NATIVE} ${PREFIX_TARGET} ${WORKDIR};
BUILD_NFINI=${BUILD_NSKIP:=${BUILD_NFAIL:=${BUILD_NBUILT:=0}}};
for BUILD_LVL in 0 1 2 3; do
for BUILD_SCRIPT_FNAME in ${BUILD_LVL}[0-9][0-9].*.build; do
- if [ -n "${DEBUG_SCRIPT}" ]\
- && [ "x${DEBUG_SCRIPT}" != "x${BUILD_SCRIPT_FNAME}" ]; then
+ if [ -n "${ARG_BUILD_SCRIPTS}" ]\
+ && [ "${ARG_BUILD_SCRIPTS}" != "ALL" ]\
+ && ! match_list "${ARG_BUILD_SCRIPTS}" \
+ , "${BUILD_SCRIPT_FNAME}"; then
+ log_msg info "Skipped build script \`${BUILD_SCRIPT_FNAME}' (--build-scripts policy.)";
continue;
elif [ ! -f ${BUILD_SCRIPT_FNAME} ]; then
+ log_msg info "Build script \`${BUILD_SCRIPT_FNAME}' non-existent or not a file.";
continue;
else
unset BUILD_SCRIPT_RC; : $((BUILD_NBUILT+=1));
- log_msg info "Invoking build script \`${BUILD_SCRIPT_FNAME}'";
- (set -o errexit -- $(split . ${BUILD_SCRIPT_FNAME%.build}); \
- SCRIPT_FNAME=${BUILD_SCRIPT_FNAME}; _pwd=$(pwd); \
+ if [ "x${ARG_BUILD_SCRIPTS}" != "xALL" ]\
+ && is_build_script_done finish "${BUILD_SCRIPT_FNAME%.build}"; then
+ log_msg info "Skipped build script \`${BUILD_SCRIPT_FNAME}' (already built.)";
+ : $((BUILD_NSKIP+=1)); BUILD_SCRIPT_RC=0; continue;
+ fi;
+ log_msg info "Invoking build script${ARG_BUILD_SCRIPTS:+ (forcibly)} \`${BUILD_SCRIPT_FNAME}'${ARG_BUILD_STEPS:+ at build step(s) ${ARG_BUILD_STEPS}}.";
+ (set -o errexit -- $(split . ${BUILD_SCRIPT_FNAME%%.build*}); \
+ SCRIPT_FNAME=${BUILD_SCRIPT_FNAME}; \
+ SCRIPT_NAME=${SCRIPT_FNAME%%.build*}; \
export CFLAGS="$(eval echo \${CFLAGS_LVL${BUILD_LVL}})"; \
export PREFIX_LVL="$(eval echo \${PREFIX_LVL${BUILD_LVL}})"; \
- cd ${WORKDIR}; . ${_pwd}/build.subr; \
- [ -f ${_pwd}/${SCRIPT_FNAME%.build}.vars ] && \
- . ${_pwd}/${SCRIPT_FNAME%.build}.vars; \
- . ${_pwd}/${BUILD_SCRIPT_FNAME});
+ _PWD=$(pwd); cd ${WORKDIR}; \
+ for SCRIPT_SOURCE in build.subr ${SCRIPT_NAME}.vars \
+ ${BUILD_SCRIPT_FNAME}; do \
+ [ -r ${_PWD}/${SCRIPT_SOURCE} ] && \
+ . ${_PWD}/${SCRIPT_SOURCE}; \
+ done);
case ${BUILD_SCRIPT_RC:=${?}} in
0) log_msg succ "Finished build script \`${BUILD_SCRIPT_FNAME}'.";
: $((BUILD_NFINI+=1)); continue; ;;
- 212) log_msg info "Skipped build script \`${BUILD_SCRIPT_FNAME}' (already built.)";
- : $((BUILD_NSKIP+=1)); BUILD_SCRIPT_RC=0; continue; ;;
*) log_msg fail "Build failed in build script \`${BUILD_SCRIPT_FNAME}' (last return code ${BUILD_SCRIPT_RC}.).";
: $((BUILD_NFAIL+=1)); break; ;;
esac;
fi;
done;
- if [ ${BUILD_SCRIPT_RC:-0} != 0 ]; then
+ if [ ${BUILD_SCRIPT_RC:-0} -ne 0 ]; then
break;
fi;
done;
log_msg info "${BUILD_NFINI} finished, ${BUILD_NSKIP} skipped, and ${BUILD_NFAIL} failed builds in ${BUILD_NBUILT} build script(s).";
if [ $(( ${BUILD_NFINI} + ${BUILD_NSKIP} )) -ge 0 ]\
-&& [ ${BUILD_NFAIL} -eq 0 ]; then
+&& [ ${BUILD_NFAIL} -eq 0 ]\
+&& [ ${ARG_TARBALL:-0} -eq 1 ]; then
log_msg info "Building distribution tarball.";
(cd ${PREFIX};
DISTRIB_FNAME=midipix.${BUILD_USER}@${BUILD_HNAME}-${BUILD_DATE}.tar.bz2;
- rm_if_exists -m ${PREFIX_NATIVE##*/}/lib.bak; rm_if_exists ${DISTRIB_FNAME};
- tar -C ${PREFIX_NATIVE##*/}/lib -cpf - . |\
- tar -C ${PREFIX_NATIVE##*/}/lib.bak -xpf -;
+ PREFIX_BASENAME=${PREFIX_NATIVE##*/}; WORKDIR_BASENAME=${WORKDIR##*/};
+ rm_if_exists -m ${PREFIX_BASENAME}/lib.bak; rm_if_exists ${DISTRIB_FNAME};
+ tar -C ${PREFIX_BASENAME}/lib -cpf - . | tar -C ${PREFIX_BASENAME}/lib.bak -xpf -;
(cd native/lib &&
find . -maxdepth 1 -type l \
- -exec sh -c 'dest=$(readlink -- "$0") && rm -- "$0" && ln -- "$dest" "$0"' {} \;);
- wait;
- find . -maxdepth 2 -type d \
- -not -path . \
- -not -path ./${WORKDIR##*/} \
- -not -path ./${WORKDIR##*/}/\* \
- -not -path ./${PREFIX_NATIVE##*/} \
- -not -path ./${PREFIX_NATIVE##*/}/lib.bak |\
- tar -T - -cpf - | bzip2 -9c - > ${DISTRIB_FNAME}
- rm -rf ${PREFIX_NATIVE##*/}/lib;
- mv ${PREFIX_NATIVE##*/}/lib.bak ${PREFIX_NATIVE##*/}/lib); wait;
+ -exec sh -c 'dest=$(readlink -- "$0") && rm -- "$0" && ln -- "$dest" "$0"' {} \;);
+ wait;
+ find . -maxdepth 2 -type d \
+ -not -path . \
+ -not -path ./${WORKDIR_BASENAME} \
+ -not -path ./${WORKDIR_BASENAME}/\* \
+ -not -path ./${PREFIX_BASENAME} \
+ -not -path ./${PREFIX_BASENAME}/lib.bak |\
+ tar -T - -cpf - | bzip2 -9c - > ${DISTRIB_FNAME}
+ rm -rf ${PREFIX_BASENAME}/lib;
+ mv ${PREFIX_BASENAME}/lib.bak ${PREFIX_BASENAME}/lib); wait;
fi;
-exit ${BUILD_SCRIPT_RC};
-} 2>&1 | tee build.log;
+exit ${BUILD_SCRIPT_RC})} 2>&1 | tee build.log;
# vim:filetype=sh
diff --git a/build.subr b/build.subr
index 47882838..fc6ee404 100644
--- a/build.subr
+++ b/build.subr
@@ -1,86 +1,149 @@
#
# . ./build.vars and set -o errexit are assumed.
+# See warning at the top of build.vars.
#
-TIMESTAMP_FMT="${TIMESTAMP_FMT:-"%Y/%m/%d %H:%M:%S"}";
+date() { command date +"${1:-${TIMESTAMP_FMT}}"; };
+fetch_git() { [ -d ${1} ] && (cd ${1} && git pull origin main) || git clone ${3} ${2} ${1}; };
+get_basename() { set -- $(get_name_without_slash ${1}); echo "${1##*/}"; };
+get_var() { eval echo \${${1}}; }; # XXX
+set_var() { eval ${1}=\"${2}\"; }; # XXX
+get_name_without_slash() { while [ "x${1%/}" != "x${1}" ]; do set -- ${1%/}; done; echo ${1}; };
+get_postfix_lrg() { echo "${1##*${2}}"; };
+get_prefix_lrg() { echo "${1%%${2}*}"; };
+get_postfix() { echo "${1#*${2}}"; };
+get_prefix() { echo "${1%${2}*}"; };
+match_any() { [ "x${1#*${2}*}" != "x${1}" ]; };
+match_start() { [ "x${1#${2}}" != "x${1}" ]; };
+push_IFS() { _IFS="${IFS}"; IFS="${1}"; };
+pop_IFS() { IFS="${_IFS}"; unset _IFS; };
+set_build_dir() { BUILD_DIR=${1}-${2}-${TARGET}; };
+split() { push_IFS "${1}"; set -- ${2}; pop_IFS; echo "${*}"; };
+unsplit() { push_IFS "${1}"; shift; set -- "${@}"; echo "${*}"; pop_IFS; };
+
+rm_if_exists() {
+ set_flag_vars_from_args "$@"; shift ${_nshift:-0};
+ [ -d ${1} ] && rm -rf ${1}; [ -f ${1} ] && rm -f ${1};
+ [ ${_arg_m:-0} -eq 1 ] && mkdir ${1};
+ [ ${_arg_c:-0} -eq 1 ] && cd ${1};
+ unset_flag_vars_from_args;
+};
+
+set_flag_vars_from_args() {
+ unset _flag_vars _nshift;
+ while [ ${#} -gt 1 ]; do
+ if [ "x${1%[a-z]}" = "x-" ]; then
+ set_var _arg_${1#-} 1;
+ _flag_vars="${_flag_vars:+${_flag_vars} }_arg_${1#-}";
+ : $((_nshift+=1));
+ fi; shift;
+ done;
+};
+unset_flag_vars_from_args() {
+ set -- ${_flag_vars}; while [ ${#} -gt 0 ]; do
+ unset ${1}; shift; done; unset _flag_vars _nshift;
+};
+
+set_env_vars() {
+ _val_new="${1}"; shift;
+ while [ ${#} -gt 1 ]; do
+ [ -z "${_val_new}" ] && unset ${1} ||\
+ export "${1}=${_val_new}"; shift;
+ done; unset _val_new;
+};
+
+
+# Download GNU bash-style patch sets into ${2}-patches-extra and
+# apply them to ${2} in the correct order.
apply_patches() {
- (rm_if_exists -m -c ${2};
+ (rm_if_exists -m -c ${2}-patches-extra;
wget -c -nd -np -r -R \*.htm\* -R \*.sig ${1};
- for _patch_fname in \
+ for _patch_fname in \
$(find . -type f -not -iname \*.sig | sort); do
- patch -d ../${PKG_SUBDIR} -p0 \
+ patch -b -d ../${2} -p0 \
< ${_patch_fname};
done; unset _patch_fname);
};
+# Check whether all supplied arguments contain non-empty valid values.
check_path_vars() {
- while [ $# -gt 0 ]; do
- if [ -z "${_val:=$(eval echo \${${1}})}" ]; then
- log_msg fail "Error: variable \`${1}' is empty or unset.";
- exit 1;
- elif [ "x${_val#* }" != "x${_val}" ]; then
- log_msg fail "Error: variable \`${1}' contains one or more whitespace characters.";
- exit 1;
+ while [ ${#} -gt 0 ]; do
+ unset _val;
+ if [ -z "${_val:=$(get_var "${1}")}" ]; then
+ log_msg failexit "Error: variable \`${1}' is empty or unset.";
+ elif match_any "${_val}" " "; then
+ log_msg failexit "Error: variable \`${1}' contains one or more whitespace characters.";
else
shift;
fi;
done; unset _val;
};
+# Check whether all supplied command names resolve.
check_prereqs() {
- for _cmd in "$@"; do
- if ! command -v ${_cmd} >/dev/null; then
- log_msg fail "Error: missing prerequisite command \`${_cmd}.";
- exit 1;
- fi;
- done; unset _cmd;
+ while [ ${#} -gt 0 ]; do
+ if ! command -v ${1} >/dev/null; then
+ log_msg failexit "Error: missing prerequisite command \`${1}'.";
+ fi; shift;
+ done;
};
-date() {
- command date +"${1:-${TIMESTAMP_FMT}}";
+# Clear the environment by unsetting each exported variable except
+# for those named by the caller.
+clear_env_with_except() {
+ _vfilter="${*}"; _unset_cmds="$(mktemp -q)";
+ export | while read _vspec; do
+ set -- ${_vspec}; shift;
+ if ! match_list "${_vfilter}" " " \
+ $(get_prefix_lrg ${1} =); then
+ echo unset $(get_prefix_lrg ${1} =) >> ${_unset_cmds};
+ fi;
+ done; . "${_unset_cmds}"; rm -f "${_unset_cmds}" 2>/dev/null;
+ unset _vfilter _vspec;
};
fetch() {
- wget --no-check-certificate -N ${1};
- if [ $# -eq 2 ] && ! compare_hash ${1##*/} ${2}; then
- log_msg fail "Error: hash mismatch for URL \`${1##*/}'.";
- exit 1;
- fi;
-};
-
-fetch_git() {
- if [ -d ${1} ]; then
- (cd ${1} && git pull origin main);
- else
- git clone ${2} ${1};
+ wget ${WGET_ARGS} ${1};
+ if [ ${#} -eq 2 ]; then
+ set -- $(get_basename ${1}) "$(compare_hash $(get_basename ${1}) ${2})" ${2};
+ if [ -n "${2}" ]; then
+ log_msg failexit "Error: hash mismatch for URL \`${1}' (is: ${2}, should be: ${3}.)";
+ fi;
fi;
};
compare_hash() {
- _hash_cmp=${2}; set -- $(openssl dgst -sha256 ${1});
- shift $((${#}-1)); set -- ${1} ${_hash_cmp}; unset _hash_cmp;
- [ "x${1}" = "x${2}" ];
+ # Push the output of dgst(1SSL) and the caller-supplied hash
+ # value to compare the former with on the pseudo-stack and
+ # shift off# all but the last two positional parameters.
+ # This corresponds to the hash output and caller-supplied
+ # hash values.
+ set -- $(openssl dgst -sha256 ${1}) ${2}; shift $((${#}-2));
+ [ "x${1}" = "x${2}" ] || echo "${1}";
};
compare_hash_manifest() {
- while [ $# -gt 0 ]; do
+ while [ ${#} -gt 0 ]; do
if ! compare_hash ${1} ${2}; then
- log_msg fail "Error: hash mismatch for patch file \`${1}'.";
- exit 1;
- else
- shift;
- fi;
+ log_msg failexit "Error: hash mismatch for patch file \`${1}'.";
+ fi; shift;
done; return 0;
};
is_build_script_done() {
- _script_fname=${SCRIPT_FNAME##*/};
- if [ -f ${WORKDIR}/.${_script_fname%.build}.${1} ]; then
- unset script_fname;
- return 0;
+ if [ -n "${ARG_BUILD_STEPS}" ]; then
+ if [ "${ARG_BUILD_STEPS}" = "finish" ]\
+ || [ -z "${ARG_BUILD_STEPS#ALL}" ]; then
+ return 1; # Build
+ elif ! match_list ${ARG_BUILD_STEPS} , ${1}; then
+ return 0; # Skip
+ else
+ return 1; # Build
+ fi;
+ elif [ -f ${WORKDIR}/.${2:-$(get_basename ${SCRIPT_FNAME%.build})}.${1} ]; then
+ return 0; # Skip
else
- unset script_fname;
- return 1;
+ return 1; # Build
fi;
};
set_build_script_done() {
@@ -97,9 +160,25 @@ set_build_script_done() {
unset _script_fname _done_fname;
};
+log_env_vars() {
+ log_msg info "Variables for this build:";
+ while [ ${_nvar:=0} -lt ${#} ]; do
+ _arg="$(eval echo \${${_nvar}})"; _arg="${_arg%%=*}";
+ if [ ${#_arg} -gt ${_arg_len_max:=0} ]; then
+ _arg_len_max=${#_arg};
+ fi; : $((_nvar+=1));
+ done; unset _nvar _arg;
+ while [ ${#} -gt 0 ]; do
+ log_msg info "$(printf \
+ "%${_arg_len_max}.${_arg_len_max}s=%s" \
+ "${1%%=*}" "$(get_var ${1#*=})")";
+ shift;
+ done; unset _arg_len_max;
+};
log_msg() {
_lvl=${1}; shift;
case ${_lvl} in
+ failexit) printf "\033[${LOG_MSG_FAIL_COLOUR}m"; ;;
fail) printf "\033[${LOG_MSG_FAIL_COLOUR}m"; ;;
info) printf "\033[${LOG_MSG_INFO_COLOUR}m"; ;;
succ) printf "\033[${LOG_MSG_SUCC_COLOUR}m"; ;;
@@ -108,8 +187,38 @@ log_msg() {
printf "==> %s %s %s\033[0m\n" "$(date "${TIMESTAMP_FMT}")" "${1}" "$*";
else
printf "==> %s %s\033[0m\n" "$(date "${TIMESTAMP_FMT}")" "${1}";
- fi;
- unset _lvl;
+ fi; [ ${_lvl} = failexit ] && exit 1 || unset _lvl;
+};
+
+match_list() {
+ _cmp="${3}"; push_IFS "${2}"; set -- ${1}; pop_IFS;
+ while [ ${#} -gt 0 ]; do
+ if [ "x${1}" = "x${_cmp}" ]; then
+ unset _cmp; return 0;
+ fi; shift;
+ done; unset _cmp; return 1;
+};
+
+parse_args_into_vars() {
+ _arg0="${1}"; _args_valid="${2}"; shift 2;
+ while [ $# -gt 0 ]; do
+ case "${1}" in
+ --*) _aname="${1#--}";
+ if ! match_list "${_args_valid}" , "${_aname%%=*}"; then
+ log_msg failexit "Unknown parameter --${_aname%%=*} specified.";
+ elif match_start "${_aname}" "*="; then
+ _aval="$(get_postfix "${_aname}" =)";
+ _aname="$(get_prefix_lrg "${_aname}" =)";
+ else
+ _aval=1;
+ fi;
+ set_var $(echo arg_${_aname} | tr a-z- A-Z_) "${_aval}";
+ shift; ;;
+ *=*) set_var "$(get_prefix_lrg "${1}" =)"\
+ "$(get_postfix "${1}" =)"; shift; ;;
+ *) log_msg failexit "Invalid or unknown command line argument \`${1}'."; ;;
+ esac;
+ done; unset _arg0 _args_valid _aname _aval;
};
parse_with_pkg_name() {
@@ -117,14 +226,9 @@ parse_with_pkg_name() {
while [ $# -ge 0 ]; do
if [ "x${PKG_NAME}" = "x${1}" ]; then
_pkg_NAME=$(echo "${PKG_NAME}" | tr a-z A-Z);
- for _vname in \
- build_type configure_args configure_extra_args \
- no_config_cache no_destdir no_libtool_midipix \
- patches_extra_url prefix prefix_extra sha256sum \
- url version \
- CC CFLAGS LDFLAGS; do
+ for _vname in ${PKG_VARS}; do
_vNAME=$(echo "${_vname}" | tr a-z A-Z);
- if [ -n "${_vval:=$(eval echo \${PKG_${_pkg_NAME}_${_vNAME}})}" ]; then
+ if [ -n "${_vval:=$(get_var PKG_${_pkg_NAME}_${_vNAME})}" ]; then
export PKG_${_vNAME}="${_vval}";
if [ "x${_vname#[A-Z]}" != "x${_vname}" ]; then
export ${_vname}="${_vval}";
@@ -136,47 +240,12 @@ parse_with_pkg_name() {
if [ -z "${PKG_URL}" ]; then
return 1;
else
- PKG_FNAME=${PKG_URL##*/};
- PKG_SUBDIR=${PKG_FNAME%%.tar*};
+ [ -z "${PKG_FNAME}" ] && PKG_FNAME=${PKG_URL##*/};
+ [ -z "${PKG_SUBDIR}" ] && PKG_SUBDIR=${PKG_FNAME%%.tar*};
return 0;
fi;
fi; shift;
done; return 1;
};
-rm_if_exists() {
- while [ $# -gt 1 ]; do [ "x${1%[a-z]}" = "x-" ] &&\
- eval _${1#-}flag=1; shift; done;
- _dir=${1};
- if [ -d ${1} ]; then
- rm -rf ${1} || return 1;
- fi;
- if [ ${_mflag:-0} -eq 1 ]; then
- unset _mflag; mkdir ${1} || return 2;
- fi;
- if [ ${_cflag:-0} -eq 1 ]; then
- unset _cflag; cd ${1} || return 3;
- fi;
-};
-
-set_build_dir() {
- BUILD_DIR=${1}-${2}-${TARGET};
-};
-
-set_env_vars() {
- _val=${1}; shift;
- while [ $# -ge 1 ]; do
- if [ -z "${_val}" ]; then
- unset ${1};
- else
- export "${1}=${_val}";
- fi; shift;
- done; unset _val;
-};
-
-split() {
- _IFS="${IFS}"; IFS="${1}"; set -- ${2};
- IFS="${_IFS}"; echo "${*}"; unset _IFS;
-};
-
# vim:filetype=sh
diff --git a/build.usage b/build.usage
new file mode 100644
index 00000000..19ac8bc4
--- /dev/null
+++ b/build.usage
@@ -0,0 +1,22 @@
+usage: ./build.sh
+ [--build-scripts=ALL|fname[,fname...]] [--build-steps=ALL|step[,step...]]
+ [--help] [--tarball] [VAR=VAL...]
+ --build-scripts=... Only invoke all or the specified build script(s).
+ --build-steps=... Forcibly invoke build scripts at all or only the
+ specified build steps. Currently defined build steps
+ are: fetch extract patch configure clean build install
+ configure1 configure2 build1 build2 install1 install2
+ install3 finish.
+ --help Show this screen.
+ --tarball Produce a distribution tarball containing $PREFIX
+ sans $WORKDIR at the end of a build with zero failures.
+
+ Packages that are built by pkg.build will apply local patches in $WORKDIR
+ named ${PKG_SUBDIR}.local.patch.
+
+ Examples:
+ ./build.sh GITROOT_HEAD=... --build-scripts=204.psxscl.build --build-steps=ALL PKG_PSXSCL_CFLAGS=-DPSX_INTERNAL_STRACE
+ Build psxscl from the internal repository with strace enabled.
+
+ ./build.sh GITROOT_HEAD=... --build-scripts=ALL --build-steps=ALL
+ Forcibly rebuild everything.
diff --git a/build.vars b/build.vars
index 2c6fca1f..838354d1 100644
--- a/build.vars
+++ b/build.vars
@@ -16,28 +16,57 @@
: ${GITROOT:=git://midipix.org};
: ${GITROOT_HEAD:=git://midipix.org};
: ${HOST_NATIVE:=x86_64-nt64-midipix};
+: ${LOG_ENV_VARS:="HOME PATH SHELL USER CFLAGS_LVL0 CFLAGS_LVL1 CFLAGS_LVL2 CFLAGS_LVL3 GITROOT GITROOT_HEAD PREFIX PREFIX_NATIVE PREFIX_TARGET PREFIX_LVL0 PREFIX_LVL1 PREFIX_LVL2 PREFIX_LVL3 WORKDIR MAKEFLAGS"};
: ${LOG_MSG_FAIL_COLOUR:=91};
: ${LOG_MSG_INFO_COLOUR:=93};
: ${LOG_MSG_SUCC_COLOUR:=92};
: ${PREFIX:=${HOME}/midipix};
: ${PREFIX_NATIVE:=${PREFIX}/native};
: ${TARGET:=x86_64-nt64-midipix};
+: ${PKG_VARS:="build_dir build_type configure_args configure_args_extra git_args_extra makeflags_build_extra no_clean no_config_cache no_configure no_destdir no_libtool_midipix no_patch_local patches_extra_url prefix prefix_extra unset_vars_build sha256sum subdir url url_type version AR CC CFLAGS LD LDFLAGS PREFIX RANLIB"};
: ${PREFIX_TARGET:=${PREFIX}/${TARGET}};
: ${PREFIX_LVL0:=${PREFIX_TARGET}};
: ${PREFIX_LVL1:=${PREFIX_NATIVE}};
: ${PREFIX_LVL2:=${PREFIX_NATIVE}};
: ${PREFIX_LVL3:=${PREFIX_NATIVE}};
: ${WORKDIR:=${PREFIX}/tmp};
-MAKEFLAGS="-j8${MAKEFLAGS:+ ${MAKEFLAGS}}";
+: ${MAKEFLAGS:="-j8${MAKEFLAGS:+ ${MAKEFLAGS}}"};
export PATH="${PREFIX}/bin${PATH:+:${PATH}}";
-TIMESTAMP_FMT="%Y/%m/%d %H:%M:%S";
+: ${TIMESTAMP_FMT:="%Y/%m/%d %H:%M:%S"};
+: ${WGET_ARGS:="-N --no-check-certificate"};
-: ${PKG_BASH_CONFIGURE_EXTRA_ARGS:=--without-bash-malloc};
+: ${PKG_LVL0_CONFIGURE_ARGS:="-C --host=${HOST_NATIVE} --prefix= --target=${TARGET}"};
+: ${PKG_LVL1_CONFIGURE_ARGS="--host=${HOST_NATIVE} --target=${TARGET}"};
+: ${PKG_LVL2_BUILD_TYPE:=cross};
+: ${PKG_LVL2_CONFIGURE_ARGS:="--prefix=${PREFIX_LVL2} --host=${HOST_NATIVE}"};
+: ${PKG_LVL2_NO_CONFIG_CACHE:=1};
+: ${PKG_LVL2_NO_DESTDIR:=1};
+: ${PKG_LVL2_NO_EXTRACT:=1};
+: ${PKG_LVL2_URL_TYPE:=git};
+: ${PKG_LVL2_UNSET_VAR_BUILD:="CC LD CFLAGS LDFLAGS PREFIX"};
+: ${PKG_LVL2_CFLAGS_PATH:=-I${PREFIX_LVL2}/include};
+: ${PKG_LVL2_LDFLAGS_PATH:=-L${PREFIX_LVL2}/include};
+: ${PKG_LVL3_CONFIGURE_ARGS:="-C --host=${HOST_NATIVE} --prefix= --target=${TARGET}"};
+
+: ${PKG_BZIP2_AR:=${HOST_NATIVE}-ar};
+: ${PKG_BZIP2_CC:=${HOST_NATIVE}-gcc};
+: ${PKG_BZIP2_RANLIB:=${HOST_NATIVE}-ranlib};
+: ${PKG_BZIP2_MAKEFLAGS_BUILD_EXTRA:=-f Makefile-libbz2_so};
+: ${PKG_BZIP2_NO_CLEAN:=1};
+: ${PKG_BZIP2_NO_CONFIGURE:=1};
+: ${PKG_BZIP2_NO_DESTDIR:=1};
+: ${PKG_BZIP2_PREFIX:=${PREFIX_LVL3}};
+: ${PKG_BZIP2_SHA256SUM:=a2848f34fcd5d6cf47def00461fcb528a0484d8edef8208d6d2e2909dc61d9cd};
+: ${PKG_BZIP2_VERSION:=1.0.6};
+: ${PKG_BZIP2_BUILD_DIR=bzip2-${PKG_BZIP2_VERSION}};
+: ${PKG_BZIP2_URL:=http://www.bzip.org/1.0.6/bzip2-${PKG_BZIP2_VERSION}.tar.gz};
+: ${PKG_BASH_CONFIGURE_ARGS_EXTRA:=--without-bash-malloc};
+: ${PKG_BASH_LDFLAGS:=-L${PREFIX_LVL3}/lib};
: ${PKG_BASH_SHA256SUM:=afc687a28e0e24dc21b988fa159ff9dbcf6b7caa92ade8645cc6d5605cd024d4};
: ${PKG_BASH_VERSION:=4.3};
: ${PKG_BASH_PATCHES_EXTRA_URL:=https://ftp.gnu.org/gnu/bash/bash-${PKG_BASH_VERSION}-patches/};
: ${PKG_BASH_URL:=https://ftp.gnu.org/gnu/bash/bash-${PKG_BASH_VERSION}.tar.gz};
-: ${PKG_BINUTILS_CONFIGURE_EXTRA_ARGS:=--with-libelf=${PREFIX_NATIVE} --with-gmp=${PREFIX_NATIVE} --with-mpc=${PREFIX_NATIVE} --with-mpfr=${PREFIX_NATIVE} --with-sysroot=/};
+: ${PKG_BINUTILS_CONFIGURE_ARGS_EXTRA:=--with-libelf=${PREFIX_NATIVE} --with-gmp=${PREFIX_NATIVE} --with-mpc=${PREFIX_NATIVE} --with-mpfr=${PREFIX_NATIVE} --with-sysroot=/};
: ${PKG_BINUTILS_SHA256SUM:=250d3b2925c6b211fb16173b0b25bc091c58829fbcad3eb849645e0af52cf7fa};
: ${PKG_BINUTILS_VERSION:=2.24.51};
: ${PKG_BINUTILS_URL:=ftp://sourceware.org/pub/binutils/snapshots/binutils-${PKG_BINUTILS_VERSION}.tar.bz2};
@@ -52,6 +81,8 @@ TIMESTAMP_FMT="%Y/%m/%d %H:%M:%S";
: ${PKG_COREUTILS_SHA256SUM:=ec43ca5bcfc62242accb46b7f121f6b684ee21ecd7d075059bf650ff9e37b82d};
: ${PKG_COREUTILS_VERSION:=8.23};
: ${PKG_COREUTILS_URL:=https://ftp.gnu.org/gnu/coreutils/coreutils-${PKG_COREUTILS_VERSION}.tar.xz};
+: ${PKG_DASH_VERSION:=0.5.8};
+: ${PKG_DASH_URL:=http://gondor.apana.org.au/~herbert/dash/files/dash-${PKG_DASH_VERSION}.tar.gz};
: ${PKG_DIFFUTILS_SHA256SUM:=a25e89a8ab65fded1731e4186be1bb25cda967834b6df973599cdcd5abdfc19c};
: ${PKG_DIFFUTILS_VERSION:=3.3};
: ${PKG_DIFFUTILS_URL:=https://ftp.gnu.org/gnu/diffutils/diffutils-${PKG_DIFFUTILS_VERSION}.tar.xz};
@@ -63,7 +94,13 @@ TIMESTAMP_FMT="%Y/%m/%d %H:%M:%S";
: ${PKG_GAWK_VERSION:=4.1.3};
: ${PKG_GAWK_URL:=https://ftp.gnu.org/gnu/gawk/gawk-${PKG_GAWK_VERSION}.tar.xz};
: ${PKG_GCC_VERSION:=4.6.4};
-: ${PKG_GMP_CONFIGURE_EXTRA_ARGS:=--disable-assembly};
+: ${PKG_GIT_SUBDIR:=git};
+: ${PKG_GIT_BUILD_DIR=${PKG_GIT_SUBDIR}};
+: ${PKG_GIT_GIT_ARGS_EXTRA:=--branch v2.7.1};
+: ${PKG_GIT_NO_CONFIGURE:=1};
+: ${PKG_GIT_URL:=https://github.com/git/git.git};
+: ${PKG_GIT_URL_TYPE:=git};
+: ${PKG_GMP_CONFIGURE_ARGS_EXTRA:=--disable-assembly};
: ${PKG_GMP_PREFIX_EXTRA:=${PREFIX_TARGET}};
: ${PKG_GMP_SHA256SUM:=752079520b4690531171d0f4532e40f08600215feefede70b24fabdc6f1ab160};
: ${PKG_GMP_VERSION:=5.1.3};
@@ -72,11 +109,16 @@ TIMESTAMP_FMT="%Y/%m/%d %H:%M:%S";
: ${PKG_GREP_VERSION:=2.22};
: ${PKG_GREP_URL:=https://ftp.gnu.org/gnu/grep/grep-${PKG_GREP_VERSION}.tar.xz};
: ${PKG_GZIP_CC:=${HOST_NATIVE}-gcc};
-: ${PKG_GZIP_CFLAGS:="-g3 -O0 -I${PREFIX_NATIVE}/include"};
+: ${PKG_GZIP_CFLAGS:=-g3 -O0 -I${PREFIX_NATIVE}/include};
: ${PKG_GZIP_LDFLAGS:=--sysroot=${PREFIX_NATIVE}};
+: ${PKG_GZIP_PKG_CONFIGURE_ARGS:=--host=${HOST_NATIVE} --prefix= --target=${TARGET}};
: ${PKG_GZIP_SHA256SUM:=1ca41818a23c9c59ef1d5e1d00c0d5eaa2285d931c0fb059637d7c0cc02ad967};
: ${PKG_GZIP_VERSION:=1.2.4};
: ${PKG_GZIP_URL:=https://ftp.gnu.org/gnu/gzip/gzip-${PKG_GZIP_VERSION}.tar.gz};
+: ${PKG_LESS_LDFLAGS:=-L${PREFIX_LVL3}/lib};
+: ${PKG_LESS_SHA256SUM:=3fa38f2cf5e9e040bb44fffaa6c76a84506e379e47f5a04686ab78102090dda5};
+: ${PKG_LESS_VERSION:=481};
+: ${PKG_LESS_URL:=http://www.greenwoodsoftware.com/less/less-${PKG_LESS_VERSION}.tar.gz};
: ${PKG_LIBELF_CC:=${HOST_NATIVE}-gcc};
: ${PKG_LIBELF_NO_DESTDIR:=1};
: ${PKG_LIBELF_NO_LIBTOOL_MIDIPIX:=1};
@@ -84,18 +126,19 @@ TIMESTAMP_FMT="%Y/%m/%d %H:%M:%S";
: ${PKG_LIBELF_SHA256SUM:=591a9b4ec81c1f2042a97aa60564e0cb79d041c52faa7416acb38bc95bd2c76d};
: ${PKG_LIBELF_VERSION:=0.8.13};
: ${PKG_LIBELF_URL:=http://www.mr511.de/software/libelf-${PKG_LIBELF_VERSION}.tar.gz};
+: ${PKG_LIBZ_CONFIGURE_ARGS:=--host=${HOST_NATIVE} --prefix= --target=${TARGET}};
: ${PKG_LIBZ_SHA256SUM:=33e65f22ec3d3e3f87436e53f82eb114054cd3aa373dc0480625dd92806fd9a0};
: ${PKG_LIBZ_VERSION:=1.2.8.2015.05.20};
: ${PKG_LIBZ_URL:=https://sortix.org/libz/release/libz-${PKG_LIBZ_VERSION}.tar.gz};
: ${PKG_MAKE_SHA256SUM:=f3e69023771e23908f5d5592954d8271d3d6af09693cecfd29cee6fde8550dc8};
: ${PKG_MAKE_VERSION:=3.81};
: ${PKG_MAKE_URL:=https://ftp.gnu.org/gnu/make/make-${PKG_MAKE_VERSION}.tar.bz2};
-: ${PKG_MPC_CONFIGURE_EXTRA_ARGS:=--with-gmp=${PREFIX_NATIVE} --with-mpfr=${PREFIX_NATIVE}};
+: ${PKG_MPC_CONFIGURE_ARGS_EXTRA:=--with-gmp=${PREFIX_NATIVE} --with-mpfr=${PREFIX_NATIVE}};
: ${PKG_MPC_PREFIX_EXTRA:=${PREFIX_TARGET}};
: ${PKG_MPC_SHA256SUM:=ed5a815cfea525dc778df0cb37468b9c1b554aaf30d9328b1431ca705b7400ff};
: ${PKG_MPC_VERSION:=1.0.1};
: ${PKG_MPC_URL:=ftp://ftp.gnu.org/gnu/mpc/mpc-${PKG_MPC_VERSION}.tar.gz};
-: ${PKG_MPFR_CONFIGURE_EXTRA_ARGS:=--with-gmp=${PREFIX_NATIVE}};
+: ${PKG_MPFR_CONFIGURE_ARGS_EXTRA:=--with-gmp=${PREFIX_NATIVE}};
: ${PKG_MPFR_PREFIX_EXTRA:=${PREFIX_TARGET}};
: ${PKG_MPFR_SHA256SUM:=79c73f60af010a30a5c27a955a1d2d01ba095b72537dab0ecaad57f5a7bb1b6b};
: ${PKG_MPFR_VERSION:=3.1.2};
@@ -103,12 +146,35 @@ TIMESTAMP_FMT="%Y/%m/%d %H:%M:%S";
: ${PKG_MUSL_SHA256SUM:=720b83c7e276b4b679c0bffe9509340d5f81fd601508e607e708177df0d31c0e};
: ${PKG_MUSL_VERSION:=1.1.12};
: ${PKG_MUSL_URL:=http://www.musl-libc.org/releases/musl-${PKG_MUSL_VERSION}.tar.gz};
+: ${PKG_NCURSES_SHA256SUM=f551c24b30ce8bfb6e96d9f59b42fbea30fa3a6123384172f9e7284bcf647260};
+: ${PKG_NCURSES_VERSION=6.0};
+: ${PKG_NCURSES_URL:=https://ftp.gnu.org/gnu/ncurses/ncurses-${PKG_NCURSES_VERSION}.tar.gz};
: ${PKG_PATCH_SHA256SUM:=59c29f56faa0a924827e6a60c6accd6e2900eae5c6aaa922268c717f06a62048};
: ${PKG_PATCH_VERSION:=2.7};
: ${PKG_PATCH_URL:=https://ftp.gnu.org/gnu/patch/patch-${PKG_PATCH_VERSION}.tar.gz};
+: ${PKG_POPT_SHA256SUM:=e728ed296fe9f069a0e005003c3d6b2dde3d9cad453422a10d6558616d304cc8};
+: ${PKG_POPT_VERSION:=1.16};
+: ${PKG_POPT_URL:=http://rpm5.org/files/popt/popt-${PKG_POPT_VERSION}.tar.gz};
+: ${PKG_RSYNC_CFLAGS=-I${PREFIX_LVL3}/include};
+: ${PKG_RSYNC_CONFIGURE_ARGS_EXTRA=--with-included-zlib};
+: ${PKG_RSYNC_LDFLAGS=-L${PREFIX_LVL3}/lib};
+: ${PKG_RSYNC_VERSION:=3.1.2};
+: ${PKG_RSYNC_URL:=https://download.samba.org/pub/rsync/src/rsync-${PKG_RSYNC_VERSION}.tar.gz};
+: ${PKG_TAR_SHA256SUM:=6a6b65bac00a127a508533c604d5bf1a3d40f82707d56f20cefd38a05e8237de};
+: ${PKG_TAR_VERSION:=1.28};
+: ${PKG_TAR_URL:=https://ftp.gnu.org/gnu/tar/tar-${PKG_TAR_VERSION}.tar.gz};
: ${PKG_SED_SHA256SUM:=f048d1838da284c8bc9753e4506b85a1e0cc1ea8999d36f6995bcb9460cddbd7};
: ${PKG_SED_VERSION:=4.2.2};
: ${PKG_SED_URL:=https://ftp.gnu.org/gnu/sed/sed-${PKG_SED_VERSION}.tar.bz2};
+: ${PKG_UTIL_LINUX_CONFIGURE_ARGS_EXTRA:=--disable-agetty --disable-wall --disable-write};
+: ${PKG_UTIL_LINUX_SHA256SUM:=133c14f625d40e90e73e9d200faf3f2ce87937b99f923c84e5504ac0badc71d6};
+: ${PKG_UTIL_LINUX_VERSION:=2.27.1};
+: ${PKG_UTIL_LINUX_URL:=https://www.kernel.org/pub/linux/utils/util-linux/v2.27/util-linux-${PKG_UTIL_LINUX_VERSION}.tar.gz};
+: ${PKG_WHICH_SHA256SUM:=f4a245b94124b377d8b49646bf421f9155d36aa7614b6ebf83705d3ffc76eaad};
+: ${PKG_WHICH_VERSION:=2.21};
+: ${PKG_WHICH_URL:=https://ftp.gnu.org/gnu/which/which-${PKG_WHICH_VERSION}.tar.gz};
+: ${PKG_XZ_VERSION:=5.2.2};
+: ${PKG_XZ_URL:=http://tukaani.org/xz/xz-${PKG_XZ_VERSION}.tar.gz};
: ${PKG_DALIST_URL:=${GITROOT_HEAD}/dalist};
: ${PKG_NTAPI_URL:=${GITROOT_HEAD}/ntapi};
@@ -116,6 +182,8 @@ TIMESTAMP_FMT="%Y/%m/%d %H:%M:%S";
: ${PKG_NTCTTY_URL:=${GITROOT_HEAD}/ntctty};
: ${PKG_PEMAGINE_URL:=${GITROOT_HEAD}/pemagine};
: ${PKG_PSXSCL_URL:=${GITROOT_HEAD}/psxscl};
+: ${PKG_PSXSTUB_URL:=${GITROOT}/psxstub};
+: ${PKG_PSXSTUB_URL_TYPE:=git};
: ${PKG_PSXTYPES_URL:=${GITROOT_HEAD}/psxtypes};
# vim:filetype=sh
diff --git a/ncurses-6.0.local.patch b/ncurses-6.0.local.patch
new file mode 100644
index 00000000..2927fba3
--- /dev/null
+++ b/ncurses-6.0.local.patch
@@ -0,0 +1,21 @@
+--- ncurses-6.0/config.sub.orig 2015-05-02 13:52:04.000000000 +0200
++++ ncurses-6.0/config.sub 2016-02-12 13:01:38.765370000 +0100
+@@ -807,6 +807,9 @@
+ microblaze*)
+ basic_machine=microblaze-xilinx
+ ;;
++ midipix)
++ os=-midipix
++ ;;
+ mingw64)
+ basic_machine=x86_64-pc
+ os=-mingw64
+@@ -1387,7 +1390,7 @@
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* | -cegcc* \
+ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+- | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
++ | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+ | -linux-newlib* | -linux-musl* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
diff --git a/ntapi.local.patch b/ntapi.local.patch
new file mode 100644
index 00000000..d69de097
--- /dev/null
+++ b/ntapi.local.patch
@@ -0,0 +1,67 @@
+diff --git a/include/ntapi/nt_mount.h b/include/ntapi/nt_mount.h
+index 8a7258a..cf2deac 100644
+--- a/include/ntapi/nt_mount.h
++++ b/include/ntapi/nt_mount.h
+@@ -10,6 +10,10 @@
+ #define __DEVICE_PATH_PREFIX_LEN (8 * sizeof(wchar16_t))
+ #define __DEVICE_PATH_PREFIX_HASH (0xDA6FA40B)
+
++/* {'\\','D','e','v','i','c','e','\\',M','u','p','\\'} */
++#define __DEVICE_MUP_PATH_PREFIX_LEN (12 * sizeof(wchar16_t))
++#define __DEVICE_MUP_PATH_PREFIX_HASH (0x0CEBB5F6)
++
+ /* {'\\','?','?','\\','V','o','l','u','m','e','{'} */
+ #define __VOLUME_PATH_PREFIX_LEN (11 * sizeof(wchar16_t))
+ #define __VOLUME_PATH_PREFIX_HASH (0xFEBA8529)
+diff --git a/src/fs/ntapi_tt_statfs.c b/src/fs/ntapi_tt_statfs.c
+index 114cc8e..8bc43e2 100644
+--- a/src/fs/ntapi_tt_statfs.c
++++ b/src/fs/ntapi_tt_statfs.c
+@@ -23,7 +23,7 @@ int32_t __stdcall __ntapi_tt_statfs(
+ nt_oa oa;
+ nt_iosb iosb;
+ nt_unicode_string * sdev;
+- uint32_t hash;
++ uint32_t hash,hash_mup;
+ wchar16_t * wch;
+ wchar16_t * wch_mark;
+ uint32_t offset;
+@@ -156,6 +156,14 @@ int32_t __stdcall __ntapi_tt_statfs(
+ if (hash != __DEVICE_PATH_PREFIX_HASH)
+ return NT_STATUS_INVALID_HANDLE;
+
++ hash_mup = __ntapi->tt_buffer_crc32(
++ 0,
++ sdev->buffer,
++ __DEVICE_MUP_PATH_PREFIX_LEN);
++
++ if (hash_mup == __DEVICE_MUP_PATH_PREFIX_HASH)
++ sdev->buffer[__DEVICE_MUP_PATH_PREFIX_LEN - 1] = 0;
++
+ wch_mark = sdev->buffer + __DEVICE_PATH_PREFIX_LEN/sizeof(wchar16_t);
+ wch = wch_mark;
+ while (*wch != '\\') wch++;
+@@ -190,6 +198,9 @@ int32_t __stdcall __ntapi_tt_statfs(
+ statfs->nt_control_flags = 0;
+ statfs->nt_padding = 0;
+
++ if (hash_mup == __DEVICE_MUP_PATH_PREFIX_HASH)
++ return NT_STATUS_SUCCESS;
++
+ if (!(flags & NT_STATFS_VOLUME_GUID)) {
+ statfs->nt_drive_letter = 0;
+ pguid = (uint64_t *)&(statfs->nt_volume_guid);
+diff --git a/src/fs/ntapi_tt_open_physical_parent_directory.c b/src/fs/ntapi_tt_open_physical_parent_directory.c
+index 68d282b..742607d 100644
+--- a/src/fs/ntapi_tt_open_physical_parent_directory.c
++++ b/src/fs/ntapi_tt_open_physical_parent_directory.c
+@@ -37,6 +37,9 @@ int32_t __stdcall __ntapi_tt_open_physical_parent_directory(
+ return NT_STATUS_BAD_FILE_TYPE;
+
+ wch = path->buffer + (path->strlen / sizeof(uint16_t));
++ if ((&wch[-1] >= path->buffer) && (wch[-1] == '\\') &&
++ (&wch[-2] >= path->buffer))
++ wch = &wch[-1];
+ while ((--wch >= path->buffer) && (*wch != '\\'));
+
+ if (wch == path->buffer )
diff --git a/pkg.build b/pkg.build
index 39dc8d6b..997da3d4 100644
--- a/pkg.build
+++ b/pkg.build
@@ -1,86 +1,137 @@
-# Order for build level 2 (runtime:) psxtypes pemagine dalist ntapi psxscl ntcon ntctty
+#
+# . ./build.vars and set -o errexit are assumed.
+#
-parse_with_pkg_name ${2} \
- bash binutils binutils_host coreutils dalist \
- diffutils findutils gawk gmp grep libelf make \
- mpc mpfr ntapi ntcon ntctty patch pemagine \
- psxscl psxtypes sed;
-if is_build_script_done finished; then
- exit 212;
-else
- case "${SCRIPT_FNAME%[0-9][0-9]*}" in
- 1) _configure_args="--host=${HOST_NATIVE} --prefix=${PKG_PREFIX:-/} --target=${TARGET}";
- PKG_NO_CONFIG_CACHE=1; ;;
- 2)
- _configure_args="--prefix=${PREFIX_LVL} --host=${HOST_NATIVE}";
- PKG_BUILD_TYPE=cross; PKG_URL_TYPE=git;
- PKG_NO_CONFIG_CACHE=${PKG_NO_DESTDIR:=${PKG_NO_EXTRACT:=${PKG_NO_PATCH:=1}}};
- export CFLAGS_PATH=-I${PREFIX_LVL}/include;
- export LDFLAGS_PATH=-L${PREFIX_LVL}/lib; ;;
- *) _configure_args=${PKG_CONFIGURE_ARGS:--C --host=${HOST_NATIVE} --prefix= --target=${TARGET}}; ;;
- esac;
+# Order for build level 2 (runtime:) psxtypes pemagine dalist ntapi psxscl ntcon ntctty
+parse_with_pkg_name ${2} \
+ bash binutils binutils_host bzip2 coreutils \
+ dalist dash diffutils findutils gawk gmp \
+ grep gzip less libelf libz make mpc mpfr ncurses \
+ ntapi ntcon ntctty patch pemagine popt psxscl \
+ psxstub psxtypes rsync sed tar util_linux which xz;
+case "${SCRIPT_FNAME%[0-9][0-9]*}" in
+1) _configure_args="--host=${HOST_NATIVE} --prefix=${PKG_PREFIX:-/} --target=${TARGET}";
+ PKG_NO_CONFIG_CACHE=1; ;;
+2)
+ _configure_args="--prefix=${PREFIX_LVL} --host=${HOST_NATIVE}";
+ PKG_BUILD_TYPE=cross; PKG_URL_TYPE=git;
+ PKG_NO_CONFIG_CACHE=${PKG_NO_DESTDIR:=${PKG_NO_EXTRACT:=1}};
+ PKG_UNSET_VARS_BUILD="CC LD CFLAGS LDFLAGS PREFIX";
+ export CFLAGS_PATH=-I${PREFIX_LVL}/include;
+ export LDFLAGS_PATH=-L${PREFIX_LVL}/lib;
+ ;;
+*) _configure_args=${PKG_CONFIGURE_ARGS:--C --host=${HOST_NATIVE} --prefix= --target=${TARGET}}; ;;
+esac;
+if ! is_build_script_done fetch; then
if [ "x${PKG_URL_TYPE:-wget}" = "xwget" ]; then
+ rm_if_exists $(get_basename ${PKG_URL});
fetch ${PKG_URL} ${PKG_SHA256SUM};
else
- fetch_git ${PKG_SUBDIR} ${PKG_URL};
+ rm_if_exists ${PKG_SUBDIR};
+ fetch_git ${PKG_SUBDIR} ${PKG_URL} "${PKG_GIT_ARGS_EXTRA}";
+ PKG_NO_EXTRACT=1;
fi;
- set_build_dir ${PKG_SUBDIR} ${PKG_BUILD_TYPE:-native};
+ set_build_script_done fetch -extract;
+else
+ [ "x${PKG_URL_TYPE:-wget}" = "xwget" ] || PKG_NO_EXTRACT=1;
fi;
if command -v pkg_${PKG_NAME}_finish >/dev/null; then
pkg_${PKG_NAME}_finish; exit 0;
elif [ ${PKG_NO_EXTRACT:-0} -eq 0 ] &&\
-! is_build_script_done extracted; then
+! is_build_script_done extract; then
rm_if_exists ${PKG_SUBDIR};
tar -axf ${PKG_FNAME};
- set_build_script_done extracted -patched;
+ set_build_script_done extract -build_dir;
fi;
-if [ ${PKG_NO_PATCH:-0} -eq 0 ] &&\
-! is_build_script_done patched; then
+if [ -n "${PKG_BUILD_DIR}" ]; then
+ BUILD_DIR=${PKG_BUILD_DIR};
+else
+ set_build_dir ${PKG_SUBDIR} ${PKG_BUILD_TYPE:-native};
+fi;
+if ! is_build_script_done build_dir; then
+ [ ${PKG_SUBDIR} != ${BUILD_DIR} ] &&\
+ rm_if_exists -m ${BUILD_DIR};
+ set_build_script_done build_dir -patch;
+fi;
+if ! is_build_script_done patch; then
+ [ -f portage/${PKG_SUBDIR}.midipix.patch ] && \
+ patch -b -d ${PKG_SUBDIR} -p1 \
+ < portage/${PKG_SUBDIR}.midipix.patch;
+ [ ${PKG_NO_PATCH_LOCAL:-0} -eq 0 ] && \
+ [ -f ${_PWD}/${PKG_SUBDIR}.local.patch ] && \
+ patch -b -d ${PKG_SUBDIR} -p1 \
+ < ${_PWD}/${PKG_SUBDIR}.local.patch;
if [ -n "${PKG_PATCHES_EXTRA_URL}" ]; then
- apply_patches ${PKG_PATCHES_EXTRA_URL} ${PKG_SUBDIR}-patches-extra;
+ apply_patches ${PKG_PATCHES_EXTRA_URL} ${PKG_SUBDIR};
if [ -n "${PKG_PATCHES_EXTRA_MANIFEST}" ]; then
compare_hash_manifest ${PKG_PATCHES_EXTRA_MANIFEST};
fi;
fi;
- patch -d ${PKG_SUBDIR} -p1 \
- < portage/${PKG_SUBDIR}.midipix.patch;
[ ${PKG_NO_CONFIG_CACHE:-0} -eq 0 ] &&\
- cp portage/config.cache ${PKG_SUBDIR}/;
- [ ${PKG_NO_LIBTOOL_MIDIPIX:-0} -eq 0 ] && \
+ cp portage/config.cache ${BUILD_DIR}/;
+ [ ${PKG_NO_LIBTOOL_MIDIPIX:-0} -eq 0 ] && \
cp portage/libtool.midipix ${PKG_SUBDIR}/;
- set_build_script_done patched -configured;
+ set_build_script_done patch -configure;
fi;
-if ! is_build_script_done configured; then
- rm_if_exists -m -c ${BUILD_DIR};
- ../${PKG_SUBDIR}/configure \
- ${_configure_args} \
- ${PKG_CONFIGURE_EXTRA_ARGS};
- set_build_script_done configured -built;
+cd ${BUILD_DIR};
+if [ ${PKG_NO_CONFIGURE:-0} -eq 0 ]\
+&& ! is_build_script_done configure; then
+ ../${PKG_SUBDIR}/configure \
+ ${_configure_args} \
+ ${PKG_CONFIGURE_ARGS_EXTRA};
+ set_build_script_done configure clean -build;
else
- cd ${BUILD_DIR};
+ set_build_script_done clean;
fi;
-if ! is_build_script_done built; then
- make ${MAKEFLAGS};
- set_build_script_done built -installed1;
+if [ ${PKG_NO_CLEAN:-0} -eq 0 ]\
+&& ! is_build_script_done clean; then
+ make ${MAKEFLAGS} clean;
+ set_build_script_done clean -build;
+fi;
+if ! is_build_script_done build; then
+ if [ -n "${PKG_UNSET_VARS_BUILD}" ]; then
+ unset ${PKG_UNSET_VARS_BUILD}
+ fi;
+ make ${PKG_MAKEFLAGS_BUILD_EXTRA:+${PKG_MAKEFLAGS_BUILD_EXTRA}}\
+ ${MAKEFLAGS} \
+ ${AR:+AR=${AR}} \
+ ${CC:+CC=${CC}} ${CFLAGS:+"CFLAGS=${CFLAGS}"} \
+ ${LD:+LD=${LD}} ${LDFLAGS:+"LDFLAGS=${LDFLAGS}"}\
+ ${RANLIB:+RANLIB=${RANLIB}};
+ set_build_script_done build -install1;
fi;
-if ! is_build_script_done installed1; then
- if [ ${PKG_NO_DESTDIR:-0} -eq 0 ]; then
- make ${MAKEFLAGS} DESTDIR=${PREFIX_LVL} install;
+if ! is_build_script_done install1; then
+ if command -v pkg_${PKG_NAME}_install >/dev/null; then
+ pkg_${PKG_NAME}_install;
+ elif [ ${PKG_NO_DESTDIR:-0} -eq 0 ]; then
+ make ${PKG_MAKEFLAGS_INSTALL_EXTRA:+${PKG_MAKEFLAGS_BUILD_EXTRA}}\
+ ${MAKEFLAGS} \
+ ${AR:+AR=${AR}} \
+ ${CC:+CC=${CC}} ${CFLAGS:+"CFLAGS=${CFLAGS}"} \
+ ${LD:+LD=${LD}} ${LDFLAGS:+"LDFLAGS=${LDFLAGS}"}\
+ ${RANLIB:+RANLIB=${RANLIB}} \
+ DESTDIR=${PREFIX_LVL} install;
else
- make ${MAKEFLAGS} install;
+ make ${PKG_MAKEFLAGS_INSTALL_EXTRA:+${PKG_MAKEFLAGS_BUILD_EXTRA}}\
+ ${MAKEFLAGS} \
+ ${AR:+AR=${AR}} \
+ ${CC:+CC=${CC}} ${CFLAGS:+"CFLAGS=${CFLAGS}"} \
+ ${LD:+LD=${LD}} ${LDFLAGS:+"LDFLAGS=${LDFLAGS}"}\
+ ${PREFIX:+PREFIX=${PREFIX}} \
+ ${RANLIB:+RANLIB=${RANLIB}} install;
fi;
- set_build_script_done installed1 -installed2 -finished;
+ set_build_script_done install1 -install2 -finish;
fi;
-if ! is_build_script_done installed2; then
- [ -n "${PKG_PREFIX_EXTRA}" ] &&\
+if [ -n "${PKG_PREFIX_EXTRA}" ]\
+&& ! is_build_script_done install2; then
make DESTDIR=${PKG_PREFIX_EXTRA} install;
- set_build_script_done installed2 -installed3 -finished;
+ set_build_script_done install2 -install3 -finish;
fi;
-if ! is_build_script_done installed3; then
- command -v pkg_${PKG_NAME}_install_post \
- >/dev/null && pkg_${PKG_NAME}_install_post;
- set_build_script_done installed3 -finished;
+if command -v pkg_${PKG_NAME}_install_post >/dev/null\
+&& ! is_build_script_done install3; then
+ pkg_${PKG_NAME}_install_post;
+ set_build_script_done install3 -finish;
fi;
-set_build_script_done finished;
+set_build_script_done finish;
# vim:filetype=sh
diff --git a/popt-1.16.local.patch b/popt-1.16.local.patch
new file mode 100644
index 00000000..8ccca2cd
--- /dev/null
+++ b/popt-1.16.local.patch
@@ -0,0 +1,21 @@
+--- popt-1.16/config.sub.orig 2010-04-26 14:16:44.000000000 +0200
++++ popt-1.16/config.sub 2016-02-12 15:51:37.738535300 +0100
+@@ -735,6 +735,9 @@
+ microblaze)
+ basic_machine=microblaze-xilinx
+ ;;
++ midipix)
++ os=-midipix
++ ;;
+ mingw32)
+ basic_machine=i386-pc
+ os=-mingw32
+@@ -1294,7 +1297,7 @@
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* | -cegcc* \
+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+- | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
++ | -midipix* | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
diff --git a/psxscl.local.patch b/psxscl.local.patch
new file mode 100644
index 00000000..72a40bdb
--- /dev/null
+++ b/psxscl.local.patch
@@ -0,0 +1,150 @@
+diff --git a/src/init/psx_init_cwd.c b/src/init/psx_init_cwd.c
+index 924b1b8..02846ba 100644
+--- a/src/init/psx_init_cwd.c
++++ b/src/init/psx_init_cwd.c
+@@ -17,7 +17,7 @@
+ #ifndef __PSX_DEFAULT_ROOT_DIRECTORY
+ #define __PSX_DEFAULT_ROOT_DIRECTORY { \
+ '\\','?','?','\\', \
+- 'C',':','\\','m','i','d','i','p','i','x'}
++ 'Z',':','\\'}
+ #endif
+
+ int32_t __psx_init_cwd(void)
+diff --git a/src/iofn/psx_iofn_fsdir.c b/src/iofn/psx_iofn_fsdir.c
+index 53b3380..8bdd7d8 100644
+--- a/src/iofn/psx_iofn_fsdir.c
++++ b/src/iofn/psx_iofn_fsdir.c
+@@ -52,10 +52,34 @@ static int32_t __fastcall __psx_iofn_fsdir_open_next(
+ path.buffer++;
+ }
+
++ /* XXX */
++ uint32_t status;
++ static char name_buffer[1024];
++ nt_unicode_string * dev_name,full_path;
++
++ iosb.info = 0;
++ if ((status = __ntapi->zw_query_object(
++ path_info->hat,NT_OBJECT_NAME_INFORMATION,
++ name_buffer,sizeof(name_buffer),(uint32_t *)&iosb.info)))
++ return status;
++ else {
++ dev_name = (nt_unicode_string *)name_buffer;
++ if ((dev_name->strlen > 2) &&
++ (dev_name->buffer[(dev_name->strlen - 1) / 2] != '\\')) {
++ dev_name->buffer[dev_name->strlen / 2] = '\\';
++ dev_name->strlen += 2;
++ }
++ __ntapi->tt_generic_memcpy(&dev_name->buffer[dev_name->strlen / 2],
++ path.buffer,path.strlen);
++ dev_name->strlen += path.strlen;
++ full_path.maxlen = (full_path.strlen = dev_name->strlen) + 2;
++ full_path.buffer = dev_name->buffer;
++ }
++
+ /* oa */
+ oa.len = sizeof(nt_oa);
+- oa.root_dir = path_info->hat;
+- oa.obj_name = &path;
++ oa.root_dir = 0;
++ oa.obj_name = &full_path;
+ oa.obj_attr = path_info->ntobjattr;
+ oa.sec_desc = 0;
+ oa.sec_qos = 0;
+@@ -73,6 +97,45 @@ static int32_t __fastcall __psx_iofn_fsdir_open_next(
+ 0,0);
+ }
+
++static int32_t __stdcall __psx_iofn_fsdir_open_parent_directory(
++ void ** hparent,
++ void * hdir,
++ uintptr_t * buffer,
++ uint32_t buffer_size,
++ uint32_t desired_access,
++ uint32_t open_options,
++ int32_t * type)
++{
++ uint32_t status;
++ nt_io_status_block iosb;
++ nt_file_internal_information fii_hdir,fii_hroot;
++ struct __psx_tlca * tlca;
++
++ tlca = __tlca_self();
++ status = __ntapi->zw_query_information_file(
++ hdir,&iosb,&fii_hdir,sizeof(fii_hdir),
++ NT_FILE_INTERNAL_INFORMATION);
++ if (status)
++ return status;
++ status = __ntapi->zw_query_information_file(
++ tlca->ctx->root.hfile,&iosb,&fii_hroot,sizeof(fii_hroot),
++ NT_FILE_INTERNAL_INFORMATION);
++ if (status)
++ return status;
++ if (fii_hdir.index_number.quad == fii_hroot.index_number.quad) {
++ *hparent = hdir;
++ *type = PSX_FD_OS_FS_ROOT;
++ status = NT_STATUS_SUCCESS;
++ } else
++ status = __ntapi->tt_open_physical_parent_directory(
++ hparent,hdir,
++ buffer,
++ buffer_size,
++ desired_access,
++ open_options,type);
++ return status;
++}
++
+ int32_t __stdcall __psx_iofn_fsdir_getvents(
+ void * hfile,
+ void * hevent,
+@@ -133,6 +196,6 @@ void __fastcall __psx_iofn_fsdir_init(struct __iovtbl * iovtbl)
+ iovtbl->getdents = __ntapi->zw_query_directory_file;
+ iovtbl->getvents = __psx_iofn_fsdir_getvents;
+
+- iovtbl->open_logical_parent = __ntapi->tt_open_logical_parent_directory;
+- iovtbl->open_physical_parent = __ntapi->tt_open_physical_parent_directory;
++ iovtbl->open_logical_parent = __psx_iofn_fsdir_open_parent_directory;
++ iovtbl->open_physical_parent = __psx_iofn_fsdir_open_parent_directory;
+ }
+diff --git a/src/path/psx_path_parse.c b/src/path/psx_path_parse.c
+index ff4d933..08431b6 100644
+--- a/src/path/psx_path_parse.c
++++ b/src/path/psx_path_parse.c
+@@ -48,8 +48,8 @@ int32_t __fastcall __psx_parse_normalized_path_utf8(
+ ch,
+ ++(path_info->depth));
+
+- if (*(++ch)=='/') {
+- ch++;
++ if (ch[1]=='/') {
++ ch+=2;
+ }
+ }
+
+diff --git a/src/path/psx_path_resolve.c b/src/path/psx_path_resolve.c
+index 2bd615c..705e646 100644
+--- a/src/path/psx_path_resolve.c
++++ b/src/path/psx_path_resolve.c
+@@ -260,7 +260,7 @@ static int __fastcall __path_swap_at(
+ int32_t status;
+
+ /* swap */
+- if (path_info->pathflags & PSX_PATH_CLOSE_AT)
++ if ((path_info->pathflags & PSX_PATH_CLOSE_AT) && (path_info->hat != path_info->hfile))
+ if ((status = __iovtbl[path_info->fdtypeat].close(path_info->hat)))
+ return status;
+
+diff --git a/src/process/_execve.c b/src/process/_execve.c
+index a623d2a..80dd4a9 100644
+--- a/src/process/_execve.c
++++ b/src/process/_execve.c
+@@ -232,7 +232,7 @@ intptr_t __sys_execve(const unsigned char * path, const char ** argv, const char
+ NT_SECTION_QUERY|NT_SECTION_MAP_EXECUTE,
+ &oa,&ssize,
+ NT_PAGE_EXECUTE,
+- NT_SEC_IMAGE,
++ NT_SEC_RESERVE,
+ image->info.hfile)))
+ return __execve_return(tlca,0,target,-ENOEXEC);
+
diff --git a/rsync-3.1.2.local.patch b/rsync-3.1.2.local.patch
new file mode 100644
index 00000000..aa6c8c59
--- /dev/null
+++ b/rsync-3.1.2.local.patch
@@ -0,0 +1,21 @@
+--- rsync-3.1.2/config.sub.orig 2013-05-20 00:01:07.000000000 +0200
++++ rsync-3.1.2/config.sub 2016-02-12 15:43:21.581825700 +0100
+@@ -789,6 +789,9 @@
+ microblaze*)
+ basic_machine=microblaze-xilinx
+ ;;
++ midipix)
++ os=-midipix
++ ;;
+ mingw64)
+ basic_machine=x86_64-pc
+ os=-mingw64
+@@ -1365,7 +1368,7 @@
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* | -cegcc* \
+ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+- | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
++ | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+ | -linux-newlib* | -linux-musl* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
diff --git a/util-linux-2.27.1.local.patch b/util-linux-2.27.1.local.patch
new file mode 100644
index 00000000..7c26291e
--- /dev/null
+++ b/util-linux-2.27.1.local.patch
@@ -0,0 +1,21 @@
+--- util-linux-2.27.1/config/config.sub.orig 2015-01-07 13:05:37.000000000 +0100
++++ util-linux-2.27.1/config/config.sub 2016-02-12 12:36:20.953559000 +0100
+@@ -804,6 +804,9 @@
+ microblaze*)
+ basic_machine=microblaze-xilinx
+ ;;
++ midipix)
++ os=-midipix
++ ;;
+ mingw64)
+ basic_machine=x86_64-pc
+ os=-mingw64
+@@ -1384,7 +1387,7 @@
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* | -cegcc* \
+ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+- | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
++ | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+ | -linux-newlib* | -linux-musl* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
diff --git a/xz-5.2.2.local.patch b/xz-5.2.2.local.patch
new file mode 100644
index 00000000..0002af08
--- /dev/null
+++ b/xz-5.2.2.local.patch
@@ -0,0 +1,21 @@
+--- xz-5.2.2/build-aux/config.sub.orig 2015-09-29 13:03:41.000000000 +0200
++++ xz-5.2.2/build-aux/config.sub 2016-02-12 15:49:34.036215100 +0100
+@@ -804,6 +804,9 @@
+ microblaze*)
+ basic_machine=microblaze-xilinx
+ ;;
++ midipix)
++ os=-midipix
++ ;;
+ mingw64)
+ basic_machine=x86_64-pc
+ os=-mingw64
+@@ -1384,7 +1387,7 @@
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* | -cegcc* \
+ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+- | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
++ | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+ | -linux-newlib* | -linux-musl* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \