2001-01-09 22:01:04 +00:00
|
|
|
Copyright (C) 1999-2001 Internet Software Consortium.
|
2000-08-09 04:37:43 +00:00
|
|
|
See COPYRIGHT in the source root or http://isc.org/copyright.html for terms.
|
2000-06-21 23:50:43 +00:00
|
|
|
|
2001-01-09 22:01:04 +00:00
|
|
|
$Id: windows-nt,v 1.7 2001/01/09 21:46:55 bwelling Exp $
|
2000-06-22 22:00:42 +00:00
|
|
|
|
2000-01-04 20:31:10 +00:00
|
|
|
Windows NT Portability Notes
|
|
|
|
|
|
|
|
OVERVIEW
|
|
|
|
|
|
|
|
A primary goal in the overall design of BIND9 was to isolate functions
|
|
|
|
that were specific to operating systems from those that are available
|
|
|
|
with ANSI C. Even though development was being done on Unix-like
|
|
|
|
machines, the main intention was that a Windows NT port could be done
|
|
|
|
with far less hassle if the incompatible bits were encapsulated into
|
|
|
|
their own dedicated modules. A libisc API was designed for each
|
|
|
|
operating system feature that was needed, and initial implementations
|
|
|
|
of those APIs were done for the various Unix operating systems. Some
|
|
|
|
of the APIs have been implemented in Win32, but not yet all.
|
|
|
|
|
|
|
|
The target Windows NT build environment was specified as having nmake
|
|
|
|
and the Microsoft Visual C++ 6.0 compiler, but explicitly _not_ having
|
|
|
|
Cygwin or any other external portability package, because we wanted to
|
|
|
|
keep the prerequisites as minimal as possible.
|
|
|
|
|
|
|
|
In the source tree, the Unix implementations for the OS APIs are in a
|
|
|
|
"unix" subdirectory of lib/isc, while the thread APIs based on POSIX
|
|
|
|
threads are in lib/isc/pthreads. The Windows versions of the APIs are
|
|
|
|
in lib/isc/win32.
|
|
|
|
|
|
|
|
COMPILING
|
|
|
|
|
|
|
|
XXX expand this section
|
|
|
|
|
|
|
|
To build a kit for Windows NT, run util/nt-kit while in the top level
|
|
|
|
directory of the BIND9 sources. Its usage is:
|
|
|
|
util/nt-kit [-zip|-nozip] [remotedest [localdest]]
|
|
|
|
where "remotedest" is the path under which the sources will be
|
|
|
|
compiled on the NT machine, and "localdest" is where the munged
|
|
|
|
source tree will be placed on the local machine in preparation for
|
2000-08-01 01:33:37 +00:00
|
|
|
mounting/zipping/whatever to get it to the remote machine.
|
2000-01-04 20:31:10 +00:00
|
|
|
|
|
|
|
The default remotedest is g:/proj/bind9-nt, because that suits my
|
|
|
|
environment and I'm the one working on this. Use forward slashes when
|
|
|
|
specifying the remote path.
|
|
|
|
|
|
|
|
The default localdest is ../bind9-nt.
|
|
|
|
|
|
|
|
A zip archive named "bind9-nt.zip" can be created in the parent
|
|
|
|
directory of "localdest" if the -zip flag is specified; otherwise,
|
|
|
|
none is made by default.
|
|
|
|
|
|
|
|
...XXX describe what nt-kit does
|
|
|
|
|
|
|
|
...XXX config.status.win32, config.h.win32
|
|
|
|
|
|
|
|
MODULES
|
|
|
|
|
|
|
|
App
|
|
|
|
|
|
|
|
This module defines several functions that are useful for writing an
|
|
|
|
application that uses the ISC library. Bob Halley originally said,
|
|
|
|
"The main reason I wrote it was to help with the sometimes difficult
|
|
|
|
problems that occur when you try to do a controlled shutdown of a
|
|
|
|
multithreaded application. This scheme [using isc_app_start/
|
|
|
|
isc_app_run/isc_app_finish] will allow an application to use the
|
|
|
|
as-yet-unwritten single-threaded version of the ISC library without
|
|
|
|
any source code changes." XXX It has not yet been implemented for
|
|
|
|
Win32.
|
|
|
|
|
|
|
|
Condition
|
|
|
|
|
|
|
|
This module provides compatibility with the pthread_cond_* functions
|
|
|
|
of POSIX, which can be used to synchronize threads based on a
|
|
|
|
condition variable.
|
|
|
|
|
|
|
|
Dir
|
|
|
|
|
|
|
|
This module implements the directory scanning routines isc_dir_open,
|
|
|
|
isc_dir_read and isc_dir_close, used to iterate over the filenames in
|
|
|
|
a directory. XXX It also implements isc_dir_chdir to set the current
|
|
|
|
directory, but this function has not yet been written for Win32.
|
|
|
|
|
2000-04-24 21:44:06 +00:00
|
|
|
File
|
|
|
|
|
|
|
|
The File module is for functions that access and/or modify operating
|
|
|
|
system information about files. XXX It has not yet been written for Win32.
|
|
|
|
|
2000-01-04 20:31:10 +00:00
|
|
|
Filelock
|
|
|
|
|
|
|
|
This module implements the pthreads functions flockfile, funlockfile
|
|
|
|
and getc_unlocked, which synchronize stdio calls from multiple
|
2000-04-24 21:44:06 +00:00
|
|
|
threads. XXX It has not yet been written for Win32. Or for Unix
|
|
|
|
for that matter. Merge into File?
|
2000-01-04 20:31:10 +00:00
|
|
|
|
|
|
|
Interfaceiter
|
|
|
|
|
|
|
|
This module implements the isc_interfaceiter_first, _next, _current
|
|
|
|
and _destroy functions to list all of the network interfaces on a
|
|
|
|
machine. XXX It has not yet been written for Win32.
|
|
|
|
|
|
|
|
Ipv6
|
|
|
|
|
|
|
|
XXX It has not yet been written for Win32.
|
|
|
|
|
|
|
|
Net
|
|
|
|
|
|
|
|
XXX It has not yet been written for Win32.
|
|
|
|
|
|
|
|
Once
|
|
|
|
|
|
|
|
This module ensures that a particular function, such as an
|
|
|
|
initialization routine, is only executed once, ensuring that any other
|
|
|
|
threads that need to have the target function executed before they can
|
|
|
|
work are blocked until the target function has completely finished.
|
|
|
|
|
|
|
|
Socket
|
|
|
|
|
|
|
|
XXX It has not yet been written for Win32.
|
|
|
|
|
|
|
|
Stdtime
|
|
|
|
|
|
|
|
This module defines isc_stdtime_get, which stores the number of
|
|
|
|
seconds since 1 Jan 1970 00:00:00 UTC in an isc_stdtime_t variable.
|
|
|
|
|
|
|
|
Thread
|
|
|
|
|
|
|
|
This module provides the isc_thread_create and isc_thread_join
|
|
|
|
functions, which behave like the POSIX Thread routines pthread_create
|
|
|
|
and pthread_join. XXX It also defines isc_thread_self to return the id of
|
|
|
|
the calling thread.
|
|
|
|
|
|
|
|
Time
|
|
|
|
|
|
|
|
This module defines several time management routines, such getting the
|
|
|
|
current time, adding or subtracting an interval, finding the
|
|
|
|
difference between two times, or simply determining whether one time
|
|
|
|
is earlier than another.
|
|
|
|
|
|
|
|
|