Merge pull request #1623 from ONLYOFFICE/release/v8.2.0

Release/v8.2.0
This commit is contained in:
Oleg Korshul
2024-08-21 04:17:49 -07:00
committed by GitHub
18 changed files with 550 additions and 388 deletions

View File

@ -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)

View File

@ -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

View File

@ -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\"')