#!/usr/bin/env python3 '''call ACEDB. This script is meant to be called from a wrapper which provides ACEDB, the path to the appropriate ACEDB database. So for any new database, all you need to write is a wrapper, and this script does everything else.''' import birchenv import copy import os import subprocess def call_ace(ACEDB): # ------------------- Set enviroment variables ----------------------------- ACEENV = copy.copy(os.environ) if not ACEENV.get('BIRCH') or not ACEENV.get('BIRCH_PLATFORM'): print("ERROR - BIRCH environment not properly set") exit() # Top directory for your lab database BINDIR = os.path.join(ACEDB, 'bin') # Top directory for your lab database ACEENV['ACEDB'] = ACEDB ACEENV['ACEDB_COMMON'] = ACEDB # Directory to contain the binary database file ACEENV['DBDIR'] = os.path.join(ACEDB, 'database') # Directory for executable code specific for your database # eg. this script ACEENV['BINDIR'] = BINDIR if ACEENV.get('PATH'): ACEENV['PATH'] = BINDIR + os.pathsep + str(ACEENV['PATH']) else: ACEENV['PATH'] = BINDIR #Used by birchdb, lbirchdb, l-gbirchdb ACEENV['ACE_FILE_LAUNCHER'] = os.path.join(birchenv.BIRCH, "script", 'chooseviewer.py') #Used by acedemo ACEENV['ACE_VIEW_COMMAND'] = os.path.join(birchenv.BIRCH, "script", 'chooseviewer.py') ACEENV['local'] = str(os.path.join(birchenv.BIRCH, "local")) # ------------------- Set LD_LIBRARY_PATH ----------------------------- print(birchenv.BIRCHLIBS) if (birchenv.BIRCHLIBS != ''): if ACEENV.get('LD_LIBRARY_PATH'): ACEENV['LD_LIBRARY_PATH'] = str(ACEENV['LD_LIBRARY_PATH']) + os.pathsep + birchenv.BIRCHLIBS else: ACEENV['LD_LIBRARY_PATH'] = birchenv.BIRCHLIBS if (birchenv.BIRCH_PLATFORM == 'osx-x86_64'): ACEENV['DYLD_LIBRARY_PATH'] = str(ACEENV['LD_LIBRARY_PATH']) elif (birchenv.BIRCH_PLATFORM == 'macos-arm64'): ACEENV['DYLD_LIBRARY_PATH'] = str(ACEENV['LD_LIBRARY_PATH']) # -------------------- Set X11 fonts for use by xace -------------------------------- # Not all systems have the old X11 fonts, so we provide them for use by xace. if (birchenv.BIRCH_PLATFORM == 'solaris-sparc'): ACEFONTS="" elif (birchenv.BIRCH_PLATFORM == 'solaris-amd64'): ACEFONTS="" elif (birchenv.BIRCH_PLATFORM == 'linux-intel'): ACEFONTS=os.path.join(birchenv.BIRCH, 'lib-' + birchenv.BIRCH_PLATFORM, 'gde.fonts', 'misc') elif (birchenv.BIRCH_PLATFORM == 'linux-x86_64'): ACEFONTS=os.path.join(birchenv.BIRCH, 'lib-' + birchenv.BIRCH_PLATFORM, 'gde.fonts', 'misc') elif (birchenv.BIRCH_PLATFORM == 'osx-x86_64'): ACEFONTS=os.path.join(birchenv.BIRCH, 'lib-' + birchenv.BIRCH_PLATFORM, 'gde.fonts', 'misc') elif (birchenv.BIRCH_PLATFORM == 'macos-arm64'): ACEFONTS=os.path.join(birchenv.BIRCH, 'lib-' + birchenv.BIRCH_PLATFORM, 'gde.fonts', 'misc') #print('ACEFONTS=' + ACEFONTS + '\n') if ACEFONTS != "" : subprocess.call(['xset', '+fp', ACEFONTS], env=ACEENV) # -------------------- Run xace and then cleanup -------------------------------- if (birchenv.BIRCH_PLATFORM == 'solaris-sparc'): subprocess.call(['xace'], env=ACEENV) elif (birchenv.BIRCH_PLATFORM == 'solaris-amd64'): subprocess.call(['xace'], env=ACEENV) elif (birchenv.BIRCH_PLATFORM == 'linux-intel'): # Many recent Linux distros don't have ld-linux.so.2, and the compiled version of xace is # expecting that /usr/lib/ld-linux.so.2 exists. So the following works, but it's not pretty. # See BIRCH Bugzilla bugs 1139 and 1156 for further details. # COMMAND: $BIRCH/lib-linux-intel/acedb32/ld-linux.so.2 --library-path $LD_LIBRARY_PATH $BIRCH/bin-linux-intel/xace # need to have fully-qualified paths to ld-linux.so.2 and xace ACELIB=os.path.join(birchenv.BIRCH, 'lib-' + birchenv.BIRCH_PLATFORM, 'acedb32') #ACEENV['LD_LIBRARY_PATH'] = str(ACEENV['LD_LIBRARY_PATH']) + ACELIB ACEENV['LD_LIBRARY_PATH'] = ACELIB #print('LD_LIBRARY_PATH= ' + ACEENV['LD_LIBRARY_PATH'] + '\n') COMMAND = os.path.join(birchenv.BIRCH, 'lib-linux-intel/acedb32/ld-linux.so.2') COMMAND = COMMAND + ' --library-path ' + ACEENV['LD_LIBRARY_PATH'] COMMAND = COMMAND + ' ' + os.path.join(birchenv.BIRCH, 'bin-linux-intel','xace') #print('COMMAND= ' + COMMAND + '\n') subprocess.call([COMMAND], env=ACEENV, shell=True) elif (birchenv.BIRCH_PLATFORM == 'linux-x86_64'): # Many recent Linux distros don't have ld-linux.so.2, and the compiled version of xace is # expecting that /usr/lib/ld-linux.so.2 exists. So the following works, but it's not pretty. # See BIRCH Bugzilla bugs 1139 and 1156 for further details. # COMMAND: $BIRCH/lib-linux-x86_64/acedb32/ld-linux.so.2 --library-path $LD_LIBRARY_PATH $BIRCH/bin-linux-x86_64/xace # need to have fully-qualified paths to ld-linux.so.2 and xace ACELIB=os.path.join(birchenv.BIRCH, 'lib-' + birchenv.BIRCH_PLATFORM, 'acedb32') #ACEENV['LD_LIBRARY_PATH'] = str(ACEENV['LD_LIBRARY_PATH']) + ACELIB ACEENV['LD_LIBRARY_PATH'] = ACELIB print('LD_LIBRARY_PATH= ' + ACEENV['LD_LIBRARY_PATH'] + '\n') COMMAND = os.path.join(birchenv.BIRCH, 'lib-linux-x86_64/acedb32/ld-linux.so.2') COMMAND = COMMAND + ' --library-path ' + ACEENV['LD_LIBRARY_PATH'] COMMAND = COMMAND + ' ' + os.path.join(birchenv.BIRCH, 'bin-linux-x86_64','xace') print('COMMAND= ' + COMMAND + '\n') subprocess.call([COMMAND], env=ACEENV, shell=True) elif (birchenv.BIRCH_PLATFORM == 'osx-x86_64'): subprocess.call(['xace'], env=ACEENV) elif (birchenv.BIRCH_PLATFORM == 'macos-arm64'): subprocess.call(['xace'], env=ACEENV) subprocess.call([os.path.join(BINDIR, 'cleanup.sh')], env=ACEENV) # &