Working on  AWT and Java2D code with NetBeans

  This project includes most of Java2D and AWT-related files,
  allows easy navigation and builds from within NetBeans.
  
  Since both AWT and Java2D have lots of native code, this
  project uses "make" targets for building.
  
  Unfortunately currently this project doesn't support
  working with native code. Meaning, there is no navigation, code 
  completion, refactoring, etc.
  In the future we will provide native code support.
  
  You can certainly install the C/C++ pack for NetBeans 6.0
  once it becomes available, or use any other editor for
  working with C/C++ files.
  
  In order to use this project from within NetBeans you will have 
  to perform a full jdk build first.
  
Here are the steps:
   1. setup your jdk build environment as described in 
      other documents (see build documentation)
  
   2. perform a full jdk build (preferably a FASTDEBUG build,
      as it simplifies the debugging - the classes and object files
      will be built with the debug information). 
      You only need to build jdk's "all" target:
        #> cd jdk/make
        #> make all > build.log 2>&1
  
   3. set "make" and "make.options"  properties in your 
      ~/.openjdk/build.properties file (see the main README 
      file for more information on property files)
      to set up the environment in NetBeans.

      To get a list of variables you most likely will need to override
      to make the the build work in NetBeans, you can do something like this 
      (on Windows):
        #>env | grep ALT
        ALT_JDK_IMPORT_PATH=c:/devtools/java/jdk1.7.0
        ALT_DXSDK_PATH=c:/devtools/DirectX/DXSDK_Dec06
        ALT_BOOTDIR=c:/DevTools/java/jdk1.6.0

      If your build is a FASTDEBUG build, don't forget
      to set FASTDEBUG=true in the property file as well so that what you 
      have built from the terminal matches what will be built from NetBeans.

      Set "make.options" in your build.properties
      accordingly:
        make.options=\
            ALT_JDK_IMPORT_PATH=c:/devtools/java/jdk1.7.0 \
            ALT_DXSDK_PATH=c:/devtools/DirectX/DXSDK_Dec06 \
            ALT_BOOTDIR=c:/DevTools/java/jdk1.6.0 \
            FASTDEBUG=true
        make=c:/devtools/cygwin/bin/make

   4. Windows only: make sure you either call vcvars32.bat
      file which sets the compiler environment
      (typically located in <YourVisualStudioInstallDir>/VC7/bin)
      and start NetBeans from the same terminal,
      or make Visual Studio register its environment
      variables globally.
      (When building on 64-bit Windows platform, use setenv.cmd
       from Platform SDK instead of vcvars32, as described in the 
       build documentation)

   5. Now you can launch NetBeans

Notes on building the project from NetBeans

  If you work only with Java files, you can compile them
  with "Compile Single File" target ("F9" by default), the ant build
  will compile the class files into the correct directory automatically.

  However, if you touched any of C/C++ files, 
  you will need to use "build main project" ("F11") which launches
  "make" on a set of directories.
  
  Same goes if you touched a Java file which has native
  methods. You will need to run the build so that
  "javah" can generate the JNI header files used by 
  the native code.

Demos

  The default run target for this project is Font2DTest,
  which is launched with the runtime you built.

  You can also start other demos by selecting a demo
  in the Project or Files view and choosing "Run" from 
  the menu.
  
  In particular, there is a J2DBench demo project, 
  which is a Java2D benchmark. To run it,
  select java2d.J2DBench/build.xml node in the
  "Projects" explorer and execute "Run" target.
  For more information on this benchmark, see
  the project's README file in the "Files" view.

