Roadmap for Development
Johnny C. Lam
Problems
I want to tackle before pkgsrcCon 2007 in Barcelona:
- Standalone wrapper package
- multiple LOCALBASEs
- Dependencies
Standalone wrapper package
Current state of pkgsrc wrappers:
- Wrapper and buildlink3 frameworks are very tightly tied into pkgsrc.
- Wrapper are written in mixture of make, shell, and sed code (quoting hell).
- Can't be used by other projects
Standalone wrapper package
Proposed design of new wrappers:
- Standalone software that wraps calls to the real cc, ld, etc., similar to ccache or distcc.
- Provides GCC frontend to backend compiler.
- Written in C
- Caching will only be added if there is noticable performance benefit
multiple LOCALBASEs
Related problems:
- Installing multiple versions of a package
- Easier upgrade path on production systems
- Package views
multiple LOCALBASEs
Current support for multiple LOCALBASEs:
- Package views is a "working" implementation
- EVAL_PREFIX tries to do dynamic detection of installation prefix of a package at build time
multiple LOCALBASEs
Problems:
- Binary packages
- Referring to paths to files provided by other packages.
multiple LOCALBASEs
Solution:
- Symlink dependencies into LOCALBASE of dependent package.
- Always refer to paths in "own" LOCALBASE
Really only workable for few LOCALBASEs, e.g. package views would be symlink hell.
Dependencies
- pkgsrc holds entire dependency structure, e.g. png/buildlink3.mk includes zlib/buildlink3.mk
- Package tells all dependent packages what their dependency relationship is, e.g. BUILDLINK_API_DEPENDS+= png>=1.2.4, BUILDLINK_ABI_DEPENDS?= png>=1.2.6nb1
Dependencies
Idea:
- foo-1.2.10 is ABI-compatible back to foo-1.2.5
- bar-2.0 can build with foo>=1.2.0
- bar-2.0 should record dependency as foo>=1.2.5
Dependencies
- ABI-compatibility should be recorded as part of installed package
- Installed package foo-1.2.4 "knows" it's ABI-compatible with foo>=1.2.0.
- pkgsrc has foo-1.2.10 which "knows" to record itself as ABI-compatible with foo-1.2.5.
- Should allow for using pkgsrc HEAD with older set of installed packages.