mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-04-07 13:55:33 +08:00
@ -1,7 +1,8 @@
|
||||
import os
|
||||
import argparse
|
||||
import re
|
||||
import platform
|
||||
import subprocess
|
||||
import re
|
||||
|
||||
# NOTE: In JDK 8 and earlier, `javac` does not create the directories specified in the -d option if they do not already exist
|
||||
# So we need to create them manually
|
||||
@ -10,16 +11,45 @@ def makedirs(dir):
|
||||
os.makedirs(dir)
|
||||
return
|
||||
|
||||
def is_javac_available(javac):
|
||||
try:
|
||||
process = subprocess.Popen([javac, '-version'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
ret = process.wait()
|
||||
return ret == 0
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
def get_jdk_version(javac):
|
||||
try:
|
||||
process = subprocess.Popen([javac, '-version'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
stdout, stderr = process.communicate()
|
||||
output = stdout if stdout else stderr
|
||||
if not output:
|
||||
return 0
|
||||
|
||||
javac_version_str = output.decode('utf-8').strip()
|
||||
match = re.search('(\d+)(?:\.(\d+))?', javac_version_str)
|
||||
if not match:
|
||||
return 0
|
||||
|
||||
major_version = int(match.group(1))
|
||||
minor_version = int(match.group(2)) if match.group(2) else 0
|
||||
|
||||
# for JDK 9 and earlier command `javac -version` would give '1.x.xx'
|
||||
if major_version == 1:
|
||||
return minor_version
|
||||
return major_version
|
||||
|
||||
except Exception:
|
||||
return 0
|
||||
|
||||
# return all files with extension `ext` in directory `dir` as string
|
||||
def getFilesInDir(dir, ext):
|
||||
files = '';
|
||||
files = [];
|
||||
for file in os.listdir(dir):
|
||||
if file.endswith(ext):
|
||||
# for non-windows systems '$'-symbol in file names should be escaped
|
||||
if platform.system().lower() != 'windows':
|
||||
file = re.sub(r'\$', r'\\$', file)
|
||||
files += ' ' + dir + '/' + file
|
||||
|
||||
files.append(os.path.join(dir, file))
|
||||
|
||||
return files
|
||||
|
||||
if __name__ == "__main__":
|
||||
@ -34,12 +64,40 @@ if __name__ == "__main__":
|
||||
java_files = getFilesInDir('docbuilder', '.java')
|
||||
java_files += getFilesInDir('docbuilder/utils', '.java')
|
||||
|
||||
# INITIALIZE JDK TOOLS
|
||||
javac = 'javac'
|
||||
jar = 'jar'
|
||||
ext = '.exe' if platform.system().lower() == 'windows' else ''
|
||||
java_home = os.environ.get('JAVA_HOME')
|
||||
if java_home:
|
||||
javac = os.path.join(java_home, 'bin', 'javac' + ext)
|
||||
if not os.path.exists(javac):
|
||||
print('Error: Cannot find: ' + javac)
|
||||
exit()
|
||||
jar = os.path.join(java_home, 'bin', 'jar' + ext)
|
||||
else:
|
||||
print('Warning: environment variable JAVA_HOME wasn\'t set. Default Java compiler will be used (if any).')
|
||||
|
||||
if not is_javac_available(javac):
|
||||
print('Error: javac is not available')
|
||||
exit()
|
||||
|
||||
# CHECK JDK VERSION
|
||||
jdk_version = get_jdk_version(javac)
|
||||
if jdk_version < 8:
|
||||
print('Error: javac version is not supported')
|
||||
exit()
|
||||
|
||||
release_flags = []
|
||||
if jdk_version > 8:
|
||||
release_flags = ['--release', '8']
|
||||
|
||||
# BUILD
|
||||
classes_dir = file_dir + '/build/classes'
|
||||
makedirs(classes_dir + '/docbuilder/utils')
|
||||
headers_dir = file_dir + '/src/jni'
|
||||
# build all Java classes
|
||||
os.system('javac -d ' + classes_dir + (' -h ' + headers_dir if args.headers else '') + java_files)
|
||||
subprocess.call([javac, '-d', classes_dir] + release_flags + java_files, cwd=os.getcwd(), stderr=subprocess.STDOUT)
|
||||
|
||||
# PACKING TO JAR
|
||||
if not args.no_jar:
|
||||
@ -47,4 +105,4 @@ if __name__ == "__main__":
|
||||
class_files = getFilesInDir('docbuilder', '.class')
|
||||
class_files += getFilesInDir('docbuilder/utils', '.class')
|
||||
makedirs('../libs')
|
||||
os.system('jar -cvf ../libs/docbuilder.jar ' + class_files)
|
||||
subprocess.call([jar, '-cvf', '../libs/docbuilder.jar'] + class_files, cwd=os.getcwd(), stderr=subprocess.STDOUT)
|
||||
|
||||
@ -18,8 +18,13 @@ ADD_DEPENDENCY(graphics, kernel, kernel_network, UnicodeConverter, doctrenderer)
|
||||
|
||||
INCLUDEPATH += ../../..
|
||||
|
||||
# Specify JDK path here
|
||||
JDK_PATH = "C:/Program Files/Java/jdk-22"
|
||||
# get path to JDK from environment variable JAVA_HOME (preferable way) or take the default one
|
||||
JDK_PATH = $$(JAVA_HOME)
|
||||
isEmpty(JDK_PATH) {
|
||||
core_windows:JDK_PATH = "C:/Program Files/Java/jdk1.8.0_202"
|
||||
core_linux:JDK_PATH = "/usr/lib/jvm/java-8-openjdk-amd64"
|
||||
core_mac:JDK_PATH = "/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home"
|
||||
}
|
||||
|
||||
INCLUDEPATH += $$JDK_PATH/include
|
||||
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
import os
|
||||
import argparse
|
||||
import subprocess
|
||||
import platform
|
||||
|
||||
# NOTE: In JDK 8 and earlier, `javac` does not create the directories specified in the -d option if they do not already exist
|
||||
# So we need to create them manually
|
||||
@ -18,12 +20,26 @@ if __name__ == "__main__":
|
||||
|
||||
java_file = 'Program.java'
|
||||
|
||||
# INITIALIZE JAVA TOOLS
|
||||
javac = 'javac'
|
||||
java = 'java'
|
||||
ext = '.exe' if platform.system().lower() == 'windows' else ''
|
||||
java_home = os.environ.get('JAVA_HOME')
|
||||
if java_home:
|
||||
javac = os.path.join(java_home, 'bin', 'javac' + ext)
|
||||
if not os.path.exists(javac):
|
||||
print('Error: Cannot find: ' + javac)
|
||||
exit()
|
||||
java = os.path.join(java_home, 'bin', 'java' + ext)
|
||||
else:
|
||||
print('Warning: environment variable JAVA_HOME wasn\'t set. Default Java compiler will be used (if any).')
|
||||
|
||||
if args.builder_dir:
|
||||
builder_dir = args.builder_dir
|
||||
os.system('java -cp ' + builder_dir + '/docbuilder.jar' + os.pathsep + 'build/classes Program')
|
||||
subprocess.call([java, '-cp', os.path.join(builder_dir, 'docbuilder.jar') + os.pathsep + 'build/classes', 'Program'], cwd=os.getcwd(), stderr=subprocess.STDOUT)
|
||||
else:
|
||||
makedirs('build/classes')
|
||||
os.system('javac -d build/classes -cp ../build/libs/docbuilder.jar ' + java_file)
|
||||
subprocess.call([javac, '-d', 'build/classes', '-cp', '../build/libs/docbuilder.jar', java_file], cwd=os.getcwd(), stderr=subprocess.STDOUT)
|
||||
print('Program was built successfully')
|
||||
print('Run it with: java -cp \"/path/to/docbuilder/docbuilder.jar' + os.pathsep + 'build/classes\" Program')
|
||||
print('Or just run: python make_test.py --run \"/path/to/docbuilder\"')
|
||||
|
||||
Reference in New Issue
Block a user