Notes on using CND (C/C++ pack) with this project and NetBeans.

  As mentioned above currently a project for working with native code is not 
  provided. However, you can set it up by yourself if you have 
  access to CND pack for NetBeans 6.0.

  First, install CND as described here (this is a page for CND 5.5,
  there likely will be one for 6.0 as well):
    http://www.netbeans.org/community/releases/55/cnd-install.html
  and make sure everyting works it works.

  Then, create a new C/C++ project of "from existing code" type (see page 
  mentioned above for examples). The project should be located in the same 
  directoryas this project is - on the same level. Call it something like 
  "awt2d-native-${platform}-${arch}". So, for example, you may have
    jdk/make/netbeans/awt2d
    jdk/make/netbeans/awt2d-native-windows-i586

  Specify the top level Makefile (jdk/make/Makefile), even though
  you will not be using, as the Java awt2d project is set up
  for building the workspace (thus make sure it's the default project,
  so when you hit "Build Project" it's awt2d one that's chosen).

  The most important thing is to specify the directories which will
  be included into this project, the defines, and the directories for 
  include files.
  This will enable code completion and limited navigation.

  Using the project wizard, select the source directories you're interested in.

  For example, 
   src/share/native/sun/java2d
   src/windows/native/sun/java2d
   ....
  (this will recursively include the subdirectories)

  Then set the list of the includes required by CND to enable code assistance.
  You can get a complete list of include directories by looking at your
  build log file and checking what directories are included with "-I" when 
  the files you're interesed in are built (you can probably devise some
  script to generate the list of include files relative to the native
  cnd project directory, and the list of defines passed to the compiler)

  For example, on Windows x86, you might have something like this
  (a somewhat complete list of awt and 2d native directories on windows):

  ../../src/share/javavm/export;
  ../../src/share/javavm/include;
  ../../src/share/native/common;
  ../../src/share/native/sun/awt/debug;
  ../../src/share/native/sun/awt/image/cvutils;
  ../../src/share/native/sun/awt/image;
  ../../src/share/native/sun/awt/medialib;
  ../../src/share/native/sun/awt;
  ../../src/share/native/sun/font/bidi;
  ../../src/share/native/sun/font/layout;
  ../../src/share/native/sun/font;
  ../../src/share/native/sun/java2d/cmm/lcms;
  ../../src/share/native/sun/java2d/cmm;
  ../../src/share/native/sun/java2d/loops;
  ../../src/share/native/sun/java2d/opengl;
  ../../src/share/native/sun/java2d/pipe;
  ../../src/share/native/sun/java2d;
  ../../src/windows/javavm/export;
  ../../src/windows/native/common;
  ../../src/windows/native/sun/awt;
  ../../src/windows/native/sun/java2d/d3d;
  ../../src/windows/native/sun/java2d/opengl;
  ../../src/windows/native/sun/java2d/windows;
  ../../src/windows/native/sun/java2d;
  ../../src/windows/native/sun/windows;
  ../../build/windows-i586/tmp/sun/sun.awt/awt/CClassHeaders;
  ../../build/windows-i586/tmp/sun/sun.awt/awt/obj;
  ../../build/windows-i586/tmp/sun/sun.awt/awt/obj_gO;
  ../../build/windows-i586/tmp/sun/sun.awt/jpeg/CClassHeaders;
  ../../build/windows-i586/tmp/sun/sun.awt/splashscreen/CClassHeaders;
  ../../build/windows-i586/tmp/sun/sun.font/fontmanager/CClassHeaders;
  ../../build/windows-i586/tmp/sun/sun.font/t2k/CClassHeaders;
  C:/DevTools/DirectX/DXSDK_Dec06/Include;
  C:/devtools/VS2003/SDK/v1.1/include;
  C:/devtools/VS2003/VC7/ATLMFC/INCLUDE;
  C:/devtools/VS2003/VC7/INCLUDE;
  C:/devtools/VS2003/VC7/PlatformSDK/include;
  C:/devtools/VS2003/VC7/PlatformSDK/include/prerelease;

  (you can format this into a single line with ';' delimiters and paste it
  into the text field instead of entering them one by one)

  Note that most paths are relative to the native project directory - 
  this helps if you decide to relocate the workspace later. The ones that 
  aren't relative are paths to external include directories, like those 
  of the Platform SDK, DirectX SDK.
  On Unix platforms these may be directories like /usr/include.

  The parser must know some defines to correctly parse the source files,
  these can also be obtained from the log file. For example, on Windows
  x86 with debugging enabled, the defines would be something like this:
    D3D_OVERLOADS; UNICODE; _UNICODE; WIN32; IAL; _LITTLE_ENDIAN; WIN32; _X86_; 
    x86; WIN32_LEAN_AND_MEAN; INTERNAL_BUILD; JDK_MAJOR_VERSION='"1"'; 
    JDK_MINOR_VERSION='"7"'; RELEASE=1.7.0-internal; DEBUG="true"

  (again, format it into a single line with '; ' delimiter - note the 
  space after ';' - and paste into the corresponding text field)

  Note that the list of include directories will be different on different
  platforms and architectures - consult you build log file.

  After the project is created a loaded, you may want to check the list
  of include files which weren't found (right-click on the native 
  project root in Projects exprorer, and select "View failed #include Directives" 
  from the popup menu. Update the inlcude directories list accordingly.

  You can later create a different configuration for non-debug build,
  just make a copy of your current configuration - call it ${arch}-debug
  (in the native project's Properties dialog) and remove "DEBUG=true" from
  the list of defines.

  Note that with both Java and native projects opened the default
  heap size NetBeans starts with might not be sufficient for comfortable work,
  so you may need to increase it. You can do it either from the command line
  or by editing your ~/.netbeans/dev/etc/netbeans.conf file and adding
  something like this:
     -J-Xms312m -J-Xmx512m -J-XX:PermSize=128m -J-XX:MaxPermSize=200m
  to netbeans_default_options property.
