14e70a9e4627f42671d0671f2fda2ade7a19879bbJack Palevich#!/bin/bash
24e70a9e4627f42671d0671f2fda2ade7a19879bbJack Palevichset -u
327f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichset -e
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectrm -rf out generated
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectmkdir out
791a27ae2fec23b420244258636d2370117e86f5eJack Palevich
891a27ae2fec23b420244258636d2370117e86f5eJack Palevich# Create dummy Java files for Android APIs that are used by the code we generate.
991a27ae2fec23b420244258636d2370117e86f5eJack Palevich# This allows us to test the generated code without building the rest of Android.
1091a27ae2fec23b420244258636d2370117e86f5eJack Palevich
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectmkdir -p out/javax/microedition/khronos/opengles
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectmkdir -p out/com/google/android/gles_jni
1391a27ae2fec23b420244258636d2370117e86f5eJack Palevichmkdir -p out/android/app
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectmkdir -p out/android/graphics
1527f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichmkdir -p out/android/opengl
1691a27ae2fec23b420244258636d2370117e86f5eJack Palevichmkdir -p out/android/content
1791a27ae2fec23b420244258636d2370117e86f5eJack Palevichmkdir -p out/android/content/pm
1891a27ae2fec23b420244258636d2370117e86f5eJack Palevichmkdir -p out/android/os
1991a27ae2fec23b420244258636d2370117e86f5eJack Palevichmkdir -p out/android/util
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectecho "package android.graphics;" > out/android/graphics/Canvas.java
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectecho "public interface Canvas {}" >> out/android/graphics/Canvas.java
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2491a27ae2fec23b420244258636d2370117e86f5eJack Palevichecho "package android.app; import android.content.pm.IPackageManager; public class ActivityThread { public static final ActivityThread currentActivityThread() { return null; } public static final String currentPackageName(){ return null; } public static IPackageManager getPackageManager() { return null;} }" > out/android/app/ActivityThread.java
2591a27ae2fec23b420244258636d2370117e86f5eJack Palevich# echo "package android.content; import android.content.pm.PackageManager; public interface Context { public PackageManager getPackageManager(); }" > out/android/content/Context.java
2691a27ae2fec23b420244258636d2370117e86f5eJack Palevichecho "package android.content.pm; public class ApplicationInfo {public int targetSdkVersion;}" > out/android/content/pm/ApplicationInfo.java
2791a27ae2fec23b420244258636d2370117e86f5eJack Palevichecho "package android.content.pm; public interface IPackageManager {ApplicationInfo getApplicationInfo(java.lang.String packageName, int flags) throws android.os.RemoteException;}" > out/android/content/pm/IPackageManager.java
2891a27ae2fec23b420244258636d2370117e86f5eJack Palevichecho "package android.os; public class Build {public static class VERSION_CODES { public static final int CUPCAKE = 3;};	}" > out/android/os/Build.java
2991a27ae2fec23b420244258636d2370117e86f5eJack Palevichecho "package android.os; public class RemoteException extends Exception {}" > out/android/os/RemoteException.java
3091a27ae2fec23b420244258636d2370117e86f5eJack Palevichecho "package android.util; public class Log {public static void w(String a, String b) {} public static void e(String a, String b) {}}" > out/android/util/Log.java
3191a27ae2fec23b420244258636d2370117e86f5eJack Palevich
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGLFILE=out/javax/microedition/khronos/opengles/GL.java
3327f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichcp stubs/jsr239/GLHeader.java-if $GLFILE
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3527f8002e591b5c579f75b2580183b5d1c4219cd4Jack PalevichGLGEN_FILES="CFunc.java CType.java CodeEmitter.java GenerateGL.java GenerateGLES.java GLESCodeEmitter.java JFunc.java JniCodeEmitter.java JType.java Jsr239CodeEmitter.java ParameterChecker.java"
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpushd src > /dev/null
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectjavac ${GLGEN_FILES}
394e70a9e4627f42671d0671f2fda2ade7a19879bbJack PalevichJAVAC_RESULT=$?
404e70a9e4627f42671d0671f2fda2ade7a19879bbJack Palevichif [ $JAVAC_RESULT -ne 0 ]; then
414e70a9e4627f42671d0671f2fda2ade7a19879bbJack Palevich    echo "Could not compile glgen."
424e70a9e4627f42671d0671f2fda2ade7a19879bbJack Palevich    exit $JAVAC_RESULT
434e70a9e4627f42671d0671f2fda2ade7a19879bbJack Palevichfi
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpopd > /dev/null
4527f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
4627f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichecho "Generating JSR239-like APIs"
4727f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichjava -classpath src GenerateGL -c specs/jsr239/glspec-1.0 specs/jsr239/glspec-1.0ext specs/jsr239/glspec-1.1 specs/jsr239/glspec-1.1ext specs/jsr239/glspec-1.1extpack specs/jsr239/glspec-checks
4827f8002e591b5c579f75b2580183b5d1c4219cd4Jack PalevichJAVA_RESULT=$?
4927f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichif [ $JAVA_RESULT -ne 0 ]; then
5027f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    echo "Could not run GenerateGL."
5127f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    exit $JAVA_RESULT
5227f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichfi
5327f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
5427f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichecho "Generating static OpenGLES 1.1 bindings"
5527f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichjava -classpath src GenerateGLES
5627f8002e591b5c579f75b2580183b5d1c4219cd4Jack PalevichJAVA_RESULT=$?
5727f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichif [ $JAVA_RESULT -ne 0 ]; then
5827f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    echo "Could not run GenerateGLES."
5927f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    exit $JAVA_RESULT
6027f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichfi
6127f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
624e70a9e4627f42671d0671f2fda2ade7a19879bbJack Palevichrm src/*.class
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpushd out > /dev/null
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectmkdir classes
6627f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichjavac -d classes com/google/android/gles_jni/GLImpl.java javax/microedition/khronos/opengles/GL10.java javax/microedition/khronos/opengles/GL10Ext.java javax/microedition/khronos/opengles/GL11.java javax/microedition/khronos/opengles/GL11Ext.java javax/microedition/khronos/opengles/GL11ExtensionPack.java android/opengl/GLES10.java android/opengl/GLES10Ext.java android/opengl/GLES11.java android/opengl/GLES11Ext.java
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpopd > /dev/null
6827f8002e591b5c579f75b2580183b5d1c4219cd4Jack PalevichJAVA_RESULT=$?
6927f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichif [ $JAVA_RESULT -ne 0 ]; then
7027f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    echo "Could not compile generated classes."
7127f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    exit $JAVA_RESULT
7227f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichfi
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectrm -rf generated
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectmkdir -p generated/C
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectcp out/com_google_android_gles_jni_GLImpl.cpp generated/C
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectcp -r out/com generated
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectcp -r out/javax generated
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8027f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichcp out/android_opengl_*.cpp generated/C
8127f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichmkdir -p generated/android/opengl
8227f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichcp -r out/android/opengl generated/android
8327f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectrm -rf out
85c005f8b8ba22c204f32fa032ab7211f51bf4d677Jack PalevichKEEP_GENERATED=0
8627f8002e591b5c579f75b2580183b5d1c4219cd4Jack PalevichSAID_PLEASE=0
8727f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
8827f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich# compareGenerated destDir generatedDir file
8927f8002e591b5c579f75b2580183b5d1c4219cd4Jack PalevichcompareGenerated() {
9027f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    if cmp -s $1/$3 $2/$3 ; then
9127f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        echo "#    " $3 unchanged
9227f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    else
9327f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        if [ $SAID_PLEASE == "0" ] ; then
9427f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich            echo Please evaluate the following commands:
9527f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich            echo
9627f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich            SAID_PLEASE=1
9727f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        fi
9827f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        echo "    " cp $2/$3 $1
9927f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        echo "    " git add $1/$3
10027f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        KEEP_GENERATED=1
10127f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    fi
10227f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich}
10327f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
10427f8002e591b5c579f75b2580183b5d1c4219cd4Jack PalevichcompareGenerated ../../../core/jni generated/C com_google_android_gles_jni_GLImpl.cpp
10527f8002e591b5c579f75b2580183b5d1c4219cd4Jack PalevichcompareGenerated ../../java/com/google/android/gles_jni generated/com/google/android/gles_jni GLImpl.java
10627f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
10727f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichfor x in GL.java GL10.java GL10Ext.java GL11.java GL11Ext.java GL11ExtensionPack.java
10827f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichdo
10927f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    compareGenerated ../../java/javax/microedition/khronos/opengles generated/javax/microedition/khronos/opengles $x
11027f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichdone
11127f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
11227f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichfor x in GLES10 GLES10Ext GLES11 GLES11Ext
11327f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichdo
11427f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    compareGenerated ../../java/android/opengl generated/android/opengl ${x}.java
11527f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    compareGenerated ../../../core/jni generated/C android_opengl_${x}.cpp
11627f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichdone
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
118c005f8b8ba22c204f32fa032ab7211f51bf4d677Jack Palevichif [ $KEEP_GENERATED == "0" ] ; then
11927f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    rm -rf generated
120c005f8b8ba22c204f32fa032ab7211f51bf4d677Jack Palevichfi
121