internals:windows:todo

This is an old revision of the document!


Todo

Library Stuff

  1. Table of all core extensions, regular extensions, sapi requirements
  2. Decide if we will distribute, third party but we will build/distribute, and third party we can't touch them
  3. Build and distribute libs (and source/makefiles/etc)
  4. Update on a regular basis with new libs
  5. Keep version information and dates current with new builds
  6. 5.3 dual built on VC6 and VC9 - VC8 libs still available - PHP6.0 kill VC6 builds
  7. recruit additional help with building libraries
  8. 64 bit versions for 2k8 of libs
  9. Document the process of getting a new library in our build systems (rules, naming, platform support, etc.)

Code

  1. Compiler warning killing spree (Kalle)
  2. lower deprecation to _CRT_SECURE_NO_DEPRECATE _CRT_NONSTDC_NO_DEPRECATE instead of /wd4996 - and kill new warnings
  3. remove no deprecate warnings and fix core to use new API (probably not until 6.0)
  4. get 6.0 compiling with unicode flag? (that would be fun)
  5. Code audit for problem areas (streams/sockets and process control are two that come to mind)
  6. fix bindlib so it doesn't do bad things to SOCKET in 64 bit, and check for native inet_pton so we can let the compiler set the WIN32_WINNT version instead of hard coding it in readdir.h - this will involve checking to see if the native call is available (vista and 2008 have it) and if not using the bindlib fallback (note theres a _WIN32_WINNT redef in Zend/zend_alloc.c we need to adress aswell) - not fun DONE (Pierre) - changed so bindlib is no longer a dependency and native calls are used where available
  7. fix browsecap so it doesn't still try to use ereg even though ereg is no longer in standard (probably flip it to pcre would work, volunteers?) DONE (Nuno)
  8. Add support for hardlinks (NT5+) and symbolic links (NT6+) - Use GetVersionInfoEx() to detect Windows version of the running system DONE (Pierre)

Missing function implementations

Core/Standard:

  1. inet_ntop Done (Kalle)
  2. inet_pton Done (Kalle)
  3. getmxrr Done (Pierre)
  4. dns_get_mx (alias of getmxrr) Done (Pierre)
  5. dns_check_record (alias of checkdnsrr) Done (Pierre)
  6. checkdnsrr Done (Pierre)
  7. dns_get_record Done (Pierre)
  8. linkinfo Done (Pierre)
  9. readlink Done (Pierre)
  10. symlink - MSDN docs for symlinks - available as of Windows Vista / Server 2008 Done (Pierre)
  11. link - MSDN docs for hardlinks - available as of Windows 2000 / Server 2000 Done (Pierre)
  12. fnmatch Done (Pierre)
  13. touch (See manual about modifying modification time of a directory) Done (Pierre)
  14. stream_socket_pair Done (Kalle)
  15. time_nanosleep Done (Pierre)
  16. time_sleep_until Done (Pierre)

Extensions:

  1. socket_create_pair Done (Kalle)

Compiler warnings

Linker etc. warnings

  • ext/gettext: generates a MSIL .netmodule or module compiled with /GL; add /LTCG to the link command line to improve linker performance
  • ext/gd: generates a LNK4098 (default lib conflicts with use of other libs)
  • ext/iconv: generates a MSIL .netmodule or module compiled with /GL; add /LTCG to the linker command line to improve linker performance
  • ext/xmlreader: generates two LNK4049 (locally defined symbol imported)
  • sapi/cli: readline generates U4004 (too many rules for target)
  • sapi/embed: generates multiple LNK4044 (unrecognized option)

Configure system

  1. equivalent of phpize on windows (one extension configure/compile)
  2. fix some extensions that should be threadsafe only (apache2) or error instead of warn and ignore on non-zts
  3. quick checkover of extensions that should be disable able (ereg, mysqlnd)
  4. configs for extensions that can be done for windows (ncurses et al)
  1. Add little ifdef for a pretty string for compiler version used - make available in phpinfo *DONE* and in .rc template, shared extensions will need their own compiler version for their info and .rc
/* pretty string for the compiler we're using */
#if _MSC_VER >= 1600
#define MSVC_COMPILER_STRING "MSVC10 (2010)"
#elif _MSC_VER >= 1500
#define MSVC_COMPILER_STRING "MSVC9 (2008)"
#elif _MSC_VER >= 1400
#define MSVC_COMPILER_STRING "MSVC8 (2005)"
#elif _MSC_VER >= 1310
#define MSVC_COMPILER_STRING "MSVC7.1 (.NET 2003)"
#elif _MSC_VER >= 1300
#define MSVC_COMPILER_STRING "MSVC7 (.NET 2002)"
#elif _MSC_VER < 1300
#define MSVC_COMPILER_STRING "MSVC6"
#endif

PHP can't be built with anything less than VC6 with all the service packs. There is no way to differentiate between 2005 RTM and 2005 SP1, so always use SP1!

PHP Build Box

  1. re2c on box Done (Pierre)
  2. exchange cygwin build system for php build system Done (Pierre)
  3. create release build system
  4. move all pecl extension building to pecl (pecl snaps on pecl)
  5. 64 bit snaps started for 5.3 DONE (Pierre)
  6. reorganize the libraries so we have branches and tagged versions with different libs Done (Pierre)

Partially done - pecl2 now is organized by compiler/arch

  1. Install Oracle Instant Client 11g from http://www.oracle.com/technology/software/tech/oci/instantclient/index.html Done (Pierre)

PECL Build Box

  1. Get builds going for snaps (CVS versions), release versions, and alpha/beta if applicable

Windows GCOV Box

- Auto building and testing similar to gcov, only for windows

Documentation

  1. Update the official Windows build documentation
  2. Update the PECL on Windows documentation
  3. Update related FAQs: (obtaining libraries and compiling needs)
  4. A recent post about installation doc needs
internals/windows/todo.1253476778.txt.gz · Last modified: 2017/09/22 13:28 (external edit)