File: BuildJavaWindows.py

package info (click to toggle)
openni2 2.2.0.33%2Bdfsg-11
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 22,216 kB
  • sloc: cpp: 111,197; ansic: 35,511; sh: 10,542; python: 1,313; java: 952; makefile: 575; xml: 12
file content (115 lines) | stat: -rw-r--r-- 3,234 bytes parent folder | download | duplicates (4)
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
import os
import subprocess
import sys
import shutil

# parse command line
if len(sys.argv) < 5:
    print "usage: " + sys.argv[0] + " <x86|x64> <BinDir> <SourceDir> <Name> [NeededJarFiles] [MainClass]"
    exit(1)

platform_string = ""
if sys.argv[1] == "" or sys.argv[1] == "x86":
    platform_string = "Win32"
elif sys.argv[1] == "x64":
    platform_string = "x64"
else:
    print 'First argument must be "x86", "x64" or empty (x86)'
    exit(1)
    
bin_dir = os.path.abspath(sys.argv[2])
source_dir = os.path.abspath(sys.argv[3])
proj_name = sys.argv[4]
int_dir = os.path.join(bin_dir, "Intermediate", platform_string + "-Release", proj_name)
needed_jar_files = ""
main_class = ""
if len(sys.argv) > 5:
    needed_jar_files = sys.argv[5]
if len(sys.argv) > 6:
    main_class = sys.argv[6]

RELEASE_DIR = os.path.abspath(os.path.join(bin_dir, platform_string + "-Release"))
DEBUG_DIR = os.path.abspath(os.path.join(bin_dir, platform_string + "-Debug"))

JAR_FILE = os.path.join(RELEASE_DIR, proj_name + '.jar')
BATCH_FILE = os.path.join(RELEASE_DIR, proj_name + '.bat')

# make sure JAVA_HOME is set
JAVA_HOME = os.path.expandvars("$JAVA_HOME")
if JAVA_HOME == "":
    print "JAVA_HOME is not set!"
    exit(1)
    
CLASS_PATH = os.path.expandvars("$CLASSPATH")

TEMP_BUILD_DIR = int_dir

# create bin dir if needed
if not os.path.exists(RELEASE_DIR):
    os.makedirs(RELEASE_DIR)
if not os.path.exists(DEBUG_DIR):
    os.makedirs(DEBUG_DIR)
if not os.path.exists(TEMP_BUILD_DIR):
    os.makedirs(TEMP_BUILD_DIR)
 
# build
cmd = [os.path.join(JAVA_HOME, 'bin\javac.exe')]
if needed_jar_files != "":
    # add class path
    cp = ''
    needed_list = needed_jar_files.split(';')
    for needed in needed_list:
        cp += os.path.join(RELEASE_DIR, needed) + ';'
    cp += CLASS_PATH + ';'
    cmd.append('-cp')
    cmd.append(cp)

cmd.append('-d')
cmd.append(TEMP_BUILD_DIR)
cmd.append('-Xlint:unchecked')

cmd.append(os.path.join(source_dir, '*.java'))
subprocess.check_call(cmd)

# create JAR file
cmd = [os.path.join(JAVA_HOME, 'bin\jar.exe')]
need_manifest = main_class != "" or needed_jar_files != ""
if need_manifest:
    cmd.append('-cfm')
    # add manifest
    TEMP_MANIFEST_FILE = os.path.join(int_dir, "Manifest.txt")
    manifest_file = open(TEMP_MANIFEST_FILE, 'w')
    if needed_jar_files != "":
        manifest_file.write("Class-Path:")
        needed_list = needed_jar_files.split(';')
        for needed in needed_list:
            manifest_file.write(" " + needed)
        manifest_file.write('\n')
    if main_class != "":
        manifest_file.write("Main-Class: " + main_class + "\n")
    manifest_file.close()
else:
    cmd.append('-cf')

cmd.append(JAR_FILE)

if need_manifest:
    cmd.append(TEMP_MANIFEST_FILE)
    
cmd.append('-C')
cmd.append(TEMP_BUILD_DIR)
cmd.append('.')
subprocess.check_call(cmd)

# copy jar to Bin/Debug
shutil.copy(JAR_FILE, DEBUG_DIR)
    
# create batch file (by default, windows does not open a console when double-clicking jar files)
if main_class != "":
    print "Creating batch file..."
    batch = open(BATCH_FILE, 'w')
    batch.write('java -Xmx768m -jar ' + proj_name + '.jar\n')
    batch.close()

    # copy batch to Bin/Debug
    shutil.copy(BATCH_FILE, DEBUG_DIR)