1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- import os
- from sys import argv
- OUTPUT = ''
- LOLCAT = False
- ERROR = False
- path = 'src/ompl_src/'
- def echo(text): # вывод, цветной или нет
- global OUTPUT, LOLCAT
- if LOLCAT: OUTPUT += text + '\n'
- else: print(text)
- def output_flush(): # вывод цветного буффера
- global OUTPUT, LOLCAT
- if LOLCAT: os.system(f'echo \"{OUTPUT[:-1]}\"| /usr/games/lolcat')
- def exec_build_list(): # сборка по билд листу
- global ERROR
- try:
- file = open('build_list.txt', 'r')
- except FileNotFoundError:
- echo('file \"build_list.txt\" not found')
- ERROR = True
- return
- lines = file.readlines()
- file.close()
- build_names = []
- for line in lines:
- line = line.strip()
- if line != '': build_names.append(line.split(' '))
- build_command = build_log = ''
- for line in build_names:
- build_command = f'gcc -shared -o {path}lib/{line[0]}.so {path}/obj/{line[0]}.o'
- build_log = line[0] + '.o'
- for i in range(1, len(line)):
- build_log += (' < ' if i < len(line) else '') + line[i]
- build_command += f' {path}/obj/{line[i]}.o'
- os.system(build_command)
- echo(build_log)
- if os.getuid() != 0: # проверка прав админа
- print('root rights required\nrun \'sudo python install.py\'')
- exit(1)
- os.chdir(os.path.dirname(__file__)) # смена рабочей директории на директорию, в которой был запущен скрипт
- # позволяет запускать скрипт из других директорий
- if os.path.exists('/usr/games/lolcat') and not 'i' in argv: # если лолкат установлен, то норм
- LOLCAT = True
- print('lolcat detected!')
- if 'r' in argv: # если есть аргумент r, то скомплированные папки удаляются
- os.system(f'rm {path}obj/ -rf')
- os.system(f'rm {path}lib/ -rf')
- echo('building .c files to .o files') # компилится .c файлы в объектники
- if not os.path.exists(f'{path}obj/'): os.system(f'mkdir {path}obj/')
- if not os.path.exists(f'{path}lib/'): os.system(f'mkdir {path}lib/')
- name_ext = None
- for f in os.listdir(f'{path}c'):
- name_ext = os.path.splitext(f)
- if name_ext[1] == '.c':
- echo(f)
- if os.system(f'gcc -fPIC -c {path}c/{name_ext[0]}.c -o {path}obj/{name_ext[0]}.o') and not ERROR: ERROR = True
- echo('=' * 13)
- if ERROR:
- echo('error occured while building .o files')
- output_flush()
- exit(1)
- echo('building .o files to .so libs') # компиляция объектников в общие библиотеки
- exec_build_list()
- echo('=' * 13)
- echo('installing') # копирование папок и файлов в /usr/bin
- # main.py переименовывается в ompl
- echo('copying src/main.py')
- os.system(f'cp src/main.py /usr/bin/ompl')
- os.system('chmod +x /usr/bin/ompl')
- echo('copying src/ompl_src/')
- os.system(f'cp src/ompl_src /usr/bin/ -r')
- echo('=' * 13)
- if 'c' in argv: # если есть аргумент c, то скомпилированные папки удаляются
- echo('cleaning')
- echo('deleting lib/ and obj/ folders')
- os.system('rm src/ompl_src/lib/ -r | rm src/ompl_src/obj/ -r')
- echo('=' * 13)
- echo('done')
- output_flush() # вывод с помощью lolcat
|