aboutsummaryrefslogtreecommitdiffstats
path: root/make/build.xml
blob: 440d1944929f543eb31a948bc12c3a94a3626166 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
<?xml version="1.0" encoding="UTF-8"?>
<!--
   - Ant build for GlueGen and corresponding ANT tasks. Also builds
   - JOGL-specific BuildStaticGLInfo and its corresponding ANT task.
   -
   - This build has been tested with ANT 1.6.2 and ANTLR 2.7.4.
   -
   - Public targets:
   -   all:  clean and build GlueGen and GlueGen Ant task
   -   clean:  clean all built
  -->
<project name="GlueGen" basedir="." default="all">
  <target name="load.user.properties" unless="user.properties.file">
    <!-- Load the user specified properties file that defines various host
      - specific paths.  The user will be notified if this is does not
      - exist. -->
    <property name="user.properties.file" value="${user.home}/gluegen.properties" />
    <property file="${user.properties.file}" />
    <echo message="Loaded ${user.properties.file}." />
    <fail message="antlr.jar was not specified in gluegen.properties. Please see README.txt for instructions" unless="antlr.jar"/>
    <echo message="antlr.jar=${antlr.jar}" />
  </target>

  <target name="init" depends="load.user.properties">
    <!-- Declare all paths and user defined variables. -->

    <!-- The source directories. -->
    <property name="src.java" value="../src/java" />
    <property name="build"    value="../build" />

    <!-- The generated source directories. -->
    <property name="src.generated"      value="../build/gensrc" />
    <property name="src.generated.java" value="../build/gensrc/java" />

    <!-- The compiler output directories. -->
    <property name="classes" value="${build}/classes" />

    <!-- Call the external config validator script to make sure the config is ok and consistent -->
    <ant antfile="validate-properties.xml" inheritall="true"/>

    <!-- Create the required output directories. -->
    <mkdir dir="${src.generated.java}" />
    <mkdir dir="${classes}" />

    <!-- Create the classpath for ANTLR.  This requires the user-defined
      - "antlr.jar" property. -->
    <path id="antlr.classpath">
      <pathelement location="${antlr.jar}" />
    </path>
    
    <!-- The location of the GlueGen source and the C grammar files. -->
    <property name="gluegen" value="${src.java}/com/sun/gluegen" />
    <property name="c.grammar" value="${gluegen}/cgram" />
        
    <!-- The resulting location of the generated Java files from the
      - C grammar via ANTLR. -->
    <property name="gluegen.build" value="${src.generated.java}/com/sun/gluegen" />
    <property name="generated.java.from.grammar" value="${gluegen.build}/cgram" />
  </target>

  <!--
    - Using ANTLR generate the specified Java files.
    -
    - @param target the grammar file to process
    - @param output.dir the directory to write the generated files to.  If
    -        the directory does not exist, it will be created.
    -->
  <target name="generate.c.grammar">
    <!-- Generate the Java files -->
    <antlr target="${output.dir}/${target}" outputdirectory="${output.dir}">
      <classpath refid="antlr.classpath" />
    </antlr>
  </target>
    
  <!--
    - Using ANTLR generate the specified Java files with an overridden
    - grammar file.
    -
    - @param target the grammar file to process
    - @param glib the overridding grammar file
    - @param output.dir the directory to write the generated files to.  If
    -        the directory does not exist, it will be created.
   -->
  <target name="generate.c.grammar.glib">
    <!-- Generate the Java files -->
    <antlr target="${output.dir}/${target}" glib="${output.dir}/${glib}" outputdirectory="${output.dir}">
      <classpath refid="antlr.classpath" />
    </antlr>
  </target>

  <!-- ================================================================== -->
  <!--
    - Build GlueGen.
    -->
  <target name="gluegen.build" depends="init">
    <!-- Because ANTLR looks for importVocab files in the current
         working directory, it likes to have all of its files,
         including supergrammars, in one place, so copy all of the
         grammars to the output directory up front so we don't put
         temporary files into the source tree -->
    <mkdir dir="${generated.java.from.grammar}" />
    <copy todir="${generated.java.from.grammar}">
      <fileset dir="${c.grammar}">
        <include name="*.g" />
      </fileset>
    </copy>

    <!-- Generate the Java files from the C grammar using ANTLR. -->
    <antcall target="generate.c.grammar">
      <param name="output.dir" value="${generated.java.from.grammar}" />
      <param name="target" value="StdCParser.g" />
    </antcall>
    <antcall target="generate.c.grammar.glib">
      <param name="output.dir" value="${generated.java.from.grammar}" />
      <param name="target" value="GnuCParser.g" />
      <param name="glib" value="StdCParser.g" />
    </antcall>
    <antcall target="generate.c.grammar">
      <param name="output.dir" value="${generated.java.from.grammar}" />
      <param name="target" value="GnuCTreeParser.g" />
    </antcall>
    <antcall target="generate.c.grammar.glib">
      <param name="output.dir" value="${generated.java.from.grammar}" />
      <param name="target" value="GnuCEmitter.g" />
      <param name="glib" value="GnuCTreeParser.g" />
    </antcall>
    <antcall target="generate.c.grammar.glib">
      <param name="output.dir" value="${generated.java.from.grammar}" />
      <param name="target" value="HeaderParser.g" />
      <param name="glib" value="GnuCTreeParser.g" />
    </antcall>

    <!-- Build GlueGen using the generated Java files along with the
      - original source. -->
    <javac destdir="${classes}" source="1.4" debug="true" debuglevel="source,lines">
      <src path="${src.java}" />
      <src path="${src.generated.java}" />
      <classpath refid="antlr.classpath" />
    </javac>

    <!-- Build gluegen.jar. -->
    <jar destfile="${build}/gluegen.jar">
      <fileset dir="${classes}">
        <include name="**/*.class" />
      </fileset>
    </jar>

    <!-- Build gluegen-rt.jar. -->
    <jar destfile="${build}/gluegen-rt.jar">
      <fileset dir="${classes}">
        <include name="com/sun/gluegen/runtime/*.class" />
      </fileset>
    </jar>
  </target>

  <target name="all" depends="gluegen.build" />

  <target name="clean">
    <delete includeEmptyDirs="true" quiet="true">
      <fileset dir="../build" />
    </delete>
  </target>    
</project>