1 Working on  AWT and Java2D code with NetBeans
   2 
   3   This project includes most of Java2D and AWT-related files,
   4   allows easy navigation and builds from within NetBeans.
   5   
   6   Since both AWT and Java2D have lots of native code, this
   7   project uses "make" targets for building.
   8   
   9   Unfortunately currently this project doesn't support
  10   working with native code. Meaning, there is no navigation, code 
  11   completion, refactoring, etc.
  12   In the future we will provide native code support.
  13   
  14   You can certainly install the C/C++ pack for NetBeans 6.0
  15   once it becomes available, or use any other editor for
  16   working with C/C++ files.
  17   
  18   In order to use this project from within NetBeans you will have 
  19   to perform a full jdk build first.
  20   
  21 Here are the steps:
  22    1. setup your jdk build environment as described in 
  23       other documents (see build documentation)
  24   
  25    2. perform a full jdk build (preferably a FASTDEBUG build,
  26       as it simplifies the debugging - the classes and object files
  27       will be built with the debug information). 
  28       You only need to build jdk's "all" target:
  29         #> cd jdk/make
  30         #> make all > build.log 2>&1
  31   
  32    3. set "make" and "make.options"  properties in your 
  33       ~/.openjdk/build.properties file (see the main README 
  34       file for more information on property files)
  35       to set up the environment in NetBeans.
  36 
  37       To get a list of variables you most likely will need to override
  38       to make the the build work in NetBeans, you can do something like this 
  39       (on Windows):
  40         #>env | grep ALT
  41         ALT_JDK_IMPORT_PATH=c:/devtools/java/jdk1.7.0
  42         ALT_BOOTDIR=c:/DevTools/java/jdk1.6.0
  43 
  44       If your build is a FASTDEBUG build, don't forget
  45       to set FASTDEBUG=true in the property file as well so that what you 
  46       have built from the terminal matches what will be built from NetBeans.
  47 
  48       Set "make.options" in your build.properties
  49       accordingly:
  50         make.options=\
  51             ALT_JDK_IMPORT_PATH=c:/devtools/java/jdk1.7.0 \
  52             ALT_BOOTDIR=c:/DevTools/java/jdk1.6.0 \
  53             FASTDEBUG=true
  54         make=c:/devtools/cygwin/bin/make
  55 
  56    4. Windows only: make sure you either call vcvars32.bat
  57       file which sets the compiler environment
  58       (typically located in <YourVisualStudioInstallDir>/VC7/bin)
  59       and start NetBeans from the same terminal,
  60       or make Visual Studio register its environment
  61       variables globally.
  62       (When building on 64-bit Windows platform, use setenv.cmd
  63        from Platform SDK instead of vcvars32, as described in the 
  64        build documentation)
  65 
  66    5. Now you can launch NetBeans
  67 
  68 Notes on building the project from NetBeans
  69 
  70   If you work only with Java files, you can compile them
  71   with "Compile Single File" target ("F9" by default), the ant build
  72   will compile the class files into the correct directory automatically.
  73 
  74   However, if you touched any of C/C++ files, 
  75   you will need to use "build main project" ("F11") which launches
  76   "make" on a set of directories.
  77   
  78   Same goes if you touched a Java file which has native
  79   methods. You will need to run the build so that
  80   "javah" can generate the JNI header files used by 
  81   the native code.
  82 
  83 Demos
  84 
  85   The default run target for this project is Font2DTest,
  86   which is launched with the runtime you built.
  87 
  88   You can also start other demos by selecting a demo
  89   in the Project or Files view and choosing "Run" from 
  90   the menu.
  91   
  92   In particular, there is a J2DBench demo project, 
  93   which is a Java2D benchmark. To run it,
  94   select java2d.J2DBench/build.xml node in the
  95   "Projects" explorer and execute "Run" target.
  96   For more information on this benchmark, see
  97   the project's README file in the "Files" view.
  98 
  99 Notes on using CND (C/C++ pack) with this project and NetBeans.
 100 
 101   As mentioned above currently a project for working with native code is not 
 102   provided. However, you can set it up by yourself if you have 
 103   access to CND pack for NetBeans 6.0.
 104 
 105   First, install CND as described here (this is a page for CND 5.5,
 106   there likely will be one for 6.0 as well):
 107     http://www.netbeans.org/community/releases/55/cnd-install.html
 108   and make sure everyting works it works.
 109 
 110   Then, create a new C/C++ project of "from existing code" type (see page 
 111   mentioned above for examples). The project should be located in the same 
 112   directoryas this project is - on the same level. Call it something like 
 113   "awt2d-native-${platform}-${arch}". So, for example, you may have
 114     jdk/make/netbeans/awt2d
 115     jdk/make/netbeans/awt2d-native-windows-i586
 116 
 117   Specify the top level Makefile (jdk/make/Makefile), even though
 118   you will not be using, as the Java awt2d project is set up
 119   for building the workspace (thus make sure it's the default project,
 120   so when you hit "Build Project" it's awt2d one that's chosen).
 121 
 122   The most important thing is to specify the directories which will
 123   be included into this project, the defines, and the directories for 
 124   include files.
 125   This will enable code completion and limited navigation.
 126 
 127   Using the project wizard, select the source directories you're interested in.
 128 
 129   For example, 
 130    src/share/native/sun/java2d
 131    src/windows/native/sun/java2d
 132    ....
 133   (this will recursively include the subdirectories)
 134 
 135   Then set the list of the includes required by CND to enable code assistance.
 136   You can get a complete list of include directories by looking at your
 137   build log file and checking what directories are included with "-I" when 
 138   the files you're interesed in are built (you can probably devise some
 139   script to generate the list of include files relative to the native
 140   cnd project directory, and the list of defines passed to the compiler)
 141 
 142   For example, on Windows x86, you might have something like this
 143   (a somewhat complete list of awt and 2d native directories on windows):
 144 
 145   ../../src/share/javavm/export;
 146   ../../src/share/native/common;
 147   ../../src/share/native/sun/awt/debug;
 148   ../../src/share/native/sun/awt/image/cvutils;
 149   ../../src/share/native/sun/awt/image;
 150   ../../src/share/native/sun/awt/medialib;
 151   ../../src/share/native/sun/awt;
 152   ../../src/share/native/sun/font/bidi;
 153   ../../src/share/native/sun/font/layout;
 154   ../../src/share/native/sun/font;
 155   ../../src/share/native/sun/java2d/cmm/lcms;
 156   ../../src/share/native/sun/java2d/cmm;
 157   ../../src/share/native/sun/java2d/loops;
 158   ../../src/share/native/sun/java2d/opengl;
 159   ../../src/share/native/sun/java2d/pipe;
 160   ../../src/share/native/sun/java2d;
 161   ../../src/windows/javavm/export;
 162   ../../src/windows/native/common;
 163   ../../src/windows/native/sun/awt;
 164   ../../src/windows/native/sun/java2d/d3d;
 165   ../../src/windows/native/sun/java2d/opengl;
 166   ../../src/windows/native/sun/java2d/windows;
 167   ../../src/windows/native/sun/java2d;
 168   ../../src/windows/native/sun/windows;
 169   ../../build/windows-i586/tmp/sun/sun.awt/awt/CClassHeaders;
 170   ../../build/windows-i586/tmp/sun/sun.awt/awt/obj;
 171   ../../build/windows-i586/tmp/sun/sun.awt/awt/obj_gO;
 172   ../../build/windows-i586/tmp/sun/sun.awt/jpeg/CClassHeaders;
 173   ../../build/windows-i586/tmp/sun/sun.awt/splashscreen/CClassHeaders;
 174   ../../build/windows-i586/tmp/sun/sun.font/fontmanager/CClassHeaders;
 175   ../../build/windows-i586/tmp/sun/sun.font/t2k/CClassHeaders;
 176   C:/devtools/VS2003/SDK/v1.1/include;
 177   C:/devtools/VS2003/VC7/ATLMFC/INCLUDE;
 178   C:/devtools/VS2003/VC7/INCLUDE;
 179   C:/devtools/VS2003/VC7/PlatformSDK/include;
 180   C:/devtools/VS2003/VC7/PlatformSDK/include/prerelease;
 181 
 182   (you can format this into a single line with ';' delimiters and paste it
 183   into the text field instead of entering them one by one)
 184 
 185   Note that most paths are relative to the native project directory - 
 186   this helps if you decide to relocate the workspace later. The ones that 
 187   aren't relative are paths to external include directories, like those 
 188   of the Platform SDK.
 189   On Unix platforms these may be directories like /usr/include.
 190 
 191   The parser must know some defines to correctly parse the source files,
 192   these can also be obtained from the log file. For example, on Windows
 193   x86 with debugging enabled, the defines would be something like this:
 194     D3D_OVERLOADS; UNICODE; _UNICODE; WIN32; IAL; _LITTLE_ENDIAN; WIN32; _X86_; 
 195     x86; WIN32_LEAN_AND_MEAN; INTERNAL_BUILD; JDK_MAJOR_VERSION='"1"'; 
 196     JDK_MINOR_VERSION='"7"'; RELEASE=1.7.0-internal; DEBUG="true"
 197 
 198   (again, format it into a single line with '; ' delimiter - note the 
 199   space after ';' - and paste into the corresponding text field)
 200 
 201   Note that the list of include directories will be different on different
 202   platforms and architectures - consult you build log file.
 203 
 204   After the project is created a loaded, you may want to check the list
 205   of include files which weren't found (right-click on the native 
 206   project root in Projects exprorer, and select "View failed #include Directives" 
 207   from the popup menu. Update the inlcude directories list accordingly.
 208 
 209   You can later create a different configuration for non-debug build,
 210   just make a copy of your current configuration - call it ${arch}-debug
 211   (in the native project's Properties dialog) and remove "DEBUG=true" from
 212   the list of defines.
 213 
 214   Note that with both Java and native projects opened the default
 215   heap size NetBeans starts with might not be sufficient for comfortable work,
 216   so you may need to increase it. You can do it either from the command line
 217   or by editing your ~/.netbeans/dev/etc/netbeans.conf file and adding
 218   something like this:
 219      -J-Xms312m -J-Xmx512m -J-XX:PermSize=128m -J-XX:MaxPermSize=200m
 220   to netbeans_default_options property.