You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by ge...@apache.org on 2006/11/30 07:09:22 UTC

svn commit: r480847 - in /harmony/enhanced/jdktools/trunk/modules/samsa: ./ make/ src/ src/main/ src/main/native/ src/main/native/samsa/ src/main/native/samsa/linux/

Author: geirm
Date: Wed Nov 29 22:09:18 2006
New Revision: 480847

URL: http://svn.apache.org/viewvc?view=rev&rev=480847
Log:
first whack at the launcher-launcher called 'samsa'
(after Kafka's Gregor Samsa) that is the core
code in jdk/bin for javac, javap, javah, etc

Right now, this is for linux only.  I'll continue
tomorrow


Added:
    harmony/enhanced/jdktools/trunk/modules/samsa/
    harmony/enhanced/jdktools/trunk/modules/samsa/build.xml   (with props)
    harmony/enhanced/jdktools/trunk/modules/samsa/make/
    harmony/enhanced/jdktools/trunk/modules/samsa/make/hyproperties.xml   (with props)
    harmony/enhanced/jdktools/trunk/modules/samsa/src/
    harmony/enhanced/jdktools/trunk/modules/samsa/src/main/
    harmony/enhanced/jdktools/trunk/modules/samsa/src/main/native/
    harmony/enhanced/jdktools/trunk/modules/samsa/src/main/native/samsa/
    harmony/enhanced/jdktools/trunk/modules/samsa/src/main/native/samsa/linux/
    harmony/enhanced/jdktools/trunk/modules/samsa/src/main/native/samsa/linux/makefile
    harmony/enhanced/jdktools/trunk/modules/samsa/src/main/native/samsa/samsa.c   (with props)

Added: harmony/enhanced/jdktools/trunk/modules/samsa/build.xml
URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/trunk/modules/samsa/build.xml?view=auto&rev=480847
==============================================================================
--- harmony/enhanced/jdktools/trunk/modules/samsa/build.xml (added)
+++ harmony/enhanced/jdktools/trunk/modules/samsa/build.xml Wed Nov 29 22:09:18 2006
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+  
+       http://www.apache.org/licenses/LICENSE-2.0
+  
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+<project name="Samsa Build" default="build" basedir=".">
+    <description>Build for samsa program</description>
+
+    <!-- import common properties -->
+    <property name="hy.hdk" location="${basedir}/../../deploy" />
+    <import file="../../make/properties.xml" />
+
+    <!-- set global properties for this build. -->
+    <xmlproperty file="make/hyproperties.xml" semanticAttributes="true" />
+
+    <property file="../../make/depends.properties" />
+
+    <target name="build-native" depends="build"/>
+    <target name="clean-native" depends="clean"/>
+
+    <target name="build" >
+
+        <echo>Launcher : ${hy.drlvm}  ${harmony.jdktools} </echo>
+            
+        <!-- Build launcher executables -->
+        <make dir="${hy.samsa.src.main.native}/samsa/${hy.os}" />
+
+        <!-- Copy across the built executables -->
+        <copy todir="${hy.jdk}/bin" overwrite="yes">
+            <fileset dir="${hy.samsa.src.main.native}/samsa/${hy.os}">
+                <patternset includes="samsa${exe.suffix}" />
+            </fileset>
+        </copy>
+
+        <!-- now make copies for the tools -->
+            
+        <copy file="${hy.jdk}/bin/samsa${exe.suffix}" tofile="${hy.jdk}/bin/javac${exe.suffix}" />
+        <chmod file="${hy.jdk}/bin/javac${exe.suffix}" perm="ugo+x" />
+        <copy file="${hy.jdk}/bin/samsa${exe.suffix}" tofile="${hy.jdk}/bin/javap${exe.suffix}" />
+        <chmod file="${hy.jdk}/bin/javap${exe.suffix}" perm="ugo+x" />
+        <copy file="${hy.jdk}/bin/samsa${exe.suffix}" tofile="${hy.jdk}/bin/javah${exe.suffix}" />
+        <chmod file="${hy.jdk}/bin/javah${exe.suffix}" perm="ugo+x" />
+
+        <delete file="${hy.jdk}/bin/samsa${exe.suffix}"/>
+
+    </target>
+
+    <!-- Clean natives -->
+    <target name="clean">
+        <echo>
+Cleaning launcher natives
+        </echo>
+        <make dir="${hy.samsa.src.main.native}/samsa/${hy.os}"
+              target="clean" />
+    </target>
+
+</project>

Propchange: harmony/enhanced/jdktools/trunk/modules/samsa/build.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/jdktools/trunk/modules/samsa/make/hyproperties.xml
URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/trunk/modules/samsa/make/hyproperties.xml?view=auto&rev=480847
==============================================================================
--- harmony/enhanced/jdktools/trunk/modules/samsa/make/hyproperties.xml (added)
+++ harmony/enhanced/jdktools/trunk/modules/samsa/make/hyproperties.xml Wed Nov 29 22:09:18 2006
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+
+<hy>
+   <samsa location=".">
+      <src>
+         <main>
+            <java location="src/main/java" />
+            <native location="src/main/native" />
+        	<resources location="src/main/resources" />
+         </main>
+         <test location="src/test">
+            <resources location="src/test/resources" />
+         </test>
+         <natives location="src/natives" />
+      </src>
+      <bin>
+        <main location="bin/main" />
+        <test location="bin/test" />
+      </bin>
+      <packaging>
+        <jarname>luni</jarname>
+      </packaging>
+   </samsa>
+
+   <hdk location="../../deploy" />
+   <jdk location="../../deploy/jdk" />
+   <build location="../../build/classes" />
+
+   <tests>
+      <reports location="../../build/test_report" />
+      <support>
+          <bin location="../../build/tests" />
+      </support>
+   </tests>
+</hy>

Propchange: harmony/enhanced/jdktools/trunk/modules/samsa/make/hyproperties.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/jdktools/trunk/modules/samsa/src/main/native/samsa/linux/makefile
URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/trunk/modules/samsa/src/main/native/samsa/linux/makefile?view=auto&rev=480847
==============================================================================
--- harmony/enhanced/jdktools/trunk/modules/samsa/src/main/native/samsa/linux/makefile (added)
+++ harmony/enhanced/jdktools/trunk/modules/samsa/src/main/native/samsa/linux/makefile Wed Nov 29 22:09:18 2006
@@ -0,0 +1,26 @@
+#  Licensed to the Apache Software Foundation (ASF) under one or more
+#  contributor license agreements.  See the NOTICE file distributed with
+#  this work for additional information regarding copyright ownership.
+#  The ASF licenses this file to You under the Apache License, Version 2.0
+#  (the "License"); you may not use this file except in compliance with
+#  the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+
+#
+# Makefile for 'samsa'
+#
+
+include $(HY_JDKTOOLS)/make/makefile.include
+
+BUILDFILES = ../samsa.o
+
+EXENAME = samsa
+
+include $(HY_JDKTOOLS)/make/rules.mk

Added: harmony/enhanced/jdktools/trunk/modules/samsa/src/main/native/samsa/samsa.c
URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/trunk/modules/samsa/src/main/native/samsa/samsa.c?view=auto&rev=480847
==============================================================================
--- harmony/enhanced/jdktools/trunk/modules/samsa/src/main/native/samsa/samsa.c (added)
+++ harmony/enhanced/jdktools/trunk/modules/samsa/src/main/native/samsa/samsa.c Wed Nov 29 22:09:18 2006
@@ -0,0 +1,173 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+#include <limits.h>
+
+#define EXE_POSTFIX   "/jre/bin/java"
+#define LIB_POSTFIX   "/lib/"
+#define TOOL_JAR      "tools.jar"
+#define ECJ_JAR       "ecj_3.2.jar"
+#define CLASSPATH_SEP ":"
+#define CLASS_PREFIX  "org.apache.harmony.tools."
+#define CLASS_POSTFIX ".Main"
+
+char *cleanToolName(const char *);
+char *getExeDir();
+char *getJDKRoot();
+
+
+int main (int argc, char **argv, char **envp)
+{
+    int myArgvCount = argc + 4;
+    char **myArgv = (char **) malloc(sizeof(char*) * myArgvCount);    
+    char *toolName = NULL;
+    int i;
+    int newIndex = 0;
+
+    /* 
+     * if we can't figure out what tool we are, just bail
+     */    
+    toolName = cleanToolName(argv[0]);
+    
+    if (toolName == NULL) { 
+        fprintf(stderr, "Uknown tool name %s\n", argv[0]);
+        return 1;
+    }
+
+    /*
+     *  get the jdkroot and the construct invocation path for exe
+     *  and the full paths to jars.  This way, we can be called 
+     *  from anywhere
+     */    
+    char *jdkRoot = getJDKRoot();
+    printf("root = %s\n", jdkRoot);
+    
+    if (!jdkRoot) { 
+        fprintf(stderr, "Unable to find JDK Root");
+        return 2;
+    }
+       
+    char *fullExePath = (char *) malloc(strlen(jdkRoot) + strlen(EXE_POSTFIX) + 1);
+    
+    strcpy(fullExePath, jdkRoot);
+    strcat(fullExePath, EXE_POSTFIX);
+    
+    char *classpath = (char *) malloc(strlen(jdkRoot) * 2 + strlen(LIB_POSTFIX) * 2
+                    + strlen(TOOL_JAR) + strlen(ECJ_JAR) + strlen(CLASSPATH_SEP) + 1);
+         
+    strcpy(classpath, jdkRoot);
+    strcat(classpath, LIB_POSTFIX);
+    strcat(classpath, TOOL_JAR);
+    strcat(classpath, CLASSPATH_SEP);
+    strcat(classpath, jdkRoot);
+    strcat(classpath, LIB_POSTFIX);
+    strcat(classpath, ECJ_JAR);
+
+    /*
+     *  we're invoking java with the following 
+     *    -cp toolpath  clasname .......
+     */
+    myArgv[newIndex++] = fullExePath;
+    myArgv[newIndex++] = "-cp";
+    myArgv[newIndex++] = classpath;
+
+    char *buffer = (char *) malloc(strlen(CLASS_PREFIX) + strlen(toolName) + strlen(CLASS_POSTFIX) + 1);
+
+    strcpy(buffer, CLASS_PREFIX);
+    strcat(buffer, toolName);
+    strcat(buffer, CLASS_POSTFIX);
+    
+    myArgv[newIndex++] = buffer;
+    
+    for (i = 1; i < argc; i++) {
+        myArgv[newIndex++] = argv[i];
+    }
+    
+    myArgv[newIndex] = '\0';
+
+    for (i=0; i < myArgvCount; i++) { 
+        printf(" %d = %s\n", i, myArgv[i]);
+    }
+    
+    /*
+     * now simply execv() the java app w/ the new params
+     */     
+    execv(fullExePath, myArgv);    
+}
+
+/**
+ * cleanToolName
+ * 
+ * takes a executable name and finds the tool name
+ * in it
+ * 
+ * returns real tool name, or NULL if not found
+ */
+char *cleanToolName(const char *name) 
+{
+    int i;
+    char *toolNames[] = { "javac", "javap", "javah" };
+    
+    for (i=0; i < sizeof(toolNames)/sizeof(toolNames[0]); i++) { 
+        if (strstr(name, toolNames[i])) {
+            return toolNames[i];
+        }
+    }
+    
+    return NULL;    
+}
+
+
+char *getJDKRoot() { 
+    
+    char *exeDir = getExeDir();
+
+    char *last = strrchr(exeDir, '/');
+    
+    if (last != NULL) { 
+        *last = '\0';
+        return exeDir;
+    }
+    
+    return NULL;
+}
+/**
+ * getExeDir
+ * 
+ *  returns directory of running exe
+ */
+char *getExeDir() {
+    
+    char buffer[PATH_MAX + 1];
+    
+    int size = readlink ("/proc/self/exe", buffer, sizeof(buffer)-1);
+    
+    buffer[size+1] = '\0';
+   
+    char *last = strrchr(buffer, '/');
+   
+    if (last != NULL) { 
+        *last = '\0';
+        return strdup(buffer);
+    }
+    
+    return NULL;
+}

Propchange: harmony/enhanced/jdktools/trunk/modules/samsa/src/main/native/samsa/samsa.c
------------------------------------------------------------------------------
    svn:eol-style = native