Build System and Test Suite Overhaul ------------------------------------ * Consider finally replacing `oh_use()` with shpp and shld. Allow running in place. Make building rules optionally (and by default) silent. * Make libopkbuild and opkg optional, without which oh-shlibdeps will be disabled (excluded from building and installation). Currently, running tests requires: $ ./autogen.sh --prefix="${PWD}/_inst/usr" \ > --with-libopkbuild=false --with-opkg=false $ make install $ make test * Replace the custom test suite harness with the TAP library and harness from Automake. Rewrite test library and tests. * Greatly expand test suite coverage. Automating Away Boilerplate Code/Lists -------------------------------------- * Add support for the CMake build system. * A test suite with mature coverage should be completed first. * oh-installfiles: If `.pkg/files` is missing, try to figure out which files should be installed, based on package name and/or section. For example: - A single package in section "boot" can provide `/boot/`. - A single package in section "dbg" can provide `/usr/lib/debug/`. - A single package in section "doc" can provide `/usr/share/man/`, `/usr/share/info/`, and `/usr/share/doc/` (subdirectory/-ies of which must not be the name of the binary package). - "libfoo.1" in section "lib" can provide `/usr/lib/${OPK_HOST_ARCH}/libfoo.so.1.*`. - "libfoo.1-dev" in section "libdev" can provide `/usr/bin/*-config` (TODO: or optionally remove custom config scripts, like src:freetype does? also, src:tcl8.6 uses a different naming style), `/usr/include/`, `/usr/lib/${OPK_HOST_ARCH}/libfoo.so.1`, and `/usr/lib/${OPK_HOST_ARCH}/pkgconfig/*.pc`. - A single package in section "locale" can provide `/usr/share/locale/`. - A single package in section "share" can provide `/usr/share/` (after files are installed into any packages in sections "doc" and "locale"). - A single package in either section "dev" or "util" can provide `/usr/bin/` (after any files matching `/usr/bin/*-config` are installed into any packages in section "libdev"). If there are multiple packages in any of sections "boot", "dbg", "doc", "locale", "share", or "dev" and "util", then all such packages must specify files to install. * oh: A new automatic build command driver/sequencer like debhelper's dh. Support options -s, -B, and -d and arguments for oh-autoconfigure, oh-autobuild, oh-autotest, oh-autoinstall, and oh-autoclean. Support targets "nop", "configure", "build" (which also runs "configure" and "test"), "test", "install", and "clean". If cross building, don't run oh-autotest. If no binary package exists in section "dbg", don't pass option -k to oh-strip. Maybe support override (e.g. `override-oh-autoconfigure`) and/or hook (e.g. "post-oh-autoinstall") targets. Maybe also automate common tasks like: - `rm -f "${dest}/usr/lib/${OPK_HOST_ARCH}/"*.a` - `rm -f "${dest}/usr/lib/${OPK_HOST_ARCH}/"*.la` - `rm -f "${dest}/usr/share/info/dir"` - Maybe provide a way to list file patterns to remove. - Maybe (in oh-installfiles?) provide a way to move files (e.g. `/usr/share/doc/` files). Other Future Tasks ------------------ * Don't list library and helper configuration files as `_SCRIPTS` (this makes them executable). * Write oh-compress. Possible Future Tasks --------------------- * Make oh-installfiles link rather than move files. Then it can count links to identify files that have been installed zero or multiple times. * Add `--with-pkgversion="${os} ${OPK_SOURCE}"` to lib/buildsystem/autoconf.sh for packages like eglibc and gcc-4.7.