This page is aimed at both Debian and upstream developers, talking about things to keep in mind when developing a program or packaging it so that it remains portable.
- See also
- Cross Compiling
- Best Practices
- Programming Considerations
- Feature vs System detection
- Build Failures
- Runtime Failures
http://bootstrap.debian.net/ - reports if packages' build dependencies could not be satisfied if bootstrapping a new arch
Compare built status of packages across many arches, including the lesser-known ones; provide a maintainer email address as p= parameter, for example the XFCE team's summary:
- The system the software is being compiled on.
- The system the software will run on.
- When building a compiler, the system the software built by the compiler will run on.
($DEB_BUILD_ARCH, $DEB_HOST_ARCH, $DEB_TARGET_ARCH & co.)
Reduce the amount of arch-specific Build-Depends by building whatever is possible (documentation for example) in a binary-indep target, hence those dependencies become Build-Depends-Indep and only one architecture needs these.
Building and Running Tools
Autoconf and Automake
(how to build a toplevel project)
(Link to ArchitectureSpecificsMemo?)
Floating Point Behaviour
Feature vs System detection
System detection (usually wrong)
CPP system macros
Other system checks ...
Check for specific functionality (good)
(PATH_MAX and friends)
Optional POSIX features
(linuxisms: mount, linuxthreads abuse)
(bsdisms: sys_errlist vs. strerror())
tcphdr, udphdr struct members have different names on BSD than on Linux; compiling with -D__FAVOR_BSD was commonly used to work around this until glibc 2.19 (see 764692); it should hopefully be no longer needed any more in the near future.
devfs on kFreeBSD
(some nodes are not allowed on FreeBSD's devfs)
Missing kernel features
Hardcoded values instead of using macros