BUILDINSTRUCTIONS.TXT
上传用户:huihehuasu
上传日期:2007-01-10
资源大小:6948k
文件大小:41k
源码类别:

xml/soap/webservice

开发平台:

C/C++

  1. BUILDINSTRUCTIONS.TXT
  2. =====================
  3. ****************************************************************************
  4. WARNING: This is not the best place to look for build instructions. You
  5. should go to http://xml.apache.org/xerces-c/build.html to see the
  6. latest stuff. The web-page is maintained more regularly than this text
  7. file.
  8. However, if you insist, here is a text dump of the same web-page from
  9. ancient times.
  10. End of warning!
  11. ****************************************************************************
  12. This page has sections on the following topics:
  13. * Building Xerces-C on Windows.
  14. * Building Xerces-C on UNIX.
  15. * Building Xerces-C on Windows using Visual Age.
  16. * Building Xerces-C on OS/2 using Visual Age.
  17. * Building Xerces-C on AS/400.
  18. * Building Xerces-C on Macintosh.
  19. * Building ICU.
  20. * How to build the User Documentation?.
  21. * I wish to port Xerces to my favourite platform. Do you have any suggestions?
  22. * What should I define XMLCh to be?
  23. * How can I generate Xerces-C binaries which includes the sample NetAccessor implementation using Libwww?
  24. * Where can I look for more help?
  25. Building on Windows 2000/NT/98
  26. ==============================
  27.     Borland C++Builder Compiler
  28.     ---------------------------
  29.     Xerces-C comes with Borland C++Builder projects to help you build Xerces-C.
  30.     The following describes the steps you need to build Xerces-C.  The library
  31.     and demo projects are all contained in the Xerces-all project group:
  32.         xerces-c-src1_5_1ProjectsWin32BCB5Xerces-allXerces-all.bpg
  33.     Each project in the group refers a directory belog Xerces-all.  For example
  34.     the XercesLib project files are contained in the directory
  35.         xerces-c-src1_5_1ProjectsWin32BCB5Xerces-allXercesLib
  36.     To build any project, open the project manager.  Double click on the project
  37.     name.  Then select "Project|Build" from the menu.  For example, double click
  38.     on XercesLib.dll in the manager.  Then select "Project|Build XercesLib" from
  39.     the menu.
  40.     Once the library has been built, include XercesLib.lib with in application's
  41.     project and place XercesLib.dll somewhere in your path.
  42.     Microsoft Visual C++
  43.     --------------------
  44.     Xerces-C comes with Microsoft Visual C++ projects and workspaces to help you
  45.     build Xerces-C. The following describes the steps you need to build Xerces-C.
  46.     Building Xerces-C library
  47.     To build Xerces-C from it source (using MSVC), you will need to open the
  48.     workspace containing the project. If you are building your application, you
  49.     may want to add the Xerces-C project inside your applications's workspace.
  50.     The workspace containing the Xerces-C project file and all other samples is:
  51.         xerces-c-src-1_1_0ProjectsWin32VC6xerces-allxerces-all.dsw
  52.     Once you are inside MSVC, you need to build the project marked XercesLib.
  53.     If you want to include the Xerces-C project separately, you need to pick up:
  54.         xerces-c-src-1_1_0ProjectsWin32VC6xerces-allXercesLibXercesLib.dsp
  55.     You must make sure that you are linking your application with the xerces-c_1.lib
  56.     library and also make sure that the associated DLL is somewhere in your path.
  57.     [Note]
  58.     If you are working on the AlphaWorks version which uses ICU, you must either
  59.     have the environment variable ICU_DATA set, or keep the international converter
  60.     files relative to the Xerces DLL (as it came with the original binary drop) for
  61.     the program to find it. For finding out where you can get ICU from and build it,
  62.     look at the last section of this page.
  63.     Building samples
  64.     Inside the same workspace (xerces-all.dsw), you'll find
  65.     several other projects. These are for the samples. Select
  66.     all the samples and right click on the selection. Then
  67.     choose "Build (selection only)" to build all the samples in
  68.     one shot.
  69. Building on UNIX platforms               
  70. Xerces-C uses GNU tools like Autoconf and GNU Make to build the system. You must first make
  71. sure you have these tools installed on your system before proceeding. If you don not have
  72. required tools, ask your system administrator to get them for you. These tools are free under
  73. the GNU Public Licence and may be obtained from the Free Software Foundation.
  74. Do not jump into the build directly before reading this.
  75. Spending some time reading the following instructions will save you a lot of wasted time and
  76. support-related e-mail communication. The Xerces-C build instructions are a little different
  77. from normal product builds. Specifically, there are some wrapper-scripts that have been
  78. written to make life easier for you. You are free not to use these scripts and use Autoconf
  79. and GNU Make directly, but we want to make sure you know what you are by-passing and what
  80. risks you are taking. So read the following instructions carefully before attempting to build
  81. it yourself.
  82. Besides having all necessary build tools, you also need to know what compilers we have tested
  83. Xerces-C on. The following table lists the relevant platforms and compilers.
  84. Operating System                                                Compiler
  85. Redhat Linux 6.1                                                egcs
  86. AIX 4.3.3 and higher                                            xlC
  87. Solaris 2.6                                                     CC
  88. HP-UX 10.2                                                      CC
  89. HP-UX 11                                                        aCC
  90. If you are not using any of these compilers, you are taking a calculated risk by exploring
  91. new grounds. Your effort in making Xerces-C work on this new compiler is greatly appreciated
  92. and any problems you face can be addressed on the Xerces-C mailing list.
  93. Differences between the UNIX platforms: The description below is generic, but as every
  94. programmer is aware, there are minor differences within the various UNIX flavors the world
  95. has been bestowed with. The one difference that you need to watch out in the discussion
  96. below, pertains to the system environment variable for finding libraries. On Linux and
  97. Solaris, the environment variable name is called LD_LIBRARY_PATH, on AIX it is LIBPATH, while
  98. on HP-UX it is SHLIB_PATH. The following discussion assumes you are working on Linux, but it
  99. is with subtle understanding that you know how to interpret it for the other UNIX flavors.
  100. [Note] If you wish to build Xerces-C with ICU, look at the last section of this page. It
  101.        tells you where you can find ICU and how you can build Xerces-C to include the ICU
  102.        internationalization library.
  103. Setting build environment variables    
  104.  Before doing the build, you must first set your environment
  105.  variables to pick-up the compiler and also specify where you
  106.  extracted Xerces-C on your machine. While the first one is probably
  107.  set for you by the system administrator, just make sure you can
  108.  invoke the compiler. You may do so by typing the compiler invocation
  109.  command without any parameters (e.g. xlc_r, or g++, or cc) and check
  110.  if you get a proper response back.
  111.  Next set your Xerces-C root path as follows:
  112.   export XERCESCROOT=<full path to xerces-c-src-1_1_0>
  113.  This should be the full path of the directory where you extracted
  114.  Xerces-C.
  115. Building Xerces-C library              
  116.  As mentioned earlier, you must be ready with the GNU tools like autoconf and gmake before
  117.  you attempt the build.
  118.  The autoconf tool is required on only one platform and produces a set of portable scripts
  119.  (configure) that you can run on all other platforms without actually having the autoconf
  120.  tool installed everywhere. In all probability the autoconf-generated script (called
  121.  configure) is already in your src directory. If not, type:
  122.    cd $XERCESCROOT/src
  123.     autoconf                                  
  124.  This generates a shell-script called configure. It is tempting to run this script directly
  125.  as is normally the case, but wait a minute. If you are using the default compilers like gcc
  126.  and g++ you do not have a problem. But if you are not on the standard GNU compilers, you
  127.  need to export a few more environment variables before you can invoke configure.
  128.  Rather than make you to figure out what strange environment variables you need to use, we
  129.  have provided you with a wrapper script that does the job for you. All you need to tell the
  130.  script is what your compiler is, and what options you are going to use inside your build,
  131.  and the script does everything for you. Here is what the script takes as input:
  132.      runConfigure
  133.      runConfigure: Helper script to run "configure" for one of the
  134.    supported platforms.
  135.      Usage: runConfigure "options"
  136.     where options may be any of the following:
  137.     -p <platform> (accepts 'aix', 'linux', 'solaris',
  138.  'hp-10', 'hp-11', 'irix', 'unixware')
  139.     -c <C compiler name> (e.g. gcc, cc, xlc)
  140.      -x <C++ compiler name> (e.g. g++, CC, xlC)                       
  141.     -d (specifies that you want to build debug version)
  142.     -m <message loader> can be 'inmem', 'icu', 'iconv'
  143.     -n <net accessor> can be 'fileonly', 'libwww'
  144.     -t <transcoder> can be 'icu' or 'native'
  145.     -r <thread option> can be 'pthread' or 'dce' (only used on HP-11)
  146.     -l <extra linker options>
  147.     -z <extra compiler options>
  148.     -h (to get help on the above commands)
  149.  [Note] Xerces-C builds as a standalone library and also as a library dependent on
  150. International Components for Unicode (ICU). For simplicity, the following discussion
  151. only targets standalone builds.
  152.  One of the common ways to build Xerces-C is as follows:
  153.   runConfigure -plinux -cgcc -xg++ -minmem -nfileonly -tnative
  154.  The response will be something like this:
  155.  Platform: linux
  156.  C Compiler: gcc
  157.  C++ Compiler: g++
  158.  Extra compile options:
  159.  Extra link options:
  160.  Message Loader: inmem
  161.  Net Accessor: fileonly
  162.  Transcoder: native
  163.  Thread option:
  164.  Debug is OFF
  165.  creating cache ./config.cache
  166.  checking for gcc... gcc
  167.  checking whether the C compiler (gcc -O -DXML_USE_NATIVE_TRANSCODER
  168.   -DXML_USE_INMEM_MESSAGELOADER   ) works... yes
  169.  checking whether the C compiler (gcc -O -DXML_USE_NATIVE_TRANSCODER
  170.   -DXML_USE_INMEM_MESSAGELOADER   ) is a cross-compiler... no
  171.  checking whether we are using GNU C... yes
  172.  checking whether gcc accepts -g... yes
  173.  checking for c++... g++
  174.  checking whether the C++ compiler (g++ -O -DXML_USE_NATIVE_TRANSCODER
  175.     -DXML_USE_INMEM_MESSAGELOADER   ) works... yes
  176.  checking whether the C++ compiler (g++ -O -DXML_USE_NATIVE_TRANSCODER
  177.   -DXML_USE_INMEM_MESSAGELOADER   ) is a cross-compiler... no
  178.  checking whether we are using GNU C++... yes
  179.  checking whether g++ accepts -g... yes
  180.  checking for a BSD compatible install... /usr/bin/install -c
  181.  checking for autoconf... autoconf
  182.  checking for floor in -lm... yes
  183.  checking how to run the C preprocessor... gcc -E
  184.  checking for ANSI C header files... yes
  185.  checking for XMLByte... no
  186.  checking host system type... i686-pc-linux-gnu
  187.  updating cache ./config.cache
  188.  creating ./config.status
  189.   creating Makefile                                                           
  190.  creating util/Makefile
  191.  creating util/Transcoders/ICU/Makefile
  192.  creating util/Transcoders/Iconv/Makefile
  193.  creating util/Transcoders/Iconv400/Makefile
  194.  creating util/Platforms/Makefile
  195.  creating util/Compilers/Makefile
  196.  creating util/MsgLoaders/InMemory/Makefile
  197.  creating util/MsgLoaders/ICU/Makefile
  198.  creating util/MsgLoaders/MsgCatalog/Makefile
  199.  creating util/MsgLoaders/MsgFile/Makefile
  200.  creating validators/DTD/Makefile
  201.  creating framework/Makefile
  202.  creating dom/Makefile
  203.  creating parsers/Makefile
  204.  creating internal/Makefile
  205.  creating sax/Makefile
  206.  creating ../obj/Makefile
  207.  creating conf.h
  208.  conf.h is unchanged
  209.  In future, you may also directly type the following commands to
  210.  create the Makefiles.
  211.  export TRANSCODER=NATIVE
  212.  export MESSAGELOADER=INMEM
  213.  export USELIBWWW=0
  214.  export CC=gcc
  215.  export CXX=g++
  216.  export CXXFLAGS=-O -DXML_USE_NATIVE_TRANSCODER -DXML_USE_INMEM_MESSAGELOADER
  217.  export CFLAGS=-O -DXML_USE_NATIVE_TRANSCODER -DXML_USE_INMEM_MESSAGELOADER
  218.  export LIBS= -lpthread
  219.  configure
  220.  If the result of the above commands look OK to you, go to the directory
  221.  $XERCESCROOT/src and type "gmake" to make the XERCES-C system.
  222.  So now you see what the wrapper script has actually been doing! It has invoked configure to
  223.  create the Makefiles in the individual sub-directories, but in addition to that, it has set
  224.  a few environment variables to correctly configure your compiler and compiler flags too.
  225.  Now that the Makefiles are all created, you are ready to do the actual build.
  226.     gmake                                     
  227.  Is that it? Yes, that's all you need to build Xerces-C.
  228. Building samples                       
  229.  Similarly, you can build the samples by giving the same commands in the
  230.  samples directory.
  231.        cd $XERCESCROOT/samples
  232. runConfigure -plinux -cgcc -xg++          
  233.        gmake
  234.  The samples get built in the bin directory. Before you run the samples,
  235.  you must make sure that your library path is set to pick up libraries
  236.  from $XERCESCROOT/lib. If not, type the following to set your library
  237.  path properly.
  238.   export LD_LIBRARY_PATH=$XERCESCROOT/lib:$LD_LIBRARY_PATH
  239.  You are now set to run the sample applications.
  240.       Building Xerces-C on Windows using
  241.       Visual Age C++
  242. A few unsupported projects are also packaged with Xerces-C.
  243. Due to origins of Xerces-C inside IBM labs, we do have
  244. projects for IBM's Visual Age C++ compiler on Windows. The
  245. following describes the steps you need to build Xerces-C
  246. using Visual Age C++.
  247. Building Xerces-C library              
  248.  Requirements:
  249.     * VisualAge C++ Version 4.0 with Fixpak 1:
  250.       Download the Fixpak from the IBM VisualAge C++
  251.       Corrective Services web page.
  252.  To include the ICU library:
  253.     * ICU Build:
  254.       You should have the ICU Library in the same directory
  255.       as the Xerces-C library. For example if Xerces-C is at
  256.       the top level of the d drive, put the ICU library at
  257.       the top level of d e.g. d:/xml4c, d:/icu.
  258.  Instructions:
  259.    1. Change the directory to d:xml4cProjectsWin32
  260.    2. If a d:xml4cProjectWin32VACPP40 directory does not
  261.       exist, create it.
  262.    3. Copy the IBM VisualAge project file, XML4C2X.icc, to
  263.       the VACPP40 directory.
  264.    4. From the VisualAge main menu enter the project file
  265.       name and path.
  266.    5. When the build finishes the status bar displays this
  267.       message: Last Compile completed Successfully with
  268.       warnings on date.
  269.  [Note] These instructions assume that you install in drive
  270. d:. Replace d with the appropriate drive letter.
  271. Building on OS/2 using Visual Age C++    
  272. OS/2 is a favourite IBM PC platforms. The only option in
  273. this platform is to use Visual Age C++ compiler. Here are
  274. the steps you need to build Xerces-C using Visual Age C++ on
  275. OS/2.
  276. Building Xerces-C library              
  277.  Requirements:
  278.     * VisualAge C++ Version 4.0 with Fixpak 1:
  279.       Download the Fixpak from the IBM VisualAge C++
  280.       Corrective Services web page.
  281.  To include the ICU library:
  282.     * ICU Build:
  283.       You should have the ICU Library in the same directory
  284.       as the Xerces-C library. For example if Xerces-C is at
  285.       the top level of the d drive, put the ICU library at
  286.       the top level of d e.g. d:/xml4c, d:/icu.
  287.  Instructions
  288.    1. Change directory to d:xml4cProjectsOS2
  289.    2. If a d:xml4cProjectOS2VACPP40 directory does not
  290.       exist, create it.
  291.    3. Copy the IBM VisualAge project file, XML4C2X.icc, to
  292.       the VACPP40 directory.
  293.    4. From the VisualAge main menu enter the project file
  294.       name and path.
  295.    5. When the build finishes the status bar displays this
  296.       message: Last Compile completed Successfully with
  297.       warnings on date.
  298.  [Note] These instructions assume that you install in drive
  299. d:. Replace d with the appropriate drive letter.
  300. Building on AS/400                       
  301. The following addresses the requirements and build of Xerces-C natively on the AS/400.
  302. Building Xerces-C library              
  303.  Requirements:
  304.     * QSHELL interpreter installed (install base option 30, operating system)
  305.     * QShell Utilities, PRPQ 5799-XEH
  306.     * ILE C++ for AS/400, PRPQ 5799-GDW
  307.     * GNU facilities (the gnu facilities are currently available by request only. Send e-mail to
  308.       rchasgo400@us.ibm.com)
  309.  Recommendations:
  310.     * There are a couple of options when building the XML4C parser on AS/400. For messaging support, you can
  311.       use the in memory message option or the message file support. For code page translation, you can use
  312.       the AS/400 native Iconv400 support or ICU. If you choose ICU, follow the instructions to build the ICU
  313.       service program with the ICU download. Those instructions are not included here.
  314.     * Currently we recommend that you take the options of MsgFile and Iconv400 (see below)
  315.  Setup Instructions:
  316.     * Make sure that you have the requirements installed on your AS/400. We highly recommend that you read
  317.       the writeup that accompanies the gnu facilities download. There are install instructions as well as
  318.       information about how modules, programs and service programs can be created in Unix-like fashion using
  319.       gnu utilities. Note that symbolic links are use in the file system to point to actual AS/400 *module,
  320.       *pgm and *srvpgm objects in libraries.
  321.     * Download the tar file (unix version) to the AS/400 (using a mapped drive), and decompress and untar the
  322.       source. We have had difficulty with the tar command on AS/400. This is under investigation. If you have
  323.       trouble, we recommend the following work around:
  324.     qsh:
  325.     gunzip -d <tar file.gz>                   
  326.     pax -r -f <uncompressed tar file>
  327.     * Create AS400 target library. This library will be the target for the resulting modules and Xerces-C
  328.       service program. You will specify this library on the OUTPUTDIR environment variable in step 4
  329.     * Set up the following environment variables in your build process (use ADDENVVAR or WRKENVVAR CL
  330.       commands):
  331.  XERCESCROOT - <the full path to your Xerces-C sources>
  332.  PLATFORM  - 'OS400'
  333.   MAKE   - '/usr/bin/gmake'                                                           
  334.  OUTPUTDIR  - <identifies target as400 library for *module, *pgm and *srvpgm objects>
  335.  ICUROOT - (optional if using ICU)  <the path of your ICU includes>
  336.     * Add QCXXN, to your build process library list. This results in the resolution of CRTCPPMOD used by the
  337.       icc compiler.
  338.     * The runConfigure instruction below uses 'egrep'. This is not on the AS/400 but you can create it by
  339.       doing the following: edtf '/usr/bin/egrep' with the following source:
  340.    #!/usr/bin/sh
  341.     /usr/bin/grep -e "$@"                     
  342.  You may want to put the environment variables and library list setup instructions in a CL program so you
  343.  will not forget these steps during your build.
  344.  Configure
  345.  To configure the make files for an AS/400 build do the following:
  346.    qsh
  347.     cd <full path to Xerces-C>/src                            
  348.    runConfigure -p os400 -x icc -c icc -m MsgFile -t Iconv400
  349.  Troubleshooting:
  350.       error: configure: error: installation or configuration problem:
  351.        C compiler cannot create executables.                          
  352.  If during runConfigure you see the above error message, it can mean one of two things. Either QCXXN is not
  353.  on your library list OR the runConfigure cannot create the temporary modules (CONFTest1, etc) it uses to
  354.  test out the compiler options. The second reason happens because the test modules already exist from a
  355.  previous run of runConfigure. To correct the problem, do the following:
  356.    DLTMOD <your OUTPUTDIR library>/CONFT* and
  357.     DLTPGM your <OUTPUTDIR library>/CONFT*    
  358.  Build
  359.    qsh
  360.     gmake -e                                  
  361.  The above gmake will result in a service program being created in your specified library and a symbolic link
  362.  to that service program placed in <path to Xerces-C/lib>. You can either bind your XML application programs
  363.  directly to the parser's service program via the BNDSRVPGM option on the CRTPGM or CRTSRVPGM command or you
  364.  can specify a binding directory on your icc command. To specify an archive file to bind to, use the -L, -l
  365.  binding options on icc. An archive file on AS/400 is a binding directory. To create an archive file, use qar
  366.  command. (see the gnu facilities write up).
  367.  After building the Xerces-C service program, create a binding directory by doing the following (note, this
  368.  binding directory is used when building the samples):
  369.  qsh
  370.  cd <full path to Xerces-C>/lib>
  371.   qar -cuv libxercesc1_1.a *.o                                                                
  372.  command = CRTBNDDIR BNDDIR(yourlib/libxercesc) TEXT('/yourlib/Xerces-C/lib/libxercesc1_1.a')
  373.  command = ADDBNDDIRE BNDDIR(yourlib/libxercesc) OBJ((yourlib/LIBXERCESC *SRVPGM) )
  374.  Troubleshooting:
  375.  If you are on a V4R3 system, you will get a bind problem 'descriptor QlgCvtTextDescToDesc not found' using
  376.  Iconv400. On V4R3 the system doesn't automatically pick up the QSYS/QLGUSR service program for you when
  377.  resolving this function. This is not the case on V4R4. To fix this, you can either manually create the
  378.  service program after creating all the resulting modules in your <OUTPUTDIR> library or you can create a
  379.  symbolic link to a binding directory that points to the QLGUSR service program and then specify an
  380.  additional -L, -l on the EXTRA_LINK_OPTIONS in Makefile.incl. See the ln and qar function in the gnu
  381.  utilities.
  382.  To build for transcoder ICU:
  383.    1. Make sure you have an ICUROOT path set up so that you can find the ICU header files (usually
  384.       /usr/local)
  385.    2. Make sure you have created a binding directory (symbolic link) in the file system so that you can bind
  386.       the Xerces-C service program to the ICU service program and specify that on the EXTRA_LINK_OPTIONS in
  387.       src/Makefile.incl (usually the default is a link in /usr/local/lib).
  388.  Creating AS400 XML parser message file:
  389.  As specified earlier, the -m MsgFile support on the runConfigure enable the parser messages to be pulled
  390.  from an AS/400 message file. To view the source for creating the message file and the XML parser messages,
  391.  see the following stream file:
  392.    EDTF <full path to Xerces-C>/src/util/MsgLoaders/MsgFile/CrtXMLMsgs
  393.  In the prolog of CrtXMLMsgs there are instructions to create the message file:
  394.    1. Use the CPYFRMSTMF to copy the CL source to an AS/400 source physical file. Note that the target source
  395.       file needs to have record length of about 200 bytes to avoid any truncation.
  396.    2. Create the CL program to create the message file and add the various message descriptions
  397.    3. Call the CL program, providing the name of the message file (use QXMLMSG as default) and a library
  398.       (this can be any library, including any product library in which you wish to embed the xml parser)
  399.  Note that the Xerces-C source code for resolving parser messages is using by default message file QXMLMSG,
  400.  *LIBL. If you want to change either the message file name or explicitly qualify the library to match your
  401.  product needs, you must edit the following .cpp files prior to your build.
  402.       <full path to Xerces-C>/src/util/MsgLoaders/MsgFile/MsgLoader.cpp
  403.        <full path to Xerces-C>/src/util/Platforms/OS400/OS400PlatformUtils.cpp
  404.  Troubleshooting:
  405.  If you are using the parser and are failing to get any message text for error codes, it may be because of
  406.  the *LIBL resolution of the message file.
  407. Building Samples on AS/400             
  408.   qsh
  409.   cd <full path to Xerces-C>/samples
  410.    runConfigure -p os400 -x icc -c icc        
  411.   gmake -e
  412.  Troubleshooting:
  413.  If you take a 'sed' error, while trying to make the
  414.  samples. This is an AS400 anomaly having to do with certain
  415.  new line character and the sed function. A temporary work
  416.  around is to use EDTF on the configure stream file
  417.  (../samples/configure) and delete the following line near
  418.  the bottom: s%@DEFS@%$DEFS%g.
  419. Building on Macintosh using CodeWarrior  
  420. Building Xerces-C library              
  421.  The directions in this file cover installing and building
  422.  Xerces-C and ICU under the MacOS using CodeWarrior.
  423.    1. Create a folder:
  424.       for the Xerces-C and ICU distributions, the "src drop"
  425.       folder
  426.    2. Download and uncompress:
  427.       the ICU and Xerces-C source distribution
  428.       the ICU and Xerces-C binary distributions, for the
  429.       documentation included
  430.    3. Move the new folders:
  431.       move the newly created Xerces-C and icu124 folders to
  432.       the "src drop" folder.
  433.    4. Drag and drop:
  434.       the Xerces-C folder into the "rename file" application
  435.       located in the same folder as this readme.
  436.       This is a MacPerl script that renames files that have
  437.       names too long to fit in a HFS/HFS+ filesystem. It
  438.       also searches through all of the source code and
  439.       changes the #include statements to refer to the new
  440.       file names.
  441.    5. Move the MacOS folder:
  442.       from the in the Projects folder to "src
  443.       drop:Xerces-C:Projects".
  444.    6. Open and build Xerces-C:
  445.       open the CodeWarrior project file "src
  446.       drop:Xerces-C:Projects:MacOS:Xerces-C:Xerces-C" and
  447.       build the Xerces-C library.
  448.    7. Open and build ICU:
  449.       open the CodeWarrior project file "src
  450.       drop:Xerces-C:Projects:MacOS:icu:icu" and build the
  451.       ICU library.
  452.    8. Binary distribution:
  453.       If you wish, you can create projects for and build the
  454.       rest of the tools and test suites. They are not needed
  455.       if you just want to use Xerces-C. I suggest that you
  456.       use the binary data files distributed with the binary
  457.       distribution of ICU instead of creating your own from
  458.       the text data files in the ICE source distribution.
  459.  There are some things to be aware of when creating your own
  460.  projects using Xerces-C.
  461.    1. You will need to link against both the ICU and
  462.       Xerces-C libraries.
  463.    2. The options "Always search user paths" and "Interpret
  464.       DOS and Unix Paths" are very useful. Some of the code
  465.       won't compile without them set.
  466.    3. Most of the tools and test code will require slight
  467.       modification to compile and run correctly (typecasts,
  468.       command line parameters, etc), but it is possible to
  469.       get them working correctly.
  470.    4. You will most likely have to set up the Access Paths.
  471.       The access paths in the Xerces-C projects should serve
  472.       as a good example.
  473.  [Note] These instructions were originally contributed by J.
  474. Bellardo. Xerces-C has undergone many changes since
  475. these instructions were written. So, these
  476. instructions are not upto date. But it will give you
  477. a jump start if you are struggling to get it to work
  478. for the first time. We will be glad to get your
  479. changes. Please respond to xerces-dev@xml.apache.org
  480. with your comments and corrections.
  481. How to Build ICU                         
  482. As mentioned earlier, Xerces-C may be built in stand-alone mode using native
  483. encoding support and also using ICU where you get support for 100's of encodings.
  484. ICU stands for International Components for Unicode and is an open source
  485. distribution from IBM. You can get ICU libraries from IBM's developerWorks site or
  486. go to the ICU download page directly.
  487. Buiding ICU for Xerces-C               
  488.  You can find generic instructions to build ICU in the ICU
  489.  documentation. What we describe below are the minimal steps
  490.  needed to build ICU for Xerces-C. Not all ICU components
  491.  need to be built to make it work with Xerces-C.
  492.  [Note] Important: Please remember that ICU and Xerces-C
  493. must be built with the same compiler, preferably
  494. with the same version. You cannot for example, build
  495. ICU with a threaded version of the xlC compiler and
  496. build Xerces-C with a non-threaded one.
  497. Building ICU on Windows                
  498.  To build ICU from its source, invoke the project
  499.  icusourceallinoneallinone.dsw and build the sub-project
  500.  labeled common. You may also want to build tools/makeconv
  501.  to make the converter tool. All others are not required for
  502.  the Xerces-C build to proceed.
  503.  To build Xerces-C from it source, you will need to include
  504.  a project file in your workspace to program your
  505.  application. Otherwise, you can use the provided workspace
  506.  and add your application to it as a separate project.
  507.  In the first case the project file is:
  508.  xml4c2ProjectsWin32VC6IXXML4C2IXXML4C2IXXML4C2.dsp
  509.  In the second case the workspace is:
  510.  xml4c2ProjectsWin32VC6IXXML4C2IXXML4C2.dsw
  511.  You must make sure that you are linking your application
  512.  with the xerces-c_1.lib library and also make sure that the
  513.  associated DLL is somewhere in your path. Note that you
  514.  must either have the environment variable ICU_DATA set, or
  515.  keep the international converter files relative to the
  516.  Xerces DLL (as it came with the original binary drop) for
  517.  the program to find it.
  518. Building ICU on UNIX platforms         
  519.  To build ICU on all UNIX platforms you at least need the autoconf tool and GNU's
  520.  gmake utility.
  521.  First make sure that you have defined the following environment variables:
  522.   export ICUROOT = <icu_installdir>
  523.    export ICU_DATA = <icu_installdir>/data/  
  524.  Next, go to the directory, the following commands will create a shell script called
  525.  'configure':
  526.   cd $ICUROOT
  527.    cd source                                 
  528.   autoconf
  529.  Commands for specific UNIX platforms are different and are described separately
  530.  below.
  531.  You will get a more detailed description of the use of configure in the ICU
  532.  documentation. The differences lie in the arguments passed to the configure script,
  533.  which is a platform-independent generated shell-script (through autoconf) and is
  534.  used to generate platform-specific Makefiles from generic Makefile.in files.
  535.  For AIX:
  536.  Type the following:
  537.     env CC="xlc_r -L/usr/lpp/xlC/lib" CXX="xlC_r -L/usr/lpp/xlC/lib"
  538. C_FLAGS="-w -O" CXX_FLAGS="-w -O"
  539.     configure --prefix=$ICUROOT
  540.     cd common
  541.      gmake                                                           
  542.     gmake install
  543.     cd ../tools/makeconv
  544.     gmake
  545.  For Solaris and Linux:
  546.       env CC="cc" CXX="CC" C_FLAGS="-w -O" CXX_FLAGS="-w -O"
  547.    ./configure --prefix=$ICUROOT                     
  548.  For HP-UX with the aCC compiler:
  549.      env CC="cc" CXX="aCC" C_FLAGS="+DAportable -w -O"
  550.   CXX_FLAGS="+DAportable -w -O" ./configure --prefix=$ICUROOT
  551.  For HP-UX with the CC compiler:
  552.  env CC="cc" CXX="CC" C_FLAGS="+DAportable -w -O"
  553.       CXX_FLAGS="+eh +DAportable -w -O" ./configure --prefix=$ICUROOT
  554. How to build the User Documentation?     
  555. The user documentation (this very page that you are reading on the browser
  556. right now), was generated using an XML application called StyleBook. This
  557. application makes use of Xerces-J and Xalan to create the HTML file from the
  558. XML source files. The XML source files for the documentation are part of the
  559. Xerces-C module. These files reside in the doc directory.
  560. Pre-requisites for building the user documentation are:
  561.    * JDK 1.2.2 (or later).
  562.    * Xerces-J (1.0.0 or later).
  563.    * Xalan (0.19.3 or later)
  564.    * Stylebook 1.0-b2
  565. Setup PATH to include the JDK 1.2.2 bin directory. Also setup CLASSPATH
  566. environment variable as follows:
  567.    * Under Windows (assumes all jars are in 'jars' directory:)
  568.      CLASSPATH=jarsstylebook-1.0-b2.jar;jarsxalan.jar;jarsxerces.jar
  569.    * Under Unix's (assumes all jars are in '~/jars' directory):
  570.      export
  571.      CLASSPATH="~/jars/stylebook-1.0-b2.jar:~/jars/xalan.jar:~/jars/xerces.jar"
  572. Next, cd to the Xerces-C source drop root directory, and enter
  573.    * Under Windows:
  574.      createDocs
  575.    * Under Unix's:
  576.      sh createDocs.bat
  577. This should generate the .html files in the 'doc/html' directory.
  578. Ok here is where you can get the three jar files that are referred to above.
  579.    * JDK 1.2.2 is available from http://java.sun.com/products/jdk/1.2/
  580.    * Xerces-J is available from http://xml.apache.org/dist/. Extract the
  581.      xerces.jar file from the binary drop and store it in the 'jars' directory
  582.      as mentioned above.
  583.    * Xalan is also available from http://xml.apache.org/dist/. Extract the
  584.      xalan.jar file from the 'jar' distribution that you just downloaded and
  585.      store it in the same 'jars' directory as mentioned above.
  586.    * Getting to Stylebook is little more involved. You will have to download
  587.      one of the 'xml-stylebook' tar balls from
  588.      http://xml.apache.org/from-cvs/xml-stylebook/ and then extract the file:
  589.      xml-stylebook/bin/stylebook-1.0-b2.jar
  590.      Under Unix's you may enter:
  591.      gzip -d -c xml-stylebook_20000207231311.tar.gz | tar xf -
  592.      xml-stylebook/bin/stylebook-1.0-b2.jar
  593.      to extract this file. Copy it to the 'jars' directory as mentioned above.
  594.      Under Windows you may use 'WinZip' to extract the jar file from the tar
  595.      ball.
  596.       I wish to port Xerces to my favourite
  597.       platform. Do you have any suggestions?
  598. All platform dependent code in Xerces has been isolated to a
  599. couple of files, which should ease the porting effort. Here
  600. are the basic steps that should be followed to port Xerces.
  601.   1. The directory 'src/util/Platforms' contains the
  602.      platform sensitive files while 'src/util/Compilers'
  603.      contains all development environment sensitive files.
  604.      Each operating system has a file of its own and each
  605.      development environment has another one of its own too.
  606.      As an example, the Win32 platform as a Win32Defs.hpp
  607.      file and the Visual C++ environment has a VCPPDefs.hpp
  608.      file. These files set up certain define tokens,
  609.      typedefs, constants, etc... that will drive the rest of
  610.      the code to do the right thing for that platform and
  611.      development environment. AIX/CSet have their own
  612.      AIXDefs.hpp and CSetDefs.hpp files, and so on. You
  613.      should create new versions of these files for your
  614.      platform and environment and follow the comments in
  615.      them to set up your own. Probably the comments in the
  616.      Win32 and Visual C++ will be the best to follow, since
  617.      that is where the main development is done.
  618.   2. Next, edit the file XML4CDefs.hpp , which is where all
  619.      of the fundamental stuff comes into the system. You
  620.      will see conditional sections in there where the above
  621.      per-platform and per-environment headers are brought
  622.      in. Add the new ones for your platform under the
  623.      appropriate conditionals.
  624.   3. Now edit 'AutoSense.hpp'. Here we set canonical Xerces
  625.      internal #define tokens which indicate the platform and
  626.      compiler. These definitions are based on known platform
  627.      and compiler defines.
  628.      AutoSense.hpp is included in XML4CDefs.hpp and the
  629.      canonical platform and compiler settings thus defined
  630.      will make the particular platform and compiler headers
  631.      to be the included at compilation.
  632.      It might be a little tricky to decipher this file so be
  633.      careful. If you are using say another compiler on
  634.      Win32, probably it will use similar tokens so that the
  635.      platform will get picked up already using what is
  636.      already there.
  637.   4. Once this is done, you will then need to implement a
  638.      version of the 'platform utilities' for your platform.
  639.      Each operating system has a file which implements some
  640.      methods of the XMLPlatformUtils class, specific to that
  641.      operating system. These are not terribly complex, so it
  642.      should not be a lot of work. The Win32 verions is
  643.      called Win32PlatformUtils.cpp, the AIX version is
  644.      AIXPlatformUtils.cpp and so on. Create one for your
  645.      platform, with the correct name, and empty out all of
  646.      the implementation so that just the empty shells of the
  647.      methods are there (with dummy returns where needed to
  648.      make the compiler happy.) Once you've done that, you
  649.      can start to get it to build without any real
  650.      implementation.
  651.   5. Once you have the system building, then start
  652.      implementing your own platform utilties methods. Follow
  653.      the comments in the Win32 version as to what they do,
  654.      the comments will be improved in subsequent versions,
  655.      but they should be fairly obvious now. Once you have
  656.      these implementations done, you should be able to start
  657.      debugging the system using the demo programs.
  658. That is the work required in a nutshell!
  659. What should I define XMLCh to be?        
  660. The answer is 'it depends'. We will mention some of the
  661. quirks that affect this decision. Hopefully, after reading
  662. whats below, you will be able to best decide what the right
  663. definition should be. We could not however, resist making a
  664. suggestion. Some observations first:
  665.    * Xerces-C uses XMLCh as the fundamental type to hold one
  666.      Unicode character as, all processing inside Xerces-C
  667.      happens in Unicode.
  668.    * Most modern C++ compilers today provide 'wchar_t' as a
  669.      fundamental type representing a 'wide character'. Most
  670.      of them define it in using a typedef. This typedef
  671.      definition is not consistent on all the platforms that
  672.      we have come across.
  673.    * The size of wchar_t varies among the various compilers.
  674.      Its either 16-bit or 32-bit. Fortunately, this only
  675.      affects how much memory you need, to process the XML
  676.      data, while everything is still in memory.
  677.    * Again on most platforms wchar_t represents a unicode
  678.      character. HPUX, is one exception to this, that we
  679.      know, where wchar_t does not represent a unicode
  680.      character, rather its a native wide character.
  681.    * Lastly, most OS's/compilers provide a system library to
  682.      manipulate wide character strings taking wchar_t and
  683.      wchar_t* arguments. Most applications which support
  684.      wide-characters make these system calls.
  685. Our suggestion is:
  686. If your compiler defines wchar_t to represent a unicode
  687. character, then define XMLCh to be wchar_t. Such a
  688. definition will allow you to pass the data returned by the
  689. parser (all api's return XMLCh, which is wchar_t) directly
  690. to the wide-character system api's for i/o or manipulation.
  691. This is most efficient and convenient.
  692. However, if your compiler defines wchar_t to be just a
  693. wide-character which is not Unicode, then define XMLCh to be
  694. unsigned short. For the Xerces-C parser, XMLCh is always
  695. Unicode. By defining it to be unsigned short and not
  696. wchar_t, the compiler will not let you accidently pass what
  697. is returned, via the parser API's, directly to the
  698. wide-character library calls. To use the wide-character
  699. library of functions, you will have to in your application,
  700. call some transcoding function which will convert it from
  701. Unicode to the native wide-character form. Again, if your
  702. application desires for whatever reason, you may define
  703. XMLCh to be 'unsigned long'. By doing so, you have just
  704. doubled the memory required to process the XML file.
  705. Hopefully, you will agree that the answer 'it depends' was
  706. the right one.
  707.       How can I generate Xerces-C binaries
  708. which includes the sample NetAccessor           
  709.       implementation using Libwww?
  710. This sample implementation has only been minimally tested
  711. only under Windows NT using Libwww 5.2.8. We have not stress
  712. tested our implementation can cannot guarantee that there
  713. are no memory leaks. The error reporting is also not
  714. adequate. Further, it only handles HTTP style URL's. As you
  715. can see, this implementation is only for illustrative
  716. purposes. Much more work is required to have a robust
  717. cross-platform implementation. We would welcome any
  718. volunteers who would contribute code to make this happen on
  719. various platforms.
  720. The software that you need are:
  721.    * You need the Xerces-C source archive for Windows.
  722.    * LibWWW 5.2.8. Win32 binaries are available at:
  723.      http://www.idm.ru/libwww.htm. Source archives and other
  724.      details on LibWWW are available at
  725.      http://www.w3.org/Library/.
  726. All required changes in Xerces-C are restricted to the
  727. Project file settings for the XercesLib. To simplify, we
  728. will make certain assumptions about how LibWWW binaries
  729. (.lib) and header files are installed on your machine.
  730.   1. First generate all the LibWWW binaries by using the
  731.      project file supplied. Create a top level (say) libWWW
  732.      directory on the same disk drive where you installed
  733.      the Xerces-C sources. Copy all the .lib files to
  734.      libWWWlib directory. Next, copy all the .dll files to
  735.      libWWWbin directory and all the header (*.h) files to
  736.      libWWWinclude directory.
  737.   2. Next make the following changes to the Xerces-C lib
  738.      project settings. Invoke the project settings dialog
  739.      box.
  740.        1. In the 'C/C++ : Preprocessor : Preprocessor
  741.   definitions' add XML_USE_NETACCESSOR_LIBWWW
  742.        2. In the 'C/C++ : Preprocessor : Additional include
  743.   directories' add libWWWinclude.
  744.   3. Next, rather than listing all the 20 some LibWWW .lib
  745.      files in the link settings, add them as external files
  746.      to the XercesLib project. Right-Click on 'XercesLib
  747.      files' and choose the 'Add Files to Project' menu item.
  748.      Next choose all the *.lib files in libWWWlib
  749.      directory and press 'ok'.
  750.   4. Next, create a new sub-folder in XercesLib:util folder,
  751.      by right-clicking on 'util' and choosing 'New Folder'.
  752.      Call it 'libWWW'.
  753.   5. Add netaccessor files into this 'libWWW' folder again,
  754.      by right-clicking on 'libWWW' folder and choosing 'Add
  755.      Files to Folder'. Choose the four files in
  756.      <XercesCRoot>srcutilNetAccessors directory. These
  757.      files are: BinURLInputStream.[ch]pp and
  758.      LibWWWNetAccessor.[ch]pp.
  759.   6. Rebuild the Xerces-C library.
  760. Make sure you have libWWWbin in your PATH environment
  761. variable, before you run the samples and refer to a XML file
  762. containing HTTP URL's to remote resources.
  763. Where can I look for more help?          
  764. If you have read this page, followed the instructions, and
  765. still cannot resolve your problem(s), there is more help.
  766. You can find out if others have solved this same problem
  767. before you, by checking the Xerces mailing list archives.
  768. If all else fails, you may ask for help by subscribing to
  769. the Xerces-C mailing list.
  770. Copyright