可能你必须修改一些代码以使你的port能够在特定的unix版本上运行.如果你做了,请确定你的修改是通用的,可以使我们可以把代码port到来自CSRG的4.4BSD,BSD/386,386BSD,NetBSD,OpenBSD.下面我们就来讲讲这个问题.
一个较好的办法是使用<sys/param.h>的BSD宏定义来区分 4.3BSD/Reno(1990)和新版本的BSD.希望你已经包含了这个文件,如果没有在你的c文件的合适位置定义以下代码:
#if (defined(__unix__) || defined(unix)) && !defined(USG) #include <sys/param.h> #endif
我们相信每一个操作系统只要定义了这两个符号就应该有sys/param.h这个文件.如果你知道那个系统没有,请发信到<[email protected]>.
另一种办法是使用GNU Autoconf的风格定义:
#ifdef HAVE_SYS_PARAM_H #include <sys/param.h> #endif
不要忘记在你的Makefile中增加这样一个CFLAGS: -DHAVE_SYS_PARAM_H.
一旦你包含了sys/param.h,你可以使用:
#if (defined(BSD) && (BSD >= 199103))
来表示代码是在4.3 Net2或新的版本上编译(如,FreeBSD 1.x, 4.3/Reno, NetBSD 0.9, 386BSD, BSD/386 1.1或更低版本)
使用:
#if (defined(BSD) && (BSD >= 199306))
来表示代码是在 4.4 代码基础上或更新的版本(如, FreeBSD 2.x, 4.4, NetBSD 1.0, BSD/386 2.0 和更新版本)上编译
4.4BSD-Lite2代码基础的BSD宏的值是199506.他并不能用于区分基于4.4-Lite的FreeBSD和根据4.4-Lite2修改的FreeBSD版本.这时应当使用__FreeBSD__
使用方法:
__FreeBSD__ 在所有FreeBSD版本中定义,在你的修改只影响FreeBSD时使用.像使用sys_errlist[]和strerror()变化的port属于伯克莱机制的,不属于FreeBSD的变化.
如果你想区分FreeBSD 1.x和2.x或3.x的变化,可以使用上面的BSD宏.如果确实是FreeBSD的特定改变(如ld在处理共享库时的参数),你可以使用__FreeBSD__,如果#if __FreeBSD__ >1表示2.x和2.x以上.如果从2.0-RELEASE开始,你需要区分的更加细致,请使用:
#if __FreeBSD__ >= 2 #include <osreldate.h> # if __FreeBSD_version >= 199504 /* 2.0.5+ release specific code here */ # endif #endif
发布 | __FreeBSD_version |
---|---|
2.0-RELEASE | 119411 |
2.1-CURRENT | 199501, 199503 |
2.0.5-RELEASE | 199504 |
2.2-CURRENT 在2.1 之前 | 199508 |
2.1.0-RELEASE | 199511 |
2.2-CURRENT 在 2.1.5 之前 | 199512 |
2.1.5-RELEASE | 199607 |
2.2-CURRENT 在 2.1.6 之前 | 199608 |
2.1.6-RELEASE | 199612 |
2.1.7-RELEASE | 199612 |
2.2-RELEASE | 220000 |
2.2.1-RELEASE | 220000 (没有改变) |
2.2-STABLE 在2.2.1-RELEASE之后 | 220000 (没有改变) |
2.2-STABLE 在 texinfo-3.9 之后 | 221001 |
2.2-STABLE 在top 之后 | 221002 |
2.2.2-RELEASE | 222000 |
2.2-STABLE 在 2.2.2-RELEASE 之后 | 222001 |
2.2.5-RELEASE | 225000 |
2.2-STABLE 在 2.2.5-RELEASE 之后 | 225001 |
2.2-STABLE 在 ldconfig -R 合并之后 | 225002 |
2.2.6-RELEASE | 226000 |
2.2.7-RELEASE | 227000 |
2.2-STABLE 在2.2.7-RELEASE之后 | 227001 |
2.2-STABLE 在semctl(2) 修改之后 | 227002 |
2.2.8-RELEASE | 228000 |
2.2-STABLE 在2.2.8-RELEASE之后 | 228001 |
3.0-CURRENT 在mount(2) 修改之前 | 300000 |
3.0-CURRENT 在mount(2) 修改之后 | 300001 |
3.0-CURRENT 在semctl(2) 修改之后 | 300002 |
3.0-CURRENT 在ioctl arg 修改之后 | 300003 |
3.0-CURRENT 在 ELF 转化之后 | 300004 |
3.0-RELEASE | 300005 |
3.0-CURRENT 在 3.0-RELEASE 之后 | 300006 |
3.0-STABLE 在 3/4 分支之后 | 300007 |
3.1-RELEASE | 310000 |
3.1-STABLE 在 3.1-RELEASE 之后 | 310001 |
3.1-STABLE 在 C++ 构造器/析构器顺序变化之后 | 310002 |
3.2-RELEASE | 320000 |
3.2-STABLE | 320001 |
3.2-STABLE 在二进制不兼容IPFW 和socket变化之后 | 320002 |
3.3-RELEASE | 330000 |
3.3-STABLE | 330001 |
3.3-STABLE 在为libc增加 mkstemp(3) 之后 | 330002 |
3.4-RELEASE | 340000 |
3.4-STABLE | 340001 |
3.5-RELEASE | 350000 |
3.5-STABLE | 350001 |
4.0-CURRENT 在3.4 | 400000 |
4.0-CURRENT 在动态连接处理(dynamic linker handling)变化之后 | 400001 |
4.0-CURRENT 在C++构造器/析构器(constructor/destructor)顺序变化之后 | 400002 |
4.0-CURRENT 加入 dladdr(3) 功能之后 | 400003 |
4.0-CURRENT 在 __deregister_frame_info 动态连接bug修正后,(also 4.0-CURRENT after EGCS 1.1.2 integration) | 400004 |
4.0-CURRENT 在 suser(9) API 变化后(also 4.0-CURRENT after newbus) | 400005 |
4.0-CURRENT 在 cdevsw 注册变化之后 | 400006 |
4.0-CURRENT 在为套接字信任添加so_cred(socket level credentials) | 400007 |
4.0-CURRENT 添加pool syscall wrapper 到libc_r之后 | 400008 |
4.0-CURRENT 修改内核的dev_t 类型到struct specinfo 指针 | 400009 |
4.0-CURRENT 在修正 jail(2) 漏洞之后 | 400010 |
4.0-CURRENT 在sigset_t 数据值修改之后 | 400011 |
4.0-CURRENT 在使用 GCC 2.95.2 编译器之后 | 400012 |
4.0-CURRENT 在增加可插式 linux-mode ioctl handler之后 | 400013 |
4.0-CURRENT 引入 OpenSSL 之后 | 400014 |
4.0-CURRENT 在GCC 2.95.2 C++ ABI 从-fvtable-thunks 到-fno-vtable- thunks修改之后 | 400015 |
4.0-CURRENT 引入 OpenSSH 之后 | 400016 |
4.0-RELEASE | 400017 |
4.0-STABLE 在 4.0-RELEASE 之后 | 400018 |
4.0-STABLE 引入delayed checksums之后 | 400019 |
4.0-STABLE 移动 libxpg4到 libc之后 | 400020 |
4.0-STABLE 升级Binutils到2.10.0后, ELF branding改变,tcsh加入基本系统 | 400021 |
4.1-RELEASE | 410000 |
4.1-STABLE after 4.1-RELEASE | 410001 |
4.1-STABLE 在 setproctitle(3) 从 libutil 移动到 libc 之后 | 410002 |
4.1.1-RELEASE | 411000 |
4.1.1-STABLE 在 4.1.1-RELEASE 之后 | 411001 |
4.2-RELEASE | 420000 |
4.2-STABLE 在融合 libgcc.a 和 libgcc_r.a, 并且修改associated GCC linkage 之后 | 420001 |
4.3-RELEASE | 430000 |
4.3-STABLE 引入 wint_t 之后 | 430001 |
4.3-STABLE 在 PCI powerstate API引入之后 | 430002 |
4.4-RELEASE | 440000 |
4.4-STABLE 在引入 d_thread_t 之后 | 440001 |
4.4-STABLE 在 mount 结构变化之后 (影响文件系统 klds). | 440002 |
4.4-STABLE 在smbfs userland 组件引入后 | 440003 |
4.5-RELEASE | 450000 |
4.5-STABLE 在usb结构元素(structure element)重命名之后 | 450001 |
5.0-CURRENT | 500000 |
5.0-CURRENT 增加ELF头文件,并修改ELF二进制branding之后 | 500001 |
5.0-CURRENT kld metadata修改之后 | 500002 |
5.0-CURRENT buf/bio 修改之后 | 500003 |
5.0-CURRENT binutils 升级之后. | 500004 |
5.0-CURRENT 移动libxpg4到libc ,引入TASKQ接口之后 | 500005 |
5.0-CURRENT 增加AGP 接口之后 | 500006 |
5.0-CURRENT perl升级到5.6.0之后 | 500007 |
5.0-CURRENT 升级 KAME 代码到 2000/07 | 500008 |
5.0-CURRENT 修改ether_ifattach()和 ether_ifdetach() 之后 | 500009 |
5.0-CURRENT after changing mtree defaults back to original variant, adding -L to follow symlinks. | 500010 |
5.0-CURRENT 修改 kqueue API 之后 | 500011 |
5.0-CURRENT 从libutil移动setproctitle(3) 到libc之后 | 500012 |
5.0-CURRENT 第一个 SMPng 提交之后 | 500013 |
5.0-CURRENT 移动<sys/select.h>到<sys/selinfo.h>之后 | 500014 |
5.0-CURRENT 融合libgcc.a 和 libgcc_r.a,关联GCC连接修改之后 | 500015 |
5.0-CURRENT 允许libc 和 libc_r 一起连接,声明-pthread将会被停止使用 | 500016 |
5.0-CURRENT after switch from struct ucred to struct xucred to stabilize kernel-exported API for mountd et al. | 500017 |
5.0-CURRENT after addition of CPUTYPE make variable for controlling CPU-specific optimizations. | 500018 |
5.0-CURRENT 在移动machine/ioctl_fd.h 到 sys/fdcio.h之后 | 500019 |
5.0-CURRENT 在locale名重命名之后 | 500020 |
5.0-CURRENT 引入 Bzip2 之后 | 500021 |
5.0-CURRENT 加入SSE支持之后 | 500022 |
5.0-CURRENT KSE Milestone 2之后 | 500023 |
5.0-CURRENT 在 d_thread_t 之后, 并且移动UUCP为port | 500024 |
5.0-CURRENT after ABI change for discriptor and creds passing on 64 bit platforms. | 500025 |
5.0-CURRENT 在XFree86 4成为系统缺省的包和增加新的libc函数strnstr()之后 | 500026 |
5.0-CURRENT 在新的libc函数strcasestr()添加之后 | 500027 |
5.0-CURRENT 在smbfs的userland组件被引入之后 | 500028 |
5.0-CURRENT after the new C99 specific-width integer types were added. | (Not incremented.) |
5.0-CURRENT 在 sendfile(2) 返回值修改之后 | 500029 |
5.0-CURRENT 引入fflags_t类型之后(appropriate size for file flags) | 500030 |
5.0-CURRENT 在 usb结构元素(structure element)重命名之后 | 500031 |
5.0-CURRENT 引入Perl 5.6.1之后 | 500032 |
注意: 2.2.5-RELEASE之后的2.2-STABLE 会把自己当成2.2.5-STABLE.因为使用的是年月的形式,从2.2开始我们采用更直接的主/次版本的形式.原因是开发者以时间不足以明确到底属于哪个发布版,如果你正进行port工作,完全不必管他,只是给你做个参考.
其实,在那么多的port中可能只有几个应该使用__FreeBSD__的.
上一页 | 首页 | 下一页 |
WRKDIRPREFIX | 向上 | 在bsd.port.mk后添加... |