summaryrefslogtreecommitdiffstats
path: root/TODO
blob: 8e70f766fcbc5a798f1690acd47ac3d857ed9f9e (plain)
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
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 `<binpkg>.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